diff --git a/docs/docs-developers/docs/aztec-nr/framework-description/ethereum-aztec-messaging/outbox.md b/docs/docs-developers/docs/aztec-nr/framework-description/ethereum-aztec-messaging/outbox.md index 7ba777fd463f..aa8a8190a0e5 100644 --- a/docs/docs-developers/docs/aztec-nr/framework-description/ethereum-aztec-messaging/outbox.md +++ b/docs/docs-developers/docs/aztec-nr/framework-description/ethereum-aztec-messaging/outbox.md @@ -4,25 +4,24 @@ description: Learn about the outbox mechanism in Aztec portals for sending messa tags: [portals, contracts] --- -The `Outbox` is a contract deployed on L1 that handles message passing from L2 to L1. Portal contracts call `consume()` to receive and process messages that were sent from L2 contracts. The Rollup contract inserts message roots via `insert()` when checkpoints are proven. +The `Outbox` is a contract deployed on L1 that handles message passing from L2 to L1. Portal contracts call `consume()` to receive and process messages that were sent from L2 contracts. The Rollup contract inserts message roots via `insert()` when epochs are proven. **Links**: [Interface](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol), [Implementation](https://github.com/AztecProtocol/aztec-packages/blob/#include_aztec_version/l1-contracts/src/core/messagebridge/Outbox.sol). ## `insert()` -Inserts the root of a merkle tree containing all of the L2 to L1 messages in a checkpoint. This function is only callable by the Rollup contract. +Inserts the root of a merkle tree containing all of the L2 to L1 messages in an epoch. This function is only callable by the Rollup contract. #include_code outbox_insert l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol solidity -| Name | Type | Description | -| ------------------- | --------- | ---------------------------------------------------------------------- | -| `_checkpointNumber` | `uint256` | The checkpoint number in which the L2 to L1 messages reside | -| `_root` | `bytes32` | The merkle root of the tree where all the L2 to L1 messages are leaves | +| Name | Type | Description | +| -------------- | --------- | ---------------------------------------------------------------------- | +| `_epochNumber` | `uint256` | The epoch number in which the L2 to L1 messages reside | +| `_root` | `bytes32` | The merkle root of the tree where all the L2 to L1 messages are leaves | ### Edge cases - Will revert with `Outbox__Unauthorized()` if `msg.sender != ROLLUP_CONTRACT`. -- Will revert with `Outbox__CheckpointAlreadyProven(uint256 checkpointNumber)` if the checkpoint has already been proven. ## `consume()` @@ -30,36 +29,35 @@ Allows a recipient to consume a message from the `Outbox`. #include_code outbox_consume l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol solidity -| Name | Type | Description | -| ------------------- | ----------- | -------------------------------------------------------------------------------------------- | -| `_message` | `L2ToL1Msg` | The L2 to L1 message to consume | -| `_checkpointNumber` | `uint256` | The checkpoint number specifying the checkpoint that contains the message to consume | -| `_leafIndex` | `uint256` | The index inside the merkle tree where the message is located | -| `_path` | `bytes32[]` | The sibling path used to prove inclusion of the message | +| Name | Type | Description | +| -------------- | ----------- | -------------------------------------------------------------------------- | +| `_message` | `L2ToL1Msg` | The L2 to L1 message to consume | +| `_epochNumber` | `uint256` | The epoch number specifying the epoch that contains the message to consume | +| `_leafIndex` | `uint256` | The index inside the merkle tree where the message is located | +| `_path` | `bytes32[]` | The sibling path used to prove inclusion of the message | ### Edge cases - Will revert with `Outbox__PathTooLong()` if the path length is >= 256. - Will revert with `Outbox__LeafIndexOutOfBounds(uint256 leafIndex, uint256 pathLength)` if the leaf index exceeds the tree capacity for the given path length. -- Will revert with `Outbox__CheckpointNotProven(uint256 checkpointNumber)` if the checkpoint has not been proven yet. - Will revert with `Outbox__VersionMismatch(uint256 expected, uint256 actual)` if the message version does not match the Outbox version. - Will revert with `Outbox__InvalidRecipient(address expected, address actual)` if `msg.sender != _message.recipient.actor`. - Will revert with `Outbox__InvalidChainId()` if `block.chainid != _message.recipient.chainId`. -- Will revert with `Outbox__NothingToConsumeAtCheckpoint(uint256 checkpointNumber)` if the root for the checkpoint has not been set. -- Will revert with `Outbox__AlreadyNullified(uint256 checkpointNumber, uint256 leafIndex)` if the message has already been consumed. +- Will revert with `Outbox__NothingToConsumeAtEpoch(uint256 epochNumber)` if the root for the epoch has not been set. +- Will revert with `Outbox__AlreadyNullified(uint256 epochNumber, uint256 leafIndex)` if the message has already been consumed. - Will revert with `MerkleLib__InvalidIndexForPathLength()` if the leaf index has bits set beyond the tree height. - Will revert with `MerkleLib__InvalidRoot(bytes32 expected, bytes32 actual, bytes32 leaf, uint256 leafIndex)` if the merkle proof verification fails. -## `hasMessageBeenConsumedAtCheckpoint()` +## `hasMessageBeenConsumedAtEpoch()` -Checks if an L2 to L1 message in a specific checkpoint has been consumed. +Checks if an L2 to L1 message in a specific epoch has been consumed. -#include_code outbox_has_message_been_consumed_at_checkpoint_and_index l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol solidity +#include_code outbox_has_message_been_consumed_at_epoch_and_index l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol solidity -| Name | Type | Description | -| ------------------- | --------- | ------------------------------------------------------------------------------------------------------- | -| `_checkpointNumber` | `uint256` | The checkpoint number specifying the checkpoint that contains the message to check | -| `_leafId` | `uint256` | The unique id of the message leaf | +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------------------------------ | +| `_epochNumber` | `uint256` | The epoch number specifying the epoch that contains the message to check | +| `_leafId` | `uint256` | The unique id of the message leaf | ### Edge cases @@ -67,17 +65,17 @@ Checks if an L2 to L1 message in a specific checkpoint has been consumed. ## `getRootData()` -Returns the merkle root for a given checkpoint number. Returns `bytes32(0)` if the checkpoint has not been proven. +Returns the merkle root for a given epoch number. Returns `bytes32(0)` if the epoch has not been proven. ```solidity -function getRootData(uint256 _checkpointNumber) external view returns (bytes32); +function getRootData(uint256 _epochNumber) external view returns (bytes32); ``` -| Name | Type | Description | -| ------------------- | --------- | ------------------------------------------------ | -| `_checkpointNumber` | `uint256` | The checkpoint number to fetch the root data for | +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------- | +| `_epochNumber` | `uint256` | The epoch number to fetch the root data for | -**Returns**: The merkle root of the L2 to L1 message tree for the checkpoint, or `bytes32(0)` if not proven. +**Returns**: The merkle root of the L2 to L1 message tree for the epoch, or `bytes32(0)` if not proven. ## Related pages diff --git a/docs/docs-developers/docs/resources/migration_notes.md b/docs/docs-developers/docs/resources/migration_notes.md index d25eab75f0ae..36aa3891b797 100644 --- a/docs/docs-developers/docs/resources/migration_notes.md +++ b/docs/docs-developers/docs/resources/migration_notes.md @@ -618,6 +618,37 @@ Additionally, any function or struct that previously referenced an L2 block numb Note: current node softwares still produce exactly one L2 block per checkpoint, so for now checkpoint numbers and L2 block numbers remain equal. This may change once multi-block checkpoints are enabled. +### [L1 Contracts] L2-to-L1 messages are now grouped by epoch. + +L2-to-L1 messages are now aggregated and organized per epoch rather than per block. This change affects how you compute membership witnesses for consuming messages on L1. You now need to know the epoch number in which the message was emitted to retrieve and consume the message. + +**Note**: This is only an API change. The protocol behavior remains the same - messages can still only be consumed once an epoch is proven as before. + +#### What changed + +Previously, you might have computed the membership witness without explicitly needing the epoch: + +```typescript +const witness = await computeL2ToL1MembershipWitness( + node, + l2TxReceipt.blockNumber, + l2ToL1Message +); +``` + +Now, you should provide the epoch number: + +```typescript +const epoch = await rollup.getEpochNumberForCheckpoint( + CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber) +); +const witness = await computeL2ToL1MembershipWitness( + node, + epoch, + l2ToL1Message +); +``` + ### [Aztec.js] Wallet interface changes #### `simulateTx` is now batchable diff --git a/l1-contracts/src/core/interfaces/IRollup.sol b/l1-contracts/src/core/interfaces/IRollup.sol index 650fc7a50159..62a4ed7451d6 100644 --- a/l1-contracts/src/core/interfaces/IRollup.sol +++ b/l1-contracts/src/core/interfaces/IRollup.sol @@ -27,6 +27,7 @@ import {IERC20} from "@oz/token/ERC20/IERC20.sol"; struct PublicInputArgs { bytes32 previousArchive; bytes32 endArchive; + bytes32 outHash; address proverId; } diff --git a/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol b/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol index 3078a2c947ea..d0005f39bde1 100644 --- a/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol +++ b/l1-contracts/src/core/interfaces/messagebridge/IOutbox.sol @@ -3,6 +3,7 @@ pragma solidity >=0.8.27; import {DataStructures} from "../../libraries/DataStructures.sol"; +import {Epoch} from "../../libraries/TimeLib.sol"; /** * @title IOutbox @@ -11,21 +12,18 @@ import {DataStructures} from "../../libraries/DataStructures.sol"; * and will be consumed by the portal contracts. */ interface IOutbox { - event RootAdded(uint256 indexed checkpointNumber, bytes32 indexed root); - event MessageConsumed( - uint256 indexed checkpointNumber, bytes32 indexed root, bytes32 indexed messageHash, uint256 leafId - ); + event RootAdded(Epoch indexed epoch, bytes32 indexed root); + event MessageConsumed(Epoch indexed epoch, bytes32 indexed root, bytes32 indexed messageHash, uint256 leafId); // docs:start:outbox_insert /** - * @notice Inserts the root of a merkle tree containing all of the L2 to L1 messages in - * a checkpoint specified by _checkpointNumber. + * @notice Inserts the root of a merkle tree containing all of the L2 to L1 messages in an epoch specified by _epoch. * @dev Only callable by the rollup contract * @dev Emits `RootAdded` upon inserting the root successfully - * @param _checkpointNumber - The checkpoint number in which the L2 to L1 messages reside + * @param _epoch - The epoch in which the L2 to L1 messages reside * @param _root - The merkle root of the tree where all the L2 to L1 messages are leaves */ - function insert(uint256 _checkpointNumber, bytes32 _root) external; + function insert(Epoch _epoch, bytes32 _root) external; // docs:end:outbox_insert // docs:start:outbox_consume @@ -34,39 +32,36 @@ interface IOutbox { * @dev Only useable by portals / recipients of messages * @dev Emits `MessageConsumed` when consuming messages * @param _message - The L2 to L1 message - * @param _checkpointNumber - The checkpoint number specifying the checkpoint that contains the message we want to - * consume - * @param _leafIndex - The index inside the merkle tree where the message is located - * @param _path - The sibling path used to prove inclusion of the message, the _path length directly depends - * on the total amount of L2 to L1 messages in the checkpoint. i.e. the length of _path is equal to the depth of the - * L1 to L2 message tree. + * @param _epoch - The epoch that contains the message we want to consume + * @param _leafIndex - The index at the level in the epoch message tree where the message is located + * @param _path - The sibling path used to prove inclusion of the message, the _path length depends + * on the location of the L2 to L1 message in the epoch message tree. */ function consume( DataStructures.L2ToL1Msg calldata _message, - uint256 _checkpointNumber, + Epoch _epoch, uint256 _leafIndex, bytes32[] calldata _path ) external; // docs:end:outbox_consume - // docs:start:outbox_has_message_been_consumed_at_checkpoint_and_index + // docs:start:outbox_has_message_been_consumed_at_epoch_and_index /** - * @notice Checks to see if an L2 to L1 message in a specific checkpoint has been consumed + * @notice Checks to see if an L2 to L1 message in a specific epoch has been consumed * @dev - This function does not throw. Out-of-bounds access is considered valid, but will always return false - * @param _checkpointNumber - The checkpoint number specifying the checkpoint that contains the message we want to - * check + * @param _epoch - The epoch that contains the message we want to check * @param _leafId - The unique id of the message leaf */ - function hasMessageBeenConsumedAtCheckpoint(uint256 _checkpointNumber, uint256 _leafId) external view returns (bool); - // docs:end:outbox_has_message_been_consumed_at_checkpoint_and_index + function hasMessageBeenConsumedAtEpoch(Epoch _epoch, uint256 _leafId) external view returns (bool); + // docs:end:outbox_has_message_been_consumed_at_epoch_and_index /** - * @notice Fetch the root data for a given checkpoint number - * Returns (0, 0) if the checkpoint is not proven + * @notice Fetch the root data for a given epoch + * Returns (0, 0) if the epoch is not proven * - * @param _checkpointNumber - The checkpoint number to fetch the root data for + * @param _epoch - The epoch to fetch the root data for * * @return bytes32 - The root of the merkle tree containing the L2 to L1 messages */ - function getRootData(uint256 _checkpointNumber) external view returns (bytes32); + function getRootData(Epoch _epoch) external view returns (bytes32); } diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index 14e9d99a8888..b4bd2c17007c 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -23,7 +23,7 @@ library Constants { 14_269_942_583_723_164_841_365_114_274_712_143_548_835_546_030_057_296_325_580_016_468_921_911_294_613; uint256 internal constant FEE_JUICE_ADDRESS = 5; uint256 internal constant BLS12_POINT_COMPRESSED_BYTES = 48; - uint256 internal constant ROOT_ROLLUP_PUBLIC_INPUTS_LENGTH = 158; + uint256 internal constant ROOT_ROLLUP_PUBLIC_INPUTS_LENGTH = 159; uint256 internal constant NUM_MSGS_PER_BASE_PARITY = 256; uint256 internal constant NUM_BASE_PARITY_PER_ROOT_PARITY = 4; } diff --git a/l1-contracts/src/core/libraries/Errors.sol b/l1-contracts/src/core/libraries/Errors.sol index c3598b2bfbed..92d8be3ae39a 100644 --- a/l1-contracts/src/core/libraries/Errors.sol +++ b/l1-contracts/src/core/libraries/Errors.sol @@ -44,12 +44,9 @@ library Errors { uint32 storedDeadline, uint32 deadlinePassed ); // 0x5e789f34 - error Outbox__RootAlreadySetAtCheckpoint(uint256 checkpointNumber); // 0x6eb83cef error Outbox__InvalidRecipient(address expected, address actual); // 0x57aad581 - error Outbox__AlreadyNullified(uint256 checkpointNumber, uint256 leafIndex); // 0xfd71c2d4 - error Outbox__NothingToConsumeAtCheckpoint(uint256 checkpointNumber); // 0x0279277d - error Outbox__CheckpointNotProven(uint256 checkpointNumber); // 0x104bcfc1 - error Outbox__CheckpointAlreadyProven(uint256 checkpointNumber); + error Outbox__AlreadyNullified(Epoch epoch, uint256 leafIndex); // 0xfd71c2d4 + error Outbox__NothingToConsumeAtEpoch(Epoch epoch); // 0x5e3d32ce error Outbox__PathTooLong(); error Outbox__LeafIndexOutOfBounds(uint256 leafIndex, uint256 pathLength); diff --git a/l1-contracts/src/core/libraries/rollup/EpochProofLib.sol b/l1-contracts/src/core/libraries/rollup/EpochProofLib.sol index 0f614a92002e..682a4123a9d4 100644 --- a/l1-contracts/src/core/libraries/rollup/EpochProofLib.sol +++ b/l1-contracts/src/core/libraries/rollup/EpochProofLib.sol @@ -16,7 +16,6 @@ import {STFLib} from "@aztec/core/libraries/rollup/STFLib.sol"; import {ValidatorSelectionLib} from "@aztec/core/libraries/rollup/ValidatorSelectionLib.sol"; import {Timestamp, Slot, Epoch, TimeLib} from "@aztec/core/libraries/TimeLib.sol"; import {CompressedSlot, CompressedTimeMath} from "@aztec/shared/libraries/CompressedTimeMath.sol"; -import {Math} from "@oz/utils/math/Math.sol"; import {SafeCast} from "@oz/utils/math/SafeCast.sol"; /** @@ -117,7 +116,20 @@ library EpochProofLib { require(verifyEpochRootProof(_args), Errors.Rollup__InvalidProof()); RollupStore storage rollupStore = STFLib.getStorage(); - rollupStore.tips = rollupStore.tips.updateProven(Math.max(rollupStore.tips.getProven(), _args.end)); + + // Advance the proven block number and insert the out hash if the chain is extended. + if (_args.end > rollupStore.tips.getProven()) { + rollupStore.tips = rollupStore.tips.updateProven(_args.end); + + // Handle L2->L1 message processing. + // The circuit outputs a zero out hash if the epoch contains no messages. It is also impossible for a partial + // epoch to produce a non-zero out hash, then later produce a zero out hash once more checkpoints are included. + // Therefore, we can safely skip the insertion for a zero out hash here. + if (_args.args.outHash != bytes32(0)) { + // Insert L2->L1 messages root into outbox for consumption. + rollupStore.config.outbox.insert(endEpoch, _args.args.outHash); + } + } RewardLib.handleRewardsAndFees(_args, endEpoch); @@ -171,6 +183,7 @@ library EpochProofLib { // struct RootRollupPublicInputs { // previous_archive_root: Field, // end_archive_root: Field, + // out_hash: Field, // checkpointHeaderHashes: [Field; Constants.AZTEC_MAX_EPOCH_DURATION], // fees: [FeeRecipient; Constants.AZTEC_MAX_EPOCH_DURATION], // chain_id: Field, @@ -178,7 +191,7 @@ library EpochProofLib { // vk_tree_root: Field, // protocol_contracts_hash: Field, // prover_id: Field, - // blob_public_inputs: FinalBlobAccumulatorPublicInputs, + // blob_public_inputs: FinalBlobAccumulator, // } { // previous_archive.root: the previous archive tree root @@ -186,15 +199,17 @@ library EpochProofLib { // end_archive.root: the new archive tree root publicInputs[1] = _args.endArchive; + + publicInputs[2] = _args.outHash; } uint256 numCheckpoints = _end - _start + 1; for (uint256 i = 0; i < numCheckpoints; i++) { - publicInputs[2 + i] = STFLib.getHeaderHash(_start + i); + publicInputs[3 + i] = STFLib.getHeaderHash(_start + i); } - uint256 offset = 2 + Constants.AZTEC_MAX_EPOCH_DURATION; + uint256 offset = 3 + Constants.AZTEC_MAX_EPOCH_DURATION; uint256 feesLength = Constants.AZTEC_MAX_EPOCH_DURATION * 2; // fees[2n to 2n + 1]: a fee element, which contains of a recipient and a value @@ -249,7 +264,6 @@ library EpochProofLib { publicInputs[offset] = bytes32(uint256(uint248(bytes31((_blobPublicInputs[96:127]))))); // c[1] publicInputs[offset + 1] = bytes32(uint256(uint136(bytes17((_blobPublicInputs[127:144]))))); - offset += 2; return publicInputs; } diff --git a/l1-contracts/src/core/libraries/rollup/ProposeLib.sol b/l1-contracts/src/core/libraries/rollup/ProposeLib.sol index f0e99730ef9d..289e78d5a61d 100644 --- a/l1-contracts/src/core/libraries/rollup/ProposeLib.sol +++ b/l1-contracts/src/core/libraries/rollup/ProposeLib.sol @@ -74,7 +74,7 @@ struct ValidateHeaderArgs { * - Validator selection and proposer verification * - Fee calculation and mana consumption tracking * - State transitions and archive updates - * - Message processing between L1 and L2 via the Inbox and Outbox contracts + * - L1 to L2 message processing via the Inbox * * The proposal flow operates within Aztec's time-based model where: * - Each slot has a designated proposer selected from the validator set @@ -121,7 +121,7 @@ library ProposeLib { * Note that some validations and processes are disabled if the chain is configured to run without * transactions, such as during ignition phase: * - No fee header computation or L1 gas fee oracle update - * - No inbox message consumption or outbox message insertion + * - No inbox message consumption * * Validations performed: * - Blob commitments against provided blob data: Errors.Rollup__InvalidBlobHash, @@ -141,8 +141,7 @@ library ProposeLib { * - Store checkpoint metadata in circular storage (TempCheckpointLog) * - Update L1 gas fee oracle (when txs enabled) * - Consume inbox messages (when txs enabled) - * - Insert outbox messages (when txs enabled) - * - Setup epoch for validator selection (first checkpoint of the epoch) + * - Setup epoch for validator selection (first block of the epoch) * * @param _args - The arguments to propose the checkpoint * @param _attestations - Committee attestations in a packed format: @@ -298,22 +297,16 @@ library ProposeLib { }) ); - // Handle L1<->L2 message processing (only when transactions are enabled) + // Handle L1->L2 message processing (only when transactions are enabled) if (v.isTxsEnabled) { - // Since ignition will have no transactions there will be no method to consume or output message. + // Since ignition will have no transactions there will be no method to consume messages. // Therefore we can ignore it as long as mana target is zero. // Since the inbox is async, it must enforce its own check to not try to insert if ignition. // Consume pending L1->L2 messages and validate against header commitment // @note The checkpoint number here will always be >=1 as the genesis checkpoint is at 0 v.inHash = rollupStore.config.inbox.consume(checkpointNumber); - require( - v.header.contentCommitment.inHash == v.inHash, - Errors.Rollup__InvalidInHash(v.inHash, v.header.contentCommitment.inHash) - ); - - // Insert L2->L1 messages into outbox for later consumption - rollupStore.config.outbox.insert(checkpointNumber, v.header.contentCommitment.outHash); + require(v.header.inHash == v.inHash, Errors.Rollup__InvalidInHash(v.inHash, v.header.inHash)); } { @@ -374,8 +367,8 @@ library ProposeLib { require(timestamp <= currentTime, Errors.Rollup__TimestampInFuture(currentTime, timestamp)); require( - _args.flags.ignoreDA || _args.header.contentCommitment.blobsHash == _args.blobsHashesCommitment, - Errors.Rollup__UnavailableTxs(_args.header.contentCommitment.blobsHash) + _args.flags.ignoreDA || _args.header.blobsHash == _args.blobsHashesCommitment, + Errors.Rollup__UnavailableTxs(_args.header.blobsHash) ); require(_args.header.gasFees.feePerDaGas == 0, Errors.Rollup__NonZeroDaFee()); diff --git a/l1-contracts/src/core/libraries/rollup/ProposedHeaderLib.sol b/l1-contracts/src/core/libraries/rollup/ProposedHeaderLib.sol index 7ac40c3d5854..41aeba5e833d 100644 --- a/l1-contracts/src/core/libraries/rollup/ProposedHeaderLib.sol +++ b/l1-contracts/src/core/libraries/rollup/ProposedHeaderLib.sol @@ -17,16 +17,11 @@ struct GasFees { uint128 feePerL2Gas; } -struct ContentCommitment { - bytes32 blobsHash; - bytes32 inHash; - bytes32 outHash; -} - struct ProposedHeader { bytes32 lastArchiveRoot; bytes32 blockHeadersHash; - ContentCommitment contentCommitment; + bytes32 blobsHash; + bytes32 inHash; Slot slotNumber; Timestamp timestamp; address coinbase; @@ -57,9 +52,8 @@ library ProposedHeaderLib { abi.encodePacked( _header.lastArchiveRoot, _header.blockHeadersHash, - _header.contentCommitment.blobsHash, - _header.contentCommitment.inHash, - _header.contentCommitment.outHash, + _header.blobsHash, + _header.inHash, _header.slotNumber, Timestamp.unwrap(_header.timestamp).toUint64(), _header.coinbase, diff --git a/l1-contracts/src/core/messagebridge/Outbox.sol b/l1-contracts/src/core/messagebridge/Outbox.sol index 5736f54518ea..00fea24cf935 100644 --- a/l1-contracts/src/core/messagebridge/Outbox.sol +++ b/l1-contracts/src/core/messagebridge/Outbox.sol @@ -8,6 +8,7 @@ import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; import {MerkleLib} from "@aztec/core/libraries/crypto/MerkleLib.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {BitMaps} from "@oz/utils/structs/BitMaps.sol"; /** @@ -15,20 +16,31 @@ import {BitMaps} from "@oz/utils/structs/BitMaps.sol"; * @author Aztec Labs * @notice Lives on L1 and is used to consume L2 -> L1 messages. Messages are inserted by the Rollup * and will be consumed by the portal contracts. + * + * @dev Messages are tracked using unique leaf IDs computed from their position in the epoch's tree structure. + * This design ensures that when longer epoch proofs are submitted (proving more blocks), messages from + * earlier blocks retain their consumed status because their leaf IDs remain stable. + * + * For detailed information about the tree structure and leaf ID computation, see: + * yarn-project/stdlib/src/messaging/l2_to_l1_membership.ts */ contract Outbox is IOutbox { using Hash for DataStructures.L2ToL1Msg; using BitMaps for BitMaps.BitMap; struct RootData { - // This is the outhash specified by header.globalvariables.outHash of any given checkpoint. + // This is the outHash in the root rollup's public inputs. + // It represents the root of the epoch tree containing all L2->L1 messages. bytes32 root; + // Bitmap tracking which messages (by leaf ID) have been consumed. + // Leaf IDs are stable across different epoch proof lengths, ensuring consumed + // messages remain marked as consumed when longer proofs are submitted. BitMaps.BitMap nullified; } IRollup public immutable ROLLUP; uint256 public immutable VERSION; - mapping(uint256 checkpointNumber => RootData root) internal roots; + mapping(Epoch => RootData root) internal roots; constructor(address _rollup, uint256 _version) { ROLLUP = IRollup(_rollup); @@ -36,23 +48,20 @@ contract Outbox is IOutbox { } /** - * @notice Inserts the root of a merkle tree containing all of the L2 to L1 messages in a checkpoint + * @notice Inserts the root of a merkle tree containing all of the L2 to L1 messages in an epoch * * @dev Only callable by the rollup contract * @dev Emits `RootAdded` upon inserting the root successfully * - * @param _checkpointNumber - The checkpoint Number in which the L2 to L1 messages reside + * @param _epoch - The epoch in which the L2 to L1 messages reside * @param _root - The merkle root of the tree where all the L2 to L1 messages are leaves */ - function insert(uint256 _checkpointNumber, bytes32 _root) external override(IOutbox) { + function insert(Epoch _epoch, bytes32 _root) external override(IOutbox) { require(msg.sender == address(ROLLUP), Errors.Outbox__Unauthorized()); - require( - _checkpointNumber > ROLLUP.getProvenCheckpointNumber(), Errors.Outbox__CheckpointAlreadyProven(_checkpointNumber) - ); - roots[_checkpointNumber].root = _root; + roots[_epoch].root = _root; - emit RootAdded(_checkpointNumber, _root); + emit RootAdded(_epoch, _root); } /** @@ -62,24 +71,19 @@ contract Outbox is IOutbox { * @dev Emits `MessageConsumed` when consuming messages * * @param _message - The L2 to L1 message - * @param _checkpointNumber - The checkpoint number specifying the checkpoint that contains the message we want to - * consume - * @param _leafIndex - The index inside the merkle tree where the message is located - * @param _path - The sibling path used to prove inclusion of the message, the _path length directly depends - * on the total amount of L2 to L1 messages in the checkpoint. i.e. the length of _path is equal to the depth of the - * L1 to L2 message tree. + * @param _epoch - The epoch that contains the message we want to consume + * @param _leafIndex - The index at the level in the wonky tree where the message is located + * @param _path - The sibling path used to prove inclusion of the message, the _path length depends + * on the location of the L2 to L1 message in the wonky tree. */ function consume( DataStructures.L2ToL1Msg calldata _message, - uint256 _checkpointNumber, + Epoch _epoch, uint256 _leafIndex, bytes32[] calldata _path ) external override(IOutbox) { require(_path.length < 256, Errors.Outbox__PathTooLong()); require(_leafIndex < (1 << _path.length), Errors.Outbox__LeafIndexOutOfBounds(_leafIndex, _path.length)); - require( - _checkpointNumber <= ROLLUP.getProvenCheckpointNumber(), Errors.Outbox__CheckpointNotProven(_checkpointNumber) - ); require(_message.sender.version == VERSION, Errors.Outbox__VersionMismatch(_message.sender.version, VERSION)); require( @@ -88,58 +92,50 @@ contract Outbox is IOutbox { require(block.chainid == _message.recipient.chainId, Errors.Outbox__InvalidChainId()); - RootData storage rootData = roots[_checkpointNumber]; + RootData storage rootData = roots[_epoch]; - bytes32 checkpointRoot = rootData.root; + bytes32 root = rootData.root; - require(checkpointRoot != bytes32(0), Errors.Outbox__NothingToConsumeAtCheckpoint(_checkpointNumber)); + require(root != bytes32(0), Errors.Outbox__NothingToConsumeAtEpoch(_epoch)); + // Compute the unique leaf ID for this message. uint256 leafId = (1 << _path.length) + _leafIndex; - require(!rootData.nullified.get(leafId), Errors.Outbox__AlreadyNullified(_checkpointNumber, leafId)); + require(!rootData.nullified.get(leafId), Errors.Outbox__AlreadyNullified(_epoch, leafId)); bytes32 messageHash = _message.sha256ToField(); - MerkleLib.verifyMembership(_path, messageHash, _leafIndex, checkpointRoot); + MerkleLib.verifyMembership(_path, messageHash, _leafIndex, root); rootData.nullified.set(leafId); - emit MessageConsumed(_checkpointNumber, checkpointRoot, messageHash, leafId); + emit MessageConsumed(_epoch, root, messageHash, leafId); } /** - * @notice Checks to see if an L2 to L1 message in a specific checkpoint has been consumed + * @notice Checks to see if an L2 to L1 message in a specific epoch has been consumed * * @dev - This function does not throw. Out-of-bounds access is considered valid, but will always return false * - * @param _checkpointNumber - The checkpoint number specifying the checkpoint that contains the message we want to - * check + * @param _epoch - The epoch that contains the message we want to check * @param _leafId - The unique id of the message leaf * * @return bool - True if the message has been consumed, false otherwise */ - function hasMessageBeenConsumedAtCheckpoint(uint256 _checkpointNumber, uint256 _leafId) - external - view - override(IOutbox) - returns (bool) - { - return roots[_checkpointNumber].nullified.get(_leafId); + function hasMessageBeenConsumedAtEpoch(Epoch _epoch, uint256 _leafId) external view override(IOutbox) returns (bool) { + return roots[_epoch].nullified.get(_leafId); } /** - * @notice Fetch the root data for a given checkpoint number - * Returns (0, 0) if the checkpoint is not proven + * @notice Fetch the root data for a given epoch + * Returns (0, 0) if the epoch is not proven * - * @param _checkpointNumber - The checkpoint number to fetch the root data for + * @param _epoch - The epoch to fetch the root data for * * @return bytes32 - The root of the merkle tree containing the L2 to L1 messages */ - function getRootData(uint256 _checkpointNumber) external view override(IOutbox) returns (bytes32) { - if (_checkpointNumber > ROLLUP.getProvenCheckpointNumber()) { - return bytes32(0); - } - RootData storage rootData = roots[_checkpointNumber]; + function getRootData(Epoch _epoch) external view override(IOutbox) returns (bytes32) { + RootData storage rootData = roots[_epoch]; return rootData.root; } } diff --git a/l1-contracts/test/Outbox.t.sol b/l1-contracts/test/Outbox.t.sol index f368cdc4c6f5..6f97c5cc9adc 100644 --- a/l1-contracts/test/Outbox.t.sol +++ b/l1-contracts/test/Outbox.t.sol @@ -6,36 +6,36 @@ import {Test} from "forge-std/Test.sol"; import {Outbox} from "@aztec/core/messagebridge/Outbox.sol"; import {IOutbox} from "@aztec/core/interfaces/messagebridge/IOutbox.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; import {NaiveMerkle} from "./merkle/Naive.sol"; import {MerkleTestUtil} from "./merkle/TestUtil.sol"; -contract FakeRollup { - uint256 public getProvenCheckpointNumber = 0; - - function setProvenCheckpointNum(uint256 _provenCheckpointNum) public { - getProvenCheckpointNumber = _provenCheckpointNum; - } -} - contract OutboxTest is Test { using Hash for DataStructures.L2ToL1Msg; address internal constant NOT_RECIPIENT = address(0x420); + + // Note: In reality, the epoch message tree could be way bigger. But the size of the actual tree and how it is + // constructed is not relevant to the Outbox. + // More comprehensive tests for the epoch message tree structure and the leaf id uniqueness are in + // `yarn-project/stdlib/src/messaging/l2_to_l1_membership.test.ts`. uint256 internal constant DEFAULT_TREE_HEIGHT = 2; + uint256 internal constant AZTEC_VERSION = 1; + Epoch internal constant DEFAULT_EPOCH = Epoch.wrap(1); address internal ROLLUP_CONTRACT; Outbox internal outbox; - NaiveMerkle internal zeroedTree; + NaiveMerkle internal epochTree; MerkleTestUtil internal merkleTestUtil; function setUp() public { - ROLLUP_CONTRACT = address(new FakeRollup()); + ROLLUP_CONTRACT = address(this); outbox = new Outbox(ROLLUP_CONTRACT, AZTEC_VERSION); - zeroedTree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); + epochTree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); merkleTestUtil = new MerkleTestUtil(); } @@ -49,28 +49,64 @@ contract OutboxTest is Test { }); } + function _consumeMessageAtEpoch( + Epoch epoch, + NaiveMerkle tree, + uint256 leafIndex, + bytes32 leaf, + DataStructures.L2ToL1Msg memory message + ) internal { + uint256 leafId = 2 ** tree.DEPTH() + leafIndex; + (bytes32[] memory path,) = tree.computeSiblingPath(leafIndex); + + bytes32 root = tree.computeRoot(); + + bool statusBeforeConsumption = outbox.hasMessageBeenConsumedAtEpoch(epoch, leafId); + assertEq(abi.encode(0), abi.encode(statusBeforeConsumption)); + + vm.expectEmit(true, true, true, true, address(outbox)); + emit IOutbox.MessageConsumed(epoch, root, leaf, leafId); + outbox.consume(message, epoch, leafIndex, path); + + bool statusAfterConsumption = outbox.hasMessageBeenConsumedAtEpoch(epoch, leafId); + assertEq(abi.encode(1), abi.encode(statusAfterConsumption)); + } + + function _consumeMessage(uint256 leafIndex, bytes32 leaf, DataStructures.L2ToL1Msg memory message) internal { + _consumeMessageAtEpoch(DEFAULT_EPOCH, epochTree, leafIndex, leaf, message); + } + + function _consumeNullifiedMessageAtEpoch( + Epoch epoch, + NaiveMerkle tree, + uint256 leafIndex, + DataStructures.L2ToL1Msg memory message + ) internal { + uint256 leafId = 2 ** tree.DEPTH() + leafIndex; + (bytes32[] memory path,) = tree.computeSiblingPath(leafIndex); + + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, epoch, leafId)); + outbox.consume(message, epoch, leafIndex, path); + } + + function _consumeNullifiedMessage(uint256 leafIndex, DataStructures.L2ToL1Msg memory message) internal { + _consumeNullifiedMessageAtEpoch(DEFAULT_EPOCH, epochTree, leafIndex, message); + } + function testRevertIfInsertingFromNonRollup(address _caller) public { vm.assume(ROLLUP_CONTRACT != _caller); - bytes32 root = zeroedTree.computeRoot(); + bytes32 root = epochTree.computeRoot(); vm.prank(_caller); vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__Unauthorized.selector)); - outbox.insert(1, root); - } - - function testRevertIfInsertingCheckpointAlreadyProven() public { - bytes32 root = zeroedTree.computeRoot(); - - vm.prank(ROLLUP_CONTRACT); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__CheckpointAlreadyProven.selector, 0)); - outbox.insert(0, root); + outbox.insert(DEFAULT_EPOCH, root); } function testRevertIfPathTooLong() public { DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); bytes32[] memory path = new bytes32[](256); vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__PathTooLong.selector)); - outbox.consume(fakeMessage, 1, 0, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 0, path); } function testRevertIfLeafIndexOutOfBounds(uint256 _leafIndex) public { @@ -78,15 +114,13 @@ contract OutboxTest is Test { bytes32[] memory path = new bytes32[](4); uint256 leafIndex = bound(_leafIndex, 1 << path.length, type(uint256).max); vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__LeafIndexOutOfBounds.selector, leafIndex, path.length)); - outbox.consume(fakeMessage, 1, leafIndex, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, leafIndex, path); } // This function tests the insertion of random arrays of L2 to L1 messages // We make a naive tree with a computed height, insert the leafs into it, and compute a root. We then add the root as - // the root of the - // L2 to L1 message tree, expect for the correct event to be emitted, and then query for the root in the - // contract—making sure the roots, as well as the - // the tree height (which is also the length of the sibling path) match + // the root of the L2 to L1 message tree, expect for the correct event to be emitted, and then query for the root in + // the contract, making sure the roots match. function testInsertVariedLeafs(bytes32[] calldata _messageLeafs) public { uint256 treeHeight = merkleTestUtil.calculateTreeHeightFromSize(_messageLeafs.length); NaiveMerkle tree = new NaiveMerkle(treeHeight); @@ -99,97 +133,94 @@ contract OutboxTest is Test { bytes32 root = tree.computeRoot(); vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.RootAdded(1, root); + emit IOutbox.RootAdded(DEFAULT_EPOCH, root); vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); + outbox.insert(DEFAULT_EPOCH, root); - bytes32 actualRoot = outbox.getRootData(1); + bytes32 actualRoot = outbox.getRootData(DEFAULT_EPOCH); assertEq(root, actualRoot); } function testRevertIfConsumingMessageBelongingToOther() public { - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); - (bytes32[] memory path,) = zeroedTree.computeSiblingPath(0); + (bytes32[] memory path,) = epochTree.computeSiblingPath(0); vm.prank(NOT_RECIPIENT); vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__InvalidRecipient.selector, address(this), NOT_RECIPIENT)); - outbox.consume(fakeMessage, 1, 1, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 1, path); } function testRevertIfConsumingMessageWithInvalidChainId() public { - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); - (bytes32[] memory path,) = zeroedTree.computeSiblingPath(0); + (bytes32[] memory path,) = epochTree.computeSiblingPath(0); fakeMessage.recipient.chainId = block.chainid + 1; vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__InvalidChainId.selector)); - outbox.consume(fakeMessage, 1, 1, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 1, path); } function testRevertIfVersionMismatch() public { - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); - DataStructures.L2ToL1Msg memory message = _fakeMessage(address(this), 123); - (bytes32[] memory path,) = zeroedTree.computeSiblingPath(0); + (bytes32[] memory path,) = epochTree.computeSiblingPath(0); message.sender.version = AZTEC_VERSION + 1; vm.expectRevert( abi.encodeWithSelector(Errors.Outbox__VersionMismatch.selector, message.sender.version, AZTEC_VERSION) ); - outbox.consume(message, 1, 1, path); + outbox.consume(message, DEFAULT_EPOCH, 1, path); } - function testRevertIfNothingInsertedAtCheckpointNumber() public { - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); - uint256 checkpointNumber = 1; + function testRevertIfNothingInsertedAtEpoch() public { DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); - (bytes32[] memory path,) = zeroedTree.computeSiblingPath(0); + (bytes32[] memory path,) = epochTree.computeSiblingPath(0); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__NothingToConsumeAtCheckpoint.selector, checkpointNumber)); - outbox.consume(fakeMessage, checkpointNumber, 1, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__NothingToConsumeAtEpoch.selector, DEFAULT_EPOCH)); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 1, path); } - function testRevertIfTryingToConsumeSameMessage() public { + function testValidInsertAndConsume() public { DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); bytes32 leaf = fakeMessage.sha256ToField(); - NaiveMerkle tree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); - tree.insertLeaf(leaf); - bytes32 root = tree.computeRoot(); + epochTree.insertLeaf(leaf); + bytes32 root = epochTree.computeRoot(); vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); + outbox.insert(DEFAULT_EPOCH, root); - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); + uint256 leafIndex = 0; + _consumeMessage(leafIndex, leaf, fakeMessage); + } + + function testRevertIfTryingToConsumeSameMessage() public { + DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); + bytes32 leaf = fakeMessage.sha256ToField(); + + epochTree.insertLeaf(leaf); + bytes32 root = epochTree.computeRoot(); + + vm.prank(ROLLUP_CONTRACT); + outbox.insert(DEFAULT_EPOCH, root); uint256 leafIndex = 0; - uint256 leafId = 2 ** DEFAULT_TREE_HEIGHT + leafIndex; - (bytes32[] memory path,) = tree.computeSiblingPath(leafIndex); - outbox.consume(fakeMessage, 1, leafIndex, path); + _consumeMessage(leafIndex, leaf, fakeMessage); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, 1, leafId)); - outbox.consume(fakeMessage, 1, leafIndex, path); + _consumeNullifiedMessage(leafIndex, fakeMessage); } function testRevertIfPathHeightMismatch() public { DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); bytes32 leaf = fakeMessage.sha256ToField(); - NaiveMerkle tree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); - tree.insertLeaf(leaf); - bytes32 root = tree.computeRoot(); + epochTree.insertLeaf(leaf); + bytes32 root = epochTree.computeRoot(); vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); + outbox.insert(DEFAULT_EPOCH, root); NaiveMerkle smallerTree = new NaiveMerkle(DEFAULT_TREE_HEIGHT - 1); smallerTree.insertLeaf(leaf); @@ -197,7 +228,7 @@ contract OutboxTest is Test { (bytes32[] memory path,) = smallerTree.computeSiblingPath(0); vm.expectRevert(abi.encodeWithSelector(Errors.MerkleLib__InvalidRoot.selector, root, smallerTreeRoot, leaf, 0)); - outbox.consume(fakeMessage, 1, 0, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 0, path); } function testRevertIfTryingToConsumeMessageNotInTree() public { @@ -206,80 +237,30 @@ contract OutboxTest is Test { fakeMessage.content = bytes32(uint256(42_069)); bytes32 modifiedLeaf = fakeMessage.sha256ToField(); - NaiveMerkle tree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); - tree.insertLeaf(leaf); - bytes32 root = tree.computeRoot(); + epochTree.insertLeaf(leaf); + bytes32 root = epochTree.computeRoot(); NaiveMerkle modifiedTree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); modifiedTree.insertLeaf(modifiedLeaf); bytes32 modifiedRoot = modifiedTree.computeRoot(); vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); + outbox.insert(DEFAULT_EPOCH, root); (bytes32[] memory path,) = modifiedTree.computeSiblingPath(0); vm.expectRevert(abi.encodeWithSelector(Errors.MerkleLib__InvalidRoot.selector, root, modifiedRoot, modifiedLeaf, 0)); - outbox.consume(fakeMessage, 1, 0, path); - } - - function testRevertIfConsumingFromTreeNotProven() public { - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(0); - - DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); - bytes32 leaf = fakeMessage.sha256ToField(); - - NaiveMerkle tree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); - tree.insertLeaf(leaf); - bytes32 root = tree.computeRoot(); - - vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); - - (bytes32[] memory path,) = tree.computeSiblingPath(0); - - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__CheckpointNotProven.selector, 1)); - outbox.consume(fakeMessage, 1, 0, path); - } - - function testValidInsertAndConsume() public { - DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); - bytes32 leaf = fakeMessage.sha256ToField(); - - NaiveMerkle tree = new NaiveMerkle(DEFAULT_TREE_HEIGHT); - tree.insertLeaf(leaf); - bytes32 root = tree.computeRoot(); - - vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); - - uint256 leafIndex = 0; - uint256 leafId = 2 ** DEFAULT_TREE_HEIGHT + leafIndex; - (bytes32[] memory path,) = tree.computeSiblingPath(leafIndex); - - bool statusBeforeConsumption = outbox.hasMessageBeenConsumedAtCheckpoint(1, leafId); - assertEq(abi.encode(0), abi.encode(statusBeforeConsumption)); - - vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.MessageConsumed(1, root, leaf, leafId); - outbox.consume(fakeMessage, 1, leafIndex, path); - - bool statusAfterConsumption = outbox.hasMessageBeenConsumedAtCheckpoint(1, leafId); - assertEq(abi.encode(1), abi.encode(statusAfterConsumption)); + outbox.consume(fakeMessage, DEFAULT_EPOCH, 0, path); } // This test takes awhile so to keep it somewhat reasonable we've set a limit on the amount of fuzz runs /// forge-config: default.fuzz.runs = 64 function testInsertAndConsumeWithVariedRecipients( address[256] calldata _recipients, - uint256 _checkpointNumber, + uint256 _epochNumber, uint8 _size ) public { - uint256 checkpointNumber = bound(_checkpointNumber, 1, 256); + Epoch epoch = Epoch.wrap(bound(_epochNumber, 1, 256)); uint256 numberOfMessages = bound(_size, 1, _recipients.length); DataStructures.L2ToL1Msg[] memory messages = new DataStructures.L2ToL1Msg[](numberOfMessages); @@ -297,45 +278,41 @@ contract OutboxTest is Test { bytes32 root = tree.computeRoot(); vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.RootAdded(checkpointNumber, root); + emit IOutbox.RootAdded(epoch, root); vm.prank(ROLLUP_CONTRACT); - outbox.insert(checkpointNumber, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(checkpointNumber); + outbox.insert(epoch, root); for (uint256 i = 0; i < numberOfMessages; i++) { (bytes32[] memory path, bytes32 leaf) = tree.computeSiblingPath(i); uint256 leafId = 2 ** treeHeight + i; vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.MessageConsumed(checkpointNumber, root, leaf, leafId); + emit IOutbox.MessageConsumed(epoch, root, leaf, leafId); vm.prank(_recipients[i]); - outbox.consume(messages[i], checkpointNumber, i, path); + outbox.consume(messages[i], epoch, i, path); } } - function testCheckOutOfBoundsStatus(uint256 _checkpointNumber, uint256 _leafId) public view { - bool outOfBounds = outbox.hasMessageBeenConsumedAtCheckpoint(_checkpointNumber, _leafId); + function testCheckOutOfBoundsStatus(Epoch _epoch, uint256 _leafId) public view { + bool outOfBounds = outbox.hasMessageBeenConsumedAtEpoch(_epoch, _leafId); assertFalse(outOfBounds); } function testGetRootData() public { - bytes32 root = zeroedTree.computeRoot(); + bytes32 root = epochTree.computeRoot(); vm.startPrank(ROLLUP_CONTRACT); - outbox.insert(1, root); - outbox.insert(2, root); + outbox.insert(DEFAULT_EPOCH, root); + outbox.insert(DEFAULT_EPOCH, root); vm.stopPrank(); - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); - { - bytes32 actualRoot = outbox.getRootData(1); + bytes32 actualRoot = outbox.getRootData(DEFAULT_EPOCH); assertEq(root, actualRoot); } { - bytes32 actualRoot = outbox.getRootData(2); + bytes32 actualRoot = outbox.getRootData(DEFAULT_EPOCH + Epoch.wrap(1)); assertEq(bytes32(0), actualRoot); } } @@ -344,26 +321,24 @@ contract OutboxTest is Test { DataStructures.L2ToL1Msg memory fakeMessage = _fakeMessage(address(this), 123); bytes32 leaf = fakeMessage.sha256ToField(); - // There's only 1 message in the entire checkpoint, so the root is the leaf. + // There's only 1 message in the entire epoch, so the root is the leaf. bytes32 root = leaf; vm.prank(ROLLUP_CONTRACT); - outbox.insert(1, leaf); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(1); + outbox.insert(DEFAULT_EPOCH, leaf); uint256 leafIndex = 0; uint256 leafId = 1; - bool statusBeforeConsumption = outbox.hasMessageBeenConsumedAtCheckpoint(1, leafId); + bool statusBeforeConsumption = outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, leafId); assertEq(abi.encode(0), abi.encode(statusBeforeConsumption)); vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.MessageConsumed(1, root, leaf, leafId); + emit IOutbox.MessageConsumed(DEFAULT_EPOCH, root, leaf, leafId); bytes32[] memory path = new bytes32[](0); - outbox.consume(fakeMessage, 1, leafIndex, path); + outbox.consume(fakeMessage, DEFAULT_EPOCH, leafIndex, path); - bool statusAfterConsumption = outbox.hasMessageBeenConsumedAtCheckpoint(1, leafId); + bool statusAfterConsumption = outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, leafId); assertEq(abi.encode(1), abi.encode(statusAfterConsumption)); } @@ -374,7 +349,6 @@ contract OutboxTest is Test { fakeMessages[i] = _fakeMessage(address(this), i); leaves[i] = fakeMessages[i].sha256ToField(); } - uint256 checkpointNumber = 1; // Build a wonky tree of 3 txs. Each tx has 1 message, so the txOutHash equals the only leaf. // outHash @@ -402,9 +376,7 @@ contract OutboxTest is Test { bytes32 root = topTree.computeRoot(); vm.prank(ROLLUP_CONTRACT); - outbox.insert(checkpointNumber, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(checkpointNumber); + outbox.insert(DEFAULT_EPOCH, root); // Consume the message of tx0. { @@ -418,10 +390,10 @@ contract OutboxTest is Test { path[0] = subtreePath[0]; path[1] = topTreePath[0]; } - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } // Consume the message of tx1. @@ -436,10 +408,10 @@ contract OutboxTest is Test { path[0] = subtreePath[0]; path[1] = topTreePath[0]; } - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } // Consume the message of tx2. @@ -448,10 +420,10 @@ contract OutboxTest is Test { uint256 leafIndex = 1; uint256 leafId = 2 ** 1 + 1; (bytes32[] memory path,) = topTree.computeSiblingPath(1); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } } @@ -467,7 +439,6 @@ contract OutboxTest is Test { fakeMessages[i] = _fakeMessage(address(this), i); leaves[i] = fakeMessages[i].sha256ToField(); } - uint256 checkpointNumber = 1; bytes32[] memory txOutHashes = new bytes32[](3); @@ -530,9 +501,7 @@ contract OutboxTest is Test { bytes32 root = topTree.computeRoot(); vm.prank(ROLLUP_CONTRACT); - outbox.insert(checkpointNumber, root); - - FakeRollup(ROLLUP_CONTRACT).setProvenCheckpointNum(checkpointNumber); + outbox.insert(DEFAULT_EPOCH, root); } // Consume messages[0] in tx0. @@ -548,10 +517,10 @@ contract OutboxTest is Test { bytes32[] memory path = new bytes32[](2); path[0] = txOutHashes[1]; path[1] = txOutHashes[2]; - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } // Consume messages[2] in tx1. @@ -573,10 +542,10 @@ contract OutboxTest is Test { path[1] = leaves[3]; path[2] = txOutHashes[0]; path[3] = txOutHashes[2]; - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } // Consume messages[4] in tx2. @@ -595,10 +564,10 @@ contract OutboxTest is Test { path[0] = leaves[5]; path[1] = leaves[6]; path[2] = subtreeRoot; - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); } // Consume messages[6] in tx2. @@ -614,10 +583,110 @@ contract OutboxTest is Test { bytes32[] memory path = new bytes32[](2); path[0] = tx2SubtreeRoot; path[1] = subtreeRoot; - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); + + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + outbox.consume(fakeMessages[msgIndex], DEFAULT_EPOCH, leafIndex, path); + } + } + + // This test checks that the status of existing messages is preserved when the root for an epoch is overwritten. + function testConsumeAgainFailAfterChainProgressed() public { + // Create 3 messages to be inserted into the epoch tree. + DataStructures.L2ToL1Msg[] memory fakeMessages = new DataStructures.L2ToL1Msg[](3); + bytes32[] memory leaves = new bytes32[](3); + for (uint256 i = 0; i < 3; i++) { + fakeMessages[i] = _fakeMessage(address(this), i + 123); + leaves[i] = fakeMessages[i].sha256ToField(); + } + + // First, insert the root of a short epoch containing 2 checkpoints, each has 1 message. + epochTree.insertLeaf(leaves[0]); + epochTree.insertLeaf(leaves[1]); + + bytes32 rootForShortEpoch = epochTree.computeRoot(); + + vm.prank(ROLLUP_CONTRACT); + outbox.insert(DEFAULT_EPOCH, rootForShortEpoch); + + // Consume leaves[1] + { + uint256 leafIndex = 1; + _consumeMessage(leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); + } + + // Then, insert the root of a long epoch containing 3 checkpoints, including the existing 2 checkpoints, plus a new + // checkpoint with 1 tx/message. + epochTree.insertLeaf(leaves[2]); + bytes32 rootForLongEpoch = epochTree.computeRoot(); + + vm.prank(ROLLUP_CONTRACT); + outbox.insert(DEFAULT_EPOCH, rootForLongEpoch); + + // Cannot to consume leaves[1] again. + { + uint256 leafIndex = 1; + _consumeNullifiedMessage(leafIndex, fakeMessages[leafIndex]); + } + + // leaves[0] can still be consumed. + { + uint256 leafIndex = 0; + _consumeMessage(leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); + } + + // New leaf leaves[2] can be consumed. + { + uint256 leafIndex = 2; + _consumeMessage(leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); + } + } + + // This test checks that the status of existing messages is preserved when the root for a new epoch is inserted. + function testConsumeMessagesInTwoEpochs() public { + // Insert 2 checkpoints to the epoch tree, each has 1 message. + DataStructures.L2ToL1Msg[] memory fakeMessages = new DataStructures.L2ToL1Msg[](2); + bytes32[] memory leaves = new bytes32[](2); + for (uint256 i = 0; i < 2; i++) { + fakeMessages[i] = _fakeMessage(address(this), i + 123); + leaves[i] = fakeMessages[i].sha256ToField(); + } + epochTree.insertLeaf(leaves[0]); + epochTree.insertLeaf(leaves[1]); + bytes32 root = epochTree.computeRoot(); + + // First, insert the root for the first epoch. + Epoch epoch1 = DEFAULT_EPOCH; + vm.prank(ROLLUP_CONTRACT); + outbox.insert(epoch1, root); + + // Consume leaves[1] in the first epoch + { + uint256 leafIndex = 1; + _consumeMessageAtEpoch(epoch1, epochTree, leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); + } - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - outbox.consume(fakeMessages[msgIndex], checkpointNumber, leafIndex, path); + // Then, insert the root of the same epoch tree for the second epoch. + Epoch epoch2 = epoch1 + Epoch.wrap(1); + vm.prank(ROLLUP_CONTRACT); + outbox.insert(epoch2, root); + + // Cannot consume leaves[1] again in the first epoch. + { + uint256 leafIndex = 1; + _consumeNullifiedMessageAtEpoch(epoch1, epochTree, leafIndex, fakeMessages[leafIndex]); + } + + // The same leaf leaves[1] in the second epoch can be consumed. + { + uint256 leafIndex = 1; + _consumeMessageAtEpoch(epoch2, epochTree, leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); + } + + // leaves[0] in the first epoch can still be consumed. + { + uint256 leafIndex = 0; + _consumeMessageAtEpoch(epoch1, epochTree, leafIndex, leaves[leafIndex], fakeMessages[leafIndex]); } } } diff --git a/l1-contracts/test/Rollup.t.sol b/l1-contracts/test/Rollup.t.sol index 94a5f8801fc6..f50ce8082889 100644 --- a/l1-contracts/test/Rollup.t.sol +++ b/l1-contracts/test/Rollup.t.sol @@ -92,7 +92,6 @@ contract RollupTest is RollupBase { rollup = IInstance(address(builder.getConfig().rollup)); inbox = Inbox(address(rollup.getInbox())); - outbox = Outbox(address(rollup.getOutbox())); feeJuicePortal = FeeJuicePortal(address(rollup.getFeeAssetPortal())); @@ -189,13 +188,6 @@ contract RollupTest is RollupBase { assertEq(rollup.getPendingCheckpointNumber(), 1, "Invalid pending checkpoint number"); assertEq(rollup.getProvenCheckpointNumber(), 0, "Invalid proven checkpoint number"); - // @note Get the root that we have in the outbox. - // We read it directly in storage because it is not yet proven, so the getter will give (0, 0). - // The values are stored such that we can check that after pruning, and inserting a new checkpoint, - // we will override it. - bytes32 rootMixed = vm.load(address(outbox), keccak256(abi.encode(1, 0))); - assertNotEq(rootMixed, bytes32(0), "Invalid root"); - rollup.prune(); assertEq( inbox.getInProgress(), @@ -221,10 +213,6 @@ contract RollupTest is RollupBase { assertEq(inbox.getRoot(2), inboxRoot2, "Invalid inbox root"); assertEq(rollup.getPendingCheckpointNumber(), 1, "Invalid pending checkpoint number"); assertEq(rollup.getProvenCheckpointNumber(), 0, "Invalid proven checkpoint number"); - - // We check that the roots in the outbox have correctly been updated. - bytes32 rootEmpty = vm.load(address(outbox), keccak256(abi.encode(1, 0))); - assertEq(rootEmpty, bytes32(0), "Invalid root"); } function testTimestamp() public setUpFor("mixed_checkpoint_1") { @@ -593,31 +581,11 @@ contract RollupTest is RollupBase { CheckpointLog memory checkpoint = rollup.getCheckpoint(0); - PublicInputArgs memory args = - PublicInputArgs({previousArchive: checkpoint.archive, endArchive: data.archive, proverId: address(0)}); - - bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); - - fees[0] = bytes32(uint256(uint160(address(0)))); - fees[1] = bytes32(0); - - bytes memory proof = ""; - vm.expectRevert( abi.encodeWithSelector(Errors.Rollup__StartAndEndNotSameEpoch.selector, Epoch.wrap(0), Epoch.wrap(1)) ); - rollup.submitEpochRootProof( - SubmitEpochRootProofArgs({ - start: 1, - end: 2, - args: args, - fees: fees, - attestations: CommitteeAttestations({signatureIndices: "", signaturesOrAddresses: ""}), - blobInputs: data.batchedBlobInputs, - proof: proof - }) - ); + _submitEpochProof(1, 2, checkpoint.archive, data.archive, data.batchedBlobInputs, address(0)); assertEq(rollup.getPendingCheckpointNumber(), 2, "Invalid pending checkpoint number"); assertEq(rollup.getProvenCheckpointNumber(), 0, "Invalid proven checkpoint number"); @@ -814,6 +782,110 @@ contract RollupTest is RollupBase { ); } + function testShorterEpochProofCannotOverwriteOutHash() public setUpFor("mixed_checkpoint_1") { + // Propose two checkpoints in epoch 0 + _proposeCheckpoint("mixed_checkpoint_1", 1); + _proposeCheckpoint("mixed_checkpoint_2", 2); + + outbox = Outbox(address(rollup.getOutbox())); + + DecoderBase.Data memory checkpoint1Data = load("mixed_checkpoint_1").checkpoint; + DecoderBase.Data memory checkpoint2Data = load("mixed_checkpoint_2").checkpoint; + CheckpointLog memory checkpoint = rollup.getCheckpoint(0); + + bytes32 outHash1 = bytes32(uint256(0x1111)); + bytes32 outHash2 = bytes32(uint256(0x2222)); + + // Submit proof for checkpoints 1-2 with outHash1 + _submitEpochProofWithOutHashAndFee( + 1, + 2, + checkpoint.archive, + checkpoint2Data.archive, + checkpoint2Data.batchedBlobInputs, + outHash1, + address(this), + address(0), + 0 + ); + + // Verify the state after the first proof + assertEq(rollup.getProvenCheckpointNumber(), 2, "Proven checkpoint number should be 2"); + assertEq(outbox.getRootData(Epoch.wrap(0)), outHash1, "OutHash should be outHash1"); + + // Attempt to submit proof for checkpoints 1-1 with outHash2 (shorter proof) + // This should not revert, but should not update anything + _submitEpochProofWithOutHashAndFee( + 1, + 1, + checkpoint.archive, + checkpoint1Data.archive, + checkpoint1Data.batchedBlobInputs, + outHash2, + address(this), + address(0), + 0 + ); + + // Verify that the proven checkpoint number did NOT regress + assertEq(rollup.getProvenCheckpointNumber(), 2, "Proven checkpoint number should still be 2"); + + // Verify that the outHash did NOT change + assertEq(outbox.getRootData(Epoch.wrap(0)), outHash1, "OutHash should still be outHash1"); + } + + function testLongerEpochProofCanUpdateAfterShorterProof() public setUpFor("mixed_checkpoint_1") { + // Propose two checkpoints in epoch 0 + _proposeCheckpoint("mixed_checkpoint_1", 1); + _proposeCheckpoint("mixed_checkpoint_2", 2); + + outbox = Outbox(address(rollup.getOutbox())); + + DecoderBase.Data memory checkpoint1Data = load("mixed_checkpoint_1").checkpoint; + DecoderBase.Data memory checkpoint2Data = load("mixed_checkpoint_2").checkpoint; + CheckpointLog memory checkpoint = rollup.getCheckpoint(0); + + bytes32 outHash1 = bytes32(uint256(0x1111)); + bytes32 outHash2 = bytes32(uint256(0x2222)); + + // Submit proof for checkpoints 1-1 with outHash1 (shorter proof first) + _submitEpochProofWithOutHashAndFee( + 1, + 1, + checkpoint.archive, + checkpoint1Data.archive, + checkpoint1Data.batchedBlobInputs, + outHash1, + address(this), + address(0), + 0 + ); + + // Verify the state after the first proof + assertEq(rollup.getProvenCheckpointNumber(), 1, "Proven checkpoint number should be 1"); + assertEq(outbox.getRootData(Epoch.wrap(0)), outHash1, "OutHash should be outHash1"); + + // Submit proof for checkpoints 1-2 with outHash2 (longer proof) + // This SHOULD update both the proven checkpoint number and the outHash + _submitEpochProofWithOutHashAndFee( + 1, + 2, + checkpoint.archive, + checkpoint2Data.archive, + checkpoint2Data.batchedBlobInputs, + outHash2, + address(this), + address(0), + 0 + ); + + // Verify that the proven checkpoint number progressed to 2 + assertEq(rollup.getProvenCheckpointNumber(), 2, "Proven checkpoint number should be 2"); + + // Verify that the outHash was updated to outHash2 + assertEq(outbox.getRootData(Epoch.wrap(0)), outHash2, "OutHash should be outHash2"); + } + function _submitEpochProof( uint256 _start, uint256 _end, @@ -835,8 +907,25 @@ contract RollupTest is RollupBase { address _coinbase, uint256 _fee ) internal { - PublicInputArgs memory args = - PublicInputArgs({previousArchive: _prevArchive, endArchive: _archive, proverId: _prover}); + _submitEpochProofWithOutHashAndFee( + _start, _end, _prevArchive, _archive, _blobInputs, bytes32(0), _prover, _coinbase, _fee + ); + } + + function _submitEpochProofWithOutHashAndFee( + uint256 _start, + uint256 _end, + bytes32 _prevArchive, + bytes32 _archive, + bytes memory _blobInputs, + bytes32 _outHash, + address _prover, + address _coinbase, + uint256 _fee + ) internal { + PublicInputArgs memory args = PublicInputArgs({ + previousArchive: _prevArchive, endArchive: _archive, outHash: _outHash, proverId: _prover + }); bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); fees[0] = bytes32(uint256(uint160(bytes20(_coinbase)))); // Need the address to be left padded within the bytes32 diff --git a/l1-contracts/test/base/DecoderBase.sol b/l1-contracts/test/base/DecoderBase.sol index 1f5266812f08..b302178a11fc 100644 --- a/l1-contracts/test/base/DecoderBase.sol +++ b/l1-contracts/test/base/DecoderBase.sol @@ -5,7 +5,7 @@ pragma solidity >=0.8.27; import {TestBase} from "../base/Base.sol"; import {Timestamp, Slot} from "@aztec/core/libraries/TimeLib.sol"; -import {ProposedHeader, ContentCommitment, GasFees} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol"; +import {ProposedHeader, GasFees} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol"; import {ProposedHeaderLib} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol"; // Many of the structs in here match what you see in `header` but with very important exceptions! @@ -39,18 +39,13 @@ contract DecoderBase is TestBase { bytes32[] l2ToL1Messages; } - struct AlphabeticalContentCommitment { - bytes32 blobsHash; - bytes32 inHash; - bytes32 outHash; - } - struct AlphabeticalHeader { + bytes32 blobsHash; bytes32 blockHeadersHash; address coinbase; - AlphabeticalContentCommitment contentCommitment; bytes32 feeRecipient; GasFees gasFees; + bytes32 inHash; bytes32 lastArchiveRoot; uint256 slotNumber; uint256 timestamp; @@ -105,11 +100,8 @@ contract DecoderBase is TestBase { header: ProposedHeader({ lastArchiveRoot: full.checkpoint.header.lastArchiveRoot, blockHeadersHash: full.checkpoint.header.blockHeadersHash, - contentCommitment: ContentCommitment({ - blobsHash: full.checkpoint.header.contentCommitment.blobsHash, - inHash: full.checkpoint.header.contentCommitment.inHash, - outHash: full.checkpoint.header.contentCommitment.outHash - }), + blobsHash: full.checkpoint.header.blobsHash, + inHash: full.checkpoint.header.inHash, slotNumber: Slot.wrap(full.checkpoint.header.slotNumber), timestamp: Timestamp.wrap(full.checkpoint.header.timestamp), coinbase: full.checkpoint.header.coinbase, diff --git a/l1-contracts/test/base/RollupBase.sol b/l1-contracts/test/base/RollupBase.sol index 37337187e634..d06b918eb0b6 100644 --- a/l1-contracts/test/base/RollupBase.sol +++ b/l1-contracts/test/base/RollupBase.sol @@ -73,7 +73,10 @@ contract RollupBase is DecoderBase { // What are these even? // ^ public inputs to the root proof? PublicInputArgs memory args = PublicInputArgs({ - previousArchive: parentCheckpointLog.archive, endArchive: endFull.checkpoint.archive, proverId: _prover + previousArchive: parentCheckpointLog.archive, + endArchive: endFull.checkpoint.archive, + outHash: bytes32(0), + proverId: _prover }); bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); @@ -159,7 +162,7 @@ contract RollupBase is DecoderBase { vm.warp(max(block.timestamp, Timestamp.unwrap(full.checkpoint.header.timestamp))); _populateInbox(full.populate.sender, full.populate.recipient, full.populate.l1ToL2Content); - full.checkpoint.header.contentCommitment.inHash = rollup.getInbox().getRoot(full.checkpoint.checkpointNumber); + full.checkpoint.header.inHash = rollup.getInbox().getRoot(full.checkpoint.checkpointNumber); { bytes32[] memory blobHashes; @@ -205,45 +208,6 @@ contract RollupBase is DecoderBase { return; } - bytes32 l2ToL1MessageTreeRoot; - uint32 numTxs = full.checkpoint.numTxs; - if (numTxs != 0) { - // NB: The below works with full checkpoints because we require the largest possible subtrees - // for L2 to L1 messages - usually we make variable height subtrees, the roots of which - // form a balanced tree - - // The below is a little janky - we know that this test deals with full txs with equal numbers - // of msgs or txs with no messages, so the division works - // TODO edit full.messages to include information about msgs per tx? - uint256 subTreeHeight = full.messages.l2ToL1Messages.length == 0 - ? 0 - : merkleTestUtil.calculateTreeHeightFromSize(full.messages.l2ToL1Messages.length / numTxs); - uint256 outHashTreeHeight = numTxs == 1 ? 0 : merkleTestUtil.calculateTreeHeightFromSize(numTxs); - uint256 numMessagesWithPadding = numTxs * Constants.MAX_L2_TO_L1_MSGS_PER_TX; - - uint256 treeHeight = subTreeHeight + outHashTreeHeight; - NaiveMerkle tree = new NaiveMerkle(treeHeight); - for (uint256 i = 0; i < numMessagesWithPadding; i++) { - if (i < full.messages.l2ToL1Messages.length) { - tree.insertLeaf(full.messages.l2ToL1Messages[i]); - } else { - tree.insertLeaf(bytes32(0)); - } - } - - l2ToL1MessageTreeRoot = tree.computeRoot(); - } - - outbox = Outbox(address(rollup.getOutbox())); - bytes32 root = outbox.getRootData(full.checkpoint.checkpointNumber); - - // If we are trying to read a checkpoint beyond the proven chain, we should see "nothing". - if (rollup.getProvenCheckpointNumber() >= full.checkpoint.checkpointNumber) { - assertEq(l2ToL1MessageTreeRoot, root, "Invalid l2 to l1 message tree root"); - } else { - assertEq(root, bytes32(0), "Invalid outbox root"); - } - assertEq(rollup.archive(), args.archive, "Invalid archive"); } diff --git a/l1-contracts/test/benchmark/happy.t.sol b/l1-contracts/test/benchmark/happy.t.sol index 497dbd9f798b..e99efaa7d213 100644 --- a/l1-contracts/test/benchmark/happy.t.sol +++ b/l1-contracts/test/benchmark/happy.t.sol @@ -20,7 +20,6 @@ import {SafeCast} from "@oz/utils/math/SafeCast.sol"; import {Registry} from "@aztec/governance/Registry.sol"; import {Inbox} from "@aztec/core/messagebridge/Inbox.sol"; -import {Outbox} from "@aztec/core/messagebridge/Outbox.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; import {Rollup, CheckpointLog} from "@aztec/core/Rollup.sol"; import { @@ -592,6 +591,7 @@ contract BenchmarkRollupTest is FeeModelTestPoints, DecoderBase { PublicInputArgs memory args = PublicInputArgs({ previousArchive: rollup.getCheckpoint(start).archive, endArchive: rollup.getCheckpoint(start + epochSize - 1).archive, + outHash: bytes32(0), proverId: address(0) }); diff --git a/l1-contracts/test/compression/PreHeating.t.sol b/l1-contracts/test/compression/PreHeating.t.sol index 208aa195b821..650f62798c0c 100644 --- a/l1-contracts/test/compression/PreHeating.t.sol +++ b/l1-contracts/test/compression/PreHeating.t.sol @@ -19,7 +19,6 @@ import {SafeCast} from "@oz/utils/math/SafeCast.sol"; import {Registry} from "@aztec/governance/Registry.sol"; import {Inbox} from "@aztec/core/messagebridge/Inbox.sol"; -import {Outbox} from "@aztec/core/messagebridge/Outbox.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; import {Rollup, CheckpointLog} from "@aztec/core/Rollup.sol"; import { @@ -277,6 +276,7 @@ contract PreHeatingTest is FeeModelTestPoints, DecoderBase { PublicInputArgs memory args = PublicInputArgs({ previousArchive: rollup.getCheckpoint(start).archive, endArchive: rollup.getCheckpoint(start + epochSize - 1).archive, + outHash: bytes32(0), proverId: address(0) }); diff --git a/l1-contracts/test/escape-hatch/integration/EscapeHatchIntegrationBase.sol b/l1-contracts/test/escape-hatch/integration/EscapeHatchIntegrationBase.sol index 659a5bc4f5a0..81bac26aaab9 100644 --- a/l1-contracts/test/escape-hatch/integration/EscapeHatchIntegrationBase.sol +++ b/l1-contracts/test/escape-hatch/integration/EscapeHatchIntegrationBase.sol @@ -9,12 +9,7 @@ import {EscapeHatch} from "@aztec/core/EscapeHatch.sol"; import {Epoch, Slot, Timestamp} from "@aztec/shared/libraries/TimeMath.sol"; import {Ownable} from "@oz/access/Ownable.sol"; import {Constants} from "@aztec/core/libraries/ConstantsGen.sol"; -import { - ProposedHeader, - ProposedHeaderLib, - GasFees, - ContentCommitment -} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol"; +import {ProposedHeader, ProposedHeaderLib, GasFees} from "@aztec/core/libraries/rollup/ProposedHeaderLib.sol"; import {ProposeArgs, OracleInput, ProposeLib, ProposePayload} from "@aztec/core/libraries/rollup/ProposeLib.sol"; import { CommitteeAttestations, @@ -133,17 +128,18 @@ abstract contract EscapeHatchIntegrationBase is ValidatorSelectionTestBase { * @dev Uses: * - archive: GENESIS_ARCHIVE_ROOT * - oracleInput: zero - * - header fields from fixture for contentCommitment/blockHeadersHash, rest overridden + * - header fields from fixture for blockHeadersHash/blobsHash/inHash, rest overridden */ function _buildProposeArgs(address _proposer) internal view returns (ProposeArgs memory args, bytes memory blobs) { bytes32 archive = bytes32(Constants.GENESIS_ARCHIVE_ROOT); Slot slotNumber = rollup.getCurrentSlot(); - // Build header fresh, only copying contentCommitment and blockHeadersHash from fixture + // Build header fresh, only copying blockHeadersHash/blobsHash/inHash from fixture ProposedHeader memory header = ProposedHeader({ lastArchiveRoot: archive, blockHeadersHash: full.checkpoint.header.blockHeadersHash, - contentCommitment: full.checkpoint.header.contentCommitment, + blobsHash: full.checkpoint.header.blobsHash, + inHash: full.checkpoint.header.inHash, slotNumber: slotNumber, timestamp: rollup.getTimestampForSlot(slotNumber), coinbase: _proposer, @@ -304,8 +300,9 @@ abstract contract EscapeHatchIntegrationBase is ValidatorSelectionTestBase { bytes32 previousArchive = rollup.archiveAt(_start - 1); bytes32 endArchive = rollup.archiveAt(_end); - PublicInputArgs memory args = - PublicInputArgs({previousArchive: previousArchive, endArchive: endArchive, proverId: _prover}); + PublicInputArgs memory args = PublicInputArgs({ + previousArchive: previousArchive, endArchive: endArchive, outHash: bytes32(0), proverId: _prover + }); bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); uint256 size = _end - _start + 1; diff --git a/l1-contracts/test/escape-hatch/integration/submitEpochRootProof.t.sol b/l1-contracts/test/escape-hatch/integration/submitEpochRootProof.t.sol index 22bf2146fbef..7cc030446655 100644 --- a/l1-contracts/test/escape-hatch/integration/submitEpochRootProof.t.sol +++ b/l1-contracts/test/escape-hatch/integration/submitEpochRootProof.t.sol @@ -110,8 +110,9 @@ contract submitEpochRootProofTest is EscapeHatchIntegrationBase { bytes32 previousArchive = rollup.archiveAt(0); bytes32 endArchive = rollup.archiveAt(1); - PublicInputArgs memory args = - PublicInputArgs({previousArchive: previousArchive, endArchive: endArchive, proverId: address(this)}); + PublicInputArgs memory args = PublicInputArgs({ + previousArchive: previousArchive, endArchive: endArchive, outHash: bytes32(0), proverId: address(this) + }); bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); fees[0] = bytes32(uint256(uint160(bytes20(("sequencer"))))); diff --git a/l1-contracts/test/fees/FeeRollup.t.sol b/l1-contracts/test/fees/FeeRollup.t.sol index b38c331ac42a..62d07f753b7d 100644 --- a/l1-contracts/test/fees/FeeRollup.t.sol +++ b/l1-contracts/test/fees/FeeRollup.t.sol @@ -367,6 +367,7 @@ contract FeeRollupTest is FeeModelTestPoints, DecoderBase { PublicInputArgs memory args = PublicInputArgs({ previousArchive: rollup.getCheckpoint(start).archive, endArchive: rollup.getCheckpoint(start + epochSize - 1).archive, + outHash: bytes32(0), proverId: address(0) }); diff --git a/l1-contracts/test/fixtures/empty_checkpoint_1.json b/l1-contracts/test/fixtures/empty_checkpoint_1.json index ee85b1268552..580cf98055aa 100644 --- a/l1-contracts/test/fixtures/empty_checkpoint_1.json +++ b/l1-contracts/test/fixtures/empty_checkpoint_1.json @@ -25,30 +25,27 @@ "l2ToL1Messages": [] }, "checkpoint": { - "archive": "0x1e96cc7e7eaaed1fe526ae5d1f86f326d8ffce3eed61cae72944591840f515ab", - "blobCommitments": "0x01b616d40587551b9b90de4667953b5bedc86ddc83a817816faff705ef124af4128795b3df181e70aeae69b48e279e0e53", - "batchedBlobInputs": "0x0114245504a16c0bb808a6608d851e97592b627989f54c00c9804469f66152001ec8db2ed0f062183bee7fbc66a03e054637722d0da8cfab23b13e7a4736277c61cda0771c0f5b0428b9313c42cc48d7503bd6a28e021957dcef4c8e9cdb8e7fb616d40587551b9b90de4667953b5bedc86ddc83a817816faff705ef124af4128795b3df181e70aeae69b48e279e0e53a3269c7ab41e141d15cbe419b76c7b5f85e428ffd7b41cb58e8d44ebbf7f89a12f5c583ce6c43bbc1139c0495cae7676", + "archive": "0x282ad20dad6188f12ac98951c4a657819ea8758377dfa27f8ff266dd45537dcf", + "blobCommitments": "0x019577db6f4c8436f74f44465467de1dd291b351cc7f50d4704bed967049f8b67969baa32ce623c4a3c3b1c7e24764c6cc", + "batchedBlobInputs": "0x01f728103925a325d552684f92aaebb31fbc7e5913b24092a55c23175b0c55e929a857a6463f3df836e4568ccab5351564437e2e3be791164db20686e34ae9141dd12ec08028036eb2b544693986178c257db8de1261ecd642592db8d775b9639577db6f4c8436f74f44465467de1dd291b351cc7f50d4704bed967049f8b67969baa32ce623c4a3c3b1c7e24764c6cca9e7557efb52e95d73deebb4cd7017d39a08707945c5ae2aaa5d1d9fb0fcc64ef10b74f59fbdc8f1ec58eebdf2669234", "checkpointNumber": 1, "body": "0x00000000", "header": { "lastArchiveRoot": "0x1f8c805403d88ee809d3cb3e52eeba0a104f69968cdb844a9cbdf1e9e00b3a95", - "blockHeadersHash": "0x0c1cc505cc236d5cbf6ca3a2f461089652bd13f278823395eace3d099828ed35", - "contentCommitment": { - "blobsHash": "0x00ac9769eb7286008ad6c53af05ac2550cc50c8ffb0ef28e867b62c5eeed5e09", - "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", - "outHash": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, + "blockHeadersHash": "0x0a9f24bd061e1a678532c3a0eb2e2c45b83f8a430e7ba2d938acbb7f7b1998e4", + "blobsHash": "0x0049ff2f2a274f93e5f70610ab6c44fe378dae05dece7449c68096391348939c", + "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", "slotNumber": 102, - "timestamp": 1763996852, - "coinbase": "0x84a7f9f7dd6982213a81be3b7b1164772d32c8c5", - "feeRecipient": "0x036cbdf685a496f9dc19c6e7dc164f32b6768d5dbc04bae8550fa5bb8280db84", + "timestamp": 1767622382, + "coinbase": "0x53b8242fba98336389ece039c68d862b37faad91", + "feeRecipient": "0x24e9d69c2faa5ec45e6b5ac457485cf170830a0804c58978e3a8ddecb99a9eb3", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 19870 + "feePerL2Gas": 6294660 }, "totalManaUsed": 0 }, - "headerHash": "0x0067c922aaf2ddc9c18cedbd01ba226d1ed255263adc335464c307982c597436", + "headerHash": "0x00c58265969b47aa2adfc59d912394d0e04330bebb4f46ffe486e9c0d5922e35", "numTxs": 0 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/empty_checkpoint_2.json b/l1-contracts/test/fixtures/empty_checkpoint_2.json index dd1d88238851..64110e8d96e3 100644 --- a/l1-contracts/test/fixtures/empty_checkpoint_2.json +++ b/l1-contracts/test/fixtures/empty_checkpoint_2.json @@ -25,30 +25,27 @@ "l2ToL1Messages": [] }, "checkpoint": { - "archive": "0x0320df29d72c016c51c7ae943410c27bf6d34d7726feac182d371c1155237d21", - "blobCommitments": "0x01961a155fe0fc51e3de70c756641ef9e6b8d06550a2ea35c31671a772dfc2e64e3092ec5578d7184b758544c2ab703a63", - "batchedBlobInputs": "0x012ff7670864c78f1f5c36e0179355d930da1d8e7451df3f2ad0f53164c409271fadecee83d6f8134aac2e18d0bac68317786671540410fd50a0dfc550a4779f6e1222ec26ce12f6aa1d72bc7e19ec6b76af57be92f534ff70a6867d3cd847b1a58ded2d22a9bea8ce8155893320851d06536bdbca4a7997c9dd6b5a053617fb9a0d360dcf85b168dff3f7ea1e59b0f1b092392a662fbfd14809efea9524ef0b4fbfccfcff2702ce29075f5267ec5733b5749bd8b375260008fddfc7ea3e6937", + "archive": "0x18b106d133486f32ee6ad5fda258b864628d639e9c2157e6a78850a18d56afa6", + "blobCommitments": "0x01ac0bf84f62bdcfd8064546e669b2d1ee256b30e950b2bf0df654327eaf250acae671c8e27c9107821688f94c8b9cfd7a", + "batchedBlobInputs": "0x01f75a3cc528fea533fa5081e73f8cb7604fff3e3050214755c2dacc836e07700ba8a98e3b7b6ad838ccd22731f2ff10a05881f0f43c04bae43cea1d5a4c3ccc0f23617ae2206c43030f8fa04198f504ee5a823bf19e4ff290bd3c8c126a18528f2b526e4853ee656995ee543f7c07306e4dfb52c33d5ec27d77716e7c29e01270595c8f1d8b2ad2a171e2dda9d1d68f9837b30ccf0252f9f7be3b273f3c948cc126a3b43c35b067c3db28f54c7d8ea13b5e4ea9e73e7477d5694c3d63c57558", "checkpointNumber": 2, "body": "0x00000000", "header": { - "lastArchiveRoot": "0x1e96cc7e7eaaed1fe526ae5d1f86f326d8ffce3eed61cae72944591840f515ab", - "blockHeadersHash": "0x0d78d08e73eba6af2abf8477e70e44bb3fe7336f244cb199e2b5299e60bc07d4", - "contentCommitment": { - "blobsHash": "0x002f6d28347226a4c0c6dfa38663f542efa5fe48ed72ae7d9b2a9a57c8ee5cd8", - "inHash": "0x004c9b6f1dcd0d52543f9766f97c31ed93d988e429af87234a6574ec7dadfc29", - "outHash": "0x0000000000000000000000000000000000000000000000000000000000000000" - }, + "lastArchiveRoot": "0x282ad20dad6188f12ac98951c4a657819ea8758377dfa27f8ff266dd45537dcf", + "blockHeadersHash": "0x2d588e95e81c36089a287758ec574da57f7cc1a49ff179fc9d19270a57540195", + "blobsHash": "0x00a2e71b8a34c433217dc805a1744dc14c632b1e5447014a75d6ee85ca5b1759", + "inHash": "0x0017376ab1b98eee798fe1f0d7025f2db3f4b8206133fcb687229136ac468ee8", "slotNumber": 108, - "timestamp": 1763997068, - "coinbase": "0x84a7f9f7dd6982213a81be3b7b1164772d32c8c5", - "feeRecipient": "0x036cbdf685a496f9dc19c6e7dc164f32b6768d5dbc04bae8550fa5bb8280db84", + "timestamp": 1767622598, + "coinbase": "0x53b8242fba98336389ece039c68d862b37faad91", + "feeRecipient": "0x24e9d69c2faa5ec45e6b5ac457485cf170830a0804c58978e3a8ddecb99a9eb3", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 1430 + "feePerL2Gas": 313050 }, "totalManaUsed": 0 }, - "headerHash": "0x00c508aa0669f941ea6f4c563bcdb1a0cf211a87d748353aae29bd3eb057d3b3", + "headerHash": "0x0007aa30766f0d7be036aadd2a8fd89c67dfcdac74a4049a0c423647d6068ddc", "numTxs": 0 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_checkpoint_1.json b/l1-contracts/test/fixtures/mixed_checkpoint_1.json index aaa8369a1ecb..abc087547fe7 100644 --- a/l1-contracts/test/fixtures/mixed_checkpoint_1.json +++ b/l1-contracts/test/fixtures/mixed_checkpoint_1.json @@ -58,30 +58,27 @@ ] }, "checkpoint": { - "archive": "0x15cf6f7e7495857857a35f8c8007b1fa965ee4c68ecbee6a0a65e9005aa0b6a1", - "blobCommitments": "0x02a03875626304efe4cef21f3aac74683b1fc4a3e3c1a369b1544f52ac71dfad8b025200c1dd2aa44b673ff8e13c560bcd93222680fb2f7be0c332bad0a996b975d82515d450dd48ad42581cb8ab8bbcd53fa7c7b980e78d71734ca3e6875d49e3", - "batchedBlobInputs": "0x0187411d436f4a4aa2f6d92ed4af120789a95acc0a63cf62ae756bb30cb6b00d0e58f7ab176e450e86fff0dd8caf5fa375c97113a4ac6bb38a1294a37c065f3403f50b9b0037ca87b8d7deb228582779f8c0d61b3bcc7b8acf7e389494012d4eabeab57146ec89e14be8e628e6f1ce5ad50dcae7c459e9ff79de20313308406ef3d69698b7bd71bf76b904e8d9eebbdc95f6b4bffc3ff670f84f78678a77f3772f4a75a46268dbfc375bc24e63a9d7325b4cb23a45eb43e0283163188cb78197", + "archive": "0x247d8363f9042676b1400475629c699edf0601fc55368182390aa6502482e7b7", + "blobCommitments": "0x02b486c2b777e784f006756ed911fa6c0fe35cd2e6bd51f4d9f43e95dfb8183e7cf4b2032ab49bebd814039cb79009b4498422c430db0e41cfd0915395a6eaa08d0ca489ab7f05aeecd486f4fb9508ba73d0b9ef367f467b9d4de4d781992c41c8", + "batchedBlobInputs": "0x0186725ae20fdd5a17a1ccba766d443dd23e53d32c3798173c943e73ac88b99917060b609b5c7d260cdb5f28a098f6c5ff0d68036977052885eef789e24cd7e33719f21d31ed319f81965f55dfdae89bf519146c86855b67fb2e69aae11b2eba85699d6aee2987ce5a06ed173c6ec99913131526cc12d30afaf90d2aa30749afda4deb9c6740822d9c795637f4a29966b84375ed138374eb53412ed7f9e5c7f2c200a0108896d0d4324a2302273203f70ba37a369edf26b1b99bcfd6af340476", "checkpointNumber": 1, - "body": "0x000000040027666f2d7fa98463b84717a61997e05e506c0d76aa9652dff0531f70eff1fdb00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000004100100000000000000000000000000000000000000000000000000000000000410020000000000000000000000000000000000000000000000000000000000041003000000000000000000000000000000000000000000000000000000000004100400000000000000000000000000000000000000000000000000000000000410050000000000000000000000000000000000000000000000000000000000041006000000000000000000000000000000000000000000000000000000000004100700000000000000000000000000000000000000000000000000000000000410080000000000000000000000000000000000000000000000000000000000041009000000000000000000000000000000000000000000000000000000000004100a000000000000000000000000000000000000000000000000000000000004100b000000000000000000000000000000000000000000000000000000000004100c000000000000000000000000000000000000000000000000000000000004100d000000000000000000000000000000000000000000000000000000000004100e000000000000000000000000000000000000000000000000000000000004100f0000000000000000000000000000000000000000000000000000000000041010000000000000000000000000000000000000000000000000000000000004101100000000000000000000000000000000000000000000000000000000000410120000000000000000000000000000000000000000000000000000000000041013000000000000000000000000000000000000000000000000000000000004101400000000000000000000000000000000000000000000000000000000000410150000000000000000000000000000000000000000000000000000000000041016000000000000000000000000000000000000000000000000000000000004101700000000000000000000000000000000000000000000000000000000000410180000000000000000000000000000000000000000000000000000000000041019000000000000000000000000000000000000000000000000000000000004101a000000000000000000000000000000000000000000000000000000000004101b000000000000000000000000000000000000000000000000000000000004101c000000000000000000000000000000000000000000000000000000000004101d000000000000000000000000000000000000000000000000000000000004101e000000000000000000000000000000000000000000000000000000000004101f0000000000000000000000000000000000000000000000000000000000041020000000000000000000000000000000000000000000000000000000000004102100000000000000000000000000000000000000000000000000000000000410220000000000000000000000000000000000000000000000000000000000041023000000000000000000000000000000000000000000000000000000000004102400000000000000000000000000000000000000000000000000000000000410250000000000000000000000000000000000000000000000000000000000041026000000000000000000000000000000000000000000000000000000000004102700000000000000000000000000000000000000000000000000000000000410280000000000000000000000000000000000000000000000000000000000041029000000000000000000000000000000000000000000000000000000000004102a000000000000000000000000000000000000000000000000000000000004102b000000000000000000000000000000000000000000000000000000000004102c000000000000000000000000000000000000000000000000000000000004102d000000000000000000000000000000000000000000000000000000000004102e000000000000000000000000000000000000000000000000000000000004102f0000000000000000000000000000000000000000000000000000000000041030000000000000000000000000000000000000000000000000000000000004103100000000000000000000000000000000000000000000000000000000000410320000000000000000000000000000000000000000000000000000000000041033000000000000000000000000000000000000000000000000000000000004103400000000000000000000000000000000000000000000000000000000000410350000000000000000000000000000000000000000000000000000000000041036000000000000000000000000000000000000000000000000000000000004103700000000000000000000000000000000000000000000000000000000000410380000000000000000000000000000000000000000000000000000000000041039000000000000000000000000000000000000000000000000000000000004103a000000000000000000000000000000000000000000000000000000000004103b000000000000000000000000000000000000000000000000000000000004103c000000000000000000000000000000000000000000000000000000000004103d000000000000000000000000000000000000000000000000000000000004103e000000000000000000000000000000000000000000000000000000000004103f4000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004110100000000000000000000000000000000000000000000000000000000000411020000000000000000000000000000000000000000000000000000000000041103000000000000000000000000000000000000000000000000000000000004110400000000000000000000000000000000000000000000000000000000000411050000000000000000000000000000000000000000000000000000000000041106000000000000000000000000000000000000000000000000000000000004110700000000000000000000000000000000000000000000000000000000000411080000000000000000000000000000000000000000000000000000000000041109000000000000000000000000000000000000000000000000000000000004110a000000000000000000000000000000000000000000000000000000000004110b000000000000000000000000000000000000000000000000000000000004110c000000000000000000000000000000000000000000000000000000000004110d000000000000000000000000000000000000000000000000000000000004110e000000000000000000000000000000000000000000000000000000000004110f0000000000000000000000000000000000000000000000000000000000041110000000000000000000000000000000000000000000000000000000000004111100000000000000000000000000000000000000000000000000000000000411120000000000000000000000000000000000000000000000000000000000041113000000000000000000000000000000000000000000000000000000000004111400000000000000000000000000000000000000000000000000000000000411150000000000000000000000000000000000000000000000000000000000041116000000000000000000000000000000000000000000000000000000000004111700000000000000000000000000000000000000000000000000000000000411180000000000000000000000000000000000000000000000000000000000041119000000000000000000000000000000000000000000000000000000000004111a000000000000000000000000000000000000000000000000000000000004111b000000000000000000000000000000000000000000000000000000000004111c000000000000000000000000000000000000000000000000000000000004111d000000000000000000000000000000000000000000000000000000000004111e000000000000000000000000000000000000000000000000000000000004111f0000000000000000000000000000000000000000000000000000000000041120000000000000000000000000000000000000000000000000000000000004112100000000000000000000000000000000000000000000000000000000000411220000000000000000000000000000000000000000000000000000000000041123000000000000000000000000000000000000000000000000000000000004112400000000000000000000000000000000000000000000000000000000000411250000000000000000000000000000000000000000000000000000000000041126000000000000000000000000000000000000000000000000000000000004112700000000000000000000000000000000000000000000000000000000000411280000000000000000000000000000000000000000000000000000000000041129000000000000000000000000000000000000000000000000000000000004112a000000000000000000000000000000000000000000000000000000000004112b000000000000000000000000000000000000000000000000000000000004112c000000000000000000000000000000000000000000000000000000000004112d000000000000000000000000000000000000000000000000000000000004112e000000000000000000000000000000000000000000000000000000000004112f0000000000000000000000000000000000000000000000000000000000041130000000000000000000000000000000000000000000000000000000000004113100000000000000000000000000000000000000000000000000000000000411320000000000000000000000000000000000000000000000000000000000041133000000000000000000000000000000000000000000000000000000000004113400000000000000000000000000000000000000000000000000000000000411350000000000000000000000000000000000000000000000000000000000041136000000000000000000000000000000000000000000000000000000000004113700000000000000000000000000000000000000000000000000000000000411380000000000000000000000000000000000000000000000000000000000041139000000000000000000000000000000000000000000000000000000000004113a000000000000000000000000000000000000000000000000000000000004113b000000000000000000000000000000000000000000000000000000000004113c000000000000000000000000000000000000000000000000000000000004113d000000000000000000000000000000000000000000000000000000000004113e08004b8b814288544866292d9d0e66869207628fb0ef8120c59ec1d969a085d5d50075c5d0fc08d5578600928d2fc6cd1e63a2b87266a45558135a2912c5a7d6e60019574cfd6834b8c08012b12c6b178d65c27335e1001c1337996f4f460c2cf1000624d1d08e5c487711876584ae580b46b81854bc8e45e42e822ef18df136ff00b78383bdbff11e85552243f1429b8d83334d734dc92e1062b8a04371de5f88005b33017fa3cd1861669d2fd5621ba61db7a72646a9b459897a55780eeeb64e00a1d3d6c8bc4848ef2e4d256253773447d1b39deedd2d70248a2160c765afc200e1d211a34da229f26780fc7baa5a6ca0a35b7e0fea52ea082e35cd064db33d40000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000402010000000000000000000000000000000000000000000000000000000000042001000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042002000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042003000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042004000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042005000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420060000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004200700000000000000000000000000000000000000000000000000000000000420110000000000000000000000000000000000000000000000000000000000042008000000000000000000000000000000000000000000000000000000000004201200000000000000000000000000000000000000000000000000000000000420090000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042016000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042017000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042011000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042012000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420160000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004201700000000000000000000000000000000000000000000000000000000000420210000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004202200000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042026000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042027000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042021000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042022000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420260000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004202700000000000000000000000000000000000000000000000000000000000420310000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004203200000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042036000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042037000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042031000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042032000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004203f00000000000000000000000000000000000000000000000000000000000420360000000000000000000000000000000000000000000000000000000000042040000000000000000000000000000000000000000000000000000000000004203700000000000000000000000000000000000000000000000000000000000420410000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004204200000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042043000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042044000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042045000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042046000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042047000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042048000000000000000000000000000000000000000000000000000000000004203f0000000000000000000000000000000000000000000000000000000000042049400000000000000000000000000000000000000000000000000000000000041300000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000012000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000001200000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000120000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000012000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000001200000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000120000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000012000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000001200000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000120000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a00000012000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b00000012000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c00000012000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d00000012000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e00000012000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f00000012000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000120000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000012000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000001200000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000012000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000001200000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000120000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000012000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000001200000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000120000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a00000012000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b00000012000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c00000012000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d00000012000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e00000012000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f00000012000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000120000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000012000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000001200000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000120000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000012000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000001200000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000120000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000012000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000001200000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000120000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a00000012000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b00000012000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c00000012000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d00000012000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e00000012000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f00000012000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000120000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000012000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000001200000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000120000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000012000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000001200000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000120000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000012000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000001200000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000120000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a00000012000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b00000012000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c00000012000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d00000012000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e00000012000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f00000012000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f0000000000000000000000000000000000000000000000000000000000041350000000120000000000002f3d1913acdcc540db9b8f8c1f8ed4faa02375be0a5b2d9f5d95fea42ab3058f0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000008100100000000000000000000000000000000000000000000000000000000000810020000000000000000000000000000000000000000000000000000000000081003000000000000000000000000000000000000000000000000000000000008100400000000000000000000000000000000000000000000000000000000000810050000000000000000000000000000000000000000000000000000000000081006000000000000000000000000000000000000000000000000000000000008100700000000000000000000000000000000000000000000000000000000000810080000000000000000000000000000000000000000000000000000000000081009000000000000000000000000000000000000000000000000000000000008100a000000000000000000000000000000000000000000000000000000000008100b000000000000000000000000000000000000000000000000000000000008100c000000000000000000000000000000000000000000000000000000000008100d000000000000000000000000000000000000000000000000000000000008100e000000000000000000000000000000000000000000000000000000000008100f0000000000000000000000000000000000000000000000000000000000081010000000000000000000000000000000000000000000000000000000000008101100000000000000000000000000000000000000000000000000000000000810120000000000000000000000000000000000000000000000000000000000081013000000000000000000000000000000000000000000000000000000000008101400000000000000000000000000000000000000000000000000000000000810150000000000000000000000000000000000000000000000000000000000081016000000000000000000000000000000000000000000000000000000000008101700000000000000000000000000000000000000000000000000000000000810180000000000000000000000000000000000000000000000000000000000081019000000000000000000000000000000000000000000000000000000000008101a000000000000000000000000000000000000000000000000000000000008101b000000000000000000000000000000000000000000000000000000000008101c000000000000000000000000000000000000000000000000000000000008101d000000000000000000000000000000000000000000000000000000000008101e000000000000000000000000000000000000000000000000000000000008101f0000000000000000000000000000000000000000000000000000000000081020000000000000000000000000000000000000000000000000000000000008102100000000000000000000000000000000000000000000000000000000000810220000000000000000000000000000000000000000000000000000000000081023000000000000000000000000000000000000000000000000000000000008102400000000000000000000000000000000000000000000000000000000000810250000000000000000000000000000000000000000000000000000000000081026000000000000000000000000000000000000000000000000000000000008102700000000000000000000000000000000000000000000000000000000000810280000000000000000000000000000000000000000000000000000000000081029000000000000000000000000000000000000000000000000000000000008102a000000000000000000000000000000000000000000000000000000000008102b000000000000000000000000000000000000000000000000000000000008102c000000000000000000000000000000000000000000000000000000000008102d000000000000000000000000000000000000000000000000000000000008102e000000000000000000000000000000000000000000000000000000000008102f0000000000000000000000000000000000000000000000000000000000081030000000000000000000000000000000000000000000000000000000000008103100000000000000000000000000000000000000000000000000000000000810320000000000000000000000000000000000000000000000000000000000081033000000000000000000000000000000000000000000000000000000000008103400000000000000000000000000000000000000000000000000000000000810350000000000000000000000000000000000000000000000000000000000081036000000000000000000000000000000000000000000000000000000000008103700000000000000000000000000000000000000000000000000000000000810380000000000000000000000000000000000000000000000000000000000081039000000000000000000000000000000000000000000000000000000000008103a000000000000000000000000000000000000000000000000000000000008103b000000000000000000000000000000000000000000000000000000000008103c000000000000000000000000000000000000000000000000000000000008103d000000000000000000000000000000000000000000000000000000000008103e000000000000000000000000000000000000000000000000000000000008103f4000000000000000000000000000000000000000000000000000000000000800010000000000000000000000000000000000000000000000000000000000081100000000000000000000000000000000000000000000000000000000000008110100000000000000000000000000000000000000000000000000000000000811020000000000000000000000000000000000000000000000000000000000081103000000000000000000000000000000000000000000000000000000000008110400000000000000000000000000000000000000000000000000000000000811050000000000000000000000000000000000000000000000000000000000081106000000000000000000000000000000000000000000000000000000000008110700000000000000000000000000000000000000000000000000000000000811080000000000000000000000000000000000000000000000000000000000081109000000000000000000000000000000000000000000000000000000000008110a000000000000000000000000000000000000000000000000000000000008110b000000000000000000000000000000000000000000000000000000000008110c000000000000000000000000000000000000000000000000000000000008110d000000000000000000000000000000000000000000000000000000000008110e000000000000000000000000000000000000000000000000000000000008110f0000000000000000000000000000000000000000000000000000000000081110000000000000000000000000000000000000000000000000000000000008111100000000000000000000000000000000000000000000000000000000000811120000000000000000000000000000000000000000000000000000000000081113000000000000000000000000000000000000000000000000000000000008111400000000000000000000000000000000000000000000000000000000000811150000000000000000000000000000000000000000000000000000000000081116000000000000000000000000000000000000000000000000000000000008111700000000000000000000000000000000000000000000000000000000000811180000000000000000000000000000000000000000000000000000000000081119000000000000000000000000000000000000000000000000000000000008111a000000000000000000000000000000000000000000000000000000000008111b000000000000000000000000000000000000000000000000000000000008111c000000000000000000000000000000000000000000000000000000000008111d000000000000000000000000000000000000000000000000000000000008111e000000000000000000000000000000000000000000000000000000000008111f0000000000000000000000000000000000000000000000000000000000081120000000000000000000000000000000000000000000000000000000000008112100000000000000000000000000000000000000000000000000000000000811220000000000000000000000000000000000000000000000000000000000081123000000000000000000000000000000000000000000000000000000000008112400000000000000000000000000000000000000000000000000000000000811250000000000000000000000000000000000000000000000000000000000081126000000000000000000000000000000000000000000000000000000000008112700000000000000000000000000000000000000000000000000000000000811280000000000000000000000000000000000000000000000000000000000081129000000000000000000000000000000000000000000000000000000000008112a000000000000000000000000000000000000000000000000000000000008112b000000000000000000000000000000000000000000000000000000000008112c000000000000000000000000000000000000000000000000000000000008112d000000000000000000000000000000000000000000000000000000000008112e000000000000000000000000000000000000000000000000000000000008112f0000000000000000000000000000000000000000000000000000000000081130000000000000000000000000000000000000000000000000000000000008113100000000000000000000000000000000000000000000000000000000000811320000000000000000000000000000000000000000000000000000000000081133000000000000000000000000000000000000000000000000000000000008113400000000000000000000000000000000000000000000000000000000000811350000000000000000000000000000000000000000000000000000000000081136000000000000000000000000000000000000000000000000000000000008113700000000000000000000000000000000000000000000000000000000000811380000000000000000000000000000000000000000000000000000000000081139000000000000000000000000000000000000000000000000000000000008113a000000000000000000000000000000000000000000000000000000000008113b000000000000000000000000000000000000000000000000000000000008113c000000000000000000000000000000000000000000000000000000000008113d000000000000000000000000000000000000000000000000000000000008113e0800265fc26cc330a0a6a8e801430f967c7ed1e58be49f854f0cad6732943f88e20071874f590a2dadb3658c9ab56b3fcf8c43098157070e4c5f724dfa3f22337d00ae67efa2446c41039723a7f780b2d317dc0fe70741ad4b180ed3e69206acb70022e6e6d8999655a395c3d51de207120646c5acfe3c55f06fd12e2bf579816300479bb81c7d06f66baed706c75fa44967ac97960303fbad4f4bdc77f475e68f00ac60795e5b5c80c95c88f6b236bd97aba1156483effa087e56719d8eee599700af23557f2f6de3d1c09b4aad782fffa5457af68d87e778d73de1b921eb41dc00c7c86fa31cdf6f4ce9036bdbee033e09194bf5739a66928d2e3d2ac270364940000000000000000000000000000000000000000000000000000000000008020000000000000000000000000000000000000000000000000000000000000802010000000000000000000000000000000000000000000000000000000000082001000000000000000000000000000000000000000000000000000000000008200b0000000000000000000000000000000000000000000000000000000000082002000000000000000000000000000000000000000000000000000000000008200c0000000000000000000000000000000000000000000000000000000000082003000000000000000000000000000000000000000000000000000000000008200d0000000000000000000000000000000000000000000000000000000000082004000000000000000000000000000000000000000000000000000000000008200e0000000000000000000000000000000000000000000000000000000000082005000000000000000000000000000000000000000000000000000000000008200f00000000000000000000000000000000000000000000000000000000000820060000000000000000000000000000000000000000000000000000000000082010000000000000000000000000000000000000000000000000000000000008200700000000000000000000000000000000000000000000000000000000000820110000000000000000000000000000000000000000000000000000000000082008000000000000000000000000000000000000000000000000000000000008201200000000000000000000000000000000000000000000000000000000000820090000000000000000000000000000000000000000000000000000000000082013000000000000000000000000000000000000000000000000000000000008200a0000000000000000000000000000000000000000000000000000000000082014000000000000000000000000000000000000000000000000000000000008200b0000000000000000000000000000000000000000000000000000000000082015000000000000000000000000000000000000000000000000000000000008200c0000000000000000000000000000000000000000000000000000000000082016000000000000000000000000000000000000000000000000000000000008200d0000000000000000000000000000000000000000000000000000000000082017000000000000000000000000000000000000000000000000000000000008200e0000000000000000000000000000000000000000000000000000000000082018000000000000000000000000000000000000000000000000000000000008200f00000000000000000000000000000000000000000000000000000000000820190000000000000000000000000000000000000000000000000000000000082010000000000000000000000000000000000000000000000000000000000008201a0000000000000000000000000000000000000000000000000000000000082011000000000000000000000000000000000000000000000000000000000008201b0000000000000000000000000000000000000000000000000000000000082012000000000000000000000000000000000000000000000000000000000008201c0000000000000000000000000000000000000000000000000000000000082013000000000000000000000000000000000000000000000000000000000008201d0000000000000000000000000000000000000000000000000000000000082014000000000000000000000000000000000000000000000000000000000008201e0000000000000000000000000000000000000000000000000000000000082015000000000000000000000000000000000000000000000000000000000008201f00000000000000000000000000000000000000000000000000000000000820160000000000000000000000000000000000000000000000000000000000082020000000000000000000000000000000000000000000000000000000000008201700000000000000000000000000000000000000000000000000000000000820210000000000000000000000000000000000000000000000000000000000082018000000000000000000000000000000000000000000000000000000000008202200000000000000000000000000000000000000000000000000000000000820190000000000000000000000000000000000000000000000000000000000082023000000000000000000000000000000000000000000000000000000000008201a0000000000000000000000000000000000000000000000000000000000082024000000000000000000000000000000000000000000000000000000000008201b0000000000000000000000000000000000000000000000000000000000082025000000000000000000000000000000000000000000000000000000000008201c0000000000000000000000000000000000000000000000000000000000082026000000000000000000000000000000000000000000000000000000000008201d0000000000000000000000000000000000000000000000000000000000082027000000000000000000000000000000000000000000000000000000000008201e0000000000000000000000000000000000000000000000000000000000082028000000000000000000000000000000000000000000000000000000000008201f00000000000000000000000000000000000000000000000000000000000820290000000000000000000000000000000000000000000000000000000000082020000000000000000000000000000000000000000000000000000000000008202a0000000000000000000000000000000000000000000000000000000000082021000000000000000000000000000000000000000000000000000000000008202b0000000000000000000000000000000000000000000000000000000000082022000000000000000000000000000000000000000000000000000000000008202c0000000000000000000000000000000000000000000000000000000000082023000000000000000000000000000000000000000000000000000000000008202d0000000000000000000000000000000000000000000000000000000000082024000000000000000000000000000000000000000000000000000000000008202e0000000000000000000000000000000000000000000000000000000000082025000000000000000000000000000000000000000000000000000000000008202f00000000000000000000000000000000000000000000000000000000000820260000000000000000000000000000000000000000000000000000000000082030000000000000000000000000000000000000000000000000000000000008202700000000000000000000000000000000000000000000000000000000000820310000000000000000000000000000000000000000000000000000000000082028000000000000000000000000000000000000000000000000000000000008203200000000000000000000000000000000000000000000000000000000000820290000000000000000000000000000000000000000000000000000000000082033000000000000000000000000000000000000000000000000000000000008202a0000000000000000000000000000000000000000000000000000000000082034000000000000000000000000000000000000000000000000000000000008202b0000000000000000000000000000000000000000000000000000000000082035000000000000000000000000000000000000000000000000000000000008202c0000000000000000000000000000000000000000000000000000000000082036000000000000000000000000000000000000000000000000000000000008202d0000000000000000000000000000000000000000000000000000000000082037000000000000000000000000000000000000000000000000000000000008202e0000000000000000000000000000000000000000000000000000000000082038000000000000000000000000000000000000000000000000000000000008202f00000000000000000000000000000000000000000000000000000000000820390000000000000000000000000000000000000000000000000000000000082030000000000000000000000000000000000000000000000000000000000008203a0000000000000000000000000000000000000000000000000000000000082031000000000000000000000000000000000000000000000000000000000008203b0000000000000000000000000000000000000000000000000000000000082032000000000000000000000000000000000000000000000000000000000008203c0000000000000000000000000000000000000000000000000000000000082033000000000000000000000000000000000000000000000000000000000008203d0000000000000000000000000000000000000000000000000000000000082034000000000000000000000000000000000000000000000000000000000008203e0000000000000000000000000000000000000000000000000000000000082035000000000000000000000000000000000000000000000000000000000008203f00000000000000000000000000000000000000000000000000000000000820360000000000000000000000000000000000000000000000000000000000082040000000000000000000000000000000000000000000000000000000000008203700000000000000000000000000000000000000000000000000000000000820410000000000000000000000000000000000000000000000000000000000082038000000000000000000000000000000000000000000000000000000000008204200000000000000000000000000000000000000000000000000000000000820390000000000000000000000000000000000000000000000000000000000082043000000000000000000000000000000000000000000000000000000000008203a0000000000000000000000000000000000000000000000000000000000082044000000000000000000000000000000000000000000000000000000000008203b0000000000000000000000000000000000000000000000000000000000082045000000000000000000000000000000000000000000000000000000000008203c0000000000000000000000000000000000000000000000000000000000082046000000000000000000000000000000000000000000000000000000000008203d0000000000000000000000000000000000000000000000000000000000082047000000000000000000000000000000000000000000000000000000000008203e0000000000000000000000000000000000000000000000000000000000082048000000000000000000000000000000000000000000000000000000000008203f0000000000000000000000000000000000000000000000000000000000082049400000000000000000000000000000000000000000000000000000000000081300000000000000000000000000000000000000000000000000000000000008130100000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000012000000000000000000000000000000000000000000000000000000000008130100000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000001200000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000120000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000012000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000001200000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000120000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000012000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000001200000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000120000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a00000012000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b00000012000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c00000012000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d00000012000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e00000012000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f00000012000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000120000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000012000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000001200000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000012000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000001200000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000120000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000012000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000001200000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000120000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a00000012000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b00000012000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c00000012000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d00000012000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e00000012000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f00000012000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000120000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000012000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000001200000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000120000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000012000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000001200000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000120000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000012000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000001200000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000120000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a00000012000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b00000012000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c00000012000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d00000012000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e00000012000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f00000012000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000120000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000012000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000001200000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000120000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000012000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000001200000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000120000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000012000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000001200000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000120000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a00000012000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b00000012000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c00000012000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d00000012000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e00000012000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e000000000000000000000000000000000000000000000000000000000008134f00000012000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e000000000000000000000000000000000000000000000000000000000008134f0000000000000000000000000000000000000000000000000000000000081350000000120000000000001deb14754adfb5a6c05a94b094aa5e78e6900180624ed246efb3dbffcdc470d900000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000c100100000000000000000000000000000000000000000000000000000000000c100200000000000000000000000000000000000000000000000000000000000c100300000000000000000000000000000000000000000000000000000000000c100400000000000000000000000000000000000000000000000000000000000c100500000000000000000000000000000000000000000000000000000000000c100600000000000000000000000000000000000000000000000000000000000c100700000000000000000000000000000000000000000000000000000000000c100800000000000000000000000000000000000000000000000000000000000c100900000000000000000000000000000000000000000000000000000000000c100a00000000000000000000000000000000000000000000000000000000000c100b00000000000000000000000000000000000000000000000000000000000c100c00000000000000000000000000000000000000000000000000000000000c100d00000000000000000000000000000000000000000000000000000000000c100e00000000000000000000000000000000000000000000000000000000000c100f00000000000000000000000000000000000000000000000000000000000c101000000000000000000000000000000000000000000000000000000000000c101100000000000000000000000000000000000000000000000000000000000c101200000000000000000000000000000000000000000000000000000000000c101300000000000000000000000000000000000000000000000000000000000c101400000000000000000000000000000000000000000000000000000000000c101500000000000000000000000000000000000000000000000000000000000c101600000000000000000000000000000000000000000000000000000000000c101700000000000000000000000000000000000000000000000000000000000c101800000000000000000000000000000000000000000000000000000000000c101900000000000000000000000000000000000000000000000000000000000c101a00000000000000000000000000000000000000000000000000000000000c101b00000000000000000000000000000000000000000000000000000000000c101c00000000000000000000000000000000000000000000000000000000000c101d00000000000000000000000000000000000000000000000000000000000c101e00000000000000000000000000000000000000000000000000000000000c101f00000000000000000000000000000000000000000000000000000000000c102000000000000000000000000000000000000000000000000000000000000c102100000000000000000000000000000000000000000000000000000000000c102200000000000000000000000000000000000000000000000000000000000c102300000000000000000000000000000000000000000000000000000000000c102400000000000000000000000000000000000000000000000000000000000c102500000000000000000000000000000000000000000000000000000000000c102600000000000000000000000000000000000000000000000000000000000c102700000000000000000000000000000000000000000000000000000000000c102800000000000000000000000000000000000000000000000000000000000c102900000000000000000000000000000000000000000000000000000000000c102a00000000000000000000000000000000000000000000000000000000000c102b00000000000000000000000000000000000000000000000000000000000c102c00000000000000000000000000000000000000000000000000000000000c102d00000000000000000000000000000000000000000000000000000000000c102e00000000000000000000000000000000000000000000000000000000000c102f00000000000000000000000000000000000000000000000000000000000c103000000000000000000000000000000000000000000000000000000000000c103100000000000000000000000000000000000000000000000000000000000c103200000000000000000000000000000000000000000000000000000000000c103300000000000000000000000000000000000000000000000000000000000c103400000000000000000000000000000000000000000000000000000000000c103500000000000000000000000000000000000000000000000000000000000c103600000000000000000000000000000000000000000000000000000000000c103700000000000000000000000000000000000000000000000000000000000c103800000000000000000000000000000000000000000000000000000000000c103900000000000000000000000000000000000000000000000000000000000c103a00000000000000000000000000000000000000000000000000000000000c103b00000000000000000000000000000000000000000000000000000000000c103c00000000000000000000000000000000000000000000000000000000000c103d00000000000000000000000000000000000000000000000000000000000c103e00000000000000000000000000000000000000000000000000000000000c103f4000000000000000000000000000000000000000000000000000000000000c000100000000000000000000000000000000000000000000000000000000000c110000000000000000000000000000000000000000000000000000000000000c110100000000000000000000000000000000000000000000000000000000000c110200000000000000000000000000000000000000000000000000000000000c110300000000000000000000000000000000000000000000000000000000000c110400000000000000000000000000000000000000000000000000000000000c110500000000000000000000000000000000000000000000000000000000000c110600000000000000000000000000000000000000000000000000000000000c110700000000000000000000000000000000000000000000000000000000000c110800000000000000000000000000000000000000000000000000000000000c110900000000000000000000000000000000000000000000000000000000000c110a00000000000000000000000000000000000000000000000000000000000c110b00000000000000000000000000000000000000000000000000000000000c110c00000000000000000000000000000000000000000000000000000000000c110d00000000000000000000000000000000000000000000000000000000000c110e00000000000000000000000000000000000000000000000000000000000c110f00000000000000000000000000000000000000000000000000000000000c111000000000000000000000000000000000000000000000000000000000000c111100000000000000000000000000000000000000000000000000000000000c111200000000000000000000000000000000000000000000000000000000000c111300000000000000000000000000000000000000000000000000000000000c111400000000000000000000000000000000000000000000000000000000000c111500000000000000000000000000000000000000000000000000000000000c111600000000000000000000000000000000000000000000000000000000000c111700000000000000000000000000000000000000000000000000000000000c111800000000000000000000000000000000000000000000000000000000000c111900000000000000000000000000000000000000000000000000000000000c111a00000000000000000000000000000000000000000000000000000000000c111b00000000000000000000000000000000000000000000000000000000000c111c00000000000000000000000000000000000000000000000000000000000c111d00000000000000000000000000000000000000000000000000000000000c111e00000000000000000000000000000000000000000000000000000000000c111f00000000000000000000000000000000000000000000000000000000000c112000000000000000000000000000000000000000000000000000000000000c112100000000000000000000000000000000000000000000000000000000000c112200000000000000000000000000000000000000000000000000000000000c112300000000000000000000000000000000000000000000000000000000000c112400000000000000000000000000000000000000000000000000000000000c112500000000000000000000000000000000000000000000000000000000000c112600000000000000000000000000000000000000000000000000000000000c112700000000000000000000000000000000000000000000000000000000000c112800000000000000000000000000000000000000000000000000000000000c112900000000000000000000000000000000000000000000000000000000000c112a00000000000000000000000000000000000000000000000000000000000c112b00000000000000000000000000000000000000000000000000000000000c112c00000000000000000000000000000000000000000000000000000000000c112d00000000000000000000000000000000000000000000000000000000000c112e00000000000000000000000000000000000000000000000000000000000c112f00000000000000000000000000000000000000000000000000000000000c113000000000000000000000000000000000000000000000000000000000000c113100000000000000000000000000000000000000000000000000000000000c113200000000000000000000000000000000000000000000000000000000000c113300000000000000000000000000000000000000000000000000000000000c113400000000000000000000000000000000000000000000000000000000000c113500000000000000000000000000000000000000000000000000000000000c113600000000000000000000000000000000000000000000000000000000000c113700000000000000000000000000000000000000000000000000000000000c113800000000000000000000000000000000000000000000000000000000000c113900000000000000000000000000000000000000000000000000000000000c113a00000000000000000000000000000000000000000000000000000000000c113b00000000000000000000000000000000000000000000000000000000000c113c00000000000000000000000000000000000000000000000000000000000c113d00000000000000000000000000000000000000000000000000000000000c113e08007740254fc3203c599b97e5049f81ecb8acf39bddfbeae8ce74298e4ea87efe00bde1f60e5339304ca4b53d8b845c6e7d293f6841c1b62c07c2eb231593c4d100204739a2456e89e1353337ea45977dd7dcca61921869c7c6871ade16c5b680006d06063ef1b29afa07e57f756435cf5d48e822d678b7a913b5838aa3443cbf0083ecac1aa2e9e8402a9810b7590d4b76945b41df2cb7c999ba354ea087c06c003d7e1311d740b160e04897e91bb1a4e85d22b5ff438622f18eb090ef494a75007788b07cf04ef30ff0196f111a0486011eaef85bf336a76a3fb6c7b3388117009fffd2100e9e3d9d7002c2f3bd4dd44dadcf24d8b0c3d74c62206460a8142e4000000000000000000000000000000000000000000000000000000000000c020000000000000000000000000000000000000000000000000000000000000c020100000000000000000000000000000000000000000000000000000000000c200100000000000000000000000000000000000000000000000000000000000c200b00000000000000000000000000000000000000000000000000000000000c200200000000000000000000000000000000000000000000000000000000000c200c00000000000000000000000000000000000000000000000000000000000c200300000000000000000000000000000000000000000000000000000000000c200d00000000000000000000000000000000000000000000000000000000000c200400000000000000000000000000000000000000000000000000000000000c200e00000000000000000000000000000000000000000000000000000000000c200500000000000000000000000000000000000000000000000000000000000c200f00000000000000000000000000000000000000000000000000000000000c200600000000000000000000000000000000000000000000000000000000000c201000000000000000000000000000000000000000000000000000000000000c200700000000000000000000000000000000000000000000000000000000000c201100000000000000000000000000000000000000000000000000000000000c200800000000000000000000000000000000000000000000000000000000000c201200000000000000000000000000000000000000000000000000000000000c200900000000000000000000000000000000000000000000000000000000000c201300000000000000000000000000000000000000000000000000000000000c200a00000000000000000000000000000000000000000000000000000000000c201400000000000000000000000000000000000000000000000000000000000c200b00000000000000000000000000000000000000000000000000000000000c201500000000000000000000000000000000000000000000000000000000000c200c00000000000000000000000000000000000000000000000000000000000c201600000000000000000000000000000000000000000000000000000000000c200d00000000000000000000000000000000000000000000000000000000000c201700000000000000000000000000000000000000000000000000000000000c200e00000000000000000000000000000000000000000000000000000000000c201800000000000000000000000000000000000000000000000000000000000c200f00000000000000000000000000000000000000000000000000000000000c201900000000000000000000000000000000000000000000000000000000000c201000000000000000000000000000000000000000000000000000000000000c201a00000000000000000000000000000000000000000000000000000000000c201100000000000000000000000000000000000000000000000000000000000c201b00000000000000000000000000000000000000000000000000000000000c201200000000000000000000000000000000000000000000000000000000000c201c00000000000000000000000000000000000000000000000000000000000c201300000000000000000000000000000000000000000000000000000000000c201d00000000000000000000000000000000000000000000000000000000000c201400000000000000000000000000000000000000000000000000000000000c201e00000000000000000000000000000000000000000000000000000000000c201500000000000000000000000000000000000000000000000000000000000c201f00000000000000000000000000000000000000000000000000000000000c201600000000000000000000000000000000000000000000000000000000000c202000000000000000000000000000000000000000000000000000000000000c201700000000000000000000000000000000000000000000000000000000000c202100000000000000000000000000000000000000000000000000000000000c201800000000000000000000000000000000000000000000000000000000000c202200000000000000000000000000000000000000000000000000000000000c201900000000000000000000000000000000000000000000000000000000000c202300000000000000000000000000000000000000000000000000000000000c201a00000000000000000000000000000000000000000000000000000000000c202400000000000000000000000000000000000000000000000000000000000c201b00000000000000000000000000000000000000000000000000000000000c202500000000000000000000000000000000000000000000000000000000000c201c00000000000000000000000000000000000000000000000000000000000c202600000000000000000000000000000000000000000000000000000000000c201d00000000000000000000000000000000000000000000000000000000000c202700000000000000000000000000000000000000000000000000000000000c201e00000000000000000000000000000000000000000000000000000000000c202800000000000000000000000000000000000000000000000000000000000c201f00000000000000000000000000000000000000000000000000000000000c202900000000000000000000000000000000000000000000000000000000000c202000000000000000000000000000000000000000000000000000000000000c202a00000000000000000000000000000000000000000000000000000000000c202100000000000000000000000000000000000000000000000000000000000c202b00000000000000000000000000000000000000000000000000000000000c202200000000000000000000000000000000000000000000000000000000000c202c00000000000000000000000000000000000000000000000000000000000c202300000000000000000000000000000000000000000000000000000000000c202d00000000000000000000000000000000000000000000000000000000000c202400000000000000000000000000000000000000000000000000000000000c202e00000000000000000000000000000000000000000000000000000000000c202500000000000000000000000000000000000000000000000000000000000c202f00000000000000000000000000000000000000000000000000000000000c202600000000000000000000000000000000000000000000000000000000000c203000000000000000000000000000000000000000000000000000000000000c202700000000000000000000000000000000000000000000000000000000000c203100000000000000000000000000000000000000000000000000000000000c202800000000000000000000000000000000000000000000000000000000000c203200000000000000000000000000000000000000000000000000000000000c202900000000000000000000000000000000000000000000000000000000000c203300000000000000000000000000000000000000000000000000000000000c202a00000000000000000000000000000000000000000000000000000000000c203400000000000000000000000000000000000000000000000000000000000c202b00000000000000000000000000000000000000000000000000000000000c203500000000000000000000000000000000000000000000000000000000000c202c00000000000000000000000000000000000000000000000000000000000c203600000000000000000000000000000000000000000000000000000000000c202d00000000000000000000000000000000000000000000000000000000000c203700000000000000000000000000000000000000000000000000000000000c202e00000000000000000000000000000000000000000000000000000000000c203800000000000000000000000000000000000000000000000000000000000c202f00000000000000000000000000000000000000000000000000000000000c203900000000000000000000000000000000000000000000000000000000000c203000000000000000000000000000000000000000000000000000000000000c203a00000000000000000000000000000000000000000000000000000000000c203100000000000000000000000000000000000000000000000000000000000c203b00000000000000000000000000000000000000000000000000000000000c203200000000000000000000000000000000000000000000000000000000000c203c00000000000000000000000000000000000000000000000000000000000c203300000000000000000000000000000000000000000000000000000000000c203d00000000000000000000000000000000000000000000000000000000000c203400000000000000000000000000000000000000000000000000000000000c203e00000000000000000000000000000000000000000000000000000000000c203500000000000000000000000000000000000000000000000000000000000c203f00000000000000000000000000000000000000000000000000000000000c203600000000000000000000000000000000000000000000000000000000000c204000000000000000000000000000000000000000000000000000000000000c203700000000000000000000000000000000000000000000000000000000000c204100000000000000000000000000000000000000000000000000000000000c203800000000000000000000000000000000000000000000000000000000000c204200000000000000000000000000000000000000000000000000000000000c203900000000000000000000000000000000000000000000000000000000000c204300000000000000000000000000000000000000000000000000000000000c203a00000000000000000000000000000000000000000000000000000000000c204400000000000000000000000000000000000000000000000000000000000c203b00000000000000000000000000000000000000000000000000000000000c204500000000000000000000000000000000000000000000000000000000000c203c00000000000000000000000000000000000000000000000000000000000c204600000000000000000000000000000000000000000000000000000000000c203d00000000000000000000000000000000000000000000000000000000000c204700000000000000000000000000000000000000000000000000000000000c203e00000000000000000000000000000000000000000000000000000000000c204800000000000000000000000000000000000000000000000000000000000c203f00000000000000000000000000000000000000000000000000000000000c20494000000000000000000000000000000000000000000000000000000000000c130000000000000000000000000000000000000000000000000000000000000c130100000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c13110000001200000000000000000000000000000000000000000000000000000000000c130100000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c13120000001200000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c13130000001200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c13140000001200000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c13150000001200000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c13160000001200000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c13170000001200000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c13180000001200000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c13190000001200000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a0000001200000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b0000001200000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c0000001200000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d0000001200000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e0000001200000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f0000001200000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c13200000001200000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c13210000001200000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c13220000001200000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c13230000001200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c13240000001200000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c13250000001200000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c13260000001200000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c13270000001200000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c13280000001200000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c13290000001200000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a0000001200000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b0000001200000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c0000001200000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d0000001200000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e0000001200000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f0000001200000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c13300000001200000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c13310000001200000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c13320000001200000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c13330000001200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c13340000001200000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c13350000001200000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c13360000001200000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c13370000001200000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c13380000001200000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c13390000001200000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a0000001200000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b0000001200000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c0000001200000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d0000001200000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e0000001200000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f0000001200000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c13400000001200000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c13410000001200000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c13420000001200000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c13430000001200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c13440000001200000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c13450000001200000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c13460000001200000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c13470000001200000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c13480000001200000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c13490000001200000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a0000001200000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b0000001200000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c0000001200000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d0000001200000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e0000001200000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e00000000000000000000000000000000000000000000000000000000000c134f0000001200000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e00000000000000000000000000000000000000000000000000000000000c134f00000000000000000000000000000000000000000000000000000000000c135000000012000000000000100e1dc88f46181773c5028c31028d600d02b61a50bf949a1b43ba62a043e5f70000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000010100100000000000000000000000000000000000000000000000000000000001010020000000000000000000000000000000000000000000000000000000000101003000000000000000000000000000000000000000000000000000000000010100400000000000000000000000000000000000000000000000000000000001010050000000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000010100700000000000000000000000000000000000000000000000000000000001010080000000000000000000000000000000000000000000000000000000000101009000000000000000000000000000000000000000000000000000000000010100a000000000000000000000000000000000000000000000000000000000010100b000000000000000000000000000000000000000000000000000000000010100c000000000000000000000000000000000000000000000000000000000010100d000000000000000000000000000000000000000000000000000000000010100e000000000000000000000000000000000000000000000000000000000010100f0000000000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000010101100000000000000000000000000000000000000000000000000000000001010120000000000000000000000000000000000000000000000000000000000101013000000000000000000000000000000000000000000000000000000000010101400000000000000000000000000000000000000000000000000000000001010150000000000000000000000000000000000000000000000000000000000101016000000000000000000000000000000000000000000000000000000000010101700000000000000000000000000000000000000000000000000000000001010180000000000000000000000000000000000000000000000000000000000101019000000000000000000000000000000000000000000000000000000000010101a000000000000000000000000000000000000000000000000000000000010101b000000000000000000000000000000000000000000000000000000000010101c000000000000000000000000000000000000000000000000000000000010101d000000000000000000000000000000000000000000000000000000000010101e000000000000000000000000000000000000000000000000000000000010101f0000000000000000000000000000000000000000000000000000000000101020000000000000000000000000000000000000000000000000000000000010102100000000000000000000000000000000000000000000000000000000001010220000000000000000000000000000000000000000000000000000000000101023000000000000000000000000000000000000000000000000000000000010102400000000000000000000000000000000000000000000000000000000001010250000000000000000000000000000000000000000000000000000000000101026000000000000000000000000000000000000000000000000000000000010102700000000000000000000000000000000000000000000000000000000001010280000000000000000000000000000000000000000000000000000000000101029000000000000000000000000000000000000000000000000000000000010102a000000000000000000000000000000000000000000000000000000000010102b000000000000000000000000000000000000000000000000000000000010102c000000000000000000000000000000000000000000000000000000000010102d000000000000000000000000000000000000000000000000000000000010102e000000000000000000000000000000000000000000000000000000000010102f0000000000000000000000000000000000000000000000000000000000101030000000000000000000000000000000000000000000000000000000000010103100000000000000000000000000000000000000000000000000000000001010320000000000000000000000000000000000000000000000000000000000101033000000000000000000000000000000000000000000000000000000000010103400000000000000000000000000000000000000000000000000000000001010350000000000000000000000000000000000000000000000000000000000101036000000000000000000000000000000000000000000000000000000000010103700000000000000000000000000000000000000000000000000000000001010380000000000000000000000000000000000000000000000000000000000101039000000000000000000000000000000000000000000000000000000000010103a000000000000000000000000000000000000000000000000000000000010103b000000000000000000000000000000000000000000000000000000000010103c000000000000000000000000000000000000000000000000000000000010103d000000000000000000000000000000000000000000000000000000000010103e000000000000000000000000000000000000000000000000000000000010103f4000000000000000000000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000000000101100000000000000000000000000000000000000000000000000000000000010110100000000000000000000000000000000000000000000000000000000001011020000000000000000000000000000000000000000000000000000000000101103000000000000000000000000000000000000000000000000000000000010110400000000000000000000000000000000000000000000000000000000001011050000000000000000000000000000000000000000000000000000000000101106000000000000000000000000000000000000000000000000000000000010110700000000000000000000000000000000000000000000000000000000001011080000000000000000000000000000000000000000000000000000000000101109000000000000000000000000000000000000000000000000000000000010110a000000000000000000000000000000000000000000000000000000000010110b000000000000000000000000000000000000000000000000000000000010110c000000000000000000000000000000000000000000000000000000000010110d000000000000000000000000000000000000000000000000000000000010110e000000000000000000000000000000000000000000000000000000000010110f0000000000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000010111100000000000000000000000000000000000000000000000000000000001011120000000000000000000000000000000000000000000000000000000000101113000000000000000000000000000000000000000000000000000000000010111400000000000000000000000000000000000000000000000000000000001011150000000000000000000000000000000000000000000000000000000000101116000000000000000000000000000000000000000000000000000000000010111700000000000000000000000000000000000000000000000000000000001011180000000000000000000000000000000000000000000000000000000000101119000000000000000000000000000000000000000000000000000000000010111a000000000000000000000000000000000000000000000000000000000010111b000000000000000000000000000000000000000000000000000000000010111c000000000000000000000000000000000000000000000000000000000010111d000000000000000000000000000000000000000000000000000000000010111e000000000000000000000000000000000000000000000000000000000010111f0000000000000000000000000000000000000000000000000000000000101120000000000000000000000000000000000000000000000000000000000010112100000000000000000000000000000000000000000000000000000000001011220000000000000000000000000000000000000000000000000000000000101123000000000000000000000000000000000000000000000000000000000010112400000000000000000000000000000000000000000000000000000000001011250000000000000000000000000000000000000000000000000000000000101126000000000000000000000000000000000000000000000000000000000010112700000000000000000000000000000000000000000000000000000000001011280000000000000000000000000000000000000000000000000000000000101129000000000000000000000000000000000000000000000000000000000010112a000000000000000000000000000000000000000000000000000000000010112b000000000000000000000000000000000000000000000000000000000010112c000000000000000000000000000000000000000000000000000000000010112d000000000000000000000000000000000000000000000000000000000010112e000000000000000000000000000000000000000000000000000000000010112f0000000000000000000000000000000000000000000000000000000000101130000000000000000000000000000000000000000000000000000000000010113100000000000000000000000000000000000000000000000000000000001011320000000000000000000000000000000000000000000000000000000000101133000000000000000000000000000000000000000000000000000000000010113400000000000000000000000000000000000000000000000000000000001011350000000000000000000000000000000000000000000000000000000000101136000000000000000000000000000000000000000000000000000000000010113700000000000000000000000000000000000000000000000000000000001011380000000000000000000000000000000000000000000000000000000000101139000000000000000000000000000000000000000000000000000000000010113a000000000000000000000000000000000000000000000000000000000010113b000000000000000000000000000000000000000000000000000000000010113c000000000000000000000000000000000000000000000000000000000010113d000000000000000000000000000000000000000000000000000000000010113e08001790a679d3716b68fe4923616e234005918acd822bcc4ee8391ee526366e6000e29a714f3a1481f66d186077e4471803e542f4a8c165a5dc51359b0b5c04220050dbc735880ca3e38c57fd0510fb34541b132ae9eb6d7b88ae69fc16df197500cc7847321bda78d6d60dc09b0e3d75b350174e8ad07eb2a51c0a9afeb3c51700cd0fa6b6fc4c5859760aba07f5f5e0c714b57e55b13692fbbfe48f9e6bee5d00d4e93fc3e1a3d729afc451308365e07a5ec3fe8a220a4bcf93d09801703d3c00f7facd28c2650b9391380a08a9f583db4deed48993279a2253980d7a7c84d300e6143b86a0332ebe75bf78307054245c7b8ce8dd7130d477bcb691e1e51d8240000000000000000000000000000000000000000000000000000000000010020000000000000000000000000000000000000000000000000000000000001002010000000000000000000000000000000000000000000000000000000000102001000000000000000000000000000000000000000000000000000000000010200b0000000000000000000000000000000000000000000000000000000000102002000000000000000000000000000000000000000000000000000000000010200c0000000000000000000000000000000000000000000000000000000000102003000000000000000000000000000000000000000000000000000000000010200d0000000000000000000000000000000000000000000000000000000000102004000000000000000000000000000000000000000000000000000000000010200e0000000000000000000000000000000000000000000000000000000000102005000000000000000000000000000000000000000000000000000000000010200f00000000000000000000000000000000000000000000000000000000001020060000000000000000000000000000000000000000000000000000000000102010000000000000000000000000000000000000000000000000000000000010200700000000000000000000000000000000000000000000000000000000001020110000000000000000000000000000000000000000000000000000000000102008000000000000000000000000000000000000000000000000000000000010201200000000000000000000000000000000000000000000000000000000001020090000000000000000000000000000000000000000000000000000000000102013000000000000000000000000000000000000000000000000000000000010200a0000000000000000000000000000000000000000000000000000000000102014000000000000000000000000000000000000000000000000000000000010200b0000000000000000000000000000000000000000000000000000000000102015000000000000000000000000000000000000000000000000000000000010200c0000000000000000000000000000000000000000000000000000000000102016000000000000000000000000000000000000000000000000000000000010200d0000000000000000000000000000000000000000000000000000000000102017000000000000000000000000000000000000000000000000000000000010200e0000000000000000000000000000000000000000000000000000000000102018000000000000000000000000000000000000000000000000000000000010200f00000000000000000000000000000000000000000000000000000000001020190000000000000000000000000000000000000000000000000000000000102010000000000000000000000000000000000000000000000000000000000010201a0000000000000000000000000000000000000000000000000000000000102011000000000000000000000000000000000000000000000000000000000010201b0000000000000000000000000000000000000000000000000000000000102012000000000000000000000000000000000000000000000000000000000010201c0000000000000000000000000000000000000000000000000000000000102013000000000000000000000000000000000000000000000000000000000010201d0000000000000000000000000000000000000000000000000000000000102014000000000000000000000000000000000000000000000000000000000010201e0000000000000000000000000000000000000000000000000000000000102015000000000000000000000000000000000000000000000000000000000010201f00000000000000000000000000000000000000000000000000000000001020160000000000000000000000000000000000000000000000000000000000102020000000000000000000000000000000000000000000000000000000000010201700000000000000000000000000000000000000000000000000000000001020210000000000000000000000000000000000000000000000000000000000102018000000000000000000000000000000000000000000000000000000000010202200000000000000000000000000000000000000000000000000000000001020190000000000000000000000000000000000000000000000000000000000102023000000000000000000000000000000000000000000000000000000000010201a0000000000000000000000000000000000000000000000000000000000102024000000000000000000000000000000000000000000000000000000000010201b0000000000000000000000000000000000000000000000000000000000102025000000000000000000000000000000000000000000000000000000000010201c0000000000000000000000000000000000000000000000000000000000102026000000000000000000000000000000000000000000000000000000000010201d0000000000000000000000000000000000000000000000000000000000102027000000000000000000000000000000000000000000000000000000000010201e0000000000000000000000000000000000000000000000000000000000102028000000000000000000000000000000000000000000000000000000000010201f00000000000000000000000000000000000000000000000000000000001020290000000000000000000000000000000000000000000000000000000000102020000000000000000000000000000000000000000000000000000000000010202a0000000000000000000000000000000000000000000000000000000000102021000000000000000000000000000000000000000000000000000000000010202b0000000000000000000000000000000000000000000000000000000000102022000000000000000000000000000000000000000000000000000000000010202c0000000000000000000000000000000000000000000000000000000000102023000000000000000000000000000000000000000000000000000000000010202d0000000000000000000000000000000000000000000000000000000000102024000000000000000000000000000000000000000000000000000000000010202e0000000000000000000000000000000000000000000000000000000000102025000000000000000000000000000000000000000000000000000000000010202f00000000000000000000000000000000000000000000000000000000001020260000000000000000000000000000000000000000000000000000000000102030000000000000000000000000000000000000000000000000000000000010202700000000000000000000000000000000000000000000000000000000001020310000000000000000000000000000000000000000000000000000000000102028000000000000000000000000000000000000000000000000000000000010203200000000000000000000000000000000000000000000000000000000001020290000000000000000000000000000000000000000000000000000000000102033000000000000000000000000000000000000000000000000000000000010202a0000000000000000000000000000000000000000000000000000000000102034000000000000000000000000000000000000000000000000000000000010202b0000000000000000000000000000000000000000000000000000000000102035000000000000000000000000000000000000000000000000000000000010202c0000000000000000000000000000000000000000000000000000000000102036000000000000000000000000000000000000000000000000000000000010202d0000000000000000000000000000000000000000000000000000000000102037000000000000000000000000000000000000000000000000000000000010202e0000000000000000000000000000000000000000000000000000000000102038000000000000000000000000000000000000000000000000000000000010202f00000000000000000000000000000000000000000000000000000000001020390000000000000000000000000000000000000000000000000000000000102030000000000000000000000000000000000000000000000000000000000010203a0000000000000000000000000000000000000000000000000000000000102031000000000000000000000000000000000000000000000000000000000010203b0000000000000000000000000000000000000000000000000000000000102032000000000000000000000000000000000000000000000000000000000010203c0000000000000000000000000000000000000000000000000000000000102033000000000000000000000000000000000000000000000000000000000010203d0000000000000000000000000000000000000000000000000000000000102034000000000000000000000000000000000000000000000000000000000010203e0000000000000000000000000000000000000000000000000000000000102035000000000000000000000000000000000000000000000000000000000010203f00000000000000000000000000000000000000000000000000000000001020360000000000000000000000000000000000000000000000000000000000102040000000000000000000000000000000000000000000000000000000000010203700000000000000000000000000000000000000000000000000000000001020410000000000000000000000000000000000000000000000000000000000102038000000000000000000000000000000000000000000000000000000000010204200000000000000000000000000000000000000000000000000000000001020390000000000000000000000000000000000000000000000000000000000102043000000000000000000000000000000000000000000000000000000000010203a0000000000000000000000000000000000000000000000000000000000102044000000000000000000000000000000000000000000000000000000000010203b0000000000000000000000000000000000000000000000000000000000102045000000000000000000000000000000000000000000000000000000000010203c0000000000000000000000000000000000000000000000000000000000102046000000000000000000000000000000000000000000000000000000000010203d0000000000000000000000000000000000000000000000000000000000102047000000000000000000000000000000000000000000000000000000000010203e0000000000000000000000000000000000000000000000000000000000102048000000000000000000000000000000000000000000000000000000000010203f0000000000000000000000000000000000000000000000000000000000102049400000000000000000000000000000000000000000000000000000000000101300000000000000000000000000000000000000000000000000000000000010130100000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000012000000000000000000000000000000000000000000000000000000000010130100000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000001200000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000120000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000012000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000001200000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000120000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000012000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000001200000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000120000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a00000012000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b00000012000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c00000012000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d00000012000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e00000012000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f00000012000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000120000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000012000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000001200000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000012000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000001200000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000120000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000012000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000001200000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000120000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a00000012000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b00000012000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c00000012000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d00000012000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e00000012000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f00000012000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000120000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000012000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000001200000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000120000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000012000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000001200000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000120000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000012000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000001200000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000120000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a00000012000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b00000012000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c00000012000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d00000012000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e00000012000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f00000012000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000120000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000012000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000001200000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000120000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000012000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000001200000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000120000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000012000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000001200000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000120000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a00000012000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b00000012000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c00000012000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d00000012000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e00000012000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e000000000000000000000000000000000000000000000000000000000010134f00000012000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e000000000000000000000000000000000000000000000000000000000010134f0000000000000000000000000000000000000000000000000000000000101350000000120000000000", + "body": "0x00000004002b3a9bd471a8c2eb87a3f4fa99526618edd8610e5b77f089a349f793adacd7c20000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000004100100000000000000000000000000000000000000000000000000000000000410020000000000000000000000000000000000000000000000000000000000041003000000000000000000000000000000000000000000000000000000000004100400000000000000000000000000000000000000000000000000000000000410050000000000000000000000000000000000000000000000000000000000041006000000000000000000000000000000000000000000000000000000000004100700000000000000000000000000000000000000000000000000000000000410080000000000000000000000000000000000000000000000000000000000041009000000000000000000000000000000000000000000000000000000000004100a000000000000000000000000000000000000000000000000000000000004100b000000000000000000000000000000000000000000000000000000000004100c000000000000000000000000000000000000000000000000000000000004100d000000000000000000000000000000000000000000000000000000000004100e000000000000000000000000000000000000000000000000000000000004100f0000000000000000000000000000000000000000000000000000000000041010000000000000000000000000000000000000000000000000000000000004101100000000000000000000000000000000000000000000000000000000000410120000000000000000000000000000000000000000000000000000000000041013000000000000000000000000000000000000000000000000000000000004101400000000000000000000000000000000000000000000000000000000000410150000000000000000000000000000000000000000000000000000000000041016000000000000000000000000000000000000000000000000000000000004101700000000000000000000000000000000000000000000000000000000000410180000000000000000000000000000000000000000000000000000000000041019000000000000000000000000000000000000000000000000000000000004101a000000000000000000000000000000000000000000000000000000000004101b000000000000000000000000000000000000000000000000000000000004101c000000000000000000000000000000000000000000000000000000000004101d000000000000000000000000000000000000000000000000000000000004101e000000000000000000000000000000000000000000000000000000000004101f0000000000000000000000000000000000000000000000000000000000041020000000000000000000000000000000000000000000000000000000000004102100000000000000000000000000000000000000000000000000000000000410220000000000000000000000000000000000000000000000000000000000041023000000000000000000000000000000000000000000000000000000000004102400000000000000000000000000000000000000000000000000000000000410250000000000000000000000000000000000000000000000000000000000041026000000000000000000000000000000000000000000000000000000000004102700000000000000000000000000000000000000000000000000000000000410280000000000000000000000000000000000000000000000000000000000041029000000000000000000000000000000000000000000000000000000000004102a000000000000000000000000000000000000000000000000000000000004102b000000000000000000000000000000000000000000000000000000000004102c000000000000000000000000000000000000000000000000000000000004102d000000000000000000000000000000000000000000000000000000000004102e000000000000000000000000000000000000000000000000000000000004102f0000000000000000000000000000000000000000000000000000000000041030000000000000000000000000000000000000000000000000000000000004103100000000000000000000000000000000000000000000000000000000000410320000000000000000000000000000000000000000000000000000000000041033000000000000000000000000000000000000000000000000000000000004103400000000000000000000000000000000000000000000000000000000000410350000000000000000000000000000000000000000000000000000000000041036000000000000000000000000000000000000000000000000000000000004103700000000000000000000000000000000000000000000000000000000000410380000000000000000000000000000000000000000000000000000000000041039000000000000000000000000000000000000000000000000000000000004103a000000000000000000000000000000000000000000000000000000000004103b000000000000000000000000000000000000000000000000000000000004103c000000000000000000000000000000000000000000000000000000000004103d000000000000000000000000000000000000000000000000000000000004103e000000000000000000000000000000000000000000000000000000000004103f4000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004110100000000000000000000000000000000000000000000000000000000000411020000000000000000000000000000000000000000000000000000000000041103000000000000000000000000000000000000000000000000000000000004110400000000000000000000000000000000000000000000000000000000000411050000000000000000000000000000000000000000000000000000000000041106000000000000000000000000000000000000000000000000000000000004110700000000000000000000000000000000000000000000000000000000000411080000000000000000000000000000000000000000000000000000000000041109000000000000000000000000000000000000000000000000000000000004110a000000000000000000000000000000000000000000000000000000000004110b000000000000000000000000000000000000000000000000000000000004110c000000000000000000000000000000000000000000000000000000000004110d000000000000000000000000000000000000000000000000000000000004110e000000000000000000000000000000000000000000000000000000000004110f0000000000000000000000000000000000000000000000000000000000041110000000000000000000000000000000000000000000000000000000000004111100000000000000000000000000000000000000000000000000000000000411120000000000000000000000000000000000000000000000000000000000041113000000000000000000000000000000000000000000000000000000000004111400000000000000000000000000000000000000000000000000000000000411150000000000000000000000000000000000000000000000000000000000041116000000000000000000000000000000000000000000000000000000000004111700000000000000000000000000000000000000000000000000000000000411180000000000000000000000000000000000000000000000000000000000041119000000000000000000000000000000000000000000000000000000000004111a000000000000000000000000000000000000000000000000000000000004111b000000000000000000000000000000000000000000000000000000000004111c000000000000000000000000000000000000000000000000000000000004111d000000000000000000000000000000000000000000000000000000000004111e000000000000000000000000000000000000000000000000000000000004111f0000000000000000000000000000000000000000000000000000000000041120000000000000000000000000000000000000000000000000000000000004112100000000000000000000000000000000000000000000000000000000000411220000000000000000000000000000000000000000000000000000000000041123000000000000000000000000000000000000000000000000000000000004112400000000000000000000000000000000000000000000000000000000000411250000000000000000000000000000000000000000000000000000000000041126000000000000000000000000000000000000000000000000000000000004112700000000000000000000000000000000000000000000000000000000000411280000000000000000000000000000000000000000000000000000000000041129000000000000000000000000000000000000000000000000000000000004112a000000000000000000000000000000000000000000000000000000000004112b000000000000000000000000000000000000000000000000000000000004112c000000000000000000000000000000000000000000000000000000000004112d000000000000000000000000000000000000000000000000000000000004112e000000000000000000000000000000000000000000000000000000000004112f0000000000000000000000000000000000000000000000000000000000041130000000000000000000000000000000000000000000000000000000000004113100000000000000000000000000000000000000000000000000000000000411320000000000000000000000000000000000000000000000000000000000041133000000000000000000000000000000000000000000000000000000000004113400000000000000000000000000000000000000000000000000000000000411350000000000000000000000000000000000000000000000000000000000041136000000000000000000000000000000000000000000000000000000000004113700000000000000000000000000000000000000000000000000000000000411380000000000000000000000000000000000000000000000000000000000041139000000000000000000000000000000000000000000000000000000000004113a000000000000000000000000000000000000000000000000000000000004113b000000000000000000000000000000000000000000000000000000000004113c000000000000000000000000000000000000000000000000000000000004113d000000000000000000000000000000000000000000000000000000000004113e08004b8b814288544866292d9d0e66869207628fb0ef8120c59ec1d969a085d5d50075c5d0fc08d5578600928d2fc6cd1e63a2b87266a45558135a2912c5a7d6e60019574cfd6834b8c08012b12c6b178d65c27335e1001c1337996f4f460c2cf1000624d1d08e5c487711876584ae580b46b81854bc8e45e42e822ef18df136ff00b78383bdbff11e85552243f1429b8d83334d734dc92e1062b8a04371de5f88005b33017fa3cd1861669d2fd5621ba61db7a72646a9b459897a55780eeeb64e00a1d3d6c8bc4848ef2e4d256253773447d1b39deedd2d70248a2160c765afc200e1d211a34da229f26780fc7baa5a6ca0a35b7e0fea52ea082e35cd064db33d400000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042001000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042002000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042003000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042004000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042005000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420060000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004200700000000000000000000000000000000000000000000000000000000000420110000000000000000000000000000000000000000000000000000000000042008000000000000000000000000000000000000000000000000000000000004201200000000000000000000000000000000000000000000000000000000000420090000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042016000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042017000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042011000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042012000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420160000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004201700000000000000000000000000000000000000000000000000000000000420210000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004202200000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042026000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042027000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042021000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042022000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420260000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004202700000000000000000000000000000000000000000000000000000000000420310000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004203200000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042036000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042037000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042031000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042032000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004203f00000000000000000000000000000000000000000000000000000000000420360000000000000000000000000000000000000000000000000000000000042040000000000000000000000000000000000000000000000000000000000004203700000000000000000000000000000000000000000000000000000000000420410000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004204200000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042043000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042044000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042045000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042046000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042047000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042048000000000000000000000000000000000000000000000000000000000004203f0000000000000000000000000000000000000000000000000000000000042049400000000000000000000000000000000000000000000000000000000000041300000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000012000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000001200000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000120000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000012000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000001200000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000120000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000012000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000001200000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000120000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a00000012000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b00000012000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c00000012000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d00000012000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e00000012000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f00000012000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000120000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000012000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000001200000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000012000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000001200000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000120000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000012000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000001200000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000120000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a00000012000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b00000012000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c00000012000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d00000012000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e00000012000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f00000012000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000120000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000012000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000001200000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000120000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000012000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000001200000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000120000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000012000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000001200000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000120000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a00000012000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b00000012000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c00000012000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d00000012000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e00000012000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f00000012000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000120000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000012000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000001200000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000120000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000012000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000001200000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000120000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000012000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000001200000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000120000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a00000012000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b00000012000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c00000012000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d00000012000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e00000012000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f00000012000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f00000000000000000000000000000000000000000000000000000000000413500000001200000000000002137d1c33d852f169a409da14caec028e8837f8ee96dfad09877898b3a50ec80000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000000000000000000008100100000000000000000000000000000000000000000000000000000000000810020000000000000000000000000000000000000000000000000000000000081003000000000000000000000000000000000000000000000000000000000008100400000000000000000000000000000000000000000000000000000000000810050000000000000000000000000000000000000000000000000000000000081006000000000000000000000000000000000000000000000000000000000008100700000000000000000000000000000000000000000000000000000000000810080000000000000000000000000000000000000000000000000000000000081009000000000000000000000000000000000000000000000000000000000008100a000000000000000000000000000000000000000000000000000000000008100b000000000000000000000000000000000000000000000000000000000008100c000000000000000000000000000000000000000000000000000000000008100d000000000000000000000000000000000000000000000000000000000008100e000000000000000000000000000000000000000000000000000000000008100f0000000000000000000000000000000000000000000000000000000000081010000000000000000000000000000000000000000000000000000000000008101100000000000000000000000000000000000000000000000000000000000810120000000000000000000000000000000000000000000000000000000000081013000000000000000000000000000000000000000000000000000000000008101400000000000000000000000000000000000000000000000000000000000810150000000000000000000000000000000000000000000000000000000000081016000000000000000000000000000000000000000000000000000000000008101700000000000000000000000000000000000000000000000000000000000810180000000000000000000000000000000000000000000000000000000000081019000000000000000000000000000000000000000000000000000000000008101a000000000000000000000000000000000000000000000000000000000008101b000000000000000000000000000000000000000000000000000000000008101c000000000000000000000000000000000000000000000000000000000008101d000000000000000000000000000000000000000000000000000000000008101e000000000000000000000000000000000000000000000000000000000008101f0000000000000000000000000000000000000000000000000000000000081020000000000000000000000000000000000000000000000000000000000008102100000000000000000000000000000000000000000000000000000000000810220000000000000000000000000000000000000000000000000000000000081023000000000000000000000000000000000000000000000000000000000008102400000000000000000000000000000000000000000000000000000000000810250000000000000000000000000000000000000000000000000000000000081026000000000000000000000000000000000000000000000000000000000008102700000000000000000000000000000000000000000000000000000000000810280000000000000000000000000000000000000000000000000000000000081029000000000000000000000000000000000000000000000000000000000008102a000000000000000000000000000000000000000000000000000000000008102b000000000000000000000000000000000000000000000000000000000008102c000000000000000000000000000000000000000000000000000000000008102d000000000000000000000000000000000000000000000000000000000008102e000000000000000000000000000000000000000000000000000000000008102f0000000000000000000000000000000000000000000000000000000000081030000000000000000000000000000000000000000000000000000000000008103100000000000000000000000000000000000000000000000000000000000810320000000000000000000000000000000000000000000000000000000000081033000000000000000000000000000000000000000000000000000000000008103400000000000000000000000000000000000000000000000000000000000810350000000000000000000000000000000000000000000000000000000000081036000000000000000000000000000000000000000000000000000000000008103700000000000000000000000000000000000000000000000000000000000810380000000000000000000000000000000000000000000000000000000000081039000000000000000000000000000000000000000000000000000000000008103a000000000000000000000000000000000000000000000000000000000008103b000000000000000000000000000000000000000000000000000000000008103c000000000000000000000000000000000000000000000000000000000008103d000000000000000000000000000000000000000000000000000000000008103e000000000000000000000000000000000000000000000000000000000008103f4000000000000000000000000000000000000000000000000000000000000800010000000000000000000000000000000000000000000000000000000000081100000000000000000000000000000000000000000000000000000000000008110100000000000000000000000000000000000000000000000000000000000811020000000000000000000000000000000000000000000000000000000000081103000000000000000000000000000000000000000000000000000000000008110400000000000000000000000000000000000000000000000000000000000811050000000000000000000000000000000000000000000000000000000000081106000000000000000000000000000000000000000000000000000000000008110700000000000000000000000000000000000000000000000000000000000811080000000000000000000000000000000000000000000000000000000000081109000000000000000000000000000000000000000000000000000000000008110a000000000000000000000000000000000000000000000000000000000008110b000000000000000000000000000000000000000000000000000000000008110c000000000000000000000000000000000000000000000000000000000008110d000000000000000000000000000000000000000000000000000000000008110e000000000000000000000000000000000000000000000000000000000008110f0000000000000000000000000000000000000000000000000000000000081110000000000000000000000000000000000000000000000000000000000008111100000000000000000000000000000000000000000000000000000000000811120000000000000000000000000000000000000000000000000000000000081113000000000000000000000000000000000000000000000000000000000008111400000000000000000000000000000000000000000000000000000000000811150000000000000000000000000000000000000000000000000000000000081116000000000000000000000000000000000000000000000000000000000008111700000000000000000000000000000000000000000000000000000000000811180000000000000000000000000000000000000000000000000000000000081119000000000000000000000000000000000000000000000000000000000008111a000000000000000000000000000000000000000000000000000000000008111b000000000000000000000000000000000000000000000000000000000008111c000000000000000000000000000000000000000000000000000000000008111d000000000000000000000000000000000000000000000000000000000008111e000000000000000000000000000000000000000000000000000000000008111f0000000000000000000000000000000000000000000000000000000000081120000000000000000000000000000000000000000000000000000000000008112100000000000000000000000000000000000000000000000000000000000811220000000000000000000000000000000000000000000000000000000000081123000000000000000000000000000000000000000000000000000000000008112400000000000000000000000000000000000000000000000000000000000811250000000000000000000000000000000000000000000000000000000000081126000000000000000000000000000000000000000000000000000000000008112700000000000000000000000000000000000000000000000000000000000811280000000000000000000000000000000000000000000000000000000000081129000000000000000000000000000000000000000000000000000000000008112a000000000000000000000000000000000000000000000000000000000008112b000000000000000000000000000000000000000000000000000000000008112c000000000000000000000000000000000000000000000000000000000008112d000000000000000000000000000000000000000000000000000000000008112e000000000000000000000000000000000000000000000000000000000008112f0000000000000000000000000000000000000000000000000000000000081130000000000000000000000000000000000000000000000000000000000008113100000000000000000000000000000000000000000000000000000000000811320000000000000000000000000000000000000000000000000000000000081133000000000000000000000000000000000000000000000000000000000008113400000000000000000000000000000000000000000000000000000000000811350000000000000000000000000000000000000000000000000000000000081136000000000000000000000000000000000000000000000000000000000008113700000000000000000000000000000000000000000000000000000000000811380000000000000000000000000000000000000000000000000000000000081139000000000000000000000000000000000000000000000000000000000008113a000000000000000000000000000000000000000000000000000000000008113b000000000000000000000000000000000000000000000000000000000008113c000000000000000000000000000000000000000000000000000000000008113d000000000000000000000000000000000000000000000000000000000008113e0800265fc26cc330a0a6a8e801430f967c7ed1e58be49f854f0cad6732943f88e20071874f590a2dadb3658c9ab56b3fcf8c43098157070e4c5f724dfa3f22337d00ae67efa2446c41039723a7f780b2d317dc0fe70741ad4b180ed3e69206acb70022e6e6d8999655a395c3d51de207120646c5acfe3c55f06fd12e2bf579816300479bb81c7d06f66baed706c75fa44967ac97960303fbad4f4bdc77f475e68f00ac60795e5b5c80c95c88f6b236bd97aba1156483effa087e56719d8eee599700af23557f2f6de3d1c09b4aad782fffa5457af68d87e778d73de1b921eb41dc00c7c86fa31cdf6f4ce9036bdbee033e09194bf5739a66928d2e3d2ac2703649400000000000000000000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000000000000000000008200a0000000000000000000000000000000000000000000000000000000000082001000000000000000000000000000000000000000000000000000000000008200b0000000000000000000000000000000000000000000000000000000000082002000000000000000000000000000000000000000000000000000000000008200c0000000000000000000000000000000000000000000000000000000000082003000000000000000000000000000000000000000000000000000000000008200d0000000000000000000000000000000000000000000000000000000000082004000000000000000000000000000000000000000000000000000000000008200e0000000000000000000000000000000000000000000000000000000000082005000000000000000000000000000000000000000000000000000000000008200f00000000000000000000000000000000000000000000000000000000000820060000000000000000000000000000000000000000000000000000000000082010000000000000000000000000000000000000000000000000000000000008200700000000000000000000000000000000000000000000000000000000000820110000000000000000000000000000000000000000000000000000000000082008000000000000000000000000000000000000000000000000000000000008201200000000000000000000000000000000000000000000000000000000000820090000000000000000000000000000000000000000000000000000000000082013000000000000000000000000000000000000000000000000000000000008200a0000000000000000000000000000000000000000000000000000000000082014000000000000000000000000000000000000000000000000000000000008200b0000000000000000000000000000000000000000000000000000000000082015000000000000000000000000000000000000000000000000000000000008200c0000000000000000000000000000000000000000000000000000000000082016000000000000000000000000000000000000000000000000000000000008200d0000000000000000000000000000000000000000000000000000000000082017000000000000000000000000000000000000000000000000000000000008200e0000000000000000000000000000000000000000000000000000000000082018000000000000000000000000000000000000000000000000000000000008200f00000000000000000000000000000000000000000000000000000000000820190000000000000000000000000000000000000000000000000000000000082010000000000000000000000000000000000000000000000000000000000008201a0000000000000000000000000000000000000000000000000000000000082011000000000000000000000000000000000000000000000000000000000008201b0000000000000000000000000000000000000000000000000000000000082012000000000000000000000000000000000000000000000000000000000008201c0000000000000000000000000000000000000000000000000000000000082013000000000000000000000000000000000000000000000000000000000008201d0000000000000000000000000000000000000000000000000000000000082014000000000000000000000000000000000000000000000000000000000008201e0000000000000000000000000000000000000000000000000000000000082015000000000000000000000000000000000000000000000000000000000008201f00000000000000000000000000000000000000000000000000000000000820160000000000000000000000000000000000000000000000000000000000082020000000000000000000000000000000000000000000000000000000000008201700000000000000000000000000000000000000000000000000000000000820210000000000000000000000000000000000000000000000000000000000082018000000000000000000000000000000000000000000000000000000000008202200000000000000000000000000000000000000000000000000000000000820190000000000000000000000000000000000000000000000000000000000082023000000000000000000000000000000000000000000000000000000000008201a0000000000000000000000000000000000000000000000000000000000082024000000000000000000000000000000000000000000000000000000000008201b0000000000000000000000000000000000000000000000000000000000082025000000000000000000000000000000000000000000000000000000000008201c0000000000000000000000000000000000000000000000000000000000082026000000000000000000000000000000000000000000000000000000000008201d0000000000000000000000000000000000000000000000000000000000082027000000000000000000000000000000000000000000000000000000000008201e0000000000000000000000000000000000000000000000000000000000082028000000000000000000000000000000000000000000000000000000000008201f00000000000000000000000000000000000000000000000000000000000820290000000000000000000000000000000000000000000000000000000000082020000000000000000000000000000000000000000000000000000000000008202a0000000000000000000000000000000000000000000000000000000000082021000000000000000000000000000000000000000000000000000000000008202b0000000000000000000000000000000000000000000000000000000000082022000000000000000000000000000000000000000000000000000000000008202c0000000000000000000000000000000000000000000000000000000000082023000000000000000000000000000000000000000000000000000000000008202d0000000000000000000000000000000000000000000000000000000000082024000000000000000000000000000000000000000000000000000000000008202e0000000000000000000000000000000000000000000000000000000000082025000000000000000000000000000000000000000000000000000000000008202f00000000000000000000000000000000000000000000000000000000000820260000000000000000000000000000000000000000000000000000000000082030000000000000000000000000000000000000000000000000000000000008202700000000000000000000000000000000000000000000000000000000000820310000000000000000000000000000000000000000000000000000000000082028000000000000000000000000000000000000000000000000000000000008203200000000000000000000000000000000000000000000000000000000000820290000000000000000000000000000000000000000000000000000000000082033000000000000000000000000000000000000000000000000000000000008202a0000000000000000000000000000000000000000000000000000000000082034000000000000000000000000000000000000000000000000000000000008202b0000000000000000000000000000000000000000000000000000000000082035000000000000000000000000000000000000000000000000000000000008202c0000000000000000000000000000000000000000000000000000000000082036000000000000000000000000000000000000000000000000000000000008202d0000000000000000000000000000000000000000000000000000000000082037000000000000000000000000000000000000000000000000000000000008202e0000000000000000000000000000000000000000000000000000000000082038000000000000000000000000000000000000000000000000000000000008202f00000000000000000000000000000000000000000000000000000000000820390000000000000000000000000000000000000000000000000000000000082030000000000000000000000000000000000000000000000000000000000008203a0000000000000000000000000000000000000000000000000000000000082031000000000000000000000000000000000000000000000000000000000008203b0000000000000000000000000000000000000000000000000000000000082032000000000000000000000000000000000000000000000000000000000008203c0000000000000000000000000000000000000000000000000000000000082033000000000000000000000000000000000000000000000000000000000008203d0000000000000000000000000000000000000000000000000000000000082034000000000000000000000000000000000000000000000000000000000008203e0000000000000000000000000000000000000000000000000000000000082035000000000000000000000000000000000000000000000000000000000008203f00000000000000000000000000000000000000000000000000000000000820360000000000000000000000000000000000000000000000000000000000082040000000000000000000000000000000000000000000000000000000000008203700000000000000000000000000000000000000000000000000000000000820410000000000000000000000000000000000000000000000000000000000082038000000000000000000000000000000000000000000000000000000000008204200000000000000000000000000000000000000000000000000000000000820390000000000000000000000000000000000000000000000000000000000082043000000000000000000000000000000000000000000000000000000000008203a0000000000000000000000000000000000000000000000000000000000082044000000000000000000000000000000000000000000000000000000000008203b0000000000000000000000000000000000000000000000000000000000082045000000000000000000000000000000000000000000000000000000000008203c0000000000000000000000000000000000000000000000000000000000082046000000000000000000000000000000000000000000000000000000000008203d0000000000000000000000000000000000000000000000000000000000082047000000000000000000000000000000000000000000000000000000000008203e0000000000000000000000000000000000000000000000000000000000082048000000000000000000000000000000000000000000000000000000000008203f0000000000000000000000000000000000000000000000000000000000082049400000000000000000000000000000000000000000000000000000000000081300000000000000000000000000000000000000000000000000000000000008130100000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000012000000000000000000000000000000000000000000000000000000000008130100000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000001200000000000000000000000000000000000000000000000000000000000813020000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000120000000000000000000000000000000000000000000000000000000000081303000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000012000000000000000000000000000000000000000000000000000000000008130400000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000001200000000000000000000000000000000000000000000000000000000000813050000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000120000000000000000000000000000000000000000000000000000000000081306000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000012000000000000000000000000000000000000000000000000000000000008130700000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000001200000000000000000000000000000000000000000000000000000000000813080000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000120000000000000000000000000000000000000000000000000000000000081309000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a00000012000000000000000000000000000000000000000000000000000000000008130a000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b00000012000000000000000000000000000000000000000000000000000000000008130b000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c00000012000000000000000000000000000000000000000000000000000000000008130c000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d00000012000000000000000000000000000000000000000000000000000000000008130d000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e00000012000000000000000000000000000000000000000000000000000000000008130e000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f00000012000000000000000000000000000000000000000000000000000000000008130f0000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000120000000000000000000000000000000000000000000000000000000000081310000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000012000000000000000000000000000000000000000000000000000000000008131100000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000001200000000000000000000000000000000000000000000000000000000000813120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000120000000000000000000000000000000000000000000000000000000000081313000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000012000000000000000000000000000000000000000000000000000000000008131400000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000001200000000000000000000000000000000000000000000000000000000000813150000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000120000000000000000000000000000000000000000000000000000000000081316000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000012000000000000000000000000000000000000000000000000000000000008131700000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000001200000000000000000000000000000000000000000000000000000000000813180000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000120000000000000000000000000000000000000000000000000000000000081319000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a00000012000000000000000000000000000000000000000000000000000000000008131a000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b00000012000000000000000000000000000000000000000000000000000000000008131b000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c00000012000000000000000000000000000000000000000000000000000000000008131c000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d00000012000000000000000000000000000000000000000000000000000000000008131d000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e00000012000000000000000000000000000000000000000000000000000000000008131e000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f00000012000000000000000000000000000000000000000000000000000000000008131f0000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000120000000000000000000000000000000000000000000000000000000000081320000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000012000000000000000000000000000000000000000000000000000000000008132100000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000001200000000000000000000000000000000000000000000000000000000000813220000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000120000000000000000000000000000000000000000000000000000000000081323000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000012000000000000000000000000000000000000000000000000000000000008132400000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000001200000000000000000000000000000000000000000000000000000000000813250000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000120000000000000000000000000000000000000000000000000000000000081326000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000012000000000000000000000000000000000000000000000000000000000008132700000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000001200000000000000000000000000000000000000000000000000000000000813280000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000120000000000000000000000000000000000000000000000000000000000081329000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a00000012000000000000000000000000000000000000000000000000000000000008132a000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b00000012000000000000000000000000000000000000000000000000000000000008132b000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c00000012000000000000000000000000000000000000000000000000000000000008132c000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d00000012000000000000000000000000000000000000000000000000000000000008132d000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e00000012000000000000000000000000000000000000000000000000000000000008132e000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f00000012000000000000000000000000000000000000000000000000000000000008132f0000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000120000000000000000000000000000000000000000000000000000000000081330000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000012000000000000000000000000000000000000000000000000000000000008133100000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000001200000000000000000000000000000000000000000000000000000000000813320000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000120000000000000000000000000000000000000000000000000000000000081333000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000012000000000000000000000000000000000000000000000000000000000008133400000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000001200000000000000000000000000000000000000000000000000000000000813350000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000120000000000000000000000000000000000000000000000000000000000081336000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000012000000000000000000000000000000000000000000000000000000000008133700000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000001200000000000000000000000000000000000000000000000000000000000813380000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000120000000000000000000000000000000000000000000000000000000000081339000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a00000012000000000000000000000000000000000000000000000000000000000008133a000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b00000012000000000000000000000000000000000000000000000000000000000008133b000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c00000012000000000000000000000000000000000000000000000000000000000008133c000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d00000012000000000000000000000000000000000000000000000000000000000008133d000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e00000012000000000000000000000000000000000000000000000000000000000008133e000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e000000000000000000000000000000000000000000000000000000000008134f00000012000000000000000000000000000000000000000000000000000000000008133f0000000000000000000000000000000000000000000000000000000000081340000000000000000000000000000000000000000000000000000000000008134100000000000000000000000000000000000000000000000000000000000813420000000000000000000000000000000000000000000000000000000000081343000000000000000000000000000000000000000000000000000000000008134400000000000000000000000000000000000000000000000000000000000813450000000000000000000000000000000000000000000000000000000000081346000000000000000000000000000000000000000000000000000000000008134700000000000000000000000000000000000000000000000000000000000813480000000000000000000000000000000000000000000000000000000000081349000000000000000000000000000000000000000000000000000000000008134a000000000000000000000000000000000000000000000000000000000008134b000000000000000000000000000000000000000000000000000000000008134c000000000000000000000000000000000000000000000000000000000008134d000000000000000000000000000000000000000000000000000000000008134e000000000000000000000000000000000000000000000000000000000008134f00000000000000000000000000000000000000000000000000000000000813500000001200000000000015fc28fc0e23cbcef9ef52c9ff70a73621674dbc82e1fb5bd1505342eb09176c00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000c100000000000000000000000000000000000000000000000000000000000000c100100000000000000000000000000000000000000000000000000000000000c100200000000000000000000000000000000000000000000000000000000000c100300000000000000000000000000000000000000000000000000000000000c100400000000000000000000000000000000000000000000000000000000000c100500000000000000000000000000000000000000000000000000000000000c100600000000000000000000000000000000000000000000000000000000000c100700000000000000000000000000000000000000000000000000000000000c100800000000000000000000000000000000000000000000000000000000000c100900000000000000000000000000000000000000000000000000000000000c100a00000000000000000000000000000000000000000000000000000000000c100b00000000000000000000000000000000000000000000000000000000000c100c00000000000000000000000000000000000000000000000000000000000c100d00000000000000000000000000000000000000000000000000000000000c100e00000000000000000000000000000000000000000000000000000000000c100f00000000000000000000000000000000000000000000000000000000000c101000000000000000000000000000000000000000000000000000000000000c101100000000000000000000000000000000000000000000000000000000000c101200000000000000000000000000000000000000000000000000000000000c101300000000000000000000000000000000000000000000000000000000000c101400000000000000000000000000000000000000000000000000000000000c101500000000000000000000000000000000000000000000000000000000000c101600000000000000000000000000000000000000000000000000000000000c101700000000000000000000000000000000000000000000000000000000000c101800000000000000000000000000000000000000000000000000000000000c101900000000000000000000000000000000000000000000000000000000000c101a00000000000000000000000000000000000000000000000000000000000c101b00000000000000000000000000000000000000000000000000000000000c101c00000000000000000000000000000000000000000000000000000000000c101d00000000000000000000000000000000000000000000000000000000000c101e00000000000000000000000000000000000000000000000000000000000c101f00000000000000000000000000000000000000000000000000000000000c102000000000000000000000000000000000000000000000000000000000000c102100000000000000000000000000000000000000000000000000000000000c102200000000000000000000000000000000000000000000000000000000000c102300000000000000000000000000000000000000000000000000000000000c102400000000000000000000000000000000000000000000000000000000000c102500000000000000000000000000000000000000000000000000000000000c102600000000000000000000000000000000000000000000000000000000000c102700000000000000000000000000000000000000000000000000000000000c102800000000000000000000000000000000000000000000000000000000000c102900000000000000000000000000000000000000000000000000000000000c102a00000000000000000000000000000000000000000000000000000000000c102b00000000000000000000000000000000000000000000000000000000000c102c00000000000000000000000000000000000000000000000000000000000c102d00000000000000000000000000000000000000000000000000000000000c102e00000000000000000000000000000000000000000000000000000000000c102f00000000000000000000000000000000000000000000000000000000000c103000000000000000000000000000000000000000000000000000000000000c103100000000000000000000000000000000000000000000000000000000000c103200000000000000000000000000000000000000000000000000000000000c103300000000000000000000000000000000000000000000000000000000000c103400000000000000000000000000000000000000000000000000000000000c103500000000000000000000000000000000000000000000000000000000000c103600000000000000000000000000000000000000000000000000000000000c103700000000000000000000000000000000000000000000000000000000000c103800000000000000000000000000000000000000000000000000000000000c103900000000000000000000000000000000000000000000000000000000000c103a00000000000000000000000000000000000000000000000000000000000c103b00000000000000000000000000000000000000000000000000000000000c103c00000000000000000000000000000000000000000000000000000000000c103d00000000000000000000000000000000000000000000000000000000000c103e00000000000000000000000000000000000000000000000000000000000c103f4000000000000000000000000000000000000000000000000000000000000c000100000000000000000000000000000000000000000000000000000000000c110000000000000000000000000000000000000000000000000000000000000c110100000000000000000000000000000000000000000000000000000000000c110200000000000000000000000000000000000000000000000000000000000c110300000000000000000000000000000000000000000000000000000000000c110400000000000000000000000000000000000000000000000000000000000c110500000000000000000000000000000000000000000000000000000000000c110600000000000000000000000000000000000000000000000000000000000c110700000000000000000000000000000000000000000000000000000000000c110800000000000000000000000000000000000000000000000000000000000c110900000000000000000000000000000000000000000000000000000000000c110a00000000000000000000000000000000000000000000000000000000000c110b00000000000000000000000000000000000000000000000000000000000c110c00000000000000000000000000000000000000000000000000000000000c110d00000000000000000000000000000000000000000000000000000000000c110e00000000000000000000000000000000000000000000000000000000000c110f00000000000000000000000000000000000000000000000000000000000c111000000000000000000000000000000000000000000000000000000000000c111100000000000000000000000000000000000000000000000000000000000c111200000000000000000000000000000000000000000000000000000000000c111300000000000000000000000000000000000000000000000000000000000c111400000000000000000000000000000000000000000000000000000000000c111500000000000000000000000000000000000000000000000000000000000c111600000000000000000000000000000000000000000000000000000000000c111700000000000000000000000000000000000000000000000000000000000c111800000000000000000000000000000000000000000000000000000000000c111900000000000000000000000000000000000000000000000000000000000c111a00000000000000000000000000000000000000000000000000000000000c111b00000000000000000000000000000000000000000000000000000000000c111c00000000000000000000000000000000000000000000000000000000000c111d00000000000000000000000000000000000000000000000000000000000c111e00000000000000000000000000000000000000000000000000000000000c111f00000000000000000000000000000000000000000000000000000000000c112000000000000000000000000000000000000000000000000000000000000c112100000000000000000000000000000000000000000000000000000000000c112200000000000000000000000000000000000000000000000000000000000c112300000000000000000000000000000000000000000000000000000000000c112400000000000000000000000000000000000000000000000000000000000c112500000000000000000000000000000000000000000000000000000000000c112600000000000000000000000000000000000000000000000000000000000c112700000000000000000000000000000000000000000000000000000000000c112800000000000000000000000000000000000000000000000000000000000c112900000000000000000000000000000000000000000000000000000000000c112a00000000000000000000000000000000000000000000000000000000000c112b00000000000000000000000000000000000000000000000000000000000c112c00000000000000000000000000000000000000000000000000000000000c112d00000000000000000000000000000000000000000000000000000000000c112e00000000000000000000000000000000000000000000000000000000000c112f00000000000000000000000000000000000000000000000000000000000c113000000000000000000000000000000000000000000000000000000000000c113100000000000000000000000000000000000000000000000000000000000c113200000000000000000000000000000000000000000000000000000000000c113300000000000000000000000000000000000000000000000000000000000c113400000000000000000000000000000000000000000000000000000000000c113500000000000000000000000000000000000000000000000000000000000c113600000000000000000000000000000000000000000000000000000000000c113700000000000000000000000000000000000000000000000000000000000c113800000000000000000000000000000000000000000000000000000000000c113900000000000000000000000000000000000000000000000000000000000c113a00000000000000000000000000000000000000000000000000000000000c113b00000000000000000000000000000000000000000000000000000000000c113c00000000000000000000000000000000000000000000000000000000000c113d00000000000000000000000000000000000000000000000000000000000c113e08007740254fc3203c599b97e5049f81ecb8acf39bddfbeae8ce74298e4ea87efe00bde1f60e5339304ca4b53d8b845c6e7d293f6841c1b62c07c2eb231593c4d100204739a2456e89e1353337ea45977dd7dcca61921869c7c6871ade16c5b680006d06063ef1b29afa07e57f756435cf5d48e822d678b7a913b5838aa3443cbf0083ecac1aa2e9e8402a9810b7590d4b76945b41df2cb7c999ba354ea087c06c003d7e1311d740b160e04897e91bb1a4e85d22b5ff438622f18eb090ef494a75007788b07cf04ef30ff0196f111a0486011eaef85bf336a76a3fb6c7b3388117009fffd2100e9e3d9d7002c2f3bd4dd44dadcf24d8b0c3d74c62206460a8142e4000000000000000000000000000000000000000000000000000000000000c200000000000000000000000000000000000000000000000000000000000000c200a00000000000000000000000000000000000000000000000000000000000c200100000000000000000000000000000000000000000000000000000000000c200b00000000000000000000000000000000000000000000000000000000000c200200000000000000000000000000000000000000000000000000000000000c200c00000000000000000000000000000000000000000000000000000000000c200300000000000000000000000000000000000000000000000000000000000c200d00000000000000000000000000000000000000000000000000000000000c200400000000000000000000000000000000000000000000000000000000000c200e00000000000000000000000000000000000000000000000000000000000c200500000000000000000000000000000000000000000000000000000000000c200f00000000000000000000000000000000000000000000000000000000000c200600000000000000000000000000000000000000000000000000000000000c201000000000000000000000000000000000000000000000000000000000000c200700000000000000000000000000000000000000000000000000000000000c201100000000000000000000000000000000000000000000000000000000000c200800000000000000000000000000000000000000000000000000000000000c201200000000000000000000000000000000000000000000000000000000000c200900000000000000000000000000000000000000000000000000000000000c201300000000000000000000000000000000000000000000000000000000000c200a00000000000000000000000000000000000000000000000000000000000c201400000000000000000000000000000000000000000000000000000000000c200b00000000000000000000000000000000000000000000000000000000000c201500000000000000000000000000000000000000000000000000000000000c200c00000000000000000000000000000000000000000000000000000000000c201600000000000000000000000000000000000000000000000000000000000c200d00000000000000000000000000000000000000000000000000000000000c201700000000000000000000000000000000000000000000000000000000000c200e00000000000000000000000000000000000000000000000000000000000c201800000000000000000000000000000000000000000000000000000000000c200f00000000000000000000000000000000000000000000000000000000000c201900000000000000000000000000000000000000000000000000000000000c201000000000000000000000000000000000000000000000000000000000000c201a00000000000000000000000000000000000000000000000000000000000c201100000000000000000000000000000000000000000000000000000000000c201b00000000000000000000000000000000000000000000000000000000000c201200000000000000000000000000000000000000000000000000000000000c201c00000000000000000000000000000000000000000000000000000000000c201300000000000000000000000000000000000000000000000000000000000c201d00000000000000000000000000000000000000000000000000000000000c201400000000000000000000000000000000000000000000000000000000000c201e00000000000000000000000000000000000000000000000000000000000c201500000000000000000000000000000000000000000000000000000000000c201f00000000000000000000000000000000000000000000000000000000000c201600000000000000000000000000000000000000000000000000000000000c202000000000000000000000000000000000000000000000000000000000000c201700000000000000000000000000000000000000000000000000000000000c202100000000000000000000000000000000000000000000000000000000000c201800000000000000000000000000000000000000000000000000000000000c202200000000000000000000000000000000000000000000000000000000000c201900000000000000000000000000000000000000000000000000000000000c202300000000000000000000000000000000000000000000000000000000000c201a00000000000000000000000000000000000000000000000000000000000c202400000000000000000000000000000000000000000000000000000000000c201b00000000000000000000000000000000000000000000000000000000000c202500000000000000000000000000000000000000000000000000000000000c201c00000000000000000000000000000000000000000000000000000000000c202600000000000000000000000000000000000000000000000000000000000c201d00000000000000000000000000000000000000000000000000000000000c202700000000000000000000000000000000000000000000000000000000000c201e00000000000000000000000000000000000000000000000000000000000c202800000000000000000000000000000000000000000000000000000000000c201f00000000000000000000000000000000000000000000000000000000000c202900000000000000000000000000000000000000000000000000000000000c202000000000000000000000000000000000000000000000000000000000000c202a00000000000000000000000000000000000000000000000000000000000c202100000000000000000000000000000000000000000000000000000000000c202b00000000000000000000000000000000000000000000000000000000000c202200000000000000000000000000000000000000000000000000000000000c202c00000000000000000000000000000000000000000000000000000000000c202300000000000000000000000000000000000000000000000000000000000c202d00000000000000000000000000000000000000000000000000000000000c202400000000000000000000000000000000000000000000000000000000000c202e00000000000000000000000000000000000000000000000000000000000c202500000000000000000000000000000000000000000000000000000000000c202f00000000000000000000000000000000000000000000000000000000000c202600000000000000000000000000000000000000000000000000000000000c203000000000000000000000000000000000000000000000000000000000000c202700000000000000000000000000000000000000000000000000000000000c203100000000000000000000000000000000000000000000000000000000000c202800000000000000000000000000000000000000000000000000000000000c203200000000000000000000000000000000000000000000000000000000000c202900000000000000000000000000000000000000000000000000000000000c203300000000000000000000000000000000000000000000000000000000000c202a00000000000000000000000000000000000000000000000000000000000c203400000000000000000000000000000000000000000000000000000000000c202b00000000000000000000000000000000000000000000000000000000000c203500000000000000000000000000000000000000000000000000000000000c202c00000000000000000000000000000000000000000000000000000000000c203600000000000000000000000000000000000000000000000000000000000c202d00000000000000000000000000000000000000000000000000000000000c203700000000000000000000000000000000000000000000000000000000000c202e00000000000000000000000000000000000000000000000000000000000c203800000000000000000000000000000000000000000000000000000000000c202f00000000000000000000000000000000000000000000000000000000000c203900000000000000000000000000000000000000000000000000000000000c203000000000000000000000000000000000000000000000000000000000000c203a00000000000000000000000000000000000000000000000000000000000c203100000000000000000000000000000000000000000000000000000000000c203b00000000000000000000000000000000000000000000000000000000000c203200000000000000000000000000000000000000000000000000000000000c203c00000000000000000000000000000000000000000000000000000000000c203300000000000000000000000000000000000000000000000000000000000c203d00000000000000000000000000000000000000000000000000000000000c203400000000000000000000000000000000000000000000000000000000000c203e00000000000000000000000000000000000000000000000000000000000c203500000000000000000000000000000000000000000000000000000000000c203f00000000000000000000000000000000000000000000000000000000000c203600000000000000000000000000000000000000000000000000000000000c204000000000000000000000000000000000000000000000000000000000000c203700000000000000000000000000000000000000000000000000000000000c204100000000000000000000000000000000000000000000000000000000000c203800000000000000000000000000000000000000000000000000000000000c204200000000000000000000000000000000000000000000000000000000000c203900000000000000000000000000000000000000000000000000000000000c204300000000000000000000000000000000000000000000000000000000000c203a00000000000000000000000000000000000000000000000000000000000c204400000000000000000000000000000000000000000000000000000000000c203b00000000000000000000000000000000000000000000000000000000000c204500000000000000000000000000000000000000000000000000000000000c203c00000000000000000000000000000000000000000000000000000000000c204600000000000000000000000000000000000000000000000000000000000c203d00000000000000000000000000000000000000000000000000000000000c204700000000000000000000000000000000000000000000000000000000000c203e00000000000000000000000000000000000000000000000000000000000c204800000000000000000000000000000000000000000000000000000000000c203f00000000000000000000000000000000000000000000000000000000000c20494000000000000000000000000000000000000000000000000000000000000c130000000000000000000000000000000000000000000000000000000000000c130100000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c13110000001200000000000000000000000000000000000000000000000000000000000c130100000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c13120000001200000000000000000000000000000000000000000000000000000000000c130200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c13130000001200000000000000000000000000000000000000000000000000000000000c130300000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c13140000001200000000000000000000000000000000000000000000000000000000000c130400000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c13150000001200000000000000000000000000000000000000000000000000000000000c130500000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c13160000001200000000000000000000000000000000000000000000000000000000000c130600000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c13170000001200000000000000000000000000000000000000000000000000000000000c130700000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c13180000001200000000000000000000000000000000000000000000000000000000000c130800000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c13190000001200000000000000000000000000000000000000000000000000000000000c130900000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a0000001200000000000000000000000000000000000000000000000000000000000c130a00000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b0000001200000000000000000000000000000000000000000000000000000000000c130b00000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c0000001200000000000000000000000000000000000000000000000000000000000c130c00000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d0000001200000000000000000000000000000000000000000000000000000000000c130d00000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e0000001200000000000000000000000000000000000000000000000000000000000c130e00000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f0000001200000000000000000000000000000000000000000000000000000000000c130f00000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c13200000001200000000000000000000000000000000000000000000000000000000000c131000000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c13210000001200000000000000000000000000000000000000000000000000000000000c131100000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c13220000001200000000000000000000000000000000000000000000000000000000000c131200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c13230000001200000000000000000000000000000000000000000000000000000000000c131300000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c13240000001200000000000000000000000000000000000000000000000000000000000c131400000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c13250000001200000000000000000000000000000000000000000000000000000000000c131500000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c13260000001200000000000000000000000000000000000000000000000000000000000c131600000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c13270000001200000000000000000000000000000000000000000000000000000000000c131700000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c13280000001200000000000000000000000000000000000000000000000000000000000c131800000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c13290000001200000000000000000000000000000000000000000000000000000000000c131900000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a0000001200000000000000000000000000000000000000000000000000000000000c131a00000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b0000001200000000000000000000000000000000000000000000000000000000000c131b00000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c0000001200000000000000000000000000000000000000000000000000000000000c131c00000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d0000001200000000000000000000000000000000000000000000000000000000000c131d00000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e0000001200000000000000000000000000000000000000000000000000000000000c131e00000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f0000001200000000000000000000000000000000000000000000000000000000000c131f00000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c13300000001200000000000000000000000000000000000000000000000000000000000c132000000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c13310000001200000000000000000000000000000000000000000000000000000000000c132100000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c13320000001200000000000000000000000000000000000000000000000000000000000c132200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c13330000001200000000000000000000000000000000000000000000000000000000000c132300000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c13340000001200000000000000000000000000000000000000000000000000000000000c132400000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c13350000001200000000000000000000000000000000000000000000000000000000000c132500000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c13360000001200000000000000000000000000000000000000000000000000000000000c132600000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c13370000001200000000000000000000000000000000000000000000000000000000000c132700000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c13380000001200000000000000000000000000000000000000000000000000000000000c132800000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c13390000001200000000000000000000000000000000000000000000000000000000000c132900000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a0000001200000000000000000000000000000000000000000000000000000000000c132a00000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b0000001200000000000000000000000000000000000000000000000000000000000c132b00000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c0000001200000000000000000000000000000000000000000000000000000000000c132c00000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d0000001200000000000000000000000000000000000000000000000000000000000c132d00000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e0000001200000000000000000000000000000000000000000000000000000000000c132e00000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f0000001200000000000000000000000000000000000000000000000000000000000c132f00000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c13400000001200000000000000000000000000000000000000000000000000000000000c133000000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c13410000001200000000000000000000000000000000000000000000000000000000000c133100000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c13420000001200000000000000000000000000000000000000000000000000000000000c133200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c13430000001200000000000000000000000000000000000000000000000000000000000c133300000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c13440000001200000000000000000000000000000000000000000000000000000000000c133400000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c13450000001200000000000000000000000000000000000000000000000000000000000c133500000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c13460000001200000000000000000000000000000000000000000000000000000000000c133600000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c13470000001200000000000000000000000000000000000000000000000000000000000c133700000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c13480000001200000000000000000000000000000000000000000000000000000000000c133800000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c13490000001200000000000000000000000000000000000000000000000000000000000c133900000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a0000001200000000000000000000000000000000000000000000000000000000000c133a00000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b0000001200000000000000000000000000000000000000000000000000000000000c133b00000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c0000001200000000000000000000000000000000000000000000000000000000000c133c00000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d0000001200000000000000000000000000000000000000000000000000000000000c133d00000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e0000001200000000000000000000000000000000000000000000000000000000000c133e00000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e00000000000000000000000000000000000000000000000000000000000c134f0000001200000000000000000000000000000000000000000000000000000000000c133f00000000000000000000000000000000000000000000000000000000000c134000000000000000000000000000000000000000000000000000000000000c134100000000000000000000000000000000000000000000000000000000000c134200000000000000000000000000000000000000000000000000000000000c134300000000000000000000000000000000000000000000000000000000000c134400000000000000000000000000000000000000000000000000000000000c134500000000000000000000000000000000000000000000000000000000000c134600000000000000000000000000000000000000000000000000000000000c134700000000000000000000000000000000000000000000000000000000000c134800000000000000000000000000000000000000000000000000000000000c134900000000000000000000000000000000000000000000000000000000000c134a00000000000000000000000000000000000000000000000000000000000c134b00000000000000000000000000000000000000000000000000000000000c134c00000000000000000000000000000000000000000000000000000000000c134d00000000000000000000000000000000000000000000000000000000000c134e00000000000000000000000000000000000000000000000000000000000c134f00000000000000000000000000000000000000000000000000000000000c135000000012000000000000282645e1aa52043f2090e0db6e04d18abccdd8c8b48025cde1e59dd8fa31a9770000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000010100100000000000000000000000000000000000000000000000000000000001010020000000000000000000000000000000000000000000000000000000000101003000000000000000000000000000000000000000000000000000000000010100400000000000000000000000000000000000000000000000000000000001010050000000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000010100700000000000000000000000000000000000000000000000000000000001010080000000000000000000000000000000000000000000000000000000000101009000000000000000000000000000000000000000000000000000000000010100a000000000000000000000000000000000000000000000000000000000010100b000000000000000000000000000000000000000000000000000000000010100c000000000000000000000000000000000000000000000000000000000010100d000000000000000000000000000000000000000000000000000000000010100e000000000000000000000000000000000000000000000000000000000010100f0000000000000000000000000000000000000000000000000000000000101010000000000000000000000000000000000000000000000000000000000010101100000000000000000000000000000000000000000000000000000000001010120000000000000000000000000000000000000000000000000000000000101013000000000000000000000000000000000000000000000000000000000010101400000000000000000000000000000000000000000000000000000000001010150000000000000000000000000000000000000000000000000000000000101016000000000000000000000000000000000000000000000000000000000010101700000000000000000000000000000000000000000000000000000000001010180000000000000000000000000000000000000000000000000000000000101019000000000000000000000000000000000000000000000000000000000010101a000000000000000000000000000000000000000000000000000000000010101b000000000000000000000000000000000000000000000000000000000010101c000000000000000000000000000000000000000000000000000000000010101d000000000000000000000000000000000000000000000000000000000010101e000000000000000000000000000000000000000000000000000000000010101f0000000000000000000000000000000000000000000000000000000000101020000000000000000000000000000000000000000000000000000000000010102100000000000000000000000000000000000000000000000000000000001010220000000000000000000000000000000000000000000000000000000000101023000000000000000000000000000000000000000000000000000000000010102400000000000000000000000000000000000000000000000000000000001010250000000000000000000000000000000000000000000000000000000000101026000000000000000000000000000000000000000000000000000000000010102700000000000000000000000000000000000000000000000000000000001010280000000000000000000000000000000000000000000000000000000000101029000000000000000000000000000000000000000000000000000000000010102a000000000000000000000000000000000000000000000000000000000010102b000000000000000000000000000000000000000000000000000000000010102c000000000000000000000000000000000000000000000000000000000010102d000000000000000000000000000000000000000000000000000000000010102e000000000000000000000000000000000000000000000000000000000010102f0000000000000000000000000000000000000000000000000000000000101030000000000000000000000000000000000000000000000000000000000010103100000000000000000000000000000000000000000000000000000000001010320000000000000000000000000000000000000000000000000000000000101033000000000000000000000000000000000000000000000000000000000010103400000000000000000000000000000000000000000000000000000000001010350000000000000000000000000000000000000000000000000000000000101036000000000000000000000000000000000000000000000000000000000010103700000000000000000000000000000000000000000000000000000000001010380000000000000000000000000000000000000000000000000000000000101039000000000000000000000000000000000000000000000000000000000010103a000000000000000000000000000000000000000000000000000000000010103b000000000000000000000000000000000000000000000000000000000010103c000000000000000000000000000000000000000000000000000000000010103d000000000000000000000000000000000000000000000000000000000010103e000000000000000000000000000000000000000000000000000000000010103f4000000000000000000000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000000000101100000000000000000000000000000000000000000000000000000000000010110100000000000000000000000000000000000000000000000000000000001011020000000000000000000000000000000000000000000000000000000000101103000000000000000000000000000000000000000000000000000000000010110400000000000000000000000000000000000000000000000000000000001011050000000000000000000000000000000000000000000000000000000000101106000000000000000000000000000000000000000000000000000000000010110700000000000000000000000000000000000000000000000000000000001011080000000000000000000000000000000000000000000000000000000000101109000000000000000000000000000000000000000000000000000000000010110a000000000000000000000000000000000000000000000000000000000010110b000000000000000000000000000000000000000000000000000000000010110c000000000000000000000000000000000000000000000000000000000010110d000000000000000000000000000000000000000000000000000000000010110e000000000000000000000000000000000000000000000000000000000010110f0000000000000000000000000000000000000000000000000000000000101110000000000000000000000000000000000000000000000000000000000010111100000000000000000000000000000000000000000000000000000000001011120000000000000000000000000000000000000000000000000000000000101113000000000000000000000000000000000000000000000000000000000010111400000000000000000000000000000000000000000000000000000000001011150000000000000000000000000000000000000000000000000000000000101116000000000000000000000000000000000000000000000000000000000010111700000000000000000000000000000000000000000000000000000000001011180000000000000000000000000000000000000000000000000000000000101119000000000000000000000000000000000000000000000000000000000010111a000000000000000000000000000000000000000000000000000000000010111b000000000000000000000000000000000000000000000000000000000010111c000000000000000000000000000000000000000000000000000000000010111d000000000000000000000000000000000000000000000000000000000010111e000000000000000000000000000000000000000000000000000000000010111f0000000000000000000000000000000000000000000000000000000000101120000000000000000000000000000000000000000000000000000000000010112100000000000000000000000000000000000000000000000000000000001011220000000000000000000000000000000000000000000000000000000000101123000000000000000000000000000000000000000000000000000000000010112400000000000000000000000000000000000000000000000000000000001011250000000000000000000000000000000000000000000000000000000000101126000000000000000000000000000000000000000000000000000000000010112700000000000000000000000000000000000000000000000000000000001011280000000000000000000000000000000000000000000000000000000000101129000000000000000000000000000000000000000000000000000000000010112a000000000000000000000000000000000000000000000000000000000010112b000000000000000000000000000000000000000000000000000000000010112c000000000000000000000000000000000000000000000000000000000010112d000000000000000000000000000000000000000000000000000000000010112e000000000000000000000000000000000000000000000000000000000010112f0000000000000000000000000000000000000000000000000000000000101130000000000000000000000000000000000000000000000000000000000010113100000000000000000000000000000000000000000000000000000000001011320000000000000000000000000000000000000000000000000000000000101133000000000000000000000000000000000000000000000000000000000010113400000000000000000000000000000000000000000000000000000000001011350000000000000000000000000000000000000000000000000000000000101136000000000000000000000000000000000000000000000000000000000010113700000000000000000000000000000000000000000000000000000000001011380000000000000000000000000000000000000000000000000000000000101139000000000000000000000000000000000000000000000000000000000010113a000000000000000000000000000000000000000000000000000000000010113b000000000000000000000000000000000000000000000000000000000010113c000000000000000000000000000000000000000000000000000000000010113d000000000000000000000000000000000000000000000000000000000010113e08001790a679d3716b68fe4923616e234005918acd822bcc4ee8391ee526366e6000e29a714f3a1481f66d186077e4471803e542f4a8c165a5dc51359b0b5c04220050dbc735880ca3e38c57fd0510fb34541b132ae9eb6d7b88ae69fc16df197500cc7847321bda78d6d60dc09b0e3d75b350174e8ad07eb2a51c0a9afeb3c51700cd0fa6b6fc4c5859760aba07f5f5e0c714b57e55b13692fbbfe48f9e6bee5d00d4e93fc3e1a3d729afc451308365e07a5ec3fe8a220a4bcf93d09801703d3c00f7facd28c2650b9391380a08a9f583db4deed48993279a2253980d7a7c84d300e6143b86a0332ebe75bf78307054245c7b8ce8dd7130d477bcb691e1e51d82400000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000000000000000000000000000000010200a0000000000000000000000000000000000000000000000000000000000102001000000000000000000000000000000000000000000000000000000000010200b0000000000000000000000000000000000000000000000000000000000102002000000000000000000000000000000000000000000000000000000000010200c0000000000000000000000000000000000000000000000000000000000102003000000000000000000000000000000000000000000000000000000000010200d0000000000000000000000000000000000000000000000000000000000102004000000000000000000000000000000000000000000000000000000000010200e0000000000000000000000000000000000000000000000000000000000102005000000000000000000000000000000000000000000000000000000000010200f00000000000000000000000000000000000000000000000000000000001020060000000000000000000000000000000000000000000000000000000000102010000000000000000000000000000000000000000000000000000000000010200700000000000000000000000000000000000000000000000000000000001020110000000000000000000000000000000000000000000000000000000000102008000000000000000000000000000000000000000000000000000000000010201200000000000000000000000000000000000000000000000000000000001020090000000000000000000000000000000000000000000000000000000000102013000000000000000000000000000000000000000000000000000000000010200a0000000000000000000000000000000000000000000000000000000000102014000000000000000000000000000000000000000000000000000000000010200b0000000000000000000000000000000000000000000000000000000000102015000000000000000000000000000000000000000000000000000000000010200c0000000000000000000000000000000000000000000000000000000000102016000000000000000000000000000000000000000000000000000000000010200d0000000000000000000000000000000000000000000000000000000000102017000000000000000000000000000000000000000000000000000000000010200e0000000000000000000000000000000000000000000000000000000000102018000000000000000000000000000000000000000000000000000000000010200f00000000000000000000000000000000000000000000000000000000001020190000000000000000000000000000000000000000000000000000000000102010000000000000000000000000000000000000000000000000000000000010201a0000000000000000000000000000000000000000000000000000000000102011000000000000000000000000000000000000000000000000000000000010201b0000000000000000000000000000000000000000000000000000000000102012000000000000000000000000000000000000000000000000000000000010201c0000000000000000000000000000000000000000000000000000000000102013000000000000000000000000000000000000000000000000000000000010201d0000000000000000000000000000000000000000000000000000000000102014000000000000000000000000000000000000000000000000000000000010201e0000000000000000000000000000000000000000000000000000000000102015000000000000000000000000000000000000000000000000000000000010201f00000000000000000000000000000000000000000000000000000000001020160000000000000000000000000000000000000000000000000000000000102020000000000000000000000000000000000000000000000000000000000010201700000000000000000000000000000000000000000000000000000000001020210000000000000000000000000000000000000000000000000000000000102018000000000000000000000000000000000000000000000000000000000010202200000000000000000000000000000000000000000000000000000000001020190000000000000000000000000000000000000000000000000000000000102023000000000000000000000000000000000000000000000000000000000010201a0000000000000000000000000000000000000000000000000000000000102024000000000000000000000000000000000000000000000000000000000010201b0000000000000000000000000000000000000000000000000000000000102025000000000000000000000000000000000000000000000000000000000010201c0000000000000000000000000000000000000000000000000000000000102026000000000000000000000000000000000000000000000000000000000010201d0000000000000000000000000000000000000000000000000000000000102027000000000000000000000000000000000000000000000000000000000010201e0000000000000000000000000000000000000000000000000000000000102028000000000000000000000000000000000000000000000000000000000010201f00000000000000000000000000000000000000000000000000000000001020290000000000000000000000000000000000000000000000000000000000102020000000000000000000000000000000000000000000000000000000000010202a0000000000000000000000000000000000000000000000000000000000102021000000000000000000000000000000000000000000000000000000000010202b0000000000000000000000000000000000000000000000000000000000102022000000000000000000000000000000000000000000000000000000000010202c0000000000000000000000000000000000000000000000000000000000102023000000000000000000000000000000000000000000000000000000000010202d0000000000000000000000000000000000000000000000000000000000102024000000000000000000000000000000000000000000000000000000000010202e0000000000000000000000000000000000000000000000000000000000102025000000000000000000000000000000000000000000000000000000000010202f00000000000000000000000000000000000000000000000000000000001020260000000000000000000000000000000000000000000000000000000000102030000000000000000000000000000000000000000000000000000000000010202700000000000000000000000000000000000000000000000000000000001020310000000000000000000000000000000000000000000000000000000000102028000000000000000000000000000000000000000000000000000000000010203200000000000000000000000000000000000000000000000000000000001020290000000000000000000000000000000000000000000000000000000000102033000000000000000000000000000000000000000000000000000000000010202a0000000000000000000000000000000000000000000000000000000000102034000000000000000000000000000000000000000000000000000000000010202b0000000000000000000000000000000000000000000000000000000000102035000000000000000000000000000000000000000000000000000000000010202c0000000000000000000000000000000000000000000000000000000000102036000000000000000000000000000000000000000000000000000000000010202d0000000000000000000000000000000000000000000000000000000000102037000000000000000000000000000000000000000000000000000000000010202e0000000000000000000000000000000000000000000000000000000000102038000000000000000000000000000000000000000000000000000000000010202f00000000000000000000000000000000000000000000000000000000001020390000000000000000000000000000000000000000000000000000000000102030000000000000000000000000000000000000000000000000000000000010203a0000000000000000000000000000000000000000000000000000000000102031000000000000000000000000000000000000000000000000000000000010203b0000000000000000000000000000000000000000000000000000000000102032000000000000000000000000000000000000000000000000000000000010203c0000000000000000000000000000000000000000000000000000000000102033000000000000000000000000000000000000000000000000000000000010203d0000000000000000000000000000000000000000000000000000000000102034000000000000000000000000000000000000000000000000000000000010203e0000000000000000000000000000000000000000000000000000000000102035000000000000000000000000000000000000000000000000000000000010203f00000000000000000000000000000000000000000000000000000000001020360000000000000000000000000000000000000000000000000000000000102040000000000000000000000000000000000000000000000000000000000010203700000000000000000000000000000000000000000000000000000000001020410000000000000000000000000000000000000000000000000000000000102038000000000000000000000000000000000000000000000000000000000010204200000000000000000000000000000000000000000000000000000000001020390000000000000000000000000000000000000000000000000000000000102043000000000000000000000000000000000000000000000000000000000010203a0000000000000000000000000000000000000000000000000000000000102044000000000000000000000000000000000000000000000000000000000010203b0000000000000000000000000000000000000000000000000000000000102045000000000000000000000000000000000000000000000000000000000010203c0000000000000000000000000000000000000000000000000000000000102046000000000000000000000000000000000000000000000000000000000010203d0000000000000000000000000000000000000000000000000000000000102047000000000000000000000000000000000000000000000000000000000010203e0000000000000000000000000000000000000000000000000000000000102048000000000000000000000000000000000000000000000000000000000010203f0000000000000000000000000000000000000000000000000000000000102049400000000000000000000000000000000000000000000000000000000000101300000000000000000000000000000000000000000000000000000000000010130100000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000012000000000000000000000000000000000000000000000000000000000010130100000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000001200000000000000000000000000000000000000000000000000000000001013020000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000120000000000000000000000000000000000000000000000000000000000101303000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000012000000000000000000000000000000000000000000000000000000000010130400000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000001200000000000000000000000000000000000000000000000000000000001013050000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000120000000000000000000000000000000000000000000000000000000000101306000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000012000000000000000000000000000000000000000000000000000000000010130700000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000001200000000000000000000000000000000000000000000000000000000001013080000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000120000000000000000000000000000000000000000000000000000000000101309000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a00000012000000000000000000000000000000000000000000000000000000000010130a000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b00000012000000000000000000000000000000000000000000000000000000000010130b000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c00000012000000000000000000000000000000000000000000000000000000000010130c000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d00000012000000000000000000000000000000000000000000000000000000000010130d000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e00000012000000000000000000000000000000000000000000000000000000000010130e000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f00000012000000000000000000000000000000000000000000000000000000000010130f0000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000120000000000000000000000000000000000000000000000000000000000101310000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000012000000000000000000000000000000000000000000000000000000000010131100000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000001200000000000000000000000000000000000000000000000000000000001013120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000120000000000000000000000000000000000000000000000000000000000101313000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000012000000000000000000000000000000000000000000000000000000000010131400000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000001200000000000000000000000000000000000000000000000000000000001013150000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000120000000000000000000000000000000000000000000000000000000000101316000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000012000000000000000000000000000000000000000000000000000000000010131700000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000001200000000000000000000000000000000000000000000000000000000001013180000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000120000000000000000000000000000000000000000000000000000000000101319000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a00000012000000000000000000000000000000000000000000000000000000000010131a000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b00000012000000000000000000000000000000000000000000000000000000000010131b000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c00000012000000000000000000000000000000000000000000000000000000000010131c000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d00000012000000000000000000000000000000000000000000000000000000000010131d000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e00000012000000000000000000000000000000000000000000000000000000000010131e000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f00000012000000000000000000000000000000000000000000000000000000000010131f0000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000120000000000000000000000000000000000000000000000000000000000101320000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000012000000000000000000000000000000000000000000000000000000000010132100000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000001200000000000000000000000000000000000000000000000000000000001013220000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000120000000000000000000000000000000000000000000000000000000000101323000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000012000000000000000000000000000000000000000000000000000000000010132400000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000001200000000000000000000000000000000000000000000000000000000001013250000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000120000000000000000000000000000000000000000000000000000000000101326000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000012000000000000000000000000000000000000000000000000000000000010132700000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000001200000000000000000000000000000000000000000000000000000000001013280000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000120000000000000000000000000000000000000000000000000000000000101329000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a00000012000000000000000000000000000000000000000000000000000000000010132a000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b00000012000000000000000000000000000000000000000000000000000000000010132b000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c00000012000000000000000000000000000000000000000000000000000000000010132c000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d00000012000000000000000000000000000000000000000000000000000000000010132d000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e00000012000000000000000000000000000000000000000000000000000000000010132e000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f00000012000000000000000000000000000000000000000000000000000000000010132f0000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000120000000000000000000000000000000000000000000000000000000000101330000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000012000000000000000000000000000000000000000000000000000000000010133100000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000001200000000000000000000000000000000000000000000000000000000001013320000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000120000000000000000000000000000000000000000000000000000000000101333000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000012000000000000000000000000000000000000000000000000000000000010133400000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000001200000000000000000000000000000000000000000000000000000000001013350000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000120000000000000000000000000000000000000000000000000000000000101336000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000012000000000000000000000000000000000000000000000000000000000010133700000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000001200000000000000000000000000000000000000000000000000000000001013380000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000120000000000000000000000000000000000000000000000000000000000101339000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a00000012000000000000000000000000000000000000000000000000000000000010133a000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b00000012000000000000000000000000000000000000000000000000000000000010133b000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c00000012000000000000000000000000000000000000000000000000000000000010133c000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d00000012000000000000000000000000000000000000000000000000000000000010133d000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e00000012000000000000000000000000000000000000000000000000000000000010133e000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e000000000000000000000000000000000000000000000000000000000010134f00000012000000000000000000000000000000000000000000000000000000000010133f0000000000000000000000000000000000000000000000000000000000101340000000000000000000000000000000000000000000000000000000000010134100000000000000000000000000000000000000000000000000000000001013420000000000000000000000000000000000000000000000000000000000101343000000000000000000000000000000000000000000000000000000000010134400000000000000000000000000000000000000000000000000000000001013450000000000000000000000000000000000000000000000000000000000101346000000000000000000000000000000000000000000000000000000000010134700000000000000000000000000000000000000000000000000000000001013480000000000000000000000000000000000000000000000000000000000101349000000000000000000000000000000000000000000000000000000000010134a000000000000000000000000000000000000000000000000000000000010134b000000000000000000000000000000000000000000000000000000000010134c000000000000000000000000000000000000000000000000000000000010134d000000000000000000000000000000000000000000000000000000000010134e000000000000000000000000000000000000000000000000000000000010134f0000000000000000000000000000000000000000000000000000000000101350000000120000000000", "header": { "lastArchiveRoot": "0x1f8c805403d88ee809d3cb3e52eeba0a104f69968cdb844a9cbdf1e9e00b3a95", - "blockHeadersHash": "0x12ea910194be3540d87f32fa0d054827c96ec25f8711e9be27415a96c5f9e371", - "contentCommitment": { - "blobsHash": "0x00f95ec119c2a0ed2d5722f377265eb0a96dc1bffda2b9f00551f0f862e09a73", - "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", - "outHash": "0x002e82477c606d2d8bb80411071ccf6db1287e945cedd17517268115e94a693c" - }, + "blockHeadersHash": "0x1ddc532d3dcb8bfe86acb27859a6d0ed6200aa9d75fe5da4ef4dc2b8b268db2f", + "blobsHash": "0x00e69804ee86a438b879576d1289bd46f0d513bd0e090259da8642077576c26b", + "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", "slotNumber": 102, - "timestamp": 1763996865, - "coinbase": "0x5398115553bbb6aa38eaaeb26e62e5e015bcee17", - "feeRecipient": "0x19f2876a896acae1d397cd9c75e30c3cffc9ffff3fe9267113f6a3e887499d66", + "timestamp": 1767622386, + "coinbase": "0x92370154dc5a9dd2cdc34e345aae740cc52bf0c4", + "feeRecipient": "0x272266fe78f17445bc1c541e6adcb1226d6e654c33be8c6e945bbdcd76538105", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 19870 + "feePerL2Gas": 7191420 }, "totalManaUsed": 0 }, - "headerHash": "0x00ab1057c2c82305c70c697ad8f05d7044d66d101d71aa915e971770b44d5a93", + "headerHash": "0x00775bd2e5a5d32734313d8660bd4b25546dedc830234ab37a8e262e249b675b", "numTxs": 4 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/mixed_checkpoint_2.json b/l1-contracts/test/fixtures/mixed_checkpoint_2.json index 104939d6693a..df49e73dab2e 100644 --- a/l1-contracts/test/fixtures/mixed_checkpoint_2.json +++ b/l1-contracts/test/fixtures/mixed_checkpoint_2.json @@ -58,30 +58,27 @@ ] }, "checkpoint": { - "archive": "0x1ca5833936def700692599063ad95136a0e4c8e7d1efc5d98e5eca3fc9f582f3", - "blobCommitments": "0x02a3240cfb766e8990f11ff4f8b0d9d112da0d7cf65484467981aac9324a08f31d017c21b75461947b9375b9ffde70f569999da00d129ceb4415d4a5cf98ae87d20850f7be79213bf462235a10f8b4caea91d65ccd741605cebbad1adc0ed8b57f", - "batchedBlobInputs": "0x019b96ebba963ec66049bf6fa8e4e6b987554d0c4104cee6fa3e6c84544202f81b1a33d21f25a6f535f166378fa6c866808e81a5f3c5d745325c00d99639e41665535afb5ecd3cf299e32b07efa5811ab091e658e0361f2c76a83d4318d92c1db9ef494ddfbc69e7ece5462362b100159d49896028329785c48454ad77d038f0222755217b7847e58e1d47642672be6886da91439394fa19e582fc43a66562b8b58b9666e94d25dfbe2b43623b59b208764e2a3e76a07190ce01d3c80706f2cf", + "archive": "0x20058ced121a8111f42e7555ec3f09fe578b810f0c5816fc749dc81036bebf38", + "blobCommitments": "0x028706869e685e165f57ed601bd2cfb882fb3c1422d14e7e7b1fad4497374ea55b680fdd2f62903ef00e260e8769470aadb0e0a30bbda745e4a82b64a8e5d1931323f01f2623ffd35202012bc861fa0ead9c76330c09e487add6bf093eba0ca9fb", + "batchedBlobInputs": "0x01d126e4074748fa1d4d9e023ac5a8ee826c3c0f4a444bc0ac2d8d65ffae03b101624cead0227a325b643949c4c68673c4a5cb1b948a6e965d6eaf236107a9ef639c9ff0a0bbc9838b08d75c33962e939aa348c7b0a844326aac04b9f5aad8ae87a22d6d96ff8229bb600f5d17f163881d422d11396f74829ea49d2044e125e5c7c228beb5e7a076d5d3ba80c58fd9ab8490a2451121edc4a4103706d91bba36fc12fac5edce6666ac3294f28d7b1b6973878351658739d1e7bc4cf8a7337de9", "checkpointNumber": 2, - "body": "0x00000004002bf867d2c009106ac8eafa691a184d6b75a7f72643bd4b30668c131606f590cf0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000000000014100100000000000000000000000000000000000000000000000000000000001410020000000000000000000000000000000000000000000000000000000000141003000000000000000000000000000000000000000000000000000000000014100400000000000000000000000000000000000000000000000000000000001410050000000000000000000000000000000000000000000000000000000000141006000000000000000000000000000000000000000000000000000000000014100700000000000000000000000000000000000000000000000000000000001410080000000000000000000000000000000000000000000000000000000000141009000000000000000000000000000000000000000000000000000000000014100a000000000000000000000000000000000000000000000000000000000014100b000000000000000000000000000000000000000000000000000000000014100c000000000000000000000000000000000000000000000000000000000014100d000000000000000000000000000000000000000000000000000000000014100e000000000000000000000000000000000000000000000000000000000014100f0000000000000000000000000000000000000000000000000000000000141010000000000000000000000000000000000000000000000000000000000014101100000000000000000000000000000000000000000000000000000000001410120000000000000000000000000000000000000000000000000000000000141013000000000000000000000000000000000000000000000000000000000014101400000000000000000000000000000000000000000000000000000000001410150000000000000000000000000000000000000000000000000000000000141016000000000000000000000000000000000000000000000000000000000014101700000000000000000000000000000000000000000000000000000000001410180000000000000000000000000000000000000000000000000000000000141019000000000000000000000000000000000000000000000000000000000014101a000000000000000000000000000000000000000000000000000000000014101b000000000000000000000000000000000000000000000000000000000014101c000000000000000000000000000000000000000000000000000000000014101d000000000000000000000000000000000000000000000000000000000014101e000000000000000000000000000000000000000000000000000000000014101f0000000000000000000000000000000000000000000000000000000000141020000000000000000000000000000000000000000000000000000000000014102100000000000000000000000000000000000000000000000000000000001410220000000000000000000000000000000000000000000000000000000000141023000000000000000000000000000000000000000000000000000000000014102400000000000000000000000000000000000000000000000000000000001410250000000000000000000000000000000000000000000000000000000000141026000000000000000000000000000000000000000000000000000000000014102700000000000000000000000000000000000000000000000000000000001410280000000000000000000000000000000000000000000000000000000000141029000000000000000000000000000000000000000000000000000000000014102a000000000000000000000000000000000000000000000000000000000014102b000000000000000000000000000000000000000000000000000000000014102c000000000000000000000000000000000000000000000000000000000014102d000000000000000000000000000000000000000000000000000000000014102e000000000000000000000000000000000000000000000000000000000014102f0000000000000000000000000000000000000000000000000000000000141030000000000000000000000000000000000000000000000000000000000014103100000000000000000000000000000000000000000000000000000000001410320000000000000000000000000000000000000000000000000000000000141033000000000000000000000000000000000000000000000000000000000014103400000000000000000000000000000000000000000000000000000000001410350000000000000000000000000000000000000000000000000000000000141036000000000000000000000000000000000000000000000000000000000014103700000000000000000000000000000000000000000000000000000000001410380000000000000000000000000000000000000000000000000000000000141039000000000000000000000000000000000000000000000000000000000014103a000000000000000000000000000000000000000000000000000000000014103b000000000000000000000000000000000000000000000000000000000014103c000000000000000000000000000000000000000000000000000000000014103d000000000000000000000000000000000000000000000000000000000014103e000000000000000000000000000000000000000000000000000000000014103f4000000000000000000000000000000000000000000000000000000000001400010000000000000000000000000000000000000000000000000000000000141100000000000000000000000000000000000000000000000000000000000014110100000000000000000000000000000000000000000000000000000000001411020000000000000000000000000000000000000000000000000000000000141103000000000000000000000000000000000000000000000000000000000014110400000000000000000000000000000000000000000000000000000000001411050000000000000000000000000000000000000000000000000000000000141106000000000000000000000000000000000000000000000000000000000014110700000000000000000000000000000000000000000000000000000000001411080000000000000000000000000000000000000000000000000000000000141109000000000000000000000000000000000000000000000000000000000014110a000000000000000000000000000000000000000000000000000000000014110b000000000000000000000000000000000000000000000000000000000014110c000000000000000000000000000000000000000000000000000000000014110d000000000000000000000000000000000000000000000000000000000014110e000000000000000000000000000000000000000000000000000000000014110f0000000000000000000000000000000000000000000000000000000000141110000000000000000000000000000000000000000000000000000000000014111100000000000000000000000000000000000000000000000000000000001411120000000000000000000000000000000000000000000000000000000000141113000000000000000000000000000000000000000000000000000000000014111400000000000000000000000000000000000000000000000000000000001411150000000000000000000000000000000000000000000000000000000000141116000000000000000000000000000000000000000000000000000000000014111700000000000000000000000000000000000000000000000000000000001411180000000000000000000000000000000000000000000000000000000000141119000000000000000000000000000000000000000000000000000000000014111a000000000000000000000000000000000000000000000000000000000014111b000000000000000000000000000000000000000000000000000000000014111c000000000000000000000000000000000000000000000000000000000014111d000000000000000000000000000000000000000000000000000000000014111e000000000000000000000000000000000000000000000000000000000014111f0000000000000000000000000000000000000000000000000000000000141120000000000000000000000000000000000000000000000000000000000014112100000000000000000000000000000000000000000000000000000000001411220000000000000000000000000000000000000000000000000000000000141123000000000000000000000000000000000000000000000000000000000014112400000000000000000000000000000000000000000000000000000000001411250000000000000000000000000000000000000000000000000000000000141126000000000000000000000000000000000000000000000000000000000014112700000000000000000000000000000000000000000000000000000000001411280000000000000000000000000000000000000000000000000000000000141129000000000000000000000000000000000000000000000000000000000014112a000000000000000000000000000000000000000000000000000000000014112b000000000000000000000000000000000000000000000000000000000014112c000000000000000000000000000000000000000000000000000000000014112d000000000000000000000000000000000000000000000000000000000014112e000000000000000000000000000000000000000000000000000000000014112f0000000000000000000000000000000000000000000000000000000000141130000000000000000000000000000000000000000000000000000000000014113100000000000000000000000000000000000000000000000000000000001411320000000000000000000000000000000000000000000000000000000000141133000000000000000000000000000000000000000000000000000000000014113400000000000000000000000000000000000000000000000000000000001411350000000000000000000000000000000000000000000000000000000000141136000000000000000000000000000000000000000000000000000000000014113700000000000000000000000000000000000000000000000000000000001411380000000000000000000000000000000000000000000000000000000000141139000000000000000000000000000000000000000000000000000000000014113a000000000000000000000000000000000000000000000000000000000014113b000000000000000000000000000000000000000000000000000000000014113c000000000000000000000000000000000000000000000000000000000014113d000000000000000000000000000000000000000000000000000000000014113e080057602f85fdccac3117547ae1e9feedac263299a34f02b19ca229f6c203209000400355a496b2961dd5954f30f214fa0c5b7b9c4598ccc7882a3fc69dec50bb005c04946202e37fca2fa0bd7d0504c730ac1a707a410c0ed70bd65ad2adb15100dfea6f9eee8d32378436d7ca9e4dda0d48a5ccfb1c6f8ddec286fdf0cb9c81004f5ae4240cb04e72cf44cddb835bc0b5e7f100c01dc3f6678f979e27f19ede00f8ff8aa1edd0f0237d277f829b0847f656ee797c3adf2e7b1074d36f3f63ad00c90a15e3b4697bc2b603d24b615ed869c0f2b61ec8d8e316351996854246b600f24c2cff7402d9d57bd2791337df5a65f0b2f59a4ce3255d94c35f7cf1337440000000000000000000000000000000000000000000000000000000000014020000000000000000000000000000000000000000000000000000000000001402010000000000000000000000000000000000000000000000000000000000142001000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142002000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142003000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142004000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142005000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420060000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014200700000000000000000000000000000000000000000000000000000000001420110000000000000000000000000000000000000000000000000000000000142008000000000000000000000000000000000000000000000000000000000014201200000000000000000000000000000000000000000000000000000000001420090000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142016000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142017000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142011000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142012000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420160000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014201700000000000000000000000000000000000000000000000000000000001420210000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014202200000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142026000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142027000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142021000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142022000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420260000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014202700000000000000000000000000000000000000000000000000000000001420310000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014203200000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142036000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142037000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142031000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142032000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014203f00000000000000000000000000000000000000000000000000000000001420360000000000000000000000000000000000000000000000000000000000142040000000000000000000000000000000000000000000000000000000000014203700000000000000000000000000000000000000000000000000000000001420410000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014204200000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142043000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142044000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142045000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142046000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142047000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142048000000000000000000000000000000000000000000000000000000000014203f0000000000000000000000000000000000000000000000000000000000142049400000000000000000000000000000000000000000000000000000000000141300000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000012000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000001200000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000120000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000012000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000001200000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000120000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000012000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000001200000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000120000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a00000012000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b00000012000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c00000012000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d00000012000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e00000012000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f00000012000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000120000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000012000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000001200000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000012000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000001200000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000120000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000012000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000001200000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000120000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a00000012000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b00000012000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c00000012000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d00000012000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e00000012000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f00000012000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000120000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000012000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000001200000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000120000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000012000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000001200000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000120000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000012000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000001200000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000120000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a00000012000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b00000012000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c00000012000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d00000012000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e00000012000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f00000012000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000120000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000012000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000001200000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000120000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000012000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000001200000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000120000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000012000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000001200000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000120000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a00000012000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b00000012000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c00000012000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d00000012000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e00000012000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f00000012000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f0000000000000000000000000000000000000000000000000000000000141350000000120000000000001f3a1309458ab3209d52791cea63945713960ee5c3f21118efac741d6899610f0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000181000000000000000000000000000000000000000000000000000000000000018100100000000000000000000000000000000000000000000000000000000001810020000000000000000000000000000000000000000000000000000000000181003000000000000000000000000000000000000000000000000000000000018100400000000000000000000000000000000000000000000000000000000001810050000000000000000000000000000000000000000000000000000000000181006000000000000000000000000000000000000000000000000000000000018100700000000000000000000000000000000000000000000000000000000001810080000000000000000000000000000000000000000000000000000000000181009000000000000000000000000000000000000000000000000000000000018100a000000000000000000000000000000000000000000000000000000000018100b000000000000000000000000000000000000000000000000000000000018100c000000000000000000000000000000000000000000000000000000000018100d000000000000000000000000000000000000000000000000000000000018100e000000000000000000000000000000000000000000000000000000000018100f0000000000000000000000000000000000000000000000000000000000181010000000000000000000000000000000000000000000000000000000000018101100000000000000000000000000000000000000000000000000000000001810120000000000000000000000000000000000000000000000000000000000181013000000000000000000000000000000000000000000000000000000000018101400000000000000000000000000000000000000000000000000000000001810150000000000000000000000000000000000000000000000000000000000181016000000000000000000000000000000000000000000000000000000000018101700000000000000000000000000000000000000000000000000000000001810180000000000000000000000000000000000000000000000000000000000181019000000000000000000000000000000000000000000000000000000000018101a000000000000000000000000000000000000000000000000000000000018101b000000000000000000000000000000000000000000000000000000000018101c000000000000000000000000000000000000000000000000000000000018101d000000000000000000000000000000000000000000000000000000000018101e000000000000000000000000000000000000000000000000000000000018101f0000000000000000000000000000000000000000000000000000000000181020000000000000000000000000000000000000000000000000000000000018102100000000000000000000000000000000000000000000000000000000001810220000000000000000000000000000000000000000000000000000000000181023000000000000000000000000000000000000000000000000000000000018102400000000000000000000000000000000000000000000000000000000001810250000000000000000000000000000000000000000000000000000000000181026000000000000000000000000000000000000000000000000000000000018102700000000000000000000000000000000000000000000000000000000001810280000000000000000000000000000000000000000000000000000000000181029000000000000000000000000000000000000000000000000000000000018102a000000000000000000000000000000000000000000000000000000000018102b000000000000000000000000000000000000000000000000000000000018102c000000000000000000000000000000000000000000000000000000000018102d000000000000000000000000000000000000000000000000000000000018102e000000000000000000000000000000000000000000000000000000000018102f0000000000000000000000000000000000000000000000000000000000181030000000000000000000000000000000000000000000000000000000000018103100000000000000000000000000000000000000000000000000000000001810320000000000000000000000000000000000000000000000000000000000181033000000000000000000000000000000000000000000000000000000000018103400000000000000000000000000000000000000000000000000000000001810350000000000000000000000000000000000000000000000000000000000181036000000000000000000000000000000000000000000000000000000000018103700000000000000000000000000000000000000000000000000000000001810380000000000000000000000000000000000000000000000000000000000181039000000000000000000000000000000000000000000000000000000000018103a000000000000000000000000000000000000000000000000000000000018103b000000000000000000000000000000000000000000000000000000000018103c000000000000000000000000000000000000000000000000000000000018103d000000000000000000000000000000000000000000000000000000000018103e000000000000000000000000000000000000000000000000000000000018103f4000000000000000000000000000000000000000000000000000000000001800010000000000000000000000000000000000000000000000000000000000181100000000000000000000000000000000000000000000000000000000000018110100000000000000000000000000000000000000000000000000000000001811020000000000000000000000000000000000000000000000000000000000181103000000000000000000000000000000000000000000000000000000000018110400000000000000000000000000000000000000000000000000000000001811050000000000000000000000000000000000000000000000000000000000181106000000000000000000000000000000000000000000000000000000000018110700000000000000000000000000000000000000000000000000000000001811080000000000000000000000000000000000000000000000000000000000181109000000000000000000000000000000000000000000000000000000000018110a000000000000000000000000000000000000000000000000000000000018110b000000000000000000000000000000000000000000000000000000000018110c000000000000000000000000000000000000000000000000000000000018110d000000000000000000000000000000000000000000000000000000000018110e000000000000000000000000000000000000000000000000000000000018110f0000000000000000000000000000000000000000000000000000000000181110000000000000000000000000000000000000000000000000000000000018111100000000000000000000000000000000000000000000000000000000001811120000000000000000000000000000000000000000000000000000000000181113000000000000000000000000000000000000000000000000000000000018111400000000000000000000000000000000000000000000000000000000001811150000000000000000000000000000000000000000000000000000000000181116000000000000000000000000000000000000000000000000000000000018111700000000000000000000000000000000000000000000000000000000001811180000000000000000000000000000000000000000000000000000000000181119000000000000000000000000000000000000000000000000000000000018111a000000000000000000000000000000000000000000000000000000000018111b000000000000000000000000000000000000000000000000000000000018111c000000000000000000000000000000000000000000000000000000000018111d000000000000000000000000000000000000000000000000000000000018111e000000000000000000000000000000000000000000000000000000000018111f0000000000000000000000000000000000000000000000000000000000181120000000000000000000000000000000000000000000000000000000000018112100000000000000000000000000000000000000000000000000000000001811220000000000000000000000000000000000000000000000000000000000181123000000000000000000000000000000000000000000000000000000000018112400000000000000000000000000000000000000000000000000000000001811250000000000000000000000000000000000000000000000000000000000181126000000000000000000000000000000000000000000000000000000000018112700000000000000000000000000000000000000000000000000000000001811280000000000000000000000000000000000000000000000000000000000181129000000000000000000000000000000000000000000000000000000000018112a000000000000000000000000000000000000000000000000000000000018112b000000000000000000000000000000000000000000000000000000000018112c000000000000000000000000000000000000000000000000000000000018112d000000000000000000000000000000000000000000000000000000000018112e000000000000000000000000000000000000000000000000000000000018112f0000000000000000000000000000000000000000000000000000000000181130000000000000000000000000000000000000000000000000000000000018113100000000000000000000000000000000000000000000000000000000001811320000000000000000000000000000000000000000000000000000000000181133000000000000000000000000000000000000000000000000000000000018113400000000000000000000000000000000000000000000000000000000001811350000000000000000000000000000000000000000000000000000000000181136000000000000000000000000000000000000000000000000000000000018113700000000000000000000000000000000000000000000000000000000001811380000000000000000000000000000000000000000000000000000000000181139000000000000000000000000000000000000000000000000000000000018113a000000000000000000000000000000000000000000000000000000000018113b000000000000000000000000000000000000000000000000000000000018113c000000000000000000000000000000000000000000000000000000000018113d000000000000000000000000000000000000000000000000000000000018113e08001311d7be859fe766205679180604a937a8d4bd870d6d12edb2db749345b51c006a36f23a5cb4d19f855238d418170e140300192ead60f7ab35312e9c2513b800b26b2c0e63909e88d537840ceb7fc2e3ba764efc546dcccf0fe4c2cfd28c7100025242c4a697eccd73273bf6c4d1b5821c7dcf22789c590b7295100d20ccde00ef98046ac0b4095051c64b82fd69d051a08c3ac20e073f5656e3057b3eccbe00daa2f457ab065009361f9276765fa37f21053db780ce11b9a363dabfc735cf00443966d01fe9717b46d36f729e652c2657e2e7d56d5117ef966cfbd3add32e00ee29f87f39ab1c4c1201bdd331fa5a9a254a1030c1cbdbf6ee82d3fce25c2a40000000000000000000000000000000000000000000000000000000000018020000000000000000000000000000000000000000000000000000000000001802010000000000000000000000000000000000000000000000000000000000182001000000000000000000000000000000000000000000000000000000000018200b0000000000000000000000000000000000000000000000000000000000182002000000000000000000000000000000000000000000000000000000000018200c0000000000000000000000000000000000000000000000000000000000182003000000000000000000000000000000000000000000000000000000000018200d0000000000000000000000000000000000000000000000000000000000182004000000000000000000000000000000000000000000000000000000000018200e0000000000000000000000000000000000000000000000000000000000182005000000000000000000000000000000000000000000000000000000000018200f00000000000000000000000000000000000000000000000000000000001820060000000000000000000000000000000000000000000000000000000000182010000000000000000000000000000000000000000000000000000000000018200700000000000000000000000000000000000000000000000000000000001820110000000000000000000000000000000000000000000000000000000000182008000000000000000000000000000000000000000000000000000000000018201200000000000000000000000000000000000000000000000000000000001820090000000000000000000000000000000000000000000000000000000000182013000000000000000000000000000000000000000000000000000000000018200a0000000000000000000000000000000000000000000000000000000000182014000000000000000000000000000000000000000000000000000000000018200b0000000000000000000000000000000000000000000000000000000000182015000000000000000000000000000000000000000000000000000000000018200c0000000000000000000000000000000000000000000000000000000000182016000000000000000000000000000000000000000000000000000000000018200d0000000000000000000000000000000000000000000000000000000000182017000000000000000000000000000000000000000000000000000000000018200e0000000000000000000000000000000000000000000000000000000000182018000000000000000000000000000000000000000000000000000000000018200f00000000000000000000000000000000000000000000000000000000001820190000000000000000000000000000000000000000000000000000000000182010000000000000000000000000000000000000000000000000000000000018201a0000000000000000000000000000000000000000000000000000000000182011000000000000000000000000000000000000000000000000000000000018201b0000000000000000000000000000000000000000000000000000000000182012000000000000000000000000000000000000000000000000000000000018201c0000000000000000000000000000000000000000000000000000000000182013000000000000000000000000000000000000000000000000000000000018201d0000000000000000000000000000000000000000000000000000000000182014000000000000000000000000000000000000000000000000000000000018201e0000000000000000000000000000000000000000000000000000000000182015000000000000000000000000000000000000000000000000000000000018201f00000000000000000000000000000000000000000000000000000000001820160000000000000000000000000000000000000000000000000000000000182020000000000000000000000000000000000000000000000000000000000018201700000000000000000000000000000000000000000000000000000000001820210000000000000000000000000000000000000000000000000000000000182018000000000000000000000000000000000000000000000000000000000018202200000000000000000000000000000000000000000000000000000000001820190000000000000000000000000000000000000000000000000000000000182023000000000000000000000000000000000000000000000000000000000018201a0000000000000000000000000000000000000000000000000000000000182024000000000000000000000000000000000000000000000000000000000018201b0000000000000000000000000000000000000000000000000000000000182025000000000000000000000000000000000000000000000000000000000018201c0000000000000000000000000000000000000000000000000000000000182026000000000000000000000000000000000000000000000000000000000018201d0000000000000000000000000000000000000000000000000000000000182027000000000000000000000000000000000000000000000000000000000018201e0000000000000000000000000000000000000000000000000000000000182028000000000000000000000000000000000000000000000000000000000018201f00000000000000000000000000000000000000000000000000000000001820290000000000000000000000000000000000000000000000000000000000182020000000000000000000000000000000000000000000000000000000000018202a0000000000000000000000000000000000000000000000000000000000182021000000000000000000000000000000000000000000000000000000000018202b0000000000000000000000000000000000000000000000000000000000182022000000000000000000000000000000000000000000000000000000000018202c0000000000000000000000000000000000000000000000000000000000182023000000000000000000000000000000000000000000000000000000000018202d0000000000000000000000000000000000000000000000000000000000182024000000000000000000000000000000000000000000000000000000000018202e0000000000000000000000000000000000000000000000000000000000182025000000000000000000000000000000000000000000000000000000000018202f00000000000000000000000000000000000000000000000000000000001820260000000000000000000000000000000000000000000000000000000000182030000000000000000000000000000000000000000000000000000000000018202700000000000000000000000000000000000000000000000000000000001820310000000000000000000000000000000000000000000000000000000000182028000000000000000000000000000000000000000000000000000000000018203200000000000000000000000000000000000000000000000000000000001820290000000000000000000000000000000000000000000000000000000000182033000000000000000000000000000000000000000000000000000000000018202a0000000000000000000000000000000000000000000000000000000000182034000000000000000000000000000000000000000000000000000000000018202b0000000000000000000000000000000000000000000000000000000000182035000000000000000000000000000000000000000000000000000000000018202c0000000000000000000000000000000000000000000000000000000000182036000000000000000000000000000000000000000000000000000000000018202d0000000000000000000000000000000000000000000000000000000000182037000000000000000000000000000000000000000000000000000000000018202e0000000000000000000000000000000000000000000000000000000000182038000000000000000000000000000000000000000000000000000000000018202f00000000000000000000000000000000000000000000000000000000001820390000000000000000000000000000000000000000000000000000000000182030000000000000000000000000000000000000000000000000000000000018203a0000000000000000000000000000000000000000000000000000000000182031000000000000000000000000000000000000000000000000000000000018203b0000000000000000000000000000000000000000000000000000000000182032000000000000000000000000000000000000000000000000000000000018203c0000000000000000000000000000000000000000000000000000000000182033000000000000000000000000000000000000000000000000000000000018203d0000000000000000000000000000000000000000000000000000000000182034000000000000000000000000000000000000000000000000000000000018203e0000000000000000000000000000000000000000000000000000000000182035000000000000000000000000000000000000000000000000000000000018203f00000000000000000000000000000000000000000000000000000000001820360000000000000000000000000000000000000000000000000000000000182040000000000000000000000000000000000000000000000000000000000018203700000000000000000000000000000000000000000000000000000000001820410000000000000000000000000000000000000000000000000000000000182038000000000000000000000000000000000000000000000000000000000018204200000000000000000000000000000000000000000000000000000000001820390000000000000000000000000000000000000000000000000000000000182043000000000000000000000000000000000000000000000000000000000018203a0000000000000000000000000000000000000000000000000000000000182044000000000000000000000000000000000000000000000000000000000018203b0000000000000000000000000000000000000000000000000000000000182045000000000000000000000000000000000000000000000000000000000018203c0000000000000000000000000000000000000000000000000000000000182046000000000000000000000000000000000000000000000000000000000018203d0000000000000000000000000000000000000000000000000000000000182047000000000000000000000000000000000000000000000000000000000018203e0000000000000000000000000000000000000000000000000000000000182048000000000000000000000000000000000000000000000000000000000018203f0000000000000000000000000000000000000000000000000000000000182049400000000000000000000000000000000000000000000000000000000000181300000000000000000000000000000000000000000000000000000000000018130100000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000012000000000000000000000000000000000000000000000000000000000018130100000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000001200000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000120000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000012000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000001200000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000120000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000012000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000001200000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000120000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a00000012000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b00000012000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c00000012000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d00000012000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e00000012000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f00000012000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000120000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000012000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000001200000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000012000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000001200000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000120000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000012000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000001200000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000120000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a00000012000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b00000012000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c00000012000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d00000012000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e00000012000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f00000012000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000120000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000012000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000001200000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000120000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000012000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000001200000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000120000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000012000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000001200000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000120000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a00000012000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b00000012000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c00000012000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d00000012000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e00000012000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f00000012000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000120000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000012000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000001200000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000120000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000012000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000001200000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000120000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000012000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000001200000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000120000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a00000012000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b00000012000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c00000012000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d00000012000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e00000012000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e000000000000000000000000000000000000000000000000000000000018134f00000012000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e000000000000000000000000000000000000000000000000000000000018134f0000000000000000000000000000000000000000000000000000000000181350000000120000000000001e33c6b28b72f6b4e58f7c8911de41cbbc719c57350e5285c7c7fc36c5325ef800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c100100000000000000000000000000000000000000000000000000000000001c100200000000000000000000000000000000000000000000000000000000001c100300000000000000000000000000000000000000000000000000000000001c100400000000000000000000000000000000000000000000000000000000001c100500000000000000000000000000000000000000000000000000000000001c100600000000000000000000000000000000000000000000000000000000001c100700000000000000000000000000000000000000000000000000000000001c100800000000000000000000000000000000000000000000000000000000001c100900000000000000000000000000000000000000000000000000000000001c100a00000000000000000000000000000000000000000000000000000000001c100b00000000000000000000000000000000000000000000000000000000001c100c00000000000000000000000000000000000000000000000000000000001c100d00000000000000000000000000000000000000000000000000000000001c100e00000000000000000000000000000000000000000000000000000000001c100f00000000000000000000000000000000000000000000000000000000001c101000000000000000000000000000000000000000000000000000000000001c101100000000000000000000000000000000000000000000000000000000001c101200000000000000000000000000000000000000000000000000000000001c101300000000000000000000000000000000000000000000000000000000001c101400000000000000000000000000000000000000000000000000000000001c101500000000000000000000000000000000000000000000000000000000001c101600000000000000000000000000000000000000000000000000000000001c101700000000000000000000000000000000000000000000000000000000001c101800000000000000000000000000000000000000000000000000000000001c101900000000000000000000000000000000000000000000000000000000001c101a00000000000000000000000000000000000000000000000000000000001c101b00000000000000000000000000000000000000000000000000000000001c101c00000000000000000000000000000000000000000000000000000000001c101d00000000000000000000000000000000000000000000000000000000001c101e00000000000000000000000000000000000000000000000000000000001c101f00000000000000000000000000000000000000000000000000000000001c102000000000000000000000000000000000000000000000000000000000001c102100000000000000000000000000000000000000000000000000000000001c102200000000000000000000000000000000000000000000000000000000001c102300000000000000000000000000000000000000000000000000000000001c102400000000000000000000000000000000000000000000000000000000001c102500000000000000000000000000000000000000000000000000000000001c102600000000000000000000000000000000000000000000000000000000001c102700000000000000000000000000000000000000000000000000000000001c102800000000000000000000000000000000000000000000000000000000001c102900000000000000000000000000000000000000000000000000000000001c102a00000000000000000000000000000000000000000000000000000000001c102b00000000000000000000000000000000000000000000000000000000001c102c00000000000000000000000000000000000000000000000000000000001c102d00000000000000000000000000000000000000000000000000000000001c102e00000000000000000000000000000000000000000000000000000000001c102f00000000000000000000000000000000000000000000000000000000001c103000000000000000000000000000000000000000000000000000000000001c103100000000000000000000000000000000000000000000000000000000001c103200000000000000000000000000000000000000000000000000000000001c103300000000000000000000000000000000000000000000000000000000001c103400000000000000000000000000000000000000000000000000000000001c103500000000000000000000000000000000000000000000000000000000001c103600000000000000000000000000000000000000000000000000000000001c103700000000000000000000000000000000000000000000000000000000001c103800000000000000000000000000000000000000000000000000000000001c103900000000000000000000000000000000000000000000000000000000001c103a00000000000000000000000000000000000000000000000000000000001c103b00000000000000000000000000000000000000000000000000000000001c103c00000000000000000000000000000000000000000000000000000000001c103d00000000000000000000000000000000000000000000000000000000001c103e00000000000000000000000000000000000000000000000000000000001c103f4000000000000000000000000000000000000000000000000000000000001c000100000000000000000000000000000000000000000000000000000000001c110000000000000000000000000000000000000000000000000000000000001c110100000000000000000000000000000000000000000000000000000000001c110200000000000000000000000000000000000000000000000000000000001c110300000000000000000000000000000000000000000000000000000000001c110400000000000000000000000000000000000000000000000000000000001c110500000000000000000000000000000000000000000000000000000000001c110600000000000000000000000000000000000000000000000000000000001c110700000000000000000000000000000000000000000000000000000000001c110800000000000000000000000000000000000000000000000000000000001c110900000000000000000000000000000000000000000000000000000000001c110a00000000000000000000000000000000000000000000000000000000001c110b00000000000000000000000000000000000000000000000000000000001c110c00000000000000000000000000000000000000000000000000000000001c110d00000000000000000000000000000000000000000000000000000000001c110e00000000000000000000000000000000000000000000000000000000001c110f00000000000000000000000000000000000000000000000000000000001c111000000000000000000000000000000000000000000000000000000000001c111100000000000000000000000000000000000000000000000000000000001c111200000000000000000000000000000000000000000000000000000000001c111300000000000000000000000000000000000000000000000000000000001c111400000000000000000000000000000000000000000000000000000000001c111500000000000000000000000000000000000000000000000000000000001c111600000000000000000000000000000000000000000000000000000000001c111700000000000000000000000000000000000000000000000000000000001c111800000000000000000000000000000000000000000000000000000000001c111900000000000000000000000000000000000000000000000000000000001c111a00000000000000000000000000000000000000000000000000000000001c111b00000000000000000000000000000000000000000000000000000000001c111c00000000000000000000000000000000000000000000000000000000001c111d00000000000000000000000000000000000000000000000000000000001c111e00000000000000000000000000000000000000000000000000000000001c111f00000000000000000000000000000000000000000000000000000000001c112000000000000000000000000000000000000000000000000000000000001c112100000000000000000000000000000000000000000000000000000000001c112200000000000000000000000000000000000000000000000000000000001c112300000000000000000000000000000000000000000000000000000000001c112400000000000000000000000000000000000000000000000000000000001c112500000000000000000000000000000000000000000000000000000000001c112600000000000000000000000000000000000000000000000000000000001c112700000000000000000000000000000000000000000000000000000000001c112800000000000000000000000000000000000000000000000000000000001c112900000000000000000000000000000000000000000000000000000000001c112a00000000000000000000000000000000000000000000000000000000001c112b00000000000000000000000000000000000000000000000000000000001c112c00000000000000000000000000000000000000000000000000000000001c112d00000000000000000000000000000000000000000000000000000000001c112e00000000000000000000000000000000000000000000000000000000001c112f00000000000000000000000000000000000000000000000000000000001c113000000000000000000000000000000000000000000000000000000000001c113100000000000000000000000000000000000000000000000000000000001c113200000000000000000000000000000000000000000000000000000000001c113300000000000000000000000000000000000000000000000000000000001c113400000000000000000000000000000000000000000000000000000000001c113500000000000000000000000000000000000000000000000000000000001c113600000000000000000000000000000000000000000000000000000000001c113700000000000000000000000000000000000000000000000000000000001c113800000000000000000000000000000000000000000000000000000000001c113900000000000000000000000000000000000000000000000000000000001c113a00000000000000000000000000000000000000000000000000000000001c113b00000000000000000000000000000000000000000000000000000000001c113c00000000000000000000000000000000000000000000000000000000001c113d00000000000000000000000000000000000000000000000000000000001c113e080032724de1d6ec869c131859afe6fd33f6f9671c22cb571cc5e694deb1866ccc00b42f417479d2716d26461d44cec542d856294c55df755cbaafb6d731d0102c000a929c0dc3f37349c75878e678bb82cd3f2ada39b278bb841812ec290aca3b00dfbe7d369fe3222f98c449724614c53b1fe2cab20e0ef5b32fa5e3a16756a500790e7c8e3dfe2b8148b0f8c85f89cab718bd1704af7413f510f6697c4baa3100a77eca326aa2a2c4b2c9ec7c2af94aa5f89ed7f5adda05b2c9312adfafac48005b58ed9e335da74a33db99830d12be3dc16a1515dc5538f2337167b9fe6c79007e2c83d687b981fe73fce5ea00b64d859548997e68c1d97ad7bbb62cc56b014000000000000000000000000000000000000000000000000000000000001c020000000000000000000000000000000000000000000000000000000000001c020100000000000000000000000000000000000000000000000000000000001c200100000000000000000000000000000000000000000000000000000000001c200b00000000000000000000000000000000000000000000000000000000001c200200000000000000000000000000000000000000000000000000000000001c200c00000000000000000000000000000000000000000000000000000000001c200300000000000000000000000000000000000000000000000000000000001c200d00000000000000000000000000000000000000000000000000000000001c200400000000000000000000000000000000000000000000000000000000001c200e00000000000000000000000000000000000000000000000000000000001c200500000000000000000000000000000000000000000000000000000000001c200f00000000000000000000000000000000000000000000000000000000001c200600000000000000000000000000000000000000000000000000000000001c201000000000000000000000000000000000000000000000000000000000001c200700000000000000000000000000000000000000000000000000000000001c201100000000000000000000000000000000000000000000000000000000001c200800000000000000000000000000000000000000000000000000000000001c201200000000000000000000000000000000000000000000000000000000001c200900000000000000000000000000000000000000000000000000000000001c201300000000000000000000000000000000000000000000000000000000001c200a00000000000000000000000000000000000000000000000000000000001c201400000000000000000000000000000000000000000000000000000000001c200b00000000000000000000000000000000000000000000000000000000001c201500000000000000000000000000000000000000000000000000000000001c200c00000000000000000000000000000000000000000000000000000000001c201600000000000000000000000000000000000000000000000000000000001c200d00000000000000000000000000000000000000000000000000000000001c201700000000000000000000000000000000000000000000000000000000001c200e00000000000000000000000000000000000000000000000000000000001c201800000000000000000000000000000000000000000000000000000000001c200f00000000000000000000000000000000000000000000000000000000001c201900000000000000000000000000000000000000000000000000000000001c201000000000000000000000000000000000000000000000000000000000001c201a00000000000000000000000000000000000000000000000000000000001c201100000000000000000000000000000000000000000000000000000000001c201b00000000000000000000000000000000000000000000000000000000001c201200000000000000000000000000000000000000000000000000000000001c201c00000000000000000000000000000000000000000000000000000000001c201300000000000000000000000000000000000000000000000000000000001c201d00000000000000000000000000000000000000000000000000000000001c201400000000000000000000000000000000000000000000000000000000001c201e00000000000000000000000000000000000000000000000000000000001c201500000000000000000000000000000000000000000000000000000000001c201f00000000000000000000000000000000000000000000000000000000001c201600000000000000000000000000000000000000000000000000000000001c202000000000000000000000000000000000000000000000000000000000001c201700000000000000000000000000000000000000000000000000000000001c202100000000000000000000000000000000000000000000000000000000001c201800000000000000000000000000000000000000000000000000000000001c202200000000000000000000000000000000000000000000000000000000001c201900000000000000000000000000000000000000000000000000000000001c202300000000000000000000000000000000000000000000000000000000001c201a00000000000000000000000000000000000000000000000000000000001c202400000000000000000000000000000000000000000000000000000000001c201b00000000000000000000000000000000000000000000000000000000001c202500000000000000000000000000000000000000000000000000000000001c201c00000000000000000000000000000000000000000000000000000000001c202600000000000000000000000000000000000000000000000000000000001c201d00000000000000000000000000000000000000000000000000000000001c202700000000000000000000000000000000000000000000000000000000001c201e00000000000000000000000000000000000000000000000000000000001c202800000000000000000000000000000000000000000000000000000000001c201f00000000000000000000000000000000000000000000000000000000001c202900000000000000000000000000000000000000000000000000000000001c202000000000000000000000000000000000000000000000000000000000001c202a00000000000000000000000000000000000000000000000000000000001c202100000000000000000000000000000000000000000000000000000000001c202b00000000000000000000000000000000000000000000000000000000001c202200000000000000000000000000000000000000000000000000000000001c202c00000000000000000000000000000000000000000000000000000000001c202300000000000000000000000000000000000000000000000000000000001c202d00000000000000000000000000000000000000000000000000000000001c202400000000000000000000000000000000000000000000000000000000001c202e00000000000000000000000000000000000000000000000000000000001c202500000000000000000000000000000000000000000000000000000000001c202f00000000000000000000000000000000000000000000000000000000001c202600000000000000000000000000000000000000000000000000000000001c203000000000000000000000000000000000000000000000000000000000001c202700000000000000000000000000000000000000000000000000000000001c203100000000000000000000000000000000000000000000000000000000001c202800000000000000000000000000000000000000000000000000000000001c203200000000000000000000000000000000000000000000000000000000001c202900000000000000000000000000000000000000000000000000000000001c203300000000000000000000000000000000000000000000000000000000001c202a00000000000000000000000000000000000000000000000000000000001c203400000000000000000000000000000000000000000000000000000000001c202b00000000000000000000000000000000000000000000000000000000001c203500000000000000000000000000000000000000000000000000000000001c202c00000000000000000000000000000000000000000000000000000000001c203600000000000000000000000000000000000000000000000000000000001c202d00000000000000000000000000000000000000000000000000000000001c203700000000000000000000000000000000000000000000000000000000001c202e00000000000000000000000000000000000000000000000000000000001c203800000000000000000000000000000000000000000000000000000000001c202f00000000000000000000000000000000000000000000000000000000001c203900000000000000000000000000000000000000000000000000000000001c203000000000000000000000000000000000000000000000000000000000001c203a00000000000000000000000000000000000000000000000000000000001c203100000000000000000000000000000000000000000000000000000000001c203b00000000000000000000000000000000000000000000000000000000001c203200000000000000000000000000000000000000000000000000000000001c203c00000000000000000000000000000000000000000000000000000000001c203300000000000000000000000000000000000000000000000000000000001c203d00000000000000000000000000000000000000000000000000000000001c203400000000000000000000000000000000000000000000000000000000001c203e00000000000000000000000000000000000000000000000000000000001c203500000000000000000000000000000000000000000000000000000000001c203f00000000000000000000000000000000000000000000000000000000001c203600000000000000000000000000000000000000000000000000000000001c204000000000000000000000000000000000000000000000000000000000001c203700000000000000000000000000000000000000000000000000000000001c204100000000000000000000000000000000000000000000000000000000001c203800000000000000000000000000000000000000000000000000000000001c204200000000000000000000000000000000000000000000000000000000001c203900000000000000000000000000000000000000000000000000000000001c204300000000000000000000000000000000000000000000000000000000001c203a00000000000000000000000000000000000000000000000000000000001c204400000000000000000000000000000000000000000000000000000000001c203b00000000000000000000000000000000000000000000000000000000001c204500000000000000000000000000000000000000000000000000000000001c203c00000000000000000000000000000000000000000000000000000000001c204600000000000000000000000000000000000000000000000000000000001c203d00000000000000000000000000000000000000000000000000000000001c204700000000000000000000000000000000000000000000000000000000001c203e00000000000000000000000000000000000000000000000000000000001c204800000000000000000000000000000000000000000000000000000000001c203f00000000000000000000000000000000000000000000000000000000001c20494000000000000000000000000000000000000000000000000000000000001c130000000000000000000000000000000000000000000000000000000000001c130100000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c13110000001200000000000000000000000000000000000000000000000000000000001c130100000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c13120000001200000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c13130000001200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c13140000001200000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c13150000001200000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c13160000001200000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c13170000001200000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c13180000001200000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c13190000001200000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a0000001200000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b0000001200000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c0000001200000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d0000001200000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e0000001200000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f0000001200000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c13200000001200000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c13210000001200000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c13220000001200000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c13230000001200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c13240000001200000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c13250000001200000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c13260000001200000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c13270000001200000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c13280000001200000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c13290000001200000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a0000001200000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b0000001200000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c0000001200000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d0000001200000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e0000001200000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f0000001200000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c13300000001200000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c13310000001200000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c13320000001200000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c13330000001200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c13340000001200000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c13350000001200000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c13360000001200000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c13370000001200000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c13380000001200000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c13390000001200000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a0000001200000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b0000001200000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c0000001200000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d0000001200000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e0000001200000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f0000001200000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c13400000001200000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c13410000001200000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c13420000001200000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c13430000001200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c13440000001200000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c13450000001200000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c13460000001200000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c13470000001200000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c13480000001200000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c13490000001200000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a0000001200000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b0000001200000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c0000001200000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d0000001200000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e0000001200000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e00000000000000000000000000000000000000000000000000000000001c134f0000001200000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e00000000000000000000000000000000000000000000000000000000001c134f00000000000000000000000000000000000000000000000000000000001c1350000000120000000000001aaabc43a8a03070699e75ecb2ed398311e1c5f8356df22f9aaefab5e192edee0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000000000000020100100000000000000000000000000000000000000000000000000000000002010020000000000000000000000000000000000000000000000000000000000201003000000000000000000000000000000000000000000000000000000000020100400000000000000000000000000000000000000000000000000000000002010050000000000000000000000000000000000000000000000000000000000201006000000000000000000000000000000000000000000000000000000000020100700000000000000000000000000000000000000000000000000000000002010080000000000000000000000000000000000000000000000000000000000201009000000000000000000000000000000000000000000000000000000000020100a000000000000000000000000000000000000000000000000000000000020100b000000000000000000000000000000000000000000000000000000000020100c000000000000000000000000000000000000000000000000000000000020100d000000000000000000000000000000000000000000000000000000000020100e000000000000000000000000000000000000000000000000000000000020100f0000000000000000000000000000000000000000000000000000000000201010000000000000000000000000000000000000000000000000000000000020101100000000000000000000000000000000000000000000000000000000002010120000000000000000000000000000000000000000000000000000000000201013000000000000000000000000000000000000000000000000000000000020101400000000000000000000000000000000000000000000000000000000002010150000000000000000000000000000000000000000000000000000000000201016000000000000000000000000000000000000000000000000000000000020101700000000000000000000000000000000000000000000000000000000002010180000000000000000000000000000000000000000000000000000000000201019000000000000000000000000000000000000000000000000000000000020101a000000000000000000000000000000000000000000000000000000000020101b000000000000000000000000000000000000000000000000000000000020101c000000000000000000000000000000000000000000000000000000000020101d000000000000000000000000000000000000000000000000000000000020101e000000000000000000000000000000000000000000000000000000000020101f0000000000000000000000000000000000000000000000000000000000201020000000000000000000000000000000000000000000000000000000000020102100000000000000000000000000000000000000000000000000000000002010220000000000000000000000000000000000000000000000000000000000201023000000000000000000000000000000000000000000000000000000000020102400000000000000000000000000000000000000000000000000000000002010250000000000000000000000000000000000000000000000000000000000201026000000000000000000000000000000000000000000000000000000000020102700000000000000000000000000000000000000000000000000000000002010280000000000000000000000000000000000000000000000000000000000201029000000000000000000000000000000000000000000000000000000000020102a000000000000000000000000000000000000000000000000000000000020102b000000000000000000000000000000000000000000000000000000000020102c000000000000000000000000000000000000000000000000000000000020102d000000000000000000000000000000000000000000000000000000000020102e000000000000000000000000000000000000000000000000000000000020102f0000000000000000000000000000000000000000000000000000000000201030000000000000000000000000000000000000000000000000000000000020103100000000000000000000000000000000000000000000000000000000002010320000000000000000000000000000000000000000000000000000000000201033000000000000000000000000000000000000000000000000000000000020103400000000000000000000000000000000000000000000000000000000002010350000000000000000000000000000000000000000000000000000000000201036000000000000000000000000000000000000000000000000000000000020103700000000000000000000000000000000000000000000000000000000002010380000000000000000000000000000000000000000000000000000000000201039000000000000000000000000000000000000000000000000000000000020103a000000000000000000000000000000000000000000000000000000000020103b000000000000000000000000000000000000000000000000000000000020103c000000000000000000000000000000000000000000000000000000000020103d000000000000000000000000000000000000000000000000000000000020103e000000000000000000000000000000000000000000000000000000000020103f4000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000201100000000000000000000000000000000000000000000000000000000000020110100000000000000000000000000000000000000000000000000000000002011020000000000000000000000000000000000000000000000000000000000201103000000000000000000000000000000000000000000000000000000000020110400000000000000000000000000000000000000000000000000000000002011050000000000000000000000000000000000000000000000000000000000201106000000000000000000000000000000000000000000000000000000000020110700000000000000000000000000000000000000000000000000000000002011080000000000000000000000000000000000000000000000000000000000201109000000000000000000000000000000000000000000000000000000000020110a000000000000000000000000000000000000000000000000000000000020110b000000000000000000000000000000000000000000000000000000000020110c000000000000000000000000000000000000000000000000000000000020110d000000000000000000000000000000000000000000000000000000000020110e000000000000000000000000000000000000000000000000000000000020110f0000000000000000000000000000000000000000000000000000000000201110000000000000000000000000000000000000000000000000000000000020111100000000000000000000000000000000000000000000000000000000002011120000000000000000000000000000000000000000000000000000000000201113000000000000000000000000000000000000000000000000000000000020111400000000000000000000000000000000000000000000000000000000002011150000000000000000000000000000000000000000000000000000000000201116000000000000000000000000000000000000000000000000000000000020111700000000000000000000000000000000000000000000000000000000002011180000000000000000000000000000000000000000000000000000000000201119000000000000000000000000000000000000000000000000000000000020111a000000000000000000000000000000000000000000000000000000000020111b000000000000000000000000000000000000000000000000000000000020111c000000000000000000000000000000000000000000000000000000000020111d000000000000000000000000000000000000000000000000000000000020111e000000000000000000000000000000000000000000000000000000000020111f0000000000000000000000000000000000000000000000000000000000201120000000000000000000000000000000000000000000000000000000000020112100000000000000000000000000000000000000000000000000000000002011220000000000000000000000000000000000000000000000000000000000201123000000000000000000000000000000000000000000000000000000000020112400000000000000000000000000000000000000000000000000000000002011250000000000000000000000000000000000000000000000000000000000201126000000000000000000000000000000000000000000000000000000000020112700000000000000000000000000000000000000000000000000000000002011280000000000000000000000000000000000000000000000000000000000201129000000000000000000000000000000000000000000000000000000000020112a000000000000000000000000000000000000000000000000000000000020112b000000000000000000000000000000000000000000000000000000000020112c000000000000000000000000000000000000000000000000000000000020112d000000000000000000000000000000000000000000000000000000000020112e000000000000000000000000000000000000000000000000000000000020112f0000000000000000000000000000000000000000000000000000000000201130000000000000000000000000000000000000000000000000000000000020113100000000000000000000000000000000000000000000000000000000002011320000000000000000000000000000000000000000000000000000000000201133000000000000000000000000000000000000000000000000000000000020113400000000000000000000000000000000000000000000000000000000002011350000000000000000000000000000000000000000000000000000000000201136000000000000000000000000000000000000000000000000000000000020113700000000000000000000000000000000000000000000000000000000002011380000000000000000000000000000000000000000000000000000000000201139000000000000000000000000000000000000000000000000000000000020113a000000000000000000000000000000000000000000000000000000000020113b000000000000000000000000000000000000000000000000000000000020113c000000000000000000000000000000000000000000000000000000000020113d000000000000000000000000000000000000000000000000000000000020113e08007028edb640521e1ff4bad393203e4295b7a3d56e56bb1f521e5c4e9b4005300036797701c3aaf3565c51441e1e5380670d18b202fe37553ecabfe7dc0b8f83009f8a18280b8f8a6ade36f92424bb3832d4a5f781a599db2443d893e9f6ade900b6f46198c6138158211376e12e634fe8277e87890072320d1cc11b9212526e007c1fd1abdb6e87968aa2bccf1a4ac7c7784a416ec5e3279f1c16c81b04f59300d54f3523d1db359f5666c0dd5d7fa65ff4d5a07a83e23899f327c34d872dc8006ad2dc7beeefd5dd6b474b723b971e2d0f5cf6a9b109b56480319d5afdd44e001b0acdd069674a0168231de30523bff9854818cd631fdd1c90622117acf7f840000000000000000000000000000000000000000000000000000000000020020000000000000000000000000000000000000000000000000000000000002002010000000000000000000000000000000000000000000000000000000000202001000000000000000000000000000000000000000000000000000000000020200b0000000000000000000000000000000000000000000000000000000000202002000000000000000000000000000000000000000000000000000000000020200c0000000000000000000000000000000000000000000000000000000000202003000000000000000000000000000000000000000000000000000000000020200d0000000000000000000000000000000000000000000000000000000000202004000000000000000000000000000000000000000000000000000000000020200e0000000000000000000000000000000000000000000000000000000000202005000000000000000000000000000000000000000000000000000000000020200f00000000000000000000000000000000000000000000000000000000002020060000000000000000000000000000000000000000000000000000000000202010000000000000000000000000000000000000000000000000000000000020200700000000000000000000000000000000000000000000000000000000002020110000000000000000000000000000000000000000000000000000000000202008000000000000000000000000000000000000000000000000000000000020201200000000000000000000000000000000000000000000000000000000002020090000000000000000000000000000000000000000000000000000000000202013000000000000000000000000000000000000000000000000000000000020200a0000000000000000000000000000000000000000000000000000000000202014000000000000000000000000000000000000000000000000000000000020200b0000000000000000000000000000000000000000000000000000000000202015000000000000000000000000000000000000000000000000000000000020200c0000000000000000000000000000000000000000000000000000000000202016000000000000000000000000000000000000000000000000000000000020200d0000000000000000000000000000000000000000000000000000000000202017000000000000000000000000000000000000000000000000000000000020200e0000000000000000000000000000000000000000000000000000000000202018000000000000000000000000000000000000000000000000000000000020200f00000000000000000000000000000000000000000000000000000000002020190000000000000000000000000000000000000000000000000000000000202010000000000000000000000000000000000000000000000000000000000020201a0000000000000000000000000000000000000000000000000000000000202011000000000000000000000000000000000000000000000000000000000020201b0000000000000000000000000000000000000000000000000000000000202012000000000000000000000000000000000000000000000000000000000020201c0000000000000000000000000000000000000000000000000000000000202013000000000000000000000000000000000000000000000000000000000020201d0000000000000000000000000000000000000000000000000000000000202014000000000000000000000000000000000000000000000000000000000020201e0000000000000000000000000000000000000000000000000000000000202015000000000000000000000000000000000000000000000000000000000020201f00000000000000000000000000000000000000000000000000000000002020160000000000000000000000000000000000000000000000000000000000202020000000000000000000000000000000000000000000000000000000000020201700000000000000000000000000000000000000000000000000000000002020210000000000000000000000000000000000000000000000000000000000202018000000000000000000000000000000000000000000000000000000000020202200000000000000000000000000000000000000000000000000000000002020190000000000000000000000000000000000000000000000000000000000202023000000000000000000000000000000000000000000000000000000000020201a0000000000000000000000000000000000000000000000000000000000202024000000000000000000000000000000000000000000000000000000000020201b0000000000000000000000000000000000000000000000000000000000202025000000000000000000000000000000000000000000000000000000000020201c0000000000000000000000000000000000000000000000000000000000202026000000000000000000000000000000000000000000000000000000000020201d0000000000000000000000000000000000000000000000000000000000202027000000000000000000000000000000000000000000000000000000000020201e0000000000000000000000000000000000000000000000000000000000202028000000000000000000000000000000000000000000000000000000000020201f00000000000000000000000000000000000000000000000000000000002020290000000000000000000000000000000000000000000000000000000000202020000000000000000000000000000000000000000000000000000000000020202a0000000000000000000000000000000000000000000000000000000000202021000000000000000000000000000000000000000000000000000000000020202b0000000000000000000000000000000000000000000000000000000000202022000000000000000000000000000000000000000000000000000000000020202c0000000000000000000000000000000000000000000000000000000000202023000000000000000000000000000000000000000000000000000000000020202d0000000000000000000000000000000000000000000000000000000000202024000000000000000000000000000000000000000000000000000000000020202e0000000000000000000000000000000000000000000000000000000000202025000000000000000000000000000000000000000000000000000000000020202f00000000000000000000000000000000000000000000000000000000002020260000000000000000000000000000000000000000000000000000000000202030000000000000000000000000000000000000000000000000000000000020202700000000000000000000000000000000000000000000000000000000002020310000000000000000000000000000000000000000000000000000000000202028000000000000000000000000000000000000000000000000000000000020203200000000000000000000000000000000000000000000000000000000002020290000000000000000000000000000000000000000000000000000000000202033000000000000000000000000000000000000000000000000000000000020202a0000000000000000000000000000000000000000000000000000000000202034000000000000000000000000000000000000000000000000000000000020202b0000000000000000000000000000000000000000000000000000000000202035000000000000000000000000000000000000000000000000000000000020202c0000000000000000000000000000000000000000000000000000000000202036000000000000000000000000000000000000000000000000000000000020202d0000000000000000000000000000000000000000000000000000000000202037000000000000000000000000000000000000000000000000000000000020202e0000000000000000000000000000000000000000000000000000000000202038000000000000000000000000000000000000000000000000000000000020202f00000000000000000000000000000000000000000000000000000000002020390000000000000000000000000000000000000000000000000000000000202030000000000000000000000000000000000000000000000000000000000020203a0000000000000000000000000000000000000000000000000000000000202031000000000000000000000000000000000000000000000000000000000020203b0000000000000000000000000000000000000000000000000000000000202032000000000000000000000000000000000000000000000000000000000020203c0000000000000000000000000000000000000000000000000000000000202033000000000000000000000000000000000000000000000000000000000020203d0000000000000000000000000000000000000000000000000000000000202034000000000000000000000000000000000000000000000000000000000020203e0000000000000000000000000000000000000000000000000000000000202035000000000000000000000000000000000000000000000000000000000020203f00000000000000000000000000000000000000000000000000000000002020360000000000000000000000000000000000000000000000000000000000202040000000000000000000000000000000000000000000000000000000000020203700000000000000000000000000000000000000000000000000000000002020410000000000000000000000000000000000000000000000000000000000202038000000000000000000000000000000000000000000000000000000000020204200000000000000000000000000000000000000000000000000000000002020390000000000000000000000000000000000000000000000000000000000202043000000000000000000000000000000000000000000000000000000000020203a0000000000000000000000000000000000000000000000000000000000202044000000000000000000000000000000000000000000000000000000000020203b0000000000000000000000000000000000000000000000000000000000202045000000000000000000000000000000000000000000000000000000000020203c0000000000000000000000000000000000000000000000000000000000202046000000000000000000000000000000000000000000000000000000000020203d0000000000000000000000000000000000000000000000000000000000202047000000000000000000000000000000000000000000000000000000000020203e0000000000000000000000000000000000000000000000000000000000202048000000000000000000000000000000000000000000000000000000000020203f0000000000000000000000000000000000000000000000000000000000202049400000000000000000000000000000000000000000000000000000000000201300000000000000000000000000000000000000000000000000000000000020130100000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000012000000000000000000000000000000000000000000000000000000000020130100000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000001200000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000120000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000012000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000001200000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000120000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000012000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000001200000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000120000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a00000012000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b00000012000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c00000012000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d00000012000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e00000012000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f00000012000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000120000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000012000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000001200000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000012000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000001200000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000120000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000012000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000001200000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000120000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a00000012000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b00000012000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c00000012000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d00000012000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e00000012000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f00000012000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000120000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000012000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000001200000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000120000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000012000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000001200000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000120000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000012000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000001200000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000120000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a00000012000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b00000012000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c00000012000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d00000012000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e00000012000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f00000012000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000120000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000012000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000001200000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000120000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000012000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000001200000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000120000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000012000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000001200000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000120000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a00000012000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b00000012000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c00000012000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d00000012000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e00000012000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e000000000000000000000000000000000000000000000000000000000020134f00000012000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e000000000000000000000000000000000000000000000000000000000020134f0000000000000000000000000000000000000000000000000000000000201350000000120000000000", + "body": "0x00000004002061bd587bb52eb348c4efe022225079491f482bd99800e8b53a59fdd222a9cd0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000000000014100100000000000000000000000000000000000000000000000000000000001410020000000000000000000000000000000000000000000000000000000000141003000000000000000000000000000000000000000000000000000000000014100400000000000000000000000000000000000000000000000000000000001410050000000000000000000000000000000000000000000000000000000000141006000000000000000000000000000000000000000000000000000000000014100700000000000000000000000000000000000000000000000000000000001410080000000000000000000000000000000000000000000000000000000000141009000000000000000000000000000000000000000000000000000000000014100a000000000000000000000000000000000000000000000000000000000014100b000000000000000000000000000000000000000000000000000000000014100c000000000000000000000000000000000000000000000000000000000014100d000000000000000000000000000000000000000000000000000000000014100e000000000000000000000000000000000000000000000000000000000014100f0000000000000000000000000000000000000000000000000000000000141010000000000000000000000000000000000000000000000000000000000014101100000000000000000000000000000000000000000000000000000000001410120000000000000000000000000000000000000000000000000000000000141013000000000000000000000000000000000000000000000000000000000014101400000000000000000000000000000000000000000000000000000000001410150000000000000000000000000000000000000000000000000000000000141016000000000000000000000000000000000000000000000000000000000014101700000000000000000000000000000000000000000000000000000000001410180000000000000000000000000000000000000000000000000000000000141019000000000000000000000000000000000000000000000000000000000014101a000000000000000000000000000000000000000000000000000000000014101b000000000000000000000000000000000000000000000000000000000014101c000000000000000000000000000000000000000000000000000000000014101d000000000000000000000000000000000000000000000000000000000014101e000000000000000000000000000000000000000000000000000000000014101f0000000000000000000000000000000000000000000000000000000000141020000000000000000000000000000000000000000000000000000000000014102100000000000000000000000000000000000000000000000000000000001410220000000000000000000000000000000000000000000000000000000000141023000000000000000000000000000000000000000000000000000000000014102400000000000000000000000000000000000000000000000000000000001410250000000000000000000000000000000000000000000000000000000000141026000000000000000000000000000000000000000000000000000000000014102700000000000000000000000000000000000000000000000000000000001410280000000000000000000000000000000000000000000000000000000000141029000000000000000000000000000000000000000000000000000000000014102a000000000000000000000000000000000000000000000000000000000014102b000000000000000000000000000000000000000000000000000000000014102c000000000000000000000000000000000000000000000000000000000014102d000000000000000000000000000000000000000000000000000000000014102e000000000000000000000000000000000000000000000000000000000014102f0000000000000000000000000000000000000000000000000000000000141030000000000000000000000000000000000000000000000000000000000014103100000000000000000000000000000000000000000000000000000000001410320000000000000000000000000000000000000000000000000000000000141033000000000000000000000000000000000000000000000000000000000014103400000000000000000000000000000000000000000000000000000000001410350000000000000000000000000000000000000000000000000000000000141036000000000000000000000000000000000000000000000000000000000014103700000000000000000000000000000000000000000000000000000000001410380000000000000000000000000000000000000000000000000000000000141039000000000000000000000000000000000000000000000000000000000014103a000000000000000000000000000000000000000000000000000000000014103b000000000000000000000000000000000000000000000000000000000014103c000000000000000000000000000000000000000000000000000000000014103d000000000000000000000000000000000000000000000000000000000014103e000000000000000000000000000000000000000000000000000000000014103f4000000000000000000000000000000000000000000000000000000000001400010000000000000000000000000000000000000000000000000000000000141100000000000000000000000000000000000000000000000000000000000014110100000000000000000000000000000000000000000000000000000000001411020000000000000000000000000000000000000000000000000000000000141103000000000000000000000000000000000000000000000000000000000014110400000000000000000000000000000000000000000000000000000000001411050000000000000000000000000000000000000000000000000000000000141106000000000000000000000000000000000000000000000000000000000014110700000000000000000000000000000000000000000000000000000000001411080000000000000000000000000000000000000000000000000000000000141109000000000000000000000000000000000000000000000000000000000014110a000000000000000000000000000000000000000000000000000000000014110b000000000000000000000000000000000000000000000000000000000014110c000000000000000000000000000000000000000000000000000000000014110d000000000000000000000000000000000000000000000000000000000014110e000000000000000000000000000000000000000000000000000000000014110f0000000000000000000000000000000000000000000000000000000000141110000000000000000000000000000000000000000000000000000000000014111100000000000000000000000000000000000000000000000000000000001411120000000000000000000000000000000000000000000000000000000000141113000000000000000000000000000000000000000000000000000000000014111400000000000000000000000000000000000000000000000000000000001411150000000000000000000000000000000000000000000000000000000000141116000000000000000000000000000000000000000000000000000000000014111700000000000000000000000000000000000000000000000000000000001411180000000000000000000000000000000000000000000000000000000000141119000000000000000000000000000000000000000000000000000000000014111a000000000000000000000000000000000000000000000000000000000014111b000000000000000000000000000000000000000000000000000000000014111c000000000000000000000000000000000000000000000000000000000014111d000000000000000000000000000000000000000000000000000000000014111e000000000000000000000000000000000000000000000000000000000014111f0000000000000000000000000000000000000000000000000000000000141120000000000000000000000000000000000000000000000000000000000014112100000000000000000000000000000000000000000000000000000000001411220000000000000000000000000000000000000000000000000000000000141123000000000000000000000000000000000000000000000000000000000014112400000000000000000000000000000000000000000000000000000000001411250000000000000000000000000000000000000000000000000000000000141126000000000000000000000000000000000000000000000000000000000014112700000000000000000000000000000000000000000000000000000000001411280000000000000000000000000000000000000000000000000000000000141129000000000000000000000000000000000000000000000000000000000014112a000000000000000000000000000000000000000000000000000000000014112b000000000000000000000000000000000000000000000000000000000014112c000000000000000000000000000000000000000000000000000000000014112d000000000000000000000000000000000000000000000000000000000014112e000000000000000000000000000000000000000000000000000000000014112f0000000000000000000000000000000000000000000000000000000000141130000000000000000000000000000000000000000000000000000000000014113100000000000000000000000000000000000000000000000000000000001411320000000000000000000000000000000000000000000000000000000000141133000000000000000000000000000000000000000000000000000000000014113400000000000000000000000000000000000000000000000000000000001411350000000000000000000000000000000000000000000000000000000000141136000000000000000000000000000000000000000000000000000000000014113700000000000000000000000000000000000000000000000000000000001411380000000000000000000000000000000000000000000000000000000000141139000000000000000000000000000000000000000000000000000000000014113a000000000000000000000000000000000000000000000000000000000014113b000000000000000000000000000000000000000000000000000000000014113c000000000000000000000000000000000000000000000000000000000014113d000000000000000000000000000000000000000000000000000000000014113e080057602f85fdccac3117547ae1e9feedac263299a34f02b19ca229f6c203209000400355a496b2961dd5954f30f214fa0c5b7b9c4598ccc7882a3fc69dec50bb005c04946202e37fca2fa0bd7d0504c730ac1a707a410c0ed70bd65ad2adb15100dfea6f9eee8d32378436d7ca9e4dda0d48a5ccfb1c6f8ddec286fdf0cb9c81004f5ae4240cb04e72cf44cddb835bc0b5e7f100c01dc3f6678f979e27f19ede00f8ff8aa1edd0f0237d277f829b0847f656ee797c3adf2e7b1074d36f3f63ad00c90a15e3b4697bc2b603d24b615ed869c0f2b61ec8d8e316351996854246b600f24c2cff7402d9d57bd2791337df5a65f0b2f59a4ce3255d94c35f7cf13374400000000000000000000000000000000000000000000000000000000000142000000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142001000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142002000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142003000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142004000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142005000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420060000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014200700000000000000000000000000000000000000000000000000000000001420110000000000000000000000000000000000000000000000000000000000142008000000000000000000000000000000000000000000000000000000000014201200000000000000000000000000000000000000000000000000000000001420090000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142016000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142017000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142011000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142012000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420160000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014201700000000000000000000000000000000000000000000000000000000001420210000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014202200000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142026000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142027000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142021000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142022000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420260000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014202700000000000000000000000000000000000000000000000000000000001420310000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014203200000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142036000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142037000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142031000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142032000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014203f00000000000000000000000000000000000000000000000000000000001420360000000000000000000000000000000000000000000000000000000000142040000000000000000000000000000000000000000000000000000000000014203700000000000000000000000000000000000000000000000000000000001420410000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014204200000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142043000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142044000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142045000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142046000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142047000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142048000000000000000000000000000000000000000000000000000000000014203f0000000000000000000000000000000000000000000000000000000000142049400000000000000000000000000000000000000000000000000000000000141300000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000012000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000001200000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000120000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000012000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000001200000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000120000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000012000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000001200000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000120000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a00000012000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b00000012000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c00000012000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d00000012000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e00000012000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f00000012000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000120000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000012000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000001200000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000012000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000001200000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000120000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000012000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000001200000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000120000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a00000012000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b00000012000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c00000012000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d00000012000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e00000012000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f00000012000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000120000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000012000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000001200000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000120000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000012000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000001200000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000120000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000012000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000001200000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000120000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a00000012000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b00000012000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c00000012000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d00000012000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e00000012000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f00000012000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000120000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000012000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000001200000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000120000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000012000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000001200000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000120000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000012000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000001200000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000120000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a00000012000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b00000012000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c00000012000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d00000012000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e00000012000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f00000012000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f0000000000000000000000000000000000000000000000000000000000141350000000120000000000002ad77c3fb3c4be0bbcefd53b2e7de160caa53c9ae0c45679ec64282d656f31d00000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000181000000000000000000000000000000000000000000000000000000000000018100100000000000000000000000000000000000000000000000000000000001810020000000000000000000000000000000000000000000000000000000000181003000000000000000000000000000000000000000000000000000000000018100400000000000000000000000000000000000000000000000000000000001810050000000000000000000000000000000000000000000000000000000000181006000000000000000000000000000000000000000000000000000000000018100700000000000000000000000000000000000000000000000000000000001810080000000000000000000000000000000000000000000000000000000000181009000000000000000000000000000000000000000000000000000000000018100a000000000000000000000000000000000000000000000000000000000018100b000000000000000000000000000000000000000000000000000000000018100c000000000000000000000000000000000000000000000000000000000018100d000000000000000000000000000000000000000000000000000000000018100e000000000000000000000000000000000000000000000000000000000018100f0000000000000000000000000000000000000000000000000000000000181010000000000000000000000000000000000000000000000000000000000018101100000000000000000000000000000000000000000000000000000000001810120000000000000000000000000000000000000000000000000000000000181013000000000000000000000000000000000000000000000000000000000018101400000000000000000000000000000000000000000000000000000000001810150000000000000000000000000000000000000000000000000000000000181016000000000000000000000000000000000000000000000000000000000018101700000000000000000000000000000000000000000000000000000000001810180000000000000000000000000000000000000000000000000000000000181019000000000000000000000000000000000000000000000000000000000018101a000000000000000000000000000000000000000000000000000000000018101b000000000000000000000000000000000000000000000000000000000018101c000000000000000000000000000000000000000000000000000000000018101d000000000000000000000000000000000000000000000000000000000018101e000000000000000000000000000000000000000000000000000000000018101f0000000000000000000000000000000000000000000000000000000000181020000000000000000000000000000000000000000000000000000000000018102100000000000000000000000000000000000000000000000000000000001810220000000000000000000000000000000000000000000000000000000000181023000000000000000000000000000000000000000000000000000000000018102400000000000000000000000000000000000000000000000000000000001810250000000000000000000000000000000000000000000000000000000000181026000000000000000000000000000000000000000000000000000000000018102700000000000000000000000000000000000000000000000000000000001810280000000000000000000000000000000000000000000000000000000000181029000000000000000000000000000000000000000000000000000000000018102a000000000000000000000000000000000000000000000000000000000018102b000000000000000000000000000000000000000000000000000000000018102c000000000000000000000000000000000000000000000000000000000018102d000000000000000000000000000000000000000000000000000000000018102e000000000000000000000000000000000000000000000000000000000018102f0000000000000000000000000000000000000000000000000000000000181030000000000000000000000000000000000000000000000000000000000018103100000000000000000000000000000000000000000000000000000000001810320000000000000000000000000000000000000000000000000000000000181033000000000000000000000000000000000000000000000000000000000018103400000000000000000000000000000000000000000000000000000000001810350000000000000000000000000000000000000000000000000000000000181036000000000000000000000000000000000000000000000000000000000018103700000000000000000000000000000000000000000000000000000000001810380000000000000000000000000000000000000000000000000000000000181039000000000000000000000000000000000000000000000000000000000018103a000000000000000000000000000000000000000000000000000000000018103b000000000000000000000000000000000000000000000000000000000018103c000000000000000000000000000000000000000000000000000000000018103d000000000000000000000000000000000000000000000000000000000018103e000000000000000000000000000000000000000000000000000000000018103f4000000000000000000000000000000000000000000000000000000000001800010000000000000000000000000000000000000000000000000000000000181100000000000000000000000000000000000000000000000000000000000018110100000000000000000000000000000000000000000000000000000000001811020000000000000000000000000000000000000000000000000000000000181103000000000000000000000000000000000000000000000000000000000018110400000000000000000000000000000000000000000000000000000000001811050000000000000000000000000000000000000000000000000000000000181106000000000000000000000000000000000000000000000000000000000018110700000000000000000000000000000000000000000000000000000000001811080000000000000000000000000000000000000000000000000000000000181109000000000000000000000000000000000000000000000000000000000018110a000000000000000000000000000000000000000000000000000000000018110b000000000000000000000000000000000000000000000000000000000018110c000000000000000000000000000000000000000000000000000000000018110d000000000000000000000000000000000000000000000000000000000018110e000000000000000000000000000000000000000000000000000000000018110f0000000000000000000000000000000000000000000000000000000000181110000000000000000000000000000000000000000000000000000000000018111100000000000000000000000000000000000000000000000000000000001811120000000000000000000000000000000000000000000000000000000000181113000000000000000000000000000000000000000000000000000000000018111400000000000000000000000000000000000000000000000000000000001811150000000000000000000000000000000000000000000000000000000000181116000000000000000000000000000000000000000000000000000000000018111700000000000000000000000000000000000000000000000000000000001811180000000000000000000000000000000000000000000000000000000000181119000000000000000000000000000000000000000000000000000000000018111a000000000000000000000000000000000000000000000000000000000018111b000000000000000000000000000000000000000000000000000000000018111c000000000000000000000000000000000000000000000000000000000018111d000000000000000000000000000000000000000000000000000000000018111e000000000000000000000000000000000000000000000000000000000018111f0000000000000000000000000000000000000000000000000000000000181120000000000000000000000000000000000000000000000000000000000018112100000000000000000000000000000000000000000000000000000000001811220000000000000000000000000000000000000000000000000000000000181123000000000000000000000000000000000000000000000000000000000018112400000000000000000000000000000000000000000000000000000000001811250000000000000000000000000000000000000000000000000000000000181126000000000000000000000000000000000000000000000000000000000018112700000000000000000000000000000000000000000000000000000000001811280000000000000000000000000000000000000000000000000000000000181129000000000000000000000000000000000000000000000000000000000018112a000000000000000000000000000000000000000000000000000000000018112b000000000000000000000000000000000000000000000000000000000018112c000000000000000000000000000000000000000000000000000000000018112d000000000000000000000000000000000000000000000000000000000018112e000000000000000000000000000000000000000000000000000000000018112f0000000000000000000000000000000000000000000000000000000000181130000000000000000000000000000000000000000000000000000000000018113100000000000000000000000000000000000000000000000000000000001811320000000000000000000000000000000000000000000000000000000000181133000000000000000000000000000000000000000000000000000000000018113400000000000000000000000000000000000000000000000000000000001811350000000000000000000000000000000000000000000000000000000000181136000000000000000000000000000000000000000000000000000000000018113700000000000000000000000000000000000000000000000000000000001811380000000000000000000000000000000000000000000000000000000000181139000000000000000000000000000000000000000000000000000000000018113a000000000000000000000000000000000000000000000000000000000018113b000000000000000000000000000000000000000000000000000000000018113c000000000000000000000000000000000000000000000000000000000018113d000000000000000000000000000000000000000000000000000000000018113e08001311d7be859fe766205679180604a937a8d4bd870d6d12edb2db749345b51c006a36f23a5cb4d19f855238d418170e140300192ead60f7ab35312e9c2513b800b26b2c0e63909e88d537840ceb7fc2e3ba764efc546dcccf0fe4c2cfd28c7100025242c4a697eccd73273bf6c4d1b5821c7dcf22789c590b7295100d20ccde00ef98046ac0b4095051c64b82fd69d051a08c3ac20e073f5656e3057b3eccbe00daa2f457ab065009361f9276765fa37f21053db780ce11b9a363dabfc735cf00443966d01fe9717b46d36f729e652c2657e2e7d56d5117ef966cfbd3add32e00ee29f87f39ab1c4c1201bdd331fa5a9a254a1030c1cbdbf6ee82d3fce25c2a400000000000000000000000000000000000000000000000000000000000182000000000000000000000000000000000000000000000000000000000000018200a0000000000000000000000000000000000000000000000000000000000182001000000000000000000000000000000000000000000000000000000000018200b0000000000000000000000000000000000000000000000000000000000182002000000000000000000000000000000000000000000000000000000000018200c0000000000000000000000000000000000000000000000000000000000182003000000000000000000000000000000000000000000000000000000000018200d0000000000000000000000000000000000000000000000000000000000182004000000000000000000000000000000000000000000000000000000000018200e0000000000000000000000000000000000000000000000000000000000182005000000000000000000000000000000000000000000000000000000000018200f00000000000000000000000000000000000000000000000000000000001820060000000000000000000000000000000000000000000000000000000000182010000000000000000000000000000000000000000000000000000000000018200700000000000000000000000000000000000000000000000000000000001820110000000000000000000000000000000000000000000000000000000000182008000000000000000000000000000000000000000000000000000000000018201200000000000000000000000000000000000000000000000000000000001820090000000000000000000000000000000000000000000000000000000000182013000000000000000000000000000000000000000000000000000000000018200a0000000000000000000000000000000000000000000000000000000000182014000000000000000000000000000000000000000000000000000000000018200b0000000000000000000000000000000000000000000000000000000000182015000000000000000000000000000000000000000000000000000000000018200c0000000000000000000000000000000000000000000000000000000000182016000000000000000000000000000000000000000000000000000000000018200d0000000000000000000000000000000000000000000000000000000000182017000000000000000000000000000000000000000000000000000000000018200e0000000000000000000000000000000000000000000000000000000000182018000000000000000000000000000000000000000000000000000000000018200f00000000000000000000000000000000000000000000000000000000001820190000000000000000000000000000000000000000000000000000000000182010000000000000000000000000000000000000000000000000000000000018201a0000000000000000000000000000000000000000000000000000000000182011000000000000000000000000000000000000000000000000000000000018201b0000000000000000000000000000000000000000000000000000000000182012000000000000000000000000000000000000000000000000000000000018201c0000000000000000000000000000000000000000000000000000000000182013000000000000000000000000000000000000000000000000000000000018201d0000000000000000000000000000000000000000000000000000000000182014000000000000000000000000000000000000000000000000000000000018201e0000000000000000000000000000000000000000000000000000000000182015000000000000000000000000000000000000000000000000000000000018201f00000000000000000000000000000000000000000000000000000000001820160000000000000000000000000000000000000000000000000000000000182020000000000000000000000000000000000000000000000000000000000018201700000000000000000000000000000000000000000000000000000000001820210000000000000000000000000000000000000000000000000000000000182018000000000000000000000000000000000000000000000000000000000018202200000000000000000000000000000000000000000000000000000000001820190000000000000000000000000000000000000000000000000000000000182023000000000000000000000000000000000000000000000000000000000018201a0000000000000000000000000000000000000000000000000000000000182024000000000000000000000000000000000000000000000000000000000018201b0000000000000000000000000000000000000000000000000000000000182025000000000000000000000000000000000000000000000000000000000018201c0000000000000000000000000000000000000000000000000000000000182026000000000000000000000000000000000000000000000000000000000018201d0000000000000000000000000000000000000000000000000000000000182027000000000000000000000000000000000000000000000000000000000018201e0000000000000000000000000000000000000000000000000000000000182028000000000000000000000000000000000000000000000000000000000018201f00000000000000000000000000000000000000000000000000000000001820290000000000000000000000000000000000000000000000000000000000182020000000000000000000000000000000000000000000000000000000000018202a0000000000000000000000000000000000000000000000000000000000182021000000000000000000000000000000000000000000000000000000000018202b0000000000000000000000000000000000000000000000000000000000182022000000000000000000000000000000000000000000000000000000000018202c0000000000000000000000000000000000000000000000000000000000182023000000000000000000000000000000000000000000000000000000000018202d0000000000000000000000000000000000000000000000000000000000182024000000000000000000000000000000000000000000000000000000000018202e0000000000000000000000000000000000000000000000000000000000182025000000000000000000000000000000000000000000000000000000000018202f00000000000000000000000000000000000000000000000000000000001820260000000000000000000000000000000000000000000000000000000000182030000000000000000000000000000000000000000000000000000000000018202700000000000000000000000000000000000000000000000000000000001820310000000000000000000000000000000000000000000000000000000000182028000000000000000000000000000000000000000000000000000000000018203200000000000000000000000000000000000000000000000000000000001820290000000000000000000000000000000000000000000000000000000000182033000000000000000000000000000000000000000000000000000000000018202a0000000000000000000000000000000000000000000000000000000000182034000000000000000000000000000000000000000000000000000000000018202b0000000000000000000000000000000000000000000000000000000000182035000000000000000000000000000000000000000000000000000000000018202c0000000000000000000000000000000000000000000000000000000000182036000000000000000000000000000000000000000000000000000000000018202d0000000000000000000000000000000000000000000000000000000000182037000000000000000000000000000000000000000000000000000000000018202e0000000000000000000000000000000000000000000000000000000000182038000000000000000000000000000000000000000000000000000000000018202f00000000000000000000000000000000000000000000000000000000001820390000000000000000000000000000000000000000000000000000000000182030000000000000000000000000000000000000000000000000000000000018203a0000000000000000000000000000000000000000000000000000000000182031000000000000000000000000000000000000000000000000000000000018203b0000000000000000000000000000000000000000000000000000000000182032000000000000000000000000000000000000000000000000000000000018203c0000000000000000000000000000000000000000000000000000000000182033000000000000000000000000000000000000000000000000000000000018203d0000000000000000000000000000000000000000000000000000000000182034000000000000000000000000000000000000000000000000000000000018203e0000000000000000000000000000000000000000000000000000000000182035000000000000000000000000000000000000000000000000000000000018203f00000000000000000000000000000000000000000000000000000000001820360000000000000000000000000000000000000000000000000000000000182040000000000000000000000000000000000000000000000000000000000018203700000000000000000000000000000000000000000000000000000000001820410000000000000000000000000000000000000000000000000000000000182038000000000000000000000000000000000000000000000000000000000018204200000000000000000000000000000000000000000000000000000000001820390000000000000000000000000000000000000000000000000000000000182043000000000000000000000000000000000000000000000000000000000018203a0000000000000000000000000000000000000000000000000000000000182044000000000000000000000000000000000000000000000000000000000018203b0000000000000000000000000000000000000000000000000000000000182045000000000000000000000000000000000000000000000000000000000018203c0000000000000000000000000000000000000000000000000000000000182046000000000000000000000000000000000000000000000000000000000018203d0000000000000000000000000000000000000000000000000000000000182047000000000000000000000000000000000000000000000000000000000018203e0000000000000000000000000000000000000000000000000000000000182048000000000000000000000000000000000000000000000000000000000018203f0000000000000000000000000000000000000000000000000000000000182049400000000000000000000000000000000000000000000000000000000000181300000000000000000000000000000000000000000000000000000000000018130100000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000012000000000000000000000000000000000000000000000000000000000018130100000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000001200000000000000000000000000000000000000000000000000000000001813020000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000120000000000000000000000000000000000000000000000000000000000181303000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000012000000000000000000000000000000000000000000000000000000000018130400000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000001200000000000000000000000000000000000000000000000000000000001813050000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000120000000000000000000000000000000000000000000000000000000000181306000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000012000000000000000000000000000000000000000000000000000000000018130700000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000001200000000000000000000000000000000000000000000000000000000001813080000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000120000000000000000000000000000000000000000000000000000000000181309000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a00000012000000000000000000000000000000000000000000000000000000000018130a000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b00000012000000000000000000000000000000000000000000000000000000000018130b000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c00000012000000000000000000000000000000000000000000000000000000000018130c000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d00000012000000000000000000000000000000000000000000000000000000000018130d000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e00000012000000000000000000000000000000000000000000000000000000000018130e000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f00000012000000000000000000000000000000000000000000000000000000000018130f0000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000120000000000000000000000000000000000000000000000000000000000181310000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000012000000000000000000000000000000000000000000000000000000000018131100000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000001200000000000000000000000000000000000000000000000000000000001813120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000120000000000000000000000000000000000000000000000000000000000181313000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000012000000000000000000000000000000000000000000000000000000000018131400000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000001200000000000000000000000000000000000000000000000000000000001813150000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000120000000000000000000000000000000000000000000000000000000000181316000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000012000000000000000000000000000000000000000000000000000000000018131700000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000001200000000000000000000000000000000000000000000000000000000001813180000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000120000000000000000000000000000000000000000000000000000000000181319000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a00000012000000000000000000000000000000000000000000000000000000000018131a000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b00000012000000000000000000000000000000000000000000000000000000000018131b000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c00000012000000000000000000000000000000000000000000000000000000000018131c000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d00000012000000000000000000000000000000000000000000000000000000000018131d000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e00000012000000000000000000000000000000000000000000000000000000000018131e000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f00000012000000000000000000000000000000000000000000000000000000000018131f0000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000120000000000000000000000000000000000000000000000000000000000181320000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000012000000000000000000000000000000000000000000000000000000000018132100000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000001200000000000000000000000000000000000000000000000000000000001813220000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000120000000000000000000000000000000000000000000000000000000000181323000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000012000000000000000000000000000000000000000000000000000000000018132400000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000001200000000000000000000000000000000000000000000000000000000001813250000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000120000000000000000000000000000000000000000000000000000000000181326000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000012000000000000000000000000000000000000000000000000000000000018132700000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000001200000000000000000000000000000000000000000000000000000000001813280000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000120000000000000000000000000000000000000000000000000000000000181329000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a00000012000000000000000000000000000000000000000000000000000000000018132a000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b00000012000000000000000000000000000000000000000000000000000000000018132b000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c00000012000000000000000000000000000000000000000000000000000000000018132c000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d00000012000000000000000000000000000000000000000000000000000000000018132d000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e00000012000000000000000000000000000000000000000000000000000000000018132e000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f00000012000000000000000000000000000000000000000000000000000000000018132f0000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000120000000000000000000000000000000000000000000000000000000000181330000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000012000000000000000000000000000000000000000000000000000000000018133100000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000001200000000000000000000000000000000000000000000000000000000001813320000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000120000000000000000000000000000000000000000000000000000000000181333000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000012000000000000000000000000000000000000000000000000000000000018133400000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000001200000000000000000000000000000000000000000000000000000000001813350000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000120000000000000000000000000000000000000000000000000000000000181336000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000012000000000000000000000000000000000000000000000000000000000018133700000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000001200000000000000000000000000000000000000000000000000000000001813380000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000120000000000000000000000000000000000000000000000000000000000181339000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a00000012000000000000000000000000000000000000000000000000000000000018133a000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b00000012000000000000000000000000000000000000000000000000000000000018133b000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c00000012000000000000000000000000000000000000000000000000000000000018133c000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d00000012000000000000000000000000000000000000000000000000000000000018133d000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e00000012000000000000000000000000000000000000000000000000000000000018133e000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e000000000000000000000000000000000000000000000000000000000018134f00000012000000000000000000000000000000000000000000000000000000000018133f0000000000000000000000000000000000000000000000000000000000181340000000000000000000000000000000000000000000000000000000000018134100000000000000000000000000000000000000000000000000000000001813420000000000000000000000000000000000000000000000000000000000181343000000000000000000000000000000000000000000000000000000000018134400000000000000000000000000000000000000000000000000000000001813450000000000000000000000000000000000000000000000000000000000181346000000000000000000000000000000000000000000000000000000000018134700000000000000000000000000000000000000000000000000000000001813480000000000000000000000000000000000000000000000000000000000181349000000000000000000000000000000000000000000000000000000000018134a000000000000000000000000000000000000000000000000000000000018134b000000000000000000000000000000000000000000000000000000000018134c000000000000000000000000000000000000000000000000000000000018134d000000000000000000000000000000000000000000000000000000000018134e000000000000000000000000000000000000000000000000000000000018134f00000000000000000000000000000000000000000000000000000000001813500000001200000000000017fc12cd4287cdee231eefa6af2d417cc754026ee7a00e5f53750501bffbfac900000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000001c100000000000000000000000000000000000000000000000000000000000001c100100000000000000000000000000000000000000000000000000000000001c100200000000000000000000000000000000000000000000000000000000001c100300000000000000000000000000000000000000000000000000000000001c100400000000000000000000000000000000000000000000000000000000001c100500000000000000000000000000000000000000000000000000000000001c100600000000000000000000000000000000000000000000000000000000001c100700000000000000000000000000000000000000000000000000000000001c100800000000000000000000000000000000000000000000000000000000001c100900000000000000000000000000000000000000000000000000000000001c100a00000000000000000000000000000000000000000000000000000000001c100b00000000000000000000000000000000000000000000000000000000001c100c00000000000000000000000000000000000000000000000000000000001c100d00000000000000000000000000000000000000000000000000000000001c100e00000000000000000000000000000000000000000000000000000000001c100f00000000000000000000000000000000000000000000000000000000001c101000000000000000000000000000000000000000000000000000000000001c101100000000000000000000000000000000000000000000000000000000001c101200000000000000000000000000000000000000000000000000000000001c101300000000000000000000000000000000000000000000000000000000001c101400000000000000000000000000000000000000000000000000000000001c101500000000000000000000000000000000000000000000000000000000001c101600000000000000000000000000000000000000000000000000000000001c101700000000000000000000000000000000000000000000000000000000001c101800000000000000000000000000000000000000000000000000000000001c101900000000000000000000000000000000000000000000000000000000001c101a00000000000000000000000000000000000000000000000000000000001c101b00000000000000000000000000000000000000000000000000000000001c101c00000000000000000000000000000000000000000000000000000000001c101d00000000000000000000000000000000000000000000000000000000001c101e00000000000000000000000000000000000000000000000000000000001c101f00000000000000000000000000000000000000000000000000000000001c102000000000000000000000000000000000000000000000000000000000001c102100000000000000000000000000000000000000000000000000000000001c102200000000000000000000000000000000000000000000000000000000001c102300000000000000000000000000000000000000000000000000000000001c102400000000000000000000000000000000000000000000000000000000001c102500000000000000000000000000000000000000000000000000000000001c102600000000000000000000000000000000000000000000000000000000001c102700000000000000000000000000000000000000000000000000000000001c102800000000000000000000000000000000000000000000000000000000001c102900000000000000000000000000000000000000000000000000000000001c102a00000000000000000000000000000000000000000000000000000000001c102b00000000000000000000000000000000000000000000000000000000001c102c00000000000000000000000000000000000000000000000000000000001c102d00000000000000000000000000000000000000000000000000000000001c102e00000000000000000000000000000000000000000000000000000000001c102f00000000000000000000000000000000000000000000000000000000001c103000000000000000000000000000000000000000000000000000000000001c103100000000000000000000000000000000000000000000000000000000001c103200000000000000000000000000000000000000000000000000000000001c103300000000000000000000000000000000000000000000000000000000001c103400000000000000000000000000000000000000000000000000000000001c103500000000000000000000000000000000000000000000000000000000001c103600000000000000000000000000000000000000000000000000000000001c103700000000000000000000000000000000000000000000000000000000001c103800000000000000000000000000000000000000000000000000000000001c103900000000000000000000000000000000000000000000000000000000001c103a00000000000000000000000000000000000000000000000000000000001c103b00000000000000000000000000000000000000000000000000000000001c103c00000000000000000000000000000000000000000000000000000000001c103d00000000000000000000000000000000000000000000000000000000001c103e00000000000000000000000000000000000000000000000000000000001c103f4000000000000000000000000000000000000000000000000000000000001c000100000000000000000000000000000000000000000000000000000000001c110000000000000000000000000000000000000000000000000000000000001c110100000000000000000000000000000000000000000000000000000000001c110200000000000000000000000000000000000000000000000000000000001c110300000000000000000000000000000000000000000000000000000000001c110400000000000000000000000000000000000000000000000000000000001c110500000000000000000000000000000000000000000000000000000000001c110600000000000000000000000000000000000000000000000000000000001c110700000000000000000000000000000000000000000000000000000000001c110800000000000000000000000000000000000000000000000000000000001c110900000000000000000000000000000000000000000000000000000000001c110a00000000000000000000000000000000000000000000000000000000001c110b00000000000000000000000000000000000000000000000000000000001c110c00000000000000000000000000000000000000000000000000000000001c110d00000000000000000000000000000000000000000000000000000000001c110e00000000000000000000000000000000000000000000000000000000001c110f00000000000000000000000000000000000000000000000000000000001c111000000000000000000000000000000000000000000000000000000000001c111100000000000000000000000000000000000000000000000000000000001c111200000000000000000000000000000000000000000000000000000000001c111300000000000000000000000000000000000000000000000000000000001c111400000000000000000000000000000000000000000000000000000000001c111500000000000000000000000000000000000000000000000000000000001c111600000000000000000000000000000000000000000000000000000000001c111700000000000000000000000000000000000000000000000000000000001c111800000000000000000000000000000000000000000000000000000000001c111900000000000000000000000000000000000000000000000000000000001c111a00000000000000000000000000000000000000000000000000000000001c111b00000000000000000000000000000000000000000000000000000000001c111c00000000000000000000000000000000000000000000000000000000001c111d00000000000000000000000000000000000000000000000000000000001c111e00000000000000000000000000000000000000000000000000000000001c111f00000000000000000000000000000000000000000000000000000000001c112000000000000000000000000000000000000000000000000000000000001c112100000000000000000000000000000000000000000000000000000000001c112200000000000000000000000000000000000000000000000000000000001c112300000000000000000000000000000000000000000000000000000000001c112400000000000000000000000000000000000000000000000000000000001c112500000000000000000000000000000000000000000000000000000000001c112600000000000000000000000000000000000000000000000000000000001c112700000000000000000000000000000000000000000000000000000000001c112800000000000000000000000000000000000000000000000000000000001c112900000000000000000000000000000000000000000000000000000000001c112a00000000000000000000000000000000000000000000000000000000001c112b00000000000000000000000000000000000000000000000000000000001c112c00000000000000000000000000000000000000000000000000000000001c112d00000000000000000000000000000000000000000000000000000000001c112e00000000000000000000000000000000000000000000000000000000001c112f00000000000000000000000000000000000000000000000000000000001c113000000000000000000000000000000000000000000000000000000000001c113100000000000000000000000000000000000000000000000000000000001c113200000000000000000000000000000000000000000000000000000000001c113300000000000000000000000000000000000000000000000000000000001c113400000000000000000000000000000000000000000000000000000000001c113500000000000000000000000000000000000000000000000000000000001c113600000000000000000000000000000000000000000000000000000000001c113700000000000000000000000000000000000000000000000000000000001c113800000000000000000000000000000000000000000000000000000000001c113900000000000000000000000000000000000000000000000000000000001c113a00000000000000000000000000000000000000000000000000000000001c113b00000000000000000000000000000000000000000000000000000000001c113c00000000000000000000000000000000000000000000000000000000001c113d00000000000000000000000000000000000000000000000000000000001c113e080032724de1d6ec869c131859afe6fd33f6f9671c22cb571cc5e694deb1866ccc00b42f417479d2716d26461d44cec542d856294c55df755cbaafb6d731d0102c000a929c0dc3f37349c75878e678bb82cd3f2ada39b278bb841812ec290aca3b00dfbe7d369fe3222f98c449724614c53b1fe2cab20e0ef5b32fa5e3a16756a500790e7c8e3dfe2b8148b0f8c85f89cab718bd1704af7413f510f6697c4baa3100a77eca326aa2a2c4b2c9ec7c2af94aa5f89ed7f5adda05b2c9312adfafac48005b58ed9e335da74a33db99830d12be3dc16a1515dc5538f2337167b9fe6c79007e2c83d687b981fe73fce5ea00b64d859548997e68c1d97ad7bbb62cc56b014000000000000000000000000000000000000000000000000000000000001c200000000000000000000000000000000000000000000000000000000000001c200a00000000000000000000000000000000000000000000000000000000001c200100000000000000000000000000000000000000000000000000000000001c200b00000000000000000000000000000000000000000000000000000000001c200200000000000000000000000000000000000000000000000000000000001c200c00000000000000000000000000000000000000000000000000000000001c200300000000000000000000000000000000000000000000000000000000001c200d00000000000000000000000000000000000000000000000000000000001c200400000000000000000000000000000000000000000000000000000000001c200e00000000000000000000000000000000000000000000000000000000001c200500000000000000000000000000000000000000000000000000000000001c200f00000000000000000000000000000000000000000000000000000000001c200600000000000000000000000000000000000000000000000000000000001c201000000000000000000000000000000000000000000000000000000000001c200700000000000000000000000000000000000000000000000000000000001c201100000000000000000000000000000000000000000000000000000000001c200800000000000000000000000000000000000000000000000000000000001c201200000000000000000000000000000000000000000000000000000000001c200900000000000000000000000000000000000000000000000000000000001c201300000000000000000000000000000000000000000000000000000000001c200a00000000000000000000000000000000000000000000000000000000001c201400000000000000000000000000000000000000000000000000000000001c200b00000000000000000000000000000000000000000000000000000000001c201500000000000000000000000000000000000000000000000000000000001c200c00000000000000000000000000000000000000000000000000000000001c201600000000000000000000000000000000000000000000000000000000001c200d00000000000000000000000000000000000000000000000000000000001c201700000000000000000000000000000000000000000000000000000000001c200e00000000000000000000000000000000000000000000000000000000001c201800000000000000000000000000000000000000000000000000000000001c200f00000000000000000000000000000000000000000000000000000000001c201900000000000000000000000000000000000000000000000000000000001c201000000000000000000000000000000000000000000000000000000000001c201a00000000000000000000000000000000000000000000000000000000001c201100000000000000000000000000000000000000000000000000000000001c201b00000000000000000000000000000000000000000000000000000000001c201200000000000000000000000000000000000000000000000000000000001c201c00000000000000000000000000000000000000000000000000000000001c201300000000000000000000000000000000000000000000000000000000001c201d00000000000000000000000000000000000000000000000000000000001c201400000000000000000000000000000000000000000000000000000000001c201e00000000000000000000000000000000000000000000000000000000001c201500000000000000000000000000000000000000000000000000000000001c201f00000000000000000000000000000000000000000000000000000000001c201600000000000000000000000000000000000000000000000000000000001c202000000000000000000000000000000000000000000000000000000000001c201700000000000000000000000000000000000000000000000000000000001c202100000000000000000000000000000000000000000000000000000000001c201800000000000000000000000000000000000000000000000000000000001c202200000000000000000000000000000000000000000000000000000000001c201900000000000000000000000000000000000000000000000000000000001c202300000000000000000000000000000000000000000000000000000000001c201a00000000000000000000000000000000000000000000000000000000001c202400000000000000000000000000000000000000000000000000000000001c201b00000000000000000000000000000000000000000000000000000000001c202500000000000000000000000000000000000000000000000000000000001c201c00000000000000000000000000000000000000000000000000000000001c202600000000000000000000000000000000000000000000000000000000001c201d00000000000000000000000000000000000000000000000000000000001c202700000000000000000000000000000000000000000000000000000000001c201e00000000000000000000000000000000000000000000000000000000001c202800000000000000000000000000000000000000000000000000000000001c201f00000000000000000000000000000000000000000000000000000000001c202900000000000000000000000000000000000000000000000000000000001c202000000000000000000000000000000000000000000000000000000000001c202a00000000000000000000000000000000000000000000000000000000001c202100000000000000000000000000000000000000000000000000000000001c202b00000000000000000000000000000000000000000000000000000000001c202200000000000000000000000000000000000000000000000000000000001c202c00000000000000000000000000000000000000000000000000000000001c202300000000000000000000000000000000000000000000000000000000001c202d00000000000000000000000000000000000000000000000000000000001c202400000000000000000000000000000000000000000000000000000000001c202e00000000000000000000000000000000000000000000000000000000001c202500000000000000000000000000000000000000000000000000000000001c202f00000000000000000000000000000000000000000000000000000000001c202600000000000000000000000000000000000000000000000000000000001c203000000000000000000000000000000000000000000000000000000000001c202700000000000000000000000000000000000000000000000000000000001c203100000000000000000000000000000000000000000000000000000000001c202800000000000000000000000000000000000000000000000000000000001c203200000000000000000000000000000000000000000000000000000000001c202900000000000000000000000000000000000000000000000000000000001c203300000000000000000000000000000000000000000000000000000000001c202a00000000000000000000000000000000000000000000000000000000001c203400000000000000000000000000000000000000000000000000000000001c202b00000000000000000000000000000000000000000000000000000000001c203500000000000000000000000000000000000000000000000000000000001c202c00000000000000000000000000000000000000000000000000000000001c203600000000000000000000000000000000000000000000000000000000001c202d00000000000000000000000000000000000000000000000000000000001c203700000000000000000000000000000000000000000000000000000000001c202e00000000000000000000000000000000000000000000000000000000001c203800000000000000000000000000000000000000000000000000000000001c202f00000000000000000000000000000000000000000000000000000000001c203900000000000000000000000000000000000000000000000000000000001c203000000000000000000000000000000000000000000000000000000000001c203a00000000000000000000000000000000000000000000000000000000001c203100000000000000000000000000000000000000000000000000000000001c203b00000000000000000000000000000000000000000000000000000000001c203200000000000000000000000000000000000000000000000000000000001c203c00000000000000000000000000000000000000000000000000000000001c203300000000000000000000000000000000000000000000000000000000001c203d00000000000000000000000000000000000000000000000000000000001c203400000000000000000000000000000000000000000000000000000000001c203e00000000000000000000000000000000000000000000000000000000001c203500000000000000000000000000000000000000000000000000000000001c203f00000000000000000000000000000000000000000000000000000000001c203600000000000000000000000000000000000000000000000000000000001c204000000000000000000000000000000000000000000000000000000000001c203700000000000000000000000000000000000000000000000000000000001c204100000000000000000000000000000000000000000000000000000000001c203800000000000000000000000000000000000000000000000000000000001c204200000000000000000000000000000000000000000000000000000000001c203900000000000000000000000000000000000000000000000000000000001c204300000000000000000000000000000000000000000000000000000000001c203a00000000000000000000000000000000000000000000000000000000001c204400000000000000000000000000000000000000000000000000000000001c203b00000000000000000000000000000000000000000000000000000000001c204500000000000000000000000000000000000000000000000000000000001c203c00000000000000000000000000000000000000000000000000000000001c204600000000000000000000000000000000000000000000000000000000001c203d00000000000000000000000000000000000000000000000000000000001c204700000000000000000000000000000000000000000000000000000000001c203e00000000000000000000000000000000000000000000000000000000001c204800000000000000000000000000000000000000000000000000000000001c203f00000000000000000000000000000000000000000000000000000000001c20494000000000000000000000000000000000000000000000000000000000001c130000000000000000000000000000000000000000000000000000000000001c130100000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c13110000001200000000000000000000000000000000000000000000000000000000001c130100000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c13120000001200000000000000000000000000000000000000000000000000000000001c130200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c13130000001200000000000000000000000000000000000000000000000000000000001c130300000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c13140000001200000000000000000000000000000000000000000000000000000000001c130400000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c13150000001200000000000000000000000000000000000000000000000000000000001c130500000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c13160000001200000000000000000000000000000000000000000000000000000000001c130600000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c13170000001200000000000000000000000000000000000000000000000000000000001c130700000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c13180000001200000000000000000000000000000000000000000000000000000000001c130800000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c13190000001200000000000000000000000000000000000000000000000000000000001c130900000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a0000001200000000000000000000000000000000000000000000000000000000001c130a00000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b0000001200000000000000000000000000000000000000000000000000000000001c130b00000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c0000001200000000000000000000000000000000000000000000000000000000001c130c00000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d0000001200000000000000000000000000000000000000000000000000000000001c130d00000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e0000001200000000000000000000000000000000000000000000000000000000001c130e00000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f0000001200000000000000000000000000000000000000000000000000000000001c130f00000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c13200000001200000000000000000000000000000000000000000000000000000000001c131000000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c13210000001200000000000000000000000000000000000000000000000000000000001c131100000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c13220000001200000000000000000000000000000000000000000000000000000000001c131200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c13230000001200000000000000000000000000000000000000000000000000000000001c131300000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c13240000001200000000000000000000000000000000000000000000000000000000001c131400000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c13250000001200000000000000000000000000000000000000000000000000000000001c131500000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c13260000001200000000000000000000000000000000000000000000000000000000001c131600000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c13270000001200000000000000000000000000000000000000000000000000000000001c131700000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c13280000001200000000000000000000000000000000000000000000000000000000001c131800000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c13290000001200000000000000000000000000000000000000000000000000000000001c131900000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a0000001200000000000000000000000000000000000000000000000000000000001c131a00000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b0000001200000000000000000000000000000000000000000000000000000000001c131b00000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c0000001200000000000000000000000000000000000000000000000000000000001c131c00000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d0000001200000000000000000000000000000000000000000000000000000000001c131d00000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e0000001200000000000000000000000000000000000000000000000000000000001c131e00000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f0000001200000000000000000000000000000000000000000000000000000000001c131f00000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c13300000001200000000000000000000000000000000000000000000000000000000001c132000000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c13310000001200000000000000000000000000000000000000000000000000000000001c132100000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c13320000001200000000000000000000000000000000000000000000000000000000001c132200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c13330000001200000000000000000000000000000000000000000000000000000000001c132300000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c13340000001200000000000000000000000000000000000000000000000000000000001c132400000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c13350000001200000000000000000000000000000000000000000000000000000000001c132500000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c13360000001200000000000000000000000000000000000000000000000000000000001c132600000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c13370000001200000000000000000000000000000000000000000000000000000000001c132700000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c13380000001200000000000000000000000000000000000000000000000000000000001c132800000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c13390000001200000000000000000000000000000000000000000000000000000000001c132900000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a0000001200000000000000000000000000000000000000000000000000000000001c132a00000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b0000001200000000000000000000000000000000000000000000000000000000001c132b00000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c0000001200000000000000000000000000000000000000000000000000000000001c132c00000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d0000001200000000000000000000000000000000000000000000000000000000001c132d00000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e0000001200000000000000000000000000000000000000000000000000000000001c132e00000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f0000001200000000000000000000000000000000000000000000000000000000001c132f00000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c13400000001200000000000000000000000000000000000000000000000000000000001c133000000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c13410000001200000000000000000000000000000000000000000000000000000000001c133100000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c13420000001200000000000000000000000000000000000000000000000000000000001c133200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c13430000001200000000000000000000000000000000000000000000000000000000001c133300000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c13440000001200000000000000000000000000000000000000000000000000000000001c133400000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c13450000001200000000000000000000000000000000000000000000000000000000001c133500000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c13460000001200000000000000000000000000000000000000000000000000000000001c133600000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c13470000001200000000000000000000000000000000000000000000000000000000001c133700000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c13480000001200000000000000000000000000000000000000000000000000000000001c133800000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c13490000001200000000000000000000000000000000000000000000000000000000001c133900000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a0000001200000000000000000000000000000000000000000000000000000000001c133a00000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b0000001200000000000000000000000000000000000000000000000000000000001c133b00000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c0000001200000000000000000000000000000000000000000000000000000000001c133c00000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d0000001200000000000000000000000000000000000000000000000000000000001c133d00000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e0000001200000000000000000000000000000000000000000000000000000000001c133e00000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e00000000000000000000000000000000000000000000000000000000001c134f0000001200000000000000000000000000000000000000000000000000000000001c133f00000000000000000000000000000000000000000000000000000000001c134000000000000000000000000000000000000000000000000000000000001c134100000000000000000000000000000000000000000000000000000000001c134200000000000000000000000000000000000000000000000000000000001c134300000000000000000000000000000000000000000000000000000000001c134400000000000000000000000000000000000000000000000000000000001c134500000000000000000000000000000000000000000000000000000000001c134600000000000000000000000000000000000000000000000000000000001c134700000000000000000000000000000000000000000000000000000000001c134800000000000000000000000000000000000000000000000000000000001c134900000000000000000000000000000000000000000000000000000000001c134a00000000000000000000000000000000000000000000000000000000001c134b00000000000000000000000000000000000000000000000000000000001c134c00000000000000000000000000000000000000000000000000000000001c134d00000000000000000000000000000000000000000000000000000000001c134e00000000000000000000000000000000000000000000000000000000001c134f00000000000000000000000000000000000000000000000000000000001c1350000000120000000000000e813752944d5bacb95051b1cb73f2cc438889585f42ce19156a31ebf7a2c29c0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000000000000020100100000000000000000000000000000000000000000000000000000000002010020000000000000000000000000000000000000000000000000000000000201003000000000000000000000000000000000000000000000000000000000020100400000000000000000000000000000000000000000000000000000000002010050000000000000000000000000000000000000000000000000000000000201006000000000000000000000000000000000000000000000000000000000020100700000000000000000000000000000000000000000000000000000000002010080000000000000000000000000000000000000000000000000000000000201009000000000000000000000000000000000000000000000000000000000020100a000000000000000000000000000000000000000000000000000000000020100b000000000000000000000000000000000000000000000000000000000020100c000000000000000000000000000000000000000000000000000000000020100d000000000000000000000000000000000000000000000000000000000020100e000000000000000000000000000000000000000000000000000000000020100f0000000000000000000000000000000000000000000000000000000000201010000000000000000000000000000000000000000000000000000000000020101100000000000000000000000000000000000000000000000000000000002010120000000000000000000000000000000000000000000000000000000000201013000000000000000000000000000000000000000000000000000000000020101400000000000000000000000000000000000000000000000000000000002010150000000000000000000000000000000000000000000000000000000000201016000000000000000000000000000000000000000000000000000000000020101700000000000000000000000000000000000000000000000000000000002010180000000000000000000000000000000000000000000000000000000000201019000000000000000000000000000000000000000000000000000000000020101a000000000000000000000000000000000000000000000000000000000020101b000000000000000000000000000000000000000000000000000000000020101c000000000000000000000000000000000000000000000000000000000020101d000000000000000000000000000000000000000000000000000000000020101e000000000000000000000000000000000000000000000000000000000020101f0000000000000000000000000000000000000000000000000000000000201020000000000000000000000000000000000000000000000000000000000020102100000000000000000000000000000000000000000000000000000000002010220000000000000000000000000000000000000000000000000000000000201023000000000000000000000000000000000000000000000000000000000020102400000000000000000000000000000000000000000000000000000000002010250000000000000000000000000000000000000000000000000000000000201026000000000000000000000000000000000000000000000000000000000020102700000000000000000000000000000000000000000000000000000000002010280000000000000000000000000000000000000000000000000000000000201029000000000000000000000000000000000000000000000000000000000020102a000000000000000000000000000000000000000000000000000000000020102b000000000000000000000000000000000000000000000000000000000020102c000000000000000000000000000000000000000000000000000000000020102d000000000000000000000000000000000000000000000000000000000020102e000000000000000000000000000000000000000000000000000000000020102f0000000000000000000000000000000000000000000000000000000000201030000000000000000000000000000000000000000000000000000000000020103100000000000000000000000000000000000000000000000000000000002010320000000000000000000000000000000000000000000000000000000000201033000000000000000000000000000000000000000000000000000000000020103400000000000000000000000000000000000000000000000000000000002010350000000000000000000000000000000000000000000000000000000000201036000000000000000000000000000000000000000000000000000000000020103700000000000000000000000000000000000000000000000000000000002010380000000000000000000000000000000000000000000000000000000000201039000000000000000000000000000000000000000000000000000000000020103a000000000000000000000000000000000000000000000000000000000020103b000000000000000000000000000000000000000000000000000000000020103c000000000000000000000000000000000000000000000000000000000020103d000000000000000000000000000000000000000000000000000000000020103e000000000000000000000000000000000000000000000000000000000020103f4000000000000000000000000000000000000000000000000000000000002000010000000000000000000000000000000000000000000000000000000000201100000000000000000000000000000000000000000000000000000000000020110100000000000000000000000000000000000000000000000000000000002011020000000000000000000000000000000000000000000000000000000000201103000000000000000000000000000000000000000000000000000000000020110400000000000000000000000000000000000000000000000000000000002011050000000000000000000000000000000000000000000000000000000000201106000000000000000000000000000000000000000000000000000000000020110700000000000000000000000000000000000000000000000000000000002011080000000000000000000000000000000000000000000000000000000000201109000000000000000000000000000000000000000000000000000000000020110a000000000000000000000000000000000000000000000000000000000020110b000000000000000000000000000000000000000000000000000000000020110c000000000000000000000000000000000000000000000000000000000020110d000000000000000000000000000000000000000000000000000000000020110e000000000000000000000000000000000000000000000000000000000020110f0000000000000000000000000000000000000000000000000000000000201110000000000000000000000000000000000000000000000000000000000020111100000000000000000000000000000000000000000000000000000000002011120000000000000000000000000000000000000000000000000000000000201113000000000000000000000000000000000000000000000000000000000020111400000000000000000000000000000000000000000000000000000000002011150000000000000000000000000000000000000000000000000000000000201116000000000000000000000000000000000000000000000000000000000020111700000000000000000000000000000000000000000000000000000000002011180000000000000000000000000000000000000000000000000000000000201119000000000000000000000000000000000000000000000000000000000020111a000000000000000000000000000000000000000000000000000000000020111b000000000000000000000000000000000000000000000000000000000020111c000000000000000000000000000000000000000000000000000000000020111d000000000000000000000000000000000000000000000000000000000020111e000000000000000000000000000000000000000000000000000000000020111f0000000000000000000000000000000000000000000000000000000000201120000000000000000000000000000000000000000000000000000000000020112100000000000000000000000000000000000000000000000000000000002011220000000000000000000000000000000000000000000000000000000000201123000000000000000000000000000000000000000000000000000000000020112400000000000000000000000000000000000000000000000000000000002011250000000000000000000000000000000000000000000000000000000000201126000000000000000000000000000000000000000000000000000000000020112700000000000000000000000000000000000000000000000000000000002011280000000000000000000000000000000000000000000000000000000000201129000000000000000000000000000000000000000000000000000000000020112a000000000000000000000000000000000000000000000000000000000020112b000000000000000000000000000000000000000000000000000000000020112c000000000000000000000000000000000000000000000000000000000020112d000000000000000000000000000000000000000000000000000000000020112e000000000000000000000000000000000000000000000000000000000020112f0000000000000000000000000000000000000000000000000000000000201130000000000000000000000000000000000000000000000000000000000020113100000000000000000000000000000000000000000000000000000000002011320000000000000000000000000000000000000000000000000000000000201133000000000000000000000000000000000000000000000000000000000020113400000000000000000000000000000000000000000000000000000000002011350000000000000000000000000000000000000000000000000000000000201136000000000000000000000000000000000000000000000000000000000020113700000000000000000000000000000000000000000000000000000000002011380000000000000000000000000000000000000000000000000000000000201139000000000000000000000000000000000000000000000000000000000020113a000000000000000000000000000000000000000000000000000000000020113b000000000000000000000000000000000000000000000000000000000020113c000000000000000000000000000000000000000000000000000000000020113d000000000000000000000000000000000000000000000000000000000020113e08007028edb640521e1ff4bad393203e4295b7a3d56e56bb1f521e5c4e9b4005300036797701c3aaf3565c51441e1e5380670d18b202fe37553ecabfe7dc0b8f83009f8a18280b8f8a6ade36f92424bb3832d4a5f781a599db2443d893e9f6ade900b6f46198c6138158211376e12e634fe8277e87890072320d1cc11b9212526e007c1fd1abdb6e87968aa2bccf1a4ac7c7784a416ec5e3279f1c16c81b04f59300d54f3523d1db359f5666c0dd5d7fa65ff4d5a07a83e23899f327c34d872dc8006ad2dc7beeefd5dd6b474b723b971e2d0f5cf6a9b109b56480319d5afdd44e001b0acdd069674a0168231de30523bff9854818cd631fdd1c90622117acf7f8400000000000000000000000000000000000000000000000000000000000202000000000000000000000000000000000000000000000000000000000000020200a0000000000000000000000000000000000000000000000000000000000202001000000000000000000000000000000000000000000000000000000000020200b0000000000000000000000000000000000000000000000000000000000202002000000000000000000000000000000000000000000000000000000000020200c0000000000000000000000000000000000000000000000000000000000202003000000000000000000000000000000000000000000000000000000000020200d0000000000000000000000000000000000000000000000000000000000202004000000000000000000000000000000000000000000000000000000000020200e0000000000000000000000000000000000000000000000000000000000202005000000000000000000000000000000000000000000000000000000000020200f00000000000000000000000000000000000000000000000000000000002020060000000000000000000000000000000000000000000000000000000000202010000000000000000000000000000000000000000000000000000000000020200700000000000000000000000000000000000000000000000000000000002020110000000000000000000000000000000000000000000000000000000000202008000000000000000000000000000000000000000000000000000000000020201200000000000000000000000000000000000000000000000000000000002020090000000000000000000000000000000000000000000000000000000000202013000000000000000000000000000000000000000000000000000000000020200a0000000000000000000000000000000000000000000000000000000000202014000000000000000000000000000000000000000000000000000000000020200b0000000000000000000000000000000000000000000000000000000000202015000000000000000000000000000000000000000000000000000000000020200c0000000000000000000000000000000000000000000000000000000000202016000000000000000000000000000000000000000000000000000000000020200d0000000000000000000000000000000000000000000000000000000000202017000000000000000000000000000000000000000000000000000000000020200e0000000000000000000000000000000000000000000000000000000000202018000000000000000000000000000000000000000000000000000000000020200f00000000000000000000000000000000000000000000000000000000002020190000000000000000000000000000000000000000000000000000000000202010000000000000000000000000000000000000000000000000000000000020201a0000000000000000000000000000000000000000000000000000000000202011000000000000000000000000000000000000000000000000000000000020201b0000000000000000000000000000000000000000000000000000000000202012000000000000000000000000000000000000000000000000000000000020201c0000000000000000000000000000000000000000000000000000000000202013000000000000000000000000000000000000000000000000000000000020201d0000000000000000000000000000000000000000000000000000000000202014000000000000000000000000000000000000000000000000000000000020201e0000000000000000000000000000000000000000000000000000000000202015000000000000000000000000000000000000000000000000000000000020201f00000000000000000000000000000000000000000000000000000000002020160000000000000000000000000000000000000000000000000000000000202020000000000000000000000000000000000000000000000000000000000020201700000000000000000000000000000000000000000000000000000000002020210000000000000000000000000000000000000000000000000000000000202018000000000000000000000000000000000000000000000000000000000020202200000000000000000000000000000000000000000000000000000000002020190000000000000000000000000000000000000000000000000000000000202023000000000000000000000000000000000000000000000000000000000020201a0000000000000000000000000000000000000000000000000000000000202024000000000000000000000000000000000000000000000000000000000020201b0000000000000000000000000000000000000000000000000000000000202025000000000000000000000000000000000000000000000000000000000020201c0000000000000000000000000000000000000000000000000000000000202026000000000000000000000000000000000000000000000000000000000020201d0000000000000000000000000000000000000000000000000000000000202027000000000000000000000000000000000000000000000000000000000020201e0000000000000000000000000000000000000000000000000000000000202028000000000000000000000000000000000000000000000000000000000020201f00000000000000000000000000000000000000000000000000000000002020290000000000000000000000000000000000000000000000000000000000202020000000000000000000000000000000000000000000000000000000000020202a0000000000000000000000000000000000000000000000000000000000202021000000000000000000000000000000000000000000000000000000000020202b0000000000000000000000000000000000000000000000000000000000202022000000000000000000000000000000000000000000000000000000000020202c0000000000000000000000000000000000000000000000000000000000202023000000000000000000000000000000000000000000000000000000000020202d0000000000000000000000000000000000000000000000000000000000202024000000000000000000000000000000000000000000000000000000000020202e0000000000000000000000000000000000000000000000000000000000202025000000000000000000000000000000000000000000000000000000000020202f00000000000000000000000000000000000000000000000000000000002020260000000000000000000000000000000000000000000000000000000000202030000000000000000000000000000000000000000000000000000000000020202700000000000000000000000000000000000000000000000000000000002020310000000000000000000000000000000000000000000000000000000000202028000000000000000000000000000000000000000000000000000000000020203200000000000000000000000000000000000000000000000000000000002020290000000000000000000000000000000000000000000000000000000000202033000000000000000000000000000000000000000000000000000000000020202a0000000000000000000000000000000000000000000000000000000000202034000000000000000000000000000000000000000000000000000000000020202b0000000000000000000000000000000000000000000000000000000000202035000000000000000000000000000000000000000000000000000000000020202c0000000000000000000000000000000000000000000000000000000000202036000000000000000000000000000000000000000000000000000000000020202d0000000000000000000000000000000000000000000000000000000000202037000000000000000000000000000000000000000000000000000000000020202e0000000000000000000000000000000000000000000000000000000000202038000000000000000000000000000000000000000000000000000000000020202f00000000000000000000000000000000000000000000000000000000002020390000000000000000000000000000000000000000000000000000000000202030000000000000000000000000000000000000000000000000000000000020203a0000000000000000000000000000000000000000000000000000000000202031000000000000000000000000000000000000000000000000000000000020203b0000000000000000000000000000000000000000000000000000000000202032000000000000000000000000000000000000000000000000000000000020203c0000000000000000000000000000000000000000000000000000000000202033000000000000000000000000000000000000000000000000000000000020203d0000000000000000000000000000000000000000000000000000000000202034000000000000000000000000000000000000000000000000000000000020203e0000000000000000000000000000000000000000000000000000000000202035000000000000000000000000000000000000000000000000000000000020203f00000000000000000000000000000000000000000000000000000000002020360000000000000000000000000000000000000000000000000000000000202040000000000000000000000000000000000000000000000000000000000020203700000000000000000000000000000000000000000000000000000000002020410000000000000000000000000000000000000000000000000000000000202038000000000000000000000000000000000000000000000000000000000020204200000000000000000000000000000000000000000000000000000000002020390000000000000000000000000000000000000000000000000000000000202043000000000000000000000000000000000000000000000000000000000020203a0000000000000000000000000000000000000000000000000000000000202044000000000000000000000000000000000000000000000000000000000020203b0000000000000000000000000000000000000000000000000000000000202045000000000000000000000000000000000000000000000000000000000020203c0000000000000000000000000000000000000000000000000000000000202046000000000000000000000000000000000000000000000000000000000020203d0000000000000000000000000000000000000000000000000000000000202047000000000000000000000000000000000000000000000000000000000020203e0000000000000000000000000000000000000000000000000000000000202048000000000000000000000000000000000000000000000000000000000020203f0000000000000000000000000000000000000000000000000000000000202049400000000000000000000000000000000000000000000000000000000000201300000000000000000000000000000000000000000000000000000000000020130100000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000012000000000000000000000000000000000000000000000000000000000020130100000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000001200000000000000000000000000000000000000000000000000000000002013020000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000120000000000000000000000000000000000000000000000000000000000201303000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000012000000000000000000000000000000000000000000000000000000000020130400000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000001200000000000000000000000000000000000000000000000000000000002013050000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000120000000000000000000000000000000000000000000000000000000000201306000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000012000000000000000000000000000000000000000000000000000000000020130700000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000001200000000000000000000000000000000000000000000000000000000002013080000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000120000000000000000000000000000000000000000000000000000000000201309000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a00000012000000000000000000000000000000000000000000000000000000000020130a000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b00000012000000000000000000000000000000000000000000000000000000000020130b000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c00000012000000000000000000000000000000000000000000000000000000000020130c000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d00000012000000000000000000000000000000000000000000000000000000000020130d000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e00000012000000000000000000000000000000000000000000000000000000000020130e000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f00000012000000000000000000000000000000000000000000000000000000000020130f0000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000120000000000000000000000000000000000000000000000000000000000201310000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000012000000000000000000000000000000000000000000000000000000000020131100000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000001200000000000000000000000000000000000000000000000000000000002013120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000120000000000000000000000000000000000000000000000000000000000201313000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000012000000000000000000000000000000000000000000000000000000000020131400000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000001200000000000000000000000000000000000000000000000000000000002013150000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000120000000000000000000000000000000000000000000000000000000000201316000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000012000000000000000000000000000000000000000000000000000000000020131700000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000001200000000000000000000000000000000000000000000000000000000002013180000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000120000000000000000000000000000000000000000000000000000000000201319000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a00000012000000000000000000000000000000000000000000000000000000000020131a000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b00000012000000000000000000000000000000000000000000000000000000000020131b000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c00000012000000000000000000000000000000000000000000000000000000000020131c000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d00000012000000000000000000000000000000000000000000000000000000000020131d000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e00000012000000000000000000000000000000000000000000000000000000000020131e000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f00000012000000000000000000000000000000000000000000000000000000000020131f0000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000120000000000000000000000000000000000000000000000000000000000201320000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000012000000000000000000000000000000000000000000000000000000000020132100000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000001200000000000000000000000000000000000000000000000000000000002013220000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000120000000000000000000000000000000000000000000000000000000000201323000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000012000000000000000000000000000000000000000000000000000000000020132400000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000001200000000000000000000000000000000000000000000000000000000002013250000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000120000000000000000000000000000000000000000000000000000000000201326000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000012000000000000000000000000000000000000000000000000000000000020132700000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000001200000000000000000000000000000000000000000000000000000000002013280000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000120000000000000000000000000000000000000000000000000000000000201329000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a00000012000000000000000000000000000000000000000000000000000000000020132a000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b00000012000000000000000000000000000000000000000000000000000000000020132b000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c00000012000000000000000000000000000000000000000000000000000000000020132c000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d00000012000000000000000000000000000000000000000000000000000000000020132d000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e00000012000000000000000000000000000000000000000000000000000000000020132e000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f00000012000000000000000000000000000000000000000000000000000000000020132f0000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000120000000000000000000000000000000000000000000000000000000000201330000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000012000000000000000000000000000000000000000000000000000000000020133100000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000001200000000000000000000000000000000000000000000000000000000002013320000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000120000000000000000000000000000000000000000000000000000000000201333000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000012000000000000000000000000000000000000000000000000000000000020133400000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000001200000000000000000000000000000000000000000000000000000000002013350000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000120000000000000000000000000000000000000000000000000000000000201336000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000012000000000000000000000000000000000000000000000000000000000020133700000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000001200000000000000000000000000000000000000000000000000000000002013380000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000120000000000000000000000000000000000000000000000000000000000201339000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a00000012000000000000000000000000000000000000000000000000000000000020133a000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b00000012000000000000000000000000000000000000000000000000000000000020133b000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c00000012000000000000000000000000000000000000000000000000000000000020133c000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d00000012000000000000000000000000000000000000000000000000000000000020133d000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e00000012000000000000000000000000000000000000000000000000000000000020133e000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e000000000000000000000000000000000000000000000000000000000020134f00000012000000000000000000000000000000000000000000000000000000000020133f0000000000000000000000000000000000000000000000000000000000201340000000000000000000000000000000000000000000000000000000000020134100000000000000000000000000000000000000000000000000000000002013420000000000000000000000000000000000000000000000000000000000201343000000000000000000000000000000000000000000000000000000000020134400000000000000000000000000000000000000000000000000000000002013450000000000000000000000000000000000000000000000000000000000201346000000000000000000000000000000000000000000000000000000000020134700000000000000000000000000000000000000000000000000000000002013480000000000000000000000000000000000000000000000000000000000201349000000000000000000000000000000000000000000000000000000000020134a000000000000000000000000000000000000000000000000000000000020134b000000000000000000000000000000000000000000000000000000000020134c000000000000000000000000000000000000000000000000000000000020134d000000000000000000000000000000000000000000000000000000000020134e000000000000000000000000000000000000000000000000000000000020134f0000000000000000000000000000000000000000000000000000000000201350000000120000000000", "header": { - "lastArchiveRoot": "0x15cf6f7e7495857857a35f8c8007b1fa965ee4c68ecbee6a0a65e9005aa0b6a1", - "blockHeadersHash": "0x1c00ec641ffe4020ef33cef29eb1c6280eee759385084b5fed7c154b162a9de6", - "contentCommitment": { - "blobsHash": "0x00c4158c4d40cf36cb1b645148ec894f084f69497a0ed1a2ac77607a28e1b8c5", - "inHash": "0x004c9b6f1dcd0d52543f9766f97c31ed93d988e429af87234a6574ec7dadfc29", - "outHash": "0x00a0e3c0aef9ca2096edfe9ab8e9098092a6e933d45061a842b50c2714375303" - }, + "lastArchiveRoot": "0x247d8363f9042676b1400475629c699edf0601fc55368182390aa6502482e7b7", + "blockHeadersHash": "0x0a9c34b663895a4a53479283fa2f571b376fb9c4e12965e2bcce8839307b7b73", + "blobsHash": "0x009772d5af0bd4920036c52b845fcae8285140df58c991652c1c838e592e77f9", + "inHash": "0x0017376ab1b98eee798fe1f0d7025f2db3f4b8206133fcb687229136ac468ee8", "slotNumber": 108, - "timestamp": 1763997081, - "coinbase": "0x5398115553bbb6aa38eaaeb26e62e5e015bcee17", - "feeRecipient": "0x19f2876a896acae1d397cd9c75e30c3cffc9ffff3fe9267113f6a3e887499d66", + "timestamp": 1767622602, + "coinbase": "0x92370154dc5a9dd2cdc34e345aae740cc52bf0c4", + "feeRecipient": "0x272266fe78f17445bc1c541e6adcb1226d6e654c33be8c6e945bbdcd76538105", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 1430 + "feePerL2Gas": 312950 }, "totalManaUsed": 0 }, - "headerHash": "0x00079e0ef834797c5c970e9e2022fbfad7127468a67e4bed4cb5a566815b5e41", + "headerHash": "0x00d8bcb7a931981977796c8066be510d1799cec07c3eb591cb56344d8f482471", "numTxs": 4 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/single_tx_checkpoint_1.json b/l1-contracts/test/fixtures/single_tx_checkpoint_1.json index 36ef417806fb..f19f1e3e726a 100644 --- a/l1-contracts/test/fixtures/single_tx_checkpoint_1.json +++ b/l1-contracts/test/fixtures/single_tx_checkpoint_1.json @@ -34,30 +34,27 @@ ] }, "checkpoint": { - "archive": "0x2915d8bb5e934da4c4459f875a37194f45e41167329958cc00f45b456b967a32", - "blobCommitments": "0x0183b37dddea6832d030cbae5e43088ccf26e68f2f5730e0bed1fa1eb16e40d8d40e6ec6750eab80b3a712116fd0eb799d", - "batchedBlobInputs": "0x01824489a6279a8a1ea8ba235bfb74f344806f3f2061fa86e28d86c877cf57830927d51b8d1f6dd6eddfd4ed3b0c350ce44849166adb1e768faaf69f6dae31d72b5c7c485228a916866c5b7b470fd775e01ee4ed6a7c51a61f0d3bf39a5be14a83b37dddea6832d030cbae5e43088ccf26e68f2f5730e0bed1fa1eb16e40d8d40e6ec6750eab80b3a712116fd0eb799d9692f1e462bb981fd01adadb2aa00ace533e464716545caea9a409f9523dc537950cdcd847849abff1f54d6662a09997", + "archive": "0x178a05ff6aa3a52578bda4bbd3ac0556d5ee1765f93790335b2f84b3a4061c3b", + "blobCommitments": "0x018901b021a82be9a83dcbfe4affd6193a7caf57f4dd040f3fb6c972ba4c9f6caa3b30e6b472f8c9900b3304f842372158", + "batchedBlobInputs": "0x017f9630db4dc94b5544456e154fd1d255ebb223c9d02580349fd6d50e2a4649029a453f11a8aa1b42e98017659c6a2b6d35ba5c92347053d414b5a129f0c4e24cadfe8c28f1c0339f06c58a1b1a7aae769a67e767d06caa27278c8381cecd9f8901b021a82be9a83dcbfe4affd6193a7caf57f4dd040f3fb6c972ba4c9f6caa3b30e6b472f8c9900b3304f842372158b4b5e493b37a621392a8bdbdf539faf3b6cca8213a1e3cadef5b3e956459e26d9470c3e27acd7f0fd212c56a03643584", "checkpointNumber": 1, - "body": "0x00000001001a63a0018a9457a8ffaebaff9bc6bf82acfc020da91a94b254bcbe1030b428800000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000004100100000000000000000000000000000000000000000000000000000000000410020000000000000000000000000000000000000000000000000000000000041003000000000000000000000000000000000000000000000000000000000004100400000000000000000000000000000000000000000000000000000000000410050000000000000000000000000000000000000000000000000000000000041006000000000000000000000000000000000000000000000000000000000004100700000000000000000000000000000000000000000000000000000000000410080000000000000000000000000000000000000000000000000000000000041009000000000000000000000000000000000000000000000000000000000004100a000000000000000000000000000000000000000000000000000000000004100b000000000000000000000000000000000000000000000000000000000004100c000000000000000000000000000000000000000000000000000000000004100d000000000000000000000000000000000000000000000000000000000004100e000000000000000000000000000000000000000000000000000000000004100f0000000000000000000000000000000000000000000000000000000000041010000000000000000000000000000000000000000000000000000000000004101100000000000000000000000000000000000000000000000000000000000410120000000000000000000000000000000000000000000000000000000000041013000000000000000000000000000000000000000000000000000000000004101400000000000000000000000000000000000000000000000000000000000410150000000000000000000000000000000000000000000000000000000000041016000000000000000000000000000000000000000000000000000000000004101700000000000000000000000000000000000000000000000000000000000410180000000000000000000000000000000000000000000000000000000000041019000000000000000000000000000000000000000000000000000000000004101a000000000000000000000000000000000000000000000000000000000004101b000000000000000000000000000000000000000000000000000000000004101c000000000000000000000000000000000000000000000000000000000004101d000000000000000000000000000000000000000000000000000000000004101e000000000000000000000000000000000000000000000000000000000004101f0000000000000000000000000000000000000000000000000000000000041020000000000000000000000000000000000000000000000000000000000004102100000000000000000000000000000000000000000000000000000000000410220000000000000000000000000000000000000000000000000000000000041023000000000000000000000000000000000000000000000000000000000004102400000000000000000000000000000000000000000000000000000000000410250000000000000000000000000000000000000000000000000000000000041026000000000000000000000000000000000000000000000000000000000004102700000000000000000000000000000000000000000000000000000000000410280000000000000000000000000000000000000000000000000000000000041029000000000000000000000000000000000000000000000000000000000004102a000000000000000000000000000000000000000000000000000000000004102b000000000000000000000000000000000000000000000000000000000004102c000000000000000000000000000000000000000000000000000000000004102d000000000000000000000000000000000000000000000000000000000004102e000000000000000000000000000000000000000000000000000000000004102f0000000000000000000000000000000000000000000000000000000000041030000000000000000000000000000000000000000000000000000000000004103100000000000000000000000000000000000000000000000000000000000410320000000000000000000000000000000000000000000000000000000000041033000000000000000000000000000000000000000000000000000000000004103400000000000000000000000000000000000000000000000000000000000410350000000000000000000000000000000000000000000000000000000000041036000000000000000000000000000000000000000000000000000000000004103700000000000000000000000000000000000000000000000000000000000410380000000000000000000000000000000000000000000000000000000000041039000000000000000000000000000000000000000000000000000000000004103a000000000000000000000000000000000000000000000000000000000004103b000000000000000000000000000000000000000000000000000000000004103c000000000000000000000000000000000000000000000000000000000004103d000000000000000000000000000000000000000000000000000000000004103e000000000000000000000000000000000000000000000000000000000004103f4000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004110100000000000000000000000000000000000000000000000000000000000411020000000000000000000000000000000000000000000000000000000000041103000000000000000000000000000000000000000000000000000000000004110400000000000000000000000000000000000000000000000000000000000411050000000000000000000000000000000000000000000000000000000000041106000000000000000000000000000000000000000000000000000000000004110700000000000000000000000000000000000000000000000000000000000411080000000000000000000000000000000000000000000000000000000000041109000000000000000000000000000000000000000000000000000000000004110a000000000000000000000000000000000000000000000000000000000004110b000000000000000000000000000000000000000000000000000000000004110c000000000000000000000000000000000000000000000000000000000004110d000000000000000000000000000000000000000000000000000000000004110e000000000000000000000000000000000000000000000000000000000004110f0000000000000000000000000000000000000000000000000000000000041110000000000000000000000000000000000000000000000000000000000004111100000000000000000000000000000000000000000000000000000000000411120000000000000000000000000000000000000000000000000000000000041113000000000000000000000000000000000000000000000000000000000004111400000000000000000000000000000000000000000000000000000000000411150000000000000000000000000000000000000000000000000000000000041116000000000000000000000000000000000000000000000000000000000004111700000000000000000000000000000000000000000000000000000000000411180000000000000000000000000000000000000000000000000000000000041119000000000000000000000000000000000000000000000000000000000004111a000000000000000000000000000000000000000000000000000000000004111b000000000000000000000000000000000000000000000000000000000004111c000000000000000000000000000000000000000000000000000000000004111d000000000000000000000000000000000000000000000000000000000004111e000000000000000000000000000000000000000000000000000000000004111f0000000000000000000000000000000000000000000000000000000000041120000000000000000000000000000000000000000000000000000000000004112100000000000000000000000000000000000000000000000000000000000411220000000000000000000000000000000000000000000000000000000000041123000000000000000000000000000000000000000000000000000000000004112400000000000000000000000000000000000000000000000000000000000411250000000000000000000000000000000000000000000000000000000000041126000000000000000000000000000000000000000000000000000000000004112700000000000000000000000000000000000000000000000000000000000411280000000000000000000000000000000000000000000000000000000000041129000000000000000000000000000000000000000000000000000000000004112a000000000000000000000000000000000000000000000000000000000004112b000000000000000000000000000000000000000000000000000000000004112c000000000000000000000000000000000000000000000000000000000004112d000000000000000000000000000000000000000000000000000000000004112e000000000000000000000000000000000000000000000000000000000004112f0000000000000000000000000000000000000000000000000000000000041130000000000000000000000000000000000000000000000000000000000004113100000000000000000000000000000000000000000000000000000000000411320000000000000000000000000000000000000000000000000000000000041133000000000000000000000000000000000000000000000000000000000004113400000000000000000000000000000000000000000000000000000000000411350000000000000000000000000000000000000000000000000000000000041136000000000000000000000000000000000000000000000000000000000004113700000000000000000000000000000000000000000000000000000000000411380000000000000000000000000000000000000000000000000000000000041139000000000000000000000000000000000000000000000000000000000004113a000000000000000000000000000000000000000000000000000000000004113b000000000000000000000000000000000000000000000000000000000004113c000000000000000000000000000000000000000000000000000000000004113d000000000000000000000000000000000000000000000000000000000004113e08004b8b814288544866292d9d0e66869207628fb0ef8120c59ec1d969a085d5d50075c5d0fc08d5578600928d2fc6cd1e63a2b87266a45558135a2912c5a7d6e60019574cfd6834b8c08012b12c6b178d65c27335e1001c1337996f4f460c2cf1000624d1d08e5c487711876584ae580b46b81854bc8e45e42e822ef18df136ff00b78383bdbff11e85552243f1429b8d83334d734dc92e1062b8a04371de5f88005b33017fa3cd1861669d2fd5621ba61db7a72646a9b459897a55780eeeb64e00a1d3d6c8bc4848ef2e4d256253773447d1b39deedd2d70248a2160c765afc200e1d211a34da229f26780fc7baa5a6ca0a35b7e0fea52ea082e35cd064db33d40000000000000000000000000000000000000000000000000000000000004020000000000000000000000000000000000000000000000000000000000000402010000000000000000000000000000000000000000000000000000000000042001000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042002000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042003000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042004000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042005000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420060000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004200700000000000000000000000000000000000000000000000000000000000420110000000000000000000000000000000000000000000000000000000000042008000000000000000000000000000000000000000000000000000000000004201200000000000000000000000000000000000000000000000000000000000420090000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042016000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042017000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042011000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042012000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420160000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004201700000000000000000000000000000000000000000000000000000000000420210000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004202200000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042026000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042027000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042021000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042022000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420260000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004202700000000000000000000000000000000000000000000000000000000000420310000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004203200000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042036000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042037000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042031000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042032000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004203f00000000000000000000000000000000000000000000000000000000000420360000000000000000000000000000000000000000000000000000000000042040000000000000000000000000000000000000000000000000000000000004203700000000000000000000000000000000000000000000000000000000000420410000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004204200000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042043000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042044000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042045000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042046000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042047000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042048000000000000000000000000000000000000000000000000000000000004203f0000000000000000000000000000000000000000000000000000000000042049400000000000000000000000000000000000000000000000000000000000041300000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000012000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000001200000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000120000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000012000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000001200000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000120000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000012000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000001200000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000120000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a00000012000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b00000012000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c00000012000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d00000012000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e00000012000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f00000012000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000120000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000012000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000001200000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000012000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000001200000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000120000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000012000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000001200000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000120000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a00000012000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b00000012000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c00000012000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d00000012000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e00000012000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f00000012000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000120000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000012000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000001200000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000120000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000012000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000001200000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000120000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000012000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000001200000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000120000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a00000012000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b00000012000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c00000012000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d00000012000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e00000012000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f00000012000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000120000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000012000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000001200000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000120000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000012000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000001200000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000120000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000012000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000001200000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000120000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a00000012000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b00000012000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c00000012000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d00000012000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e00000012000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f00000012000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f0000000000000000000000000000000000000000000000000000000000041350000000120000000000", + "body": "0x0000000100224a10f0613f5d8debe06b961b409b50ed98836096bdd430f113a016901c69fe0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000004100100000000000000000000000000000000000000000000000000000000000410020000000000000000000000000000000000000000000000000000000000041003000000000000000000000000000000000000000000000000000000000004100400000000000000000000000000000000000000000000000000000000000410050000000000000000000000000000000000000000000000000000000000041006000000000000000000000000000000000000000000000000000000000004100700000000000000000000000000000000000000000000000000000000000410080000000000000000000000000000000000000000000000000000000000041009000000000000000000000000000000000000000000000000000000000004100a000000000000000000000000000000000000000000000000000000000004100b000000000000000000000000000000000000000000000000000000000004100c000000000000000000000000000000000000000000000000000000000004100d000000000000000000000000000000000000000000000000000000000004100e000000000000000000000000000000000000000000000000000000000004100f0000000000000000000000000000000000000000000000000000000000041010000000000000000000000000000000000000000000000000000000000004101100000000000000000000000000000000000000000000000000000000000410120000000000000000000000000000000000000000000000000000000000041013000000000000000000000000000000000000000000000000000000000004101400000000000000000000000000000000000000000000000000000000000410150000000000000000000000000000000000000000000000000000000000041016000000000000000000000000000000000000000000000000000000000004101700000000000000000000000000000000000000000000000000000000000410180000000000000000000000000000000000000000000000000000000000041019000000000000000000000000000000000000000000000000000000000004101a000000000000000000000000000000000000000000000000000000000004101b000000000000000000000000000000000000000000000000000000000004101c000000000000000000000000000000000000000000000000000000000004101d000000000000000000000000000000000000000000000000000000000004101e000000000000000000000000000000000000000000000000000000000004101f0000000000000000000000000000000000000000000000000000000000041020000000000000000000000000000000000000000000000000000000000004102100000000000000000000000000000000000000000000000000000000000410220000000000000000000000000000000000000000000000000000000000041023000000000000000000000000000000000000000000000000000000000004102400000000000000000000000000000000000000000000000000000000000410250000000000000000000000000000000000000000000000000000000000041026000000000000000000000000000000000000000000000000000000000004102700000000000000000000000000000000000000000000000000000000000410280000000000000000000000000000000000000000000000000000000000041029000000000000000000000000000000000000000000000000000000000004102a000000000000000000000000000000000000000000000000000000000004102b000000000000000000000000000000000000000000000000000000000004102c000000000000000000000000000000000000000000000000000000000004102d000000000000000000000000000000000000000000000000000000000004102e000000000000000000000000000000000000000000000000000000000004102f0000000000000000000000000000000000000000000000000000000000041030000000000000000000000000000000000000000000000000000000000004103100000000000000000000000000000000000000000000000000000000000410320000000000000000000000000000000000000000000000000000000000041033000000000000000000000000000000000000000000000000000000000004103400000000000000000000000000000000000000000000000000000000000410350000000000000000000000000000000000000000000000000000000000041036000000000000000000000000000000000000000000000000000000000004103700000000000000000000000000000000000000000000000000000000000410380000000000000000000000000000000000000000000000000000000000041039000000000000000000000000000000000000000000000000000000000004103a000000000000000000000000000000000000000000000000000000000004103b000000000000000000000000000000000000000000000000000000000004103c000000000000000000000000000000000000000000000000000000000004103d000000000000000000000000000000000000000000000000000000000004103e000000000000000000000000000000000000000000000000000000000004103f4000000000000000000000000000000000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000041100000000000000000000000000000000000000000000000000000000000004110100000000000000000000000000000000000000000000000000000000000411020000000000000000000000000000000000000000000000000000000000041103000000000000000000000000000000000000000000000000000000000004110400000000000000000000000000000000000000000000000000000000000411050000000000000000000000000000000000000000000000000000000000041106000000000000000000000000000000000000000000000000000000000004110700000000000000000000000000000000000000000000000000000000000411080000000000000000000000000000000000000000000000000000000000041109000000000000000000000000000000000000000000000000000000000004110a000000000000000000000000000000000000000000000000000000000004110b000000000000000000000000000000000000000000000000000000000004110c000000000000000000000000000000000000000000000000000000000004110d000000000000000000000000000000000000000000000000000000000004110e000000000000000000000000000000000000000000000000000000000004110f0000000000000000000000000000000000000000000000000000000000041110000000000000000000000000000000000000000000000000000000000004111100000000000000000000000000000000000000000000000000000000000411120000000000000000000000000000000000000000000000000000000000041113000000000000000000000000000000000000000000000000000000000004111400000000000000000000000000000000000000000000000000000000000411150000000000000000000000000000000000000000000000000000000000041116000000000000000000000000000000000000000000000000000000000004111700000000000000000000000000000000000000000000000000000000000411180000000000000000000000000000000000000000000000000000000000041119000000000000000000000000000000000000000000000000000000000004111a000000000000000000000000000000000000000000000000000000000004111b000000000000000000000000000000000000000000000000000000000004111c000000000000000000000000000000000000000000000000000000000004111d000000000000000000000000000000000000000000000000000000000004111e000000000000000000000000000000000000000000000000000000000004111f0000000000000000000000000000000000000000000000000000000000041120000000000000000000000000000000000000000000000000000000000004112100000000000000000000000000000000000000000000000000000000000411220000000000000000000000000000000000000000000000000000000000041123000000000000000000000000000000000000000000000000000000000004112400000000000000000000000000000000000000000000000000000000000411250000000000000000000000000000000000000000000000000000000000041126000000000000000000000000000000000000000000000000000000000004112700000000000000000000000000000000000000000000000000000000000411280000000000000000000000000000000000000000000000000000000000041129000000000000000000000000000000000000000000000000000000000004112a000000000000000000000000000000000000000000000000000000000004112b000000000000000000000000000000000000000000000000000000000004112c000000000000000000000000000000000000000000000000000000000004112d000000000000000000000000000000000000000000000000000000000004112e000000000000000000000000000000000000000000000000000000000004112f0000000000000000000000000000000000000000000000000000000000041130000000000000000000000000000000000000000000000000000000000004113100000000000000000000000000000000000000000000000000000000000411320000000000000000000000000000000000000000000000000000000000041133000000000000000000000000000000000000000000000000000000000004113400000000000000000000000000000000000000000000000000000000000411350000000000000000000000000000000000000000000000000000000000041136000000000000000000000000000000000000000000000000000000000004113700000000000000000000000000000000000000000000000000000000000411380000000000000000000000000000000000000000000000000000000000041139000000000000000000000000000000000000000000000000000000000004113a000000000000000000000000000000000000000000000000000000000004113b000000000000000000000000000000000000000000000000000000000004113c000000000000000000000000000000000000000000000000000000000004113d000000000000000000000000000000000000000000000000000000000004113e08004b8b814288544866292d9d0e66869207628fb0ef8120c59ec1d969a085d5d50075c5d0fc08d5578600928d2fc6cd1e63a2b87266a45558135a2912c5a7d6e60019574cfd6834b8c08012b12c6b178d65c27335e1001c1337996f4f460c2cf1000624d1d08e5c487711876584ae580b46b81854bc8e45e42e822ef18df136ff00b78383bdbff11e85552243f1429b8d83334d734dc92e1062b8a04371de5f88005b33017fa3cd1861669d2fd5621ba61db7a72646a9b459897a55780eeeb64e00a1d3d6c8bc4848ef2e4d256253773447d1b39deedd2d70248a2160c765afc200e1d211a34da229f26780fc7baa5a6ca0a35b7e0fea52ea082e35cd064db33d400000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042001000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042002000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042003000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042004000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042005000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420060000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004200700000000000000000000000000000000000000000000000000000000000420110000000000000000000000000000000000000000000000000000000000042008000000000000000000000000000000000000000000000000000000000004201200000000000000000000000000000000000000000000000000000000000420090000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004200a0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004200b0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004200c0000000000000000000000000000000000000000000000000000000000042016000000000000000000000000000000000000000000000000000000000004200d0000000000000000000000000000000000000000000000000000000000042017000000000000000000000000000000000000000000000000000000000004200e0000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004200f00000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042010000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042011000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042012000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042013000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042014000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042015000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420160000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004201700000000000000000000000000000000000000000000000000000000000420210000000000000000000000000000000000000000000000000000000000042018000000000000000000000000000000000000000000000000000000000004202200000000000000000000000000000000000000000000000000000000000420190000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004201a0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004201b0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004201c0000000000000000000000000000000000000000000000000000000000042026000000000000000000000000000000000000000000000000000000000004201d0000000000000000000000000000000000000000000000000000000000042027000000000000000000000000000000000000000000000000000000000004201e0000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004201f00000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042020000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042021000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042022000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042023000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042024000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042025000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420260000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004202700000000000000000000000000000000000000000000000000000000000420310000000000000000000000000000000000000000000000000000000000042028000000000000000000000000000000000000000000000000000000000004203200000000000000000000000000000000000000000000000000000000000420290000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004202a0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004202b0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004202c0000000000000000000000000000000000000000000000000000000000042036000000000000000000000000000000000000000000000000000000000004202d0000000000000000000000000000000000000000000000000000000000042037000000000000000000000000000000000000000000000000000000000004202e0000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004202f00000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042030000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042031000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042032000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042033000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042034000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042035000000000000000000000000000000000000000000000000000000000004203f00000000000000000000000000000000000000000000000000000000000420360000000000000000000000000000000000000000000000000000000000042040000000000000000000000000000000000000000000000000000000000004203700000000000000000000000000000000000000000000000000000000000420410000000000000000000000000000000000000000000000000000000000042038000000000000000000000000000000000000000000000000000000000004204200000000000000000000000000000000000000000000000000000000000420390000000000000000000000000000000000000000000000000000000000042043000000000000000000000000000000000000000000000000000000000004203a0000000000000000000000000000000000000000000000000000000000042044000000000000000000000000000000000000000000000000000000000004203b0000000000000000000000000000000000000000000000000000000000042045000000000000000000000000000000000000000000000000000000000004203c0000000000000000000000000000000000000000000000000000000000042046000000000000000000000000000000000000000000000000000000000004203d0000000000000000000000000000000000000000000000000000000000042047000000000000000000000000000000000000000000000000000000000004203e0000000000000000000000000000000000000000000000000000000000042048000000000000000000000000000000000000000000000000000000000004203f0000000000000000000000000000000000000000000000000000000000042049400000000000000000000000000000000000000000000000000000000000041300000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000012000000000000000000000000000000000000000000000000000000000004130100000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000001200000000000000000000000000000000000000000000000000000000000413020000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000120000000000000000000000000000000000000000000000000000000000041303000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000012000000000000000000000000000000000000000000000000000000000004130400000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000001200000000000000000000000000000000000000000000000000000000000413050000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000120000000000000000000000000000000000000000000000000000000000041306000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000012000000000000000000000000000000000000000000000000000000000004130700000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000001200000000000000000000000000000000000000000000000000000000000413080000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000120000000000000000000000000000000000000000000000000000000000041309000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a00000012000000000000000000000000000000000000000000000000000000000004130a000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b00000012000000000000000000000000000000000000000000000000000000000004130b000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c00000012000000000000000000000000000000000000000000000000000000000004130c000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d00000012000000000000000000000000000000000000000000000000000000000004130d000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e00000012000000000000000000000000000000000000000000000000000000000004130e000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f00000012000000000000000000000000000000000000000000000000000000000004130f0000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000120000000000000000000000000000000000000000000000000000000000041310000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000012000000000000000000000000000000000000000000000000000000000004131100000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000001200000000000000000000000000000000000000000000000000000000000413120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000120000000000000000000000000000000000000000000000000000000000041313000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000012000000000000000000000000000000000000000000000000000000000004131400000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000001200000000000000000000000000000000000000000000000000000000000413150000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000120000000000000000000000000000000000000000000000000000000000041316000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000012000000000000000000000000000000000000000000000000000000000004131700000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000001200000000000000000000000000000000000000000000000000000000000413180000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000120000000000000000000000000000000000000000000000000000000000041319000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a00000012000000000000000000000000000000000000000000000000000000000004131a000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b00000012000000000000000000000000000000000000000000000000000000000004131b000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c00000012000000000000000000000000000000000000000000000000000000000004131c000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d00000012000000000000000000000000000000000000000000000000000000000004131d000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e00000012000000000000000000000000000000000000000000000000000000000004131e000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f00000012000000000000000000000000000000000000000000000000000000000004131f0000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000120000000000000000000000000000000000000000000000000000000000041320000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000012000000000000000000000000000000000000000000000000000000000004132100000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000001200000000000000000000000000000000000000000000000000000000000413220000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000120000000000000000000000000000000000000000000000000000000000041323000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000012000000000000000000000000000000000000000000000000000000000004132400000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000001200000000000000000000000000000000000000000000000000000000000413250000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000120000000000000000000000000000000000000000000000000000000000041326000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000012000000000000000000000000000000000000000000000000000000000004132700000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000001200000000000000000000000000000000000000000000000000000000000413280000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000120000000000000000000000000000000000000000000000000000000000041329000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a00000012000000000000000000000000000000000000000000000000000000000004132a000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b00000012000000000000000000000000000000000000000000000000000000000004132b000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c00000012000000000000000000000000000000000000000000000000000000000004132c000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d00000012000000000000000000000000000000000000000000000000000000000004132d000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e00000012000000000000000000000000000000000000000000000000000000000004132e000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f00000012000000000000000000000000000000000000000000000000000000000004132f0000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000120000000000000000000000000000000000000000000000000000000000041330000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000012000000000000000000000000000000000000000000000000000000000004133100000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000001200000000000000000000000000000000000000000000000000000000000413320000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000120000000000000000000000000000000000000000000000000000000000041333000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000012000000000000000000000000000000000000000000000000000000000004133400000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000001200000000000000000000000000000000000000000000000000000000000413350000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000120000000000000000000000000000000000000000000000000000000000041336000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000012000000000000000000000000000000000000000000000000000000000004133700000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000001200000000000000000000000000000000000000000000000000000000000413380000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000120000000000000000000000000000000000000000000000000000000000041339000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a00000012000000000000000000000000000000000000000000000000000000000004133a000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b00000012000000000000000000000000000000000000000000000000000000000004133b000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c00000012000000000000000000000000000000000000000000000000000000000004133c000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d00000012000000000000000000000000000000000000000000000000000000000004133d000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e00000012000000000000000000000000000000000000000000000000000000000004133e000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f00000012000000000000000000000000000000000000000000000000000000000004133f0000000000000000000000000000000000000000000000000000000000041340000000000000000000000000000000000000000000000000000000000004134100000000000000000000000000000000000000000000000000000000000413420000000000000000000000000000000000000000000000000000000000041343000000000000000000000000000000000000000000000000000000000004134400000000000000000000000000000000000000000000000000000000000413450000000000000000000000000000000000000000000000000000000000041346000000000000000000000000000000000000000000000000000000000004134700000000000000000000000000000000000000000000000000000000000413480000000000000000000000000000000000000000000000000000000000041349000000000000000000000000000000000000000000000000000000000004134a000000000000000000000000000000000000000000000000000000000004134b000000000000000000000000000000000000000000000000000000000004134c000000000000000000000000000000000000000000000000000000000004134d000000000000000000000000000000000000000000000000000000000004134e000000000000000000000000000000000000000000000000000000000004134f0000000000000000000000000000000000000000000000000000000000041350000000120000000000", "header": { "lastArchiveRoot": "0x1f8c805403d88ee809d3cb3e52eeba0a104f69968cdb844a9cbdf1e9e00b3a95", - "blockHeadersHash": "0x20c82d94f5fa06b6c9875f27583fae25ca7aa038b5b188f8e2304fd817299baa", - "contentCommitment": { - "blobsHash": "0x004430eaf48df1e2df89631accc529e8fa52b2253e668bffec1f23b62aa37dcf", - "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", - "outHash": "0x00acc57711ce750ff9b2cfa69050883a7b23bf59d2ccf3cfc9bbff4e93a85a8f" - }, + "blockHeadersHash": "0x1b312b09127ea3a0eef8e1d0190ddad921c5384fe02f678f11b5a724d8662788", + "blobsHash": "0x00b713348f3e2f965bf5308c73a13ddbc0e3c61d60eb6c42ef499298dda04f5c", + "inHash": "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223", "slotNumber": 102, - "timestamp": 1763996858, - "coinbase": "0xba9d4409c68425baeb6e6ac711e296548edde0d6", - "feeRecipient": "0x22b5fc20a09efb9ed47cdaaccdfa49660fd77ba3844cbfa119b4393f053c6460", + "timestamp": 1767622379, + "coinbase": "0xdf29c43d19d2a265af1c7ea24ac8743aea965182", + "feeRecipient": "0x0de93f901499b751a65bc75a5acc54d403f769bb59a5aae3e864213868fad85b", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 19870 + "feePerL2Gas": 7190810 }, "totalManaUsed": 0 }, - "headerHash": "0x001c73edc0d8fa0bea73f1c58532fed9c64d9d3065a9da2fd5f60abb6a9f6794", + "headerHash": "0x002d86b50dea4855b9e41b4b670e22cbf86713746ce77812b8e2daee61383818", "numTxs": 1 } } \ No newline at end of file diff --git a/l1-contracts/test/fixtures/single_tx_checkpoint_2.json b/l1-contracts/test/fixtures/single_tx_checkpoint_2.json index 14ae5abbfb28..e4523fafc791 100644 --- a/l1-contracts/test/fixtures/single_tx_checkpoint_2.json +++ b/l1-contracts/test/fixtures/single_tx_checkpoint_2.json @@ -34,30 +34,27 @@ ] }, "checkpoint": { - "archive": "0x10838b193c675d50af818e3962574a1fcaad27253a88e70f74a8e7bcfbe44b31", - "blobCommitments": "0x01b314e0ad73cc6f9aa220db5393ff982768072e0680631aeb361306bb2dad95bd8f200c04cf3d1dde5888796c1145ff2a", - "batchedBlobInputs": "0x01e1ac6d8eb60431029e8575d7156f308981dbddc25d7e0e3fa8c2be503cd3f903803ee941e556b2f62261fd530c5476423316db80b9e8fcd2728d264e7197f73f7ff62976f7bc34f4e8ef4bae218bbaab666404a489e79ec14b2d8926aa9d64957916f385005c472aee76990de294d32af525a4af2d1f02ab70e0f3beb4949c283655af15bcab4ad44c97501c79b9d991cd1c0aefb80fca78defacfc996c0eaa816f537806a9eb01a778644151e204426ca5b8fc2f536a887a13cff11adeebe", + "archive": "0x2333a8342288d68a5fd3f09da53f6ea4890bed083e6714353bc1120e71ca39b3", + "blobCommitments": "0x01ae6b6002a23b716920af1815eed65ebb22794889bf151f15319ab826e607922d5143c85bdbbab4b5086515c46371c1ab", + "batchedBlobInputs": "0x0193ccd4754b15b06f6ba9126c70b06359560c8066687b8895bd7873dad15e8f1db843995c00bd3ea3025eccfd9e16a248df1a72bb97f2f23e9f579b16ed964158fe4602daae35bc4fa4ff3b9de8e53e5a88b055324c830e409cc85a41ad0effb03deef0574b74fdca167c1262dc5f95ca83b80620a50135622631b642c0795f22b0900179066db66ae72babd69e5d97a4a4fb65b696bfd1cab352a3567c71f602a5f6637256665e58f035d29b1b1c2db1af329e2539bf40d891c04eba38a19f", "checkpointNumber": 2, - "body": "0x00000001000e885fe7688fbd5ac74c1b202bd7ee74bda23c0c4111c99e988fbda16dd653bd0000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000000000014100100000000000000000000000000000000000000000000000000000000001410020000000000000000000000000000000000000000000000000000000000141003000000000000000000000000000000000000000000000000000000000014100400000000000000000000000000000000000000000000000000000000001410050000000000000000000000000000000000000000000000000000000000141006000000000000000000000000000000000000000000000000000000000014100700000000000000000000000000000000000000000000000000000000001410080000000000000000000000000000000000000000000000000000000000141009000000000000000000000000000000000000000000000000000000000014100a000000000000000000000000000000000000000000000000000000000014100b000000000000000000000000000000000000000000000000000000000014100c000000000000000000000000000000000000000000000000000000000014100d000000000000000000000000000000000000000000000000000000000014100e000000000000000000000000000000000000000000000000000000000014100f0000000000000000000000000000000000000000000000000000000000141010000000000000000000000000000000000000000000000000000000000014101100000000000000000000000000000000000000000000000000000000001410120000000000000000000000000000000000000000000000000000000000141013000000000000000000000000000000000000000000000000000000000014101400000000000000000000000000000000000000000000000000000000001410150000000000000000000000000000000000000000000000000000000000141016000000000000000000000000000000000000000000000000000000000014101700000000000000000000000000000000000000000000000000000000001410180000000000000000000000000000000000000000000000000000000000141019000000000000000000000000000000000000000000000000000000000014101a000000000000000000000000000000000000000000000000000000000014101b000000000000000000000000000000000000000000000000000000000014101c000000000000000000000000000000000000000000000000000000000014101d000000000000000000000000000000000000000000000000000000000014101e000000000000000000000000000000000000000000000000000000000014101f0000000000000000000000000000000000000000000000000000000000141020000000000000000000000000000000000000000000000000000000000014102100000000000000000000000000000000000000000000000000000000001410220000000000000000000000000000000000000000000000000000000000141023000000000000000000000000000000000000000000000000000000000014102400000000000000000000000000000000000000000000000000000000001410250000000000000000000000000000000000000000000000000000000000141026000000000000000000000000000000000000000000000000000000000014102700000000000000000000000000000000000000000000000000000000001410280000000000000000000000000000000000000000000000000000000000141029000000000000000000000000000000000000000000000000000000000014102a000000000000000000000000000000000000000000000000000000000014102b000000000000000000000000000000000000000000000000000000000014102c000000000000000000000000000000000000000000000000000000000014102d000000000000000000000000000000000000000000000000000000000014102e000000000000000000000000000000000000000000000000000000000014102f0000000000000000000000000000000000000000000000000000000000141030000000000000000000000000000000000000000000000000000000000014103100000000000000000000000000000000000000000000000000000000001410320000000000000000000000000000000000000000000000000000000000141033000000000000000000000000000000000000000000000000000000000014103400000000000000000000000000000000000000000000000000000000001410350000000000000000000000000000000000000000000000000000000000141036000000000000000000000000000000000000000000000000000000000014103700000000000000000000000000000000000000000000000000000000001410380000000000000000000000000000000000000000000000000000000000141039000000000000000000000000000000000000000000000000000000000014103a000000000000000000000000000000000000000000000000000000000014103b000000000000000000000000000000000000000000000000000000000014103c000000000000000000000000000000000000000000000000000000000014103d000000000000000000000000000000000000000000000000000000000014103e000000000000000000000000000000000000000000000000000000000014103f4000000000000000000000000000000000000000000000000000000000001400010000000000000000000000000000000000000000000000000000000000141100000000000000000000000000000000000000000000000000000000000014110100000000000000000000000000000000000000000000000000000000001411020000000000000000000000000000000000000000000000000000000000141103000000000000000000000000000000000000000000000000000000000014110400000000000000000000000000000000000000000000000000000000001411050000000000000000000000000000000000000000000000000000000000141106000000000000000000000000000000000000000000000000000000000014110700000000000000000000000000000000000000000000000000000000001411080000000000000000000000000000000000000000000000000000000000141109000000000000000000000000000000000000000000000000000000000014110a000000000000000000000000000000000000000000000000000000000014110b000000000000000000000000000000000000000000000000000000000014110c000000000000000000000000000000000000000000000000000000000014110d000000000000000000000000000000000000000000000000000000000014110e000000000000000000000000000000000000000000000000000000000014110f0000000000000000000000000000000000000000000000000000000000141110000000000000000000000000000000000000000000000000000000000014111100000000000000000000000000000000000000000000000000000000001411120000000000000000000000000000000000000000000000000000000000141113000000000000000000000000000000000000000000000000000000000014111400000000000000000000000000000000000000000000000000000000001411150000000000000000000000000000000000000000000000000000000000141116000000000000000000000000000000000000000000000000000000000014111700000000000000000000000000000000000000000000000000000000001411180000000000000000000000000000000000000000000000000000000000141119000000000000000000000000000000000000000000000000000000000014111a000000000000000000000000000000000000000000000000000000000014111b000000000000000000000000000000000000000000000000000000000014111c000000000000000000000000000000000000000000000000000000000014111d000000000000000000000000000000000000000000000000000000000014111e000000000000000000000000000000000000000000000000000000000014111f0000000000000000000000000000000000000000000000000000000000141120000000000000000000000000000000000000000000000000000000000014112100000000000000000000000000000000000000000000000000000000001411220000000000000000000000000000000000000000000000000000000000141123000000000000000000000000000000000000000000000000000000000014112400000000000000000000000000000000000000000000000000000000001411250000000000000000000000000000000000000000000000000000000000141126000000000000000000000000000000000000000000000000000000000014112700000000000000000000000000000000000000000000000000000000001411280000000000000000000000000000000000000000000000000000000000141129000000000000000000000000000000000000000000000000000000000014112a000000000000000000000000000000000000000000000000000000000014112b000000000000000000000000000000000000000000000000000000000014112c000000000000000000000000000000000000000000000000000000000014112d000000000000000000000000000000000000000000000000000000000014112e000000000000000000000000000000000000000000000000000000000014112f0000000000000000000000000000000000000000000000000000000000141130000000000000000000000000000000000000000000000000000000000014113100000000000000000000000000000000000000000000000000000000001411320000000000000000000000000000000000000000000000000000000000141133000000000000000000000000000000000000000000000000000000000014113400000000000000000000000000000000000000000000000000000000001411350000000000000000000000000000000000000000000000000000000000141136000000000000000000000000000000000000000000000000000000000014113700000000000000000000000000000000000000000000000000000000001411380000000000000000000000000000000000000000000000000000000000141139000000000000000000000000000000000000000000000000000000000014113a000000000000000000000000000000000000000000000000000000000014113b000000000000000000000000000000000000000000000000000000000014113c000000000000000000000000000000000000000000000000000000000014113d000000000000000000000000000000000000000000000000000000000014113e080057602f85fdccac3117547ae1e9feedac263299a34f02b19ca229f6c203209000400355a496b2961dd5954f30f214fa0c5b7b9c4598ccc7882a3fc69dec50bb005c04946202e37fca2fa0bd7d0504c730ac1a707a410c0ed70bd65ad2adb15100dfea6f9eee8d32378436d7ca9e4dda0d48a5ccfb1c6f8ddec286fdf0cb9c81004f5ae4240cb04e72cf44cddb835bc0b5e7f100c01dc3f6678f979e27f19ede00f8ff8aa1edd0f0237d277f829b0847f656ee797c3adf2e7b1074d36f3f63ad00c90a15e3b4697bc2b603d24b615ed869c0f2b61ec8d8e316351996854246b600f24c2cff7402d9d57bd2791337df5a65f0b2f59a4ce3255d94c35f7cf1337440000000000000000000000000000000000000000000000000000000000014020000000000000000000000000000000000000000000000000000000000001402010000000000000000000000000000000000000000000000000000000000142001000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142002000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142003000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142004000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142005000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420060000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014200700000000000000000000000000000000000000000000000000000000001420110000000000000000000000000000000000000000000000000000000000142008000000000000000000000000000000000000000000000000000000000014201200000000000000000000000000000000000000000000000000000000001420090000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142016000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142017000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142011000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142012000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420160000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014201700000000000000000000000000000000000000000000000000000000001420210000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014202200000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142026000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142027000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142021000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142022000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420260000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014202700000000000000000000000000000000000000000000000000000000001420310000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014203200000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142036000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142037000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142031000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142032000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014203f00000000000000000000000000000000000000000000000000000000001420360000000000000000000000000000000000000000000000000000000000142040000000000000000000000000000000000000000000000000000000000014203700000000000000000000000000000000000000000000000000000000001420410000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014204200000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142043000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142044000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142045000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142046000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142047000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142048000000000000000000000000000000000000000000000000000000000014203f0000000000000000000000000000000000000000000000000000000000142049400000000000000000000000000000000000000000000000000000000000141300000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000012000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000001200000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000120000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000012000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000001200000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000120000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000012000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000001200000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000120000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a00000012000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b00000012000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c00000012000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d00000012000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e00000012000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f00000012000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000120000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000012000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000001200000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000012000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000001200000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000120000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000012000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000001200000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000120000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a00000012000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b00000012000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c00000012000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d00000012000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e00000012000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f00000012000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000120000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000012000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000001200000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000120000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000012000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000001200000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000120000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000012000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000001200000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000120000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a00000012000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b00000012000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c00000012000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d00000012000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e00000012000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f00000012000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000120000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000012000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000001200000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000120000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000012000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000001200000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000120000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000012000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000001200000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000120000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a00000012000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b00000012000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c00000012000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d00000012000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e00000012000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f00000012000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f0000000000000000000000000000000000000000000000000000000000141350000000120000000000", + "body": "0x000000010001f3e4e0127758e1aa62339e5eb5f34180dba389db58b9b9af75f2f64cfc37000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000141000000000000000000000000000000000000000000000000000000000000014100100000000000000000000000000000000000000000000000000000000001410020000000000000000000000000000000000000000000000000000000000141003000000000000000000000000000000000000000000000000000000000014100400000000000000000000000000000000000000000000000000000000001410050000000000000000000000000000000000000000000000000000000000141006000000000000000000000000000000000000000000000000000000000014100700000000000000000000000000000000000000000000000000000000001410080000000000000000000000000000000000000000000000000000000000141009000000000000000000000000000000000000000000000000000000000014100a000000000000000000000000000000000000000000000000000000000014100b000000000000000000000000000000000000000000000000000000000014100c000000000000000000000000000000000000000000000000000000000014100d000000000000000000000000000000000000000000000000000000000014100e000000000000000000000000000000000000000000000000000000000014100f0000000000000000000000000000000000000000000000000000000000141010000000000000000000000000000000000000000000000000000000000014101100000000000000000000000000000000000000000000000000000000001410120000000000000000000000000000000000000000000000000000000000141013000000000000000000000000000000000000000000000000000000000014101400000000000000000000000000000000000000000000000000000000001410150000000000000000000000000000000000000000000000000000000000141016000000000000000000000000000000000000000000000000000000000014101700000000000000000000000000000000000000000000000000000000001410180000000000000000000000000000000000000000000000000000000000141019000000000000000000000000000000000000000000000000000000000014101a000000000000000000000000000000000000000000000000000000000014101b000000000000000000000000000000000000000000000000000000000014101c000000000000000000000000000000000000000000000000000000000014101d000000000000000000000000000000000000000000000000000000000014101e000000000000000000000000000000000000000000000000000000000014101f0000000000000000000000000000000000000000000000000000000000141020000000000000000000000000000000000000000000000000000000000014102100000000000000000000000000000000000000000000000000000000001410220000000000000000000000000000000000000000000000000000000000141023000000000000000000000000000000000000000000000000000000000014102400000000000000000000000000000000000000000000000000000000001410250000000000000000000000000000000000000000000000000000000000141026000000000000000000000000000000000000000000000000000000000014102700000000000000000000000000000000000000000000000000000000001410280000000000000000000000000000000000000000000000000000000000141029000000000000000000000000000000000000000000000000000000000014102a000000000000000000000000000000000000000000000000000000000014102b000000000000000000000000000000000000000000000000000000000014102c000000000000000000000000000000000000000000000000000000000014102d000000000000000000000000000000000000000000000000000000000014102e000000000000000000000000000000000000000000000000000000000014102f0000000000000000000000000000000000000000000000000000000000141030000000000000000000000000000000000000000000000000000000000014103100000000000000000000000000000000000000000000000000000000001410320000000000000000000000000000000000000000000000000000000000141033000000000000000000000000000000000000000000000000000000000014103400000000000000000000000000000000000000000000000000000000001410350000000000000000000000000000000000000000000000000000000000141036000000000000000000000000000000000000000000000000000000000014103700000000000000000000000000000000000000000000000000000000001410380000000000000000000000000000000000000000000000000000000000141039000000000000000000000000000000000000000000000000000000000014103a000000000000000000000000000000000000000000000000000000000014103b000000000000000000000000000000000000000000000000000000000014103c000000000000000000000000000000000000000000000000000000000014103d000000000000000000000000000000000000000000000000000000000014103e000000000000000000000000000000000000000000000000000000000014103f4000000000000000000000000000000000000000000000000000000000001400010000000000000000000000000000000000000000000000000000000000141100000000000000000000000000000000000000000000000000000000000014110100000000000000000000000000000000000000000000000000000000001411020000000000000000000000000000000000000000000000000000000000141103000000000000000000000000000000000000000000000000000000000014110400000000000000000000000000000000000000000000000000000000001411050000000000000000000000000000000000000000000000000000000000141106000000000000000000000000000000000000000000000000000000000014110700000000000000000000000000000000000000000000000000000000001411080000000000000000000000000000000000000000000000000000000000141109000000000000000000000000000000000000000000000000000000000014110a000000000000000000000000000000000000000000000000000000000014110b000000000000000000000000000000000000000000000000000000000014110c000000000000000000000000000000000000000000000000000000000014110d000000000000000000000000000000000000000000000000000000000014110e000000000000000000000000000000000000000000000000000000000014110f0000000000000000000000000000000000000000000000000000000000141110000000000000000000000000000000000000000000000000000000000014111100000000000000000000000000000000000000000000000000000000001411120000000000000000000000000000000000000000000000000000000000141113000000000000000000000000000000000000000000000000000000000014111400000000000000000000000000000000000000000000000000000000001411150000000000000000000000000000000000000000000000000000000000141116000000000000000000000000000000000000000000000000000000000014111700000000000000000000000000000000000000000000000000000000001411180000000000000000000000000000000000000000000000000000000000141119000000000000000000000000000000000000000000000000000000000014111a000000000000000000000000000000000000000000000000000000000014111b000000000000000000000000000000000000000000000000000000000014111c000000000000000000000000000000000000000000000000000000000014111d000000000000000000000000000000000000000000000000000000000014111e000000000000000000000000000000000000000000000000000000000014111f0000000000000000000000000000000000000000000000000000000000141120000000000000000000000000000000000000000000000000000000000014112100000000000000000000000000000000000000000000000000000000001411220000000000000000000000000000000000000000000000000000000000141123000000000000000000000000000000000000000000000000000000000014112400000000000000000000000000000000000000000000000000000000001411250000000000000000000000000000000000000000000000000000000000141126000000000000000000000000000000000000000000000000000000000014112700000000000000000000000000000000000000000000000000000000001411280000000000000000000000000000000000000000000000000000000000141129000000000000000000000000000000000000000000000000000000000014112a000000000000000000000000000000000000000000000000000000000014112b000000000000000000000000000000000000000000000000000000000014112c000000000000000000000000000000000000000000000000000000000014112d000000000000000000000000000000000000000000000000000000000014112e000000000000000000000000000000000000000000000000000000000014112f0000000000000000000000000000000000000000000000000000000000141130000000000000000000000000000000000000000000000000000000000014113100000000000000000000000000000000000000000000000000000000001411320000000000000000000000000000000000000000000000000000000000141133000000000000000000000000000000000000000000000000000000000014113400000000000000000000000000000000000000000000000000000000001411350000000000000000000000000000000000000000000000000000000000141136000000000000000000000000000000000000000000000000000000000014113700000000000000000000000000000000000000000000000000000000001411380000000000000000000000000000000000000000000000000000000000141139000000000000000000000000000000000000000000000000000000000014113a000000000000000000000000000000000000000000000000000000000014113b000000000000000000000000000000000000000000000000000000000014113c000000000000000000000000000000000000000000000000000000000014113d000000000000000000000000000000000000000000000000000000000014113e080057602f85fdccac3117547ae1e9feedac263299a34f02b19ca229f6c203209000400355a496b2961dd5954f30f214fa0c5b7b9c4598ccc7882a3fc69dec50bb005c04946202e37fca2fa0bd7d0504c730ac1a707a410c0ed70bd65ad2adb15100dfea6f9eee8d32378436d7ca9e4dda0d48a5ccfb1c6f8ddec286fdf0cb9c81004f5ae4240cb04e72cf44cddb835bc0b5e7f100c01dc3f6678f979e27f19ede00f8ff8aa1edd0f0237d277f829b0847f656ee797c3adf2e7b1074d36f3f63ad00c90a15e3b4697bc2b603d24b615ed869c0f2b61ec8d8e316351996854246b600f24c2cff7402d9d57bd2791337df5a65f0b2f59a4ce3255d94c35f7cf13374400000000000000000000000000000000000000000000000000000000000142000000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142001000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142002000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142003000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142004000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142005000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420060000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014200700000000000000000000000000000000000000000000000000000000001420110000000000000000000000000000000000000000000000000000000000142008000000000000000000000000000000000000000000000000000000000014201200000000000000000000000000000000000000000000000000000000001420090000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014200a0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014200b0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014200c0000000000000000000000000000000000000000000000000000000000142016000000000000000000000000000000000000000000000000000000000014200d0000000000000000000000000000000000000000000000000000000000142017000000000000000000000000000000000000000000000000000000000014200e0000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014200f00000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142010000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142011000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142012000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142013000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142014000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142015000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420160000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014201700000000000000000000000000000000000000000000000000000000001420210000000000000000000000000000000000000000000000000000000000142018000000000000000000000000000000000000000000000000000000000014202200000000000000000000000000000000000000000000000000000000001420190000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014201a0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014201b0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014201c0000000000000000000000000000000000000000000000000000000000142026000000000000000000000000000000000000000000000000000000000014201d0000000000000000000000000000000000000000000000000000000000142027000000000000000000000000000000000000000000000000000000000014201e0000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014201f00000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142020000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142021000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142022000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142023000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142024000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142025000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420260000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014202700000000000000000000000000000000000000000000000000000000001420310000000000000000000000000000000000000000000000000000000000142028000000000000000000000000000000000000000000000000000000000014203200000000000000000000000000000000000000000000000000000000001420290000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014202a0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014202b0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014202c0000000000000000000000000000000000000000000000000000000000142036000000000000000000000000000000000000000000000000000000000014202d0000000000000000000000000000000000000000000000000000000000142037000000000000000000000000000000000000000000000000000000000014202e0000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014202f00000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142030000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142031000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142032000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142033000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142034000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142035000000000000000000000000000000000000000000000000000000000014203f00000000000000000000000000000000000000000000000000000000001420360000000000000000000000000000000000000000000000000000000000142040000000000000000000000000000000000000000000000000000000000014203700000000000000000000000000000000000000000000000000000000001420410000000000000000000000000000000000000000000000000000000000142038000000000000000000000000000000000000000000000000000000000014204200000000000000000000000000000000000000000000000000000000001420390000000000000000000000000000000000000000000000000000000000142043000000000000000000000000000000000000000000000000000000000014203a0000000000000000000000000000000000000000000000000000000000142044000000000000000000000000000000000000000000000000000000000014203b0000000000000000000000000000000000000000000000000000000000142045000000000000000000000000000000000000000000000000000000000014203c0000000000000000000000000000000000000000000000000000000000142046000000000000000000000000000000000000000000000000000000000014203d0000000000000000000000000000000000000000000000000000000000142047000000000000000000000000000000000000000000000000000000000014203e0000000000000000000000000000000000000000000000000000000000142048000000000000000000000000000000000000000000000000000000000014203f0000000000000000000000000000000000000000000000000000000000142049400000000000000000000000000000000000000000000000000000000000141300000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000012000000000000000000000000000000000000000000000000000000000014130100000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000001200000000000000000000000000000000000000000000000000000000001413020000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000120000000000000000000000000000000000000000000000000000000000141303000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000012000000000000000000000000000000000000000000000000000000000014130400000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000001200000000000000000000000000000000000000000000000000000000001413050000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000120000000000000000000000000000000000000000000000000000000000141306000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000012000000000000000000000000000000000000000000000000000000000014130700000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000001200000000000000000000000000000000000000000000000000000000001413080000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000120000000000000000000000000000000000000000000000000000000000141309000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a00000012000000000000000000000000000000000000000000000000000000000014130a000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b00000012000000000000000000000000000000000000000000000000000000000014130b000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c00000012000000000000000000000000000000000000000000000000000000000014130c000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d00000012000000000000000000000000000000000000000000000000000000000014130d000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e00000012000000000000000000000000000000000000000000000000000000000014130e000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f00000012000000000000000000000000000000000000000000000000000000000014130f0000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000120000000000000000000000000000000000000000000000000000000000141310000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000012000000000000000000000000000000000000000000000000000000000014131100000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000001200000000000000000000000000000000000000000000000000000000001413120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000120000000000000000000000000000000000000000000000000000000000141313000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000012000000000000000000000000000000000000000000000000000000000014131400000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000001200000000000000000000000000000000000000000000000000000000001413150000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000120000000000000000000000000000000000000000000000000000000000141316000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000012000000000000000000000000000000000000000000000000000000000014131700000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000001200000000000000000000000000000000000000000000000000000000001413180000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000120000000000000000000000000000000000000000000000000000000000141319000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a00000012000000000000000000000000000000000000000000000000000000000014131a000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b00000012000000000000000000000000000000000000000000000000000000000014131b000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c00000012000000000000000000000000000000000000000000000000000000000014131c000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d00000012000000000000000000000000000000000000000000000000000000000014131d000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e00000012000000000000000000000000000000000000000000000000000000000014131e000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f00000012000000000000000000000000000000000000000000000000000000000014131f0000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000120000000000000000000000000000000000000000000000000000000000141320000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000012000000000000000000000000000000000000000000000000000000000014132100000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000001200000000000000000000000000000000000000000000000000000000001413220000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000120000000000000000000000000000000000000000000000000000000000141323000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000012000000000000000000000000000000000000000000000000000000000014132400000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000001200000000000000000000000000000000000000000000000000000000001413250000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000120000000000000000000000000000000000000000000000000000000000141326000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000012000000000000000000000000000000000000000000000000000000000014132700000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000001200000000000000000000000000000000000000000000000000000000001413280000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000120000000000000000000000000000000000000000000000000000000000141329000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a00000012000000000000000000000000000000000000000000000000000000000014132a000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b00000012000000000000000000000000000000000000000000000000000000000014132b000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c00000012000000000000000000000000000000000000000000000000000000000014132c000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d00000012000000000000000000000000000000000000000000000000000000000014132d000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e00000012000000000000000000000000000000000000000000000000000000000014132e000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f00000012000000000000000000000000000000000000000000000000000000000014132f0000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000120000000000000000000000000000000000000000000000000000000000141330000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000012000000000000000000000000000000000000000000000000000000000014133100000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000001200000000000000000000000000000000000000000000000000000000001413320000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000120000000000000000000000000000000000000000000000000000000000141333000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000012000000000000000000000000000000000000000000000000000000000014133400000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000001200000000000000000000000000000000000000000000000000000000001413350000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000120000000000000000000000000000000000000000000000000000000000141336000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000012000000000000000000000000000000000000000000000000000000000014133700000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000001200000000000000000000000000000000000000000000000000000000001413380000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000120000000000000000000000000000000000000000000000000000000000141339000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a00000012000000000000000000000000000000000000000000000000000000000014133a000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b00000012000000000000000000000000000000000000000000000000000000000014133b000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c00000012000000000000000000000000000000000000000000000000000000000014133c000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d00000012000000000000000000000000000000000000000000000000000000000014133d000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e00000012000000000000000000000000000000000000000000000000000000000014133e000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f00000012000000000000000000000000000000000000000000000000000000000014133f0000000000000000000000000000000000000000000000000000000000141340000000000000000000000000000000000000000000000000000000000014134100000000000000000000000000000000000000000000000000000000001413420000000000000000000000000000000000000000000000000000000000141343000000000000000000000000000000000000000000000000000000000014134400000000000000000000000000000000000000000000000000000000001413450000000000000000000000000000000000000000000000000000000000141346000000000000000000000000000000000000000000000000000000000014134700000000000000000000000000000000000000000000000000000000001413480000000000000000000000000000000000000000000000000000000000141349000000000000000000000000000000000000000000000000000000000014134a000000000000000000000000000000000000000000000000000000000014134b000000000000000000000000000000000000000000000000000000000014134c000000000000000000000000000000000000000000000000000000000014134d000000000000000000000000000000000000000000000000000000000014134e000000000000000000000000000000000000000000000000000000000014134f0000000000000000000000000000000000000000000000000000000000141350000000120000000000", "header": { - "lastArchiveRoot": "0x2915d8bb5e934da4c4459f875a37194f45e41167329958cc00f45b456b967a32", - "blockHeadersHash": "0x1b37c48d6491b2242bb11d096d08f4fd0a0d42c5f84d261698d0728c4bdf78eb", - "contentCommitment": { - "blobsHash": "0x005a0fd073c24f4d6d53d679b4e453c1e2533b16be9328939e920289b7492616", - "inHash": "0x004c9b6f1dcd0d52543f9766f97c31ed93d988e429af87234a6574ec7dadfc29", - "outHash": "0x0069c807d82366cd295b261cdb94fc01dc4487b2cd2ae873b18ffb8be4f297ed" - }, + "lastArchiveRoot": "0x178a05ff6aa3a52578bda4bbd3ac0556d5ee1765f93790335b2f84b3a4061c3b", + "blockHeadersHash": "0x033d1e11e6e4001fef7eb9409d1db1c0f8af27dbfd19d45ebb106a8cd9f5e69f", + "blobsHash": "0x005ecc60f1b55beba1f5a799510096286981e08ef47874e6c23998bb1c06ebf8", + "inHash": "0x0017376ab1b98eee798fe1f0d7025f2db3f4b8206133fcb687229136ac468ee8", "slotNumber": 108, - "timestamp": 1763997074, - "coinbase": "0xba9d4409c68425baeb6e6ac711e296548edde0d6", - "feeRecipient": "0x22b5fc20a09efb9ed47cdaaccdfa49660fd77ba3844cbfa119b4393f053c6460", + "timestamp": 1767622595, + "coinbase": "0xdf29c43d19d2a265af1c7ea24ac8743aea965182", + "feeRecipient": "0x0de93f901499b751a65bc75a5acc54d403f769bb59a5aae3e864213868fad85b", "gasFees": { "feePerDaGas": 0, - "feePerL2Gas": 1430 + "feePerL2Gas": 273930 }, "totalManaUsed": 0 }, - "headerHash": "0x00124a5d2ade7fec1bb195898ff0c551345631faa33c54d50f37c6ea8ea678f6", + "headerHash": "0x00ca74f8edc0e7bd13dfbb0f4cbad439f78ce2c4473812f1bbfc875dba4bb82f", "numTxs": 1 } } \ No newline at end of file diff --git a/l1-contracts/test/outbox/tmnt205.t.sol b/l1-contracts/test/outbox/tmnt205.t.sol index a8170160b6ca..45cf31c63353 100644 --- a/l1-contracts/test/outbox/tmnt205.t.sol +++ b/l1-contracts/test/outbox/tmnt205.t.sol @@ -6,28 +6,20 @@ import {Test} from "forge-std/Test.sol"; import {Outbox} from "@aztec/core/messagebridge/Outbox.sol"; import {IOutbox} from "@aztec/core/interfaces/messagebridge/IOutbox.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; import {NaiveMerkle} from "../merkle/Naive.sol"; import {MerkleLibHelper} from "../merkle/helpers/MerkleLibHelper.sol"; -contract FakeRollup { - uint256 public getProvenCheckpointNumber = 0; - - function setProvenCheckpointNum(uint256 _provenCheckpointNum) public { - getProvenCheckpointNumber = _provenCheckpointNum; - } -} - contract Tmnt205Test is Test { using Hash for DataStructures.L2ToL1Msg; address internal constant NOT_RECIPIENT = address(0x420); uint256 internal constant DEFAULT_TREE_HEIGHT = 2; uint256 internal constant AZTEC_VERSION = 1; - uint256 internal constant CHECKPOINT_NUMBER = 1; + Epoch internal constant DEFAULT_EPOCH = Epoch.wrap(1); - FakeRollup internal rollup; Outbox internal outbox; MerkleLibHelper internal merkleLibHelper = new MerkleLibHelper(); DataStructures.L2ToL1Msg[] internal $msgs; @@ -36,14 +28,13 @@ contract Tmnt205Test is Test { bytes32 internal $root; function setUp() public { - rollup = new FakeRollup(); - outbox = new Outbox(address(rollup), AZTEC_VERSION); + address rollup = address(this); + outbox = new Outbox(rollup, AZTEC_VERSION); $root = _buildWonkyTree(); - vm.prank(address(rollup)); - outbox.insert(CHECKPOINT_NUMBER, $root); + vm.prank(rollup); - rollup.setProvenCheckpointNum(CHECKPOINT_NUMBER); + outbox.insert(DEFAULT_EPOCH, $root); } function test_replays_exact() public { @@ -70,12 +61,12 @@ contract Tmnt205Test is Test { uint256 leafId = leafIndex + (1 << path.length); vm.expectEmit(true, true, true, true, address(outbox)); - emit IOutbox.MessageConsumed(CHECKPOINT_NUMBER, $root, message.sha256ToField(), leafId); - outbox.consume(message, CHECKPOINT_NUMBER, leafIndex, path); + emit IOutbox.MessageConsumed(DEFAULT_EPOCH, $root, message.sha256ToField(), leafId); + outbox.consume(message, DEFAULT_EPOCH, leafIndex, path); // It should always revert, here, either incorrect values or already used. vm.expectRevert(); - outbox.consume(message, CHECKPOINT_NUMBER, leafIndex2, path); + outbox.consume(message, DEFAULT_EPOCH, leafIndex2, path); } function test_overrides() public { @@ -102,7 +93,7 @@ contract Tmnt205Test is Test { // The outbox should revert earlier to that due to the index beyond boundary vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__LeafIndexOutOfBounds.selector, a_leafIndex, a_path.length)); - outbox.consume(a_message, CHECKPOINT_NUMBER, a_leafIndex, a_path); + outbox.consume(a_message, DEFAULT_EPOCH, a_leafIndex, a_path); // Real message DataStructures.L2ToL1Msg memory r_message = $msgs[4]; @@ -114,7 +105,7 @@ contract Tmnt205Test is Test { leftSubTree.insertLeaf($txOutHashes[0]); leftSubTree.insertLeaf($txOutHashes[1]); r_path[2] = leftSubTree.computeRoot(); - outbox.consume(r_message, CHECKPOINT_NUMBER, r_leafIndex, r_path); + outbox.consume(r_message, DEFAULT_EPOCH, r_leafIndex, r_path); } function _fakeMessage(address _recipient, uint256 _content) internal view returns (DataStructures.L2ToL1Msg memory) { diff --git a/l1-contracts/test/portals/DataStructures.sol b/l1-contracts/test/portals/DataStructures.sol index 97224ce291ca..611a15c32d7a 100644 --- a/l1-contracts/test/portals/DataStructures.sol +++ b/l1-contracts/test/portals/DataStructures.sol @@ -2,9 +2,11 @@ // Copyright 2024 Aztec Labs. pragma solidity >=0.8.27; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; + library DataStructures { struct OutboxMessageMetadata { - uint256 _checkpointNumber; + Epoch _epoch; uint256 _leafIndex; bytes32[] _path; } diff --git a/l1-contracts/test/portals/TokenPortal.sol b/l1-contracts/test/portals/TokenPortal.sol index f812fd3ab911..201f01f37175 100644 --- a/l1-contracts/test/portals/TokenPortal.sol +++ b/l1-contracts/test/portals/TokenPortal.sol @@ -8,6 +8,7 @@ import {IRegistry} from "@aztec/governance/interfaces/IRegistry.sol"; import {IInbox} from "@aztec/core/interfaces/messagebridge/IInbox.sol"; import {IOutbox} from "@aztec/core/interfaces/messagebridge/IOutbox.sol"; import {IRollup} from "@aztec/core/interfaces/IRollup.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; @@ -117,7 +118,7 @@ contract TokenPortal { * @param _recipient - The address to send the funds to * @param _amount - The amount to withdraw * @param _withCaller - Flag to use `msg.sender` as caller, otherwise address(0) - * @param _checkpointNumber - The checkpoint number containing the message to consume + * @param _epoch - The epoch the message is in * @param _leafIndex - The amount to withdraw * @param _path - Flag to use `msg.sender` as caller, otherwise address(0) * Must match the caller of the message (specified from L2) to consume it. @@ -126,7 +127,7 @@ contract TokenPortal { address _recipient, uint256 _amount, bool _withCaller, - uint256 _checkpointNumber, + Epoch _epoch, uint256 _leafIndex, bytes32[] calldata _path ) external { @@ -142,7 +143,7 @@ contract TokenPortal { ) }); - outbox.consume(message, _checkpointNumber, _leafIndex, _path); + outbox.consume(message, _epoch, _leafIndex, _path); underlying.safeTransfer(_recipient, _amount); } diff --git a/l1-contracts/test/portals/TokenPortal.t.sol b/l1-contracts/test/portals/TokenPortal.t.sol index 02cd2d21a0d9..4a6977ab4a6d 100644 --- a/l1-contracts/test/portals/TokenPortal.t.sol +++ b/l1-contracts/test/portals/TokenPortal.t.sol @@ -10,6 +10,7 @@ import {Registry} from "@aztec/governance/Registry.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {Errors} from "@aztec/core/libraries/Errors.sol"; import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {TestConstants} from "../harnesses/TestConstants.sol"; import {Inbox} from "@aztec/core/messagebridge/Inbox.sol"; @@ -60,7 +61,7 @@ contract TokenPortalTest is Test { address internal recipient = address(0xdead); uint256 internal withdrawAmount = 654; - uint256 internal checkpointNumber = 69; + Epoch internal DEFAULT_EPOCH = Epoch.wrap(32); function setUp() public { RollupBuilder builder = new RollupBuilder(address(this)); @@ -185,7 +186,7 @@ contract TokenPortalTest is Test { return (l2ToL1Message, treeRoot); } - function _addWithdrawMessageInOutbox(address _designatedCaller, uint256 _checkpointNumber) + function _addWithdrawMessageInOutbox(address _designatedCaller, Epoch _epoch) internal returns (bytes32, bytes32[] memory, bytes32) { @@ -205,12 +206,7 @@ contract TokenPortalTest is Test { bytes32 treeRoot = tree.computeRoot(); // Insert messages into the outbox (impersonating the rollup contract) vm.prank(address(rollup)); - outbox.insert(_checkpointNumber, treeRoot); - - // Modify the proven checkpoint count - stdstore.enable_packed_slots().target(address(rollup)).sig("getProvenCheckpointNumber()") - .checked_write(checkpointNumber); - assertEq(rollup.getProvenCheckpointNumber(), checkpointNumber); + outbox.insert(_epoch, treeRoot); return (l2ToL1Message, siblingPath, treeRoot); } @@ -220,7 +216,7 @@ contract TokenPortalTest is Test { // add message with caller as this address (bytes32 l2ToL1Message, bytes32[] memory siblingPath, bytes32 treeRoot) = - _addWithdrawMessageInOutbox(address(0), checkpointNumber); + _addWithdrawMessageInOutbox(address(0), DEFAULT_EPOCH); assertEq(testERC20.balanceOf(recipient), 0); uint256 leafIndex = 0; @@ -228,49 +224,49 @@ contract TokenPortalTest is Test { vm.startPrank(_caller); vm.expectEmit(true, true, true, true); - emit IOutbox.MessageConsumed(checkpointNumber, treeRoot, l2ToL1Message, leafId); - tokenPortal.withdraw(recipient, withdrawAmount, false, checkpointNumber, leafIndex, siblingPath); + emit IOutbox.MessageConsumed(DEFAULT_EPOCH, treeRoot, l2ToL1Message, leafId); + tokenPortal.withdraw(recipient, withdrawAmount, false, DEFAULT_EPOCH, leafIndex, siblingPath); // Should have received 654 RNA tokens assertEq(testERC20.balanceOf(recipient), withdrawAmount); // Should not be able to withdraw again - vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, checkpointNumber, leafId)); - tokenPortal.withdraw(recipient, withdrawAmount, false, checkpointNumber, leafIndex, siblingPath); + vm.expectRevert(abi.encodeWithSelector(Errors.Outbox__AlreadyNullified.selector, DEFAULT_EPOCH, leafId)); + tokenPortal.withdraw(recipient, withdrawAmount, false, DEFAULT_EPOCH, leafIndex, siblingPath); vm.stopPrank(); } function testWithdrawWithDesignatedCallerFailsForOtherCallers(address _caller) public { vm.assume(_caller != address(this)); // add message with caller as this address - (, bytes32[] memory siblingPath, bytes32 treeRoot) = _addWithdrawMessageInOutbox(address(this), checkpointNumber); + (, bytes32[] memory siblingPath, bytes32 treeRoot) = _addWithdrawMessageInOutbox(address(this), DEFAULT_EPOCH); vm.startPrank(_caller); (bytes32 l2ToL1MessageHash, bytes32 consumedRoot) = _createWithdrawMessageForOutbox(_caller); vm.expectRevert( abi.encodeWithSelector(Errors.MerkleLib__InvalidRoot.selector, treeRoot, consumedRoot, l2ToL1MessageHash, 0) ); - tokenPortal.withdraw(recipient, withdrawAmount, true, checkpointNumber, 0, siblingPath); + tokenPortal.withdraw(recipient, withdrawAmount, true, DEFAULT_EPOCH, 0, siblingPath); (l2ToL1MessageHash, consumedRoot) = _createWithdrawMessageForOutbox(address(0)); vm.expectRevert( abi.encodeWithSelector(Errors.MerkleLib__InvalidRoot.selector, treeRoot, consumedRoot, l2ToL1MessageHash, 0) ); - tokenPortal.withdraw(recipient, withdrawAmount, false, checkpointNumber, 0, siblingPath); + tokenPortal.withdraw(recipient, withdrawAmount, false, DEFAULT_EPOCH, 0, siblingPath); vm.stopPrank(); } function testWithdrawWithDesignatedCallerSucceedsForDesignatedCaller() public { // add message with caller as this address (bytes32 l2ToL1Message, bytes32[] memory siblingPath, bytes32 treeRoot) = - _addWithdrawMessageInOutbox(address(this), checkpointNumber); + _addWithdrawMessageInOutbox(address(this), DEFAULT_EPOCH); uint256 leafIndex = 0; uint256 leafId = 2 ** siblingPath.length + leafIndex; vm.expectEmit(true, true, true, true); - emit IOutbox.MessageConsumed(checkpointNumber, treeRoot, l2ToL1Message, leafId); - tokenPortal.withdraw(recipient, withdrawAmount, true, checkpointNumber, leafIndex, siblingPath); + emit IOutbox.MessageConsumed(DEFAULT_EPOCH, treeRoot, l2ToL1Message, leafId); + tokenPortal.withdraw(recipient, withdrawAmount, true, DEFAULT_EPOCH, leafIndex, siblingPath); // Should have received 654 RNA tokens assertEq(testERC20.balanceOf(recipient), withdrawAmount); diff --git a/l1-contracts/test/portals/UniswapPortal.sol b/l1-contracts/test/portals/UniswapPortal.sol index b83aff1aad75..50d48009eb58 100644 --- a/l1-contracts/test/portals/UniswapPortal.sol +++ b/l1-contracts/test/portals/UniswapPortal.sol @@ -89,7 +89,7 @@ contract UniswapPortal { address(this), _inAmount, true, - _outboxMessageMetadata[0]._checkpointNumber, + _outboxMessageMetadata[0]._epoch, _outboxMessageMetadata[0]._leafIndex, _outboxMessageMetadata[0]._path ); @@ -122,7 +122,7 @@ contract UniswapPortal { recipient: DataStructures.L1Actor(address(this), block.chainid), content: vars.contentHash }), - _outboxMessageMetadata[1]._checkpointNumber, + _outboxMessageMetadata[1]._epoch, _outboxMessageMetadata[1]._leafIndex, _outboxMessageMetadata[1]._path ); @@ -194,7 +194,7 @@ contract UniswapPortal { address(this), _inAmount, true, - _outboxMessageMetadata[0]._checkpointNumber, + _outboxMessageMetadata[0]._epoch, _outboxMessageMetadata[0]._leafIndex, _outboxMessageMetadata[0]._path ); @@ -226,7 +226,7 @@ contract UniswapPortal { recipient: DataStructures.L1Actor(address(this), block.chainid), content: vars.contentHash }), - _outboxMessageMetadata[1]._checkpointNumber, + _outboxMessageMetadata[1]._epoch, _outboxMessageMetadata[1]._leafIndex, _outboxMessageMetadata[1]._path ); diff --git a/l1-contracts/test/portals/UniswapPortal.t.sol b/l1-contracts/test/portals/UniswapPortal.t.sol index 3b62305c152a..815d5890d9d0 100644 --- a/l1-contracts/test/portals/UniswapPortal.t.sol +++ b/l1-contracts/test/portals/UniswapPortal.t.sol @@ -7,6 +7,7 @@ import "forge-std/Test.sol"; import {IRollup, Rollup} from "@aztec/core/Rollup.sol"; import {TestConstants} from "../harnesses/TestConstants.sol"; import {Registry} from "@aztec/governance/Registry.sol"; +import {Epoch} from "@aztec/core/libraries/TimeLib.sol"; import {DataStructures} from "@aztec/core/libraries/DataStructures.sol"; import {DataStructures as PortalDataStructures} from "./DataStructures.sol"; import {Hash} from "@aztec/core/libraries/crypto/Hash.sol"; @@ -50,7 +51,7 @@ contract UniswapPortalTest is Test { uint256 internal amountOutMinimum = 0; bytes32 internal aztecRecipient = bytes32(uint256(0x3)); - uint256 internal checkpointNumber = 69; + Epoch internal DEFAULT_EPOCH = Epoch.wrap(32); function setUp() public { // fork mainnet @@ -72,12 +73,6 @@ contract UniswapPortalTest is Test { uniswapPortal = new UniswapPortal(); uniswapPortal.initialize(address(registry), l2UniswapAddress); - // Modify the proven checkpoint count - vm.store(address(rollup), bytes32(uint256(13)), bytes32(checkpointNumber + 1)); - - stdstore.target(address(rollup)).sig("getProvenCheckpointNumber()").checked_write(checkpointNumber + 1); - assertEq(rollup.getProvenCheckpointNumber(), checkpointNumber + 1); - // have DAI locked in portal that can be moved when funds are withdrawn deal(address(DAI), address(daiTokenPortal), amount); @@ -170,7 +165,7 @@ contract UniswapPortalTest is Test { return message.sha256ToField(); } - function _addMessagesToOutbox(bytes32 daiWithdrawMessageHash, bytes32 swapMessageHash, uint256 _checkpointNumber) + function _addMessagesToOutbox(bytes32 daiWithdrawMessageHash, bytes32 swapMessageHash, Epoch _epoch) internal returns (bytes32, bytes32[] memory, bytes32[] memory) { @@ -184,7 +179,7 @@ contract UniswapPortalTest is Test { (bytes32[] memory swapSiblingPath,) = tree.computeSiblingPath(1); vm.prank(address(rollup)); - outbox.insert(_checkpointNumber, treeRoot); + outbox.insert(_epoch, treeRoot); return (treeRoot, withdrawSiblingPath, swapSiblingPath); } @@ -194,7 +189,7 @@ contract UniswapPortalTest is Test { function testRevertIfWithdrawMessageHasNoDesignatedCaller() public { bytes32 l2ToL1MessageToInsert = _createDaiWithdrawMessage(address(uniswapPortal), address(0)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(l2ToL1MessageToInsert, bytes32(uint256(0x1)), checkpointNumber); + _addMessagesToOutbox(l2ToL1MessageToInsert, bytes32(uint256(0x1)), DEFAULT_EPOCH); bytes32 l2ToL1MessageToConsume = _createDaiWithdrawMessage(address(uniswapPortal), address(uniswapPortal)); uint256 treeHeight = 1; @@ -215,12 +210,8 @@ contract UniswapPortalTest is Test { ); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; uniswapPortal.swapPublic( @@ -244,7 +235,7 @@ contract UniswapPortalTest is Test { bytes32 l2ToL1MessageToInsert = _createDaiWithdrawMessage(_recipient, address(uniswapPortal)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(l2ToL1MessageToInsert, bytes32(uint256(0x1)), checkpointNumber); + _addMessagesToOutbox(l2ToL1MessageToInsert, bytes32(uint256(0x1)), DEFAULT_EPOCH); bytes32 l2ToL1MessageToConsume = _createDaiWithdrawMessage(address(uniswapPortal), address(uniswapPortal)); @@ -266,12 +257,8 @@ contract UniswapPortalTest is Test { ); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; uniswapPortal.swapPublic( @@ -291,7 +278,7 @@ contract UniswapPortalTest is Test { bytes32 daiWithdrawMessageHash = _createDaiWithdrawMessage(address(uniswapPortal), address(uniswapPortal)); bytes32 swapMessageHash = _createUniswapSwapMessagePublic(aztecRecipient, address(this)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, checkpointNumber); + _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, DEFAULT_EPOCH); bytes32 newAztecRecipient = bytes32(uint256(0x4)); bytes32 messageHashPortalChecksAgainst = _createUniswapSwapMessagePublic(newAztecRecipient, address(this)); @@ -319,12 +306,8 @@ contract UniswapPortalTest is Test { ); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; uniswapPortal.swapPublic( @@ -345,15 +328,11 @@ contract UniswapPortalTest is Test { bytes32 swapMessageHash = _createUniswapSwapMessagePublic(aztecRecipient, address(this)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, checkpointNumber); + _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, DEFAULT_EPOCH); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; uniswapPortal.swapPublic( @@ -373,8 +352,8 @@ contract UniswapPortalTest is Test { // there should be some weth in the weth portal assertGt(WETH9.balanceOf(address(wethTokenPortal)), 0); // there the messages should be nullified - assertTrue(outbox.hasMessageBeenConsumedAtCheckpoint(checkpointNumber, 1 << withdrawSiblingPath.length)); - assertTrue(outbox.hasMessageBeenConsumedAtCheckpoint(checkpointNumber, 1 << swapSiblingPath.length + 1)); + assertTrue(outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, 1 << withdrawSiblingPath.length)); + assertTrue(outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, 1 << swapSiblingPath.length + 1)); } function testSwapCalledByAnyoneIfDesignatedCallerNotSet(address _caller) public { @@ -385,15 +364,11 @@ contract UniswapPortalTest is Test { bytes32 swapMessageHash = _createUniswapSwapMessagePublic(aztecRecipient, address(0)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, checkpointNumber); + _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, DEFAULT_EPOCH); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; vm.prank(_caller); @@ -414,8 +389,8 @@ contract UniswapPortalTest is Test { // there should be some weth in the weth portal assertGt(WETH9.balanceOf(address(wethTokenPortal)), 0); // there the messages should be nullified - assertTrue(outbox.hasMessageBeenConsumedAtCheckpoint(checkpointNumber, 1 << withdrawSiblingPath.length)); - assertTrue(outbox.hasMessageBeenConsumedAtCheckpoint(checkpointNumber, 1 << swapSiblingPath.length + 1)); + assertTrue(outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, 1 << withdrawSiblingPath.length)); + assertTrue(outbox.hasMessageBeenConsumedAtEpoch(DEFAULT_EPOCH, 1 << swapSiblingPath.length + 1)); } function testRevertIfSwapWithDesignatedCallerCalledByWrongCaller(address _caller) public { @@ -425,15 +400,11 @@ contract UniswapPortalTest is Test { bytes32 swapMessageHash = _createUniswapSwapMessagePublic(aztecRecipient, address(this)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, checkpointNumber); + _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, DEFAULT_EPOCH); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; vm.startPrank(_caller); @@ -512,15 +483,11 @@ contract UniswapPortalTest is Test { // Create message for `_isPrivateFlow`: bytes32 swapMessageHash = _createUniswapSwapMessagePublic(aztecRecipient, address(this)); (, bytes32[] memory withdrawSiblingPath, bytes32[] memory swapSiblingPath) = - _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, checkpointNumber); + _addMessagesToOutbox(daiWithdrawMessageHash, swapMessageHash, DEFAULT_EPOCH); PortalDataStructures.OutboxMessageMetadata[2] memory outboxMessageMetadata = [ - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 0, _path: withdrawSiblingPath - }), - PortalDataStructures.OutboxMessageMetadata({ - _checkpointNumber: checkpointNumber, _leafIndex: 1, _path: swapSiblingPath - }) + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 0, _path: withdrawSiblingPath}), + PortalDataStructures.OutboxMessageMetadata({_epoch: DEFAULT_EPOCH, _leafIndex: 1, _path: swapSiblingPath}) ]; bytes32 messageHashPortalChecksAgainst = _createUniswapSwapMessagePrivate(address(this)); diff --git a/l1-contracts/test/validator-selection/ValidatorSelection.t.sol b/l1-contracts/test/validator-selection/ValidatorSelection.t.sol index 2a62a983d0c7..0128188baf39 100644 --- a/l1-contracts/test/validator-selection/ValidatorSelection.t.sol +++ b/l1-contracts/test/validator-selection/ValidatorSelection.t.sol @@ -539,7 +539,7 @@ contract ValidatorSelectionTest is ValidatorSelectionTestBase { { uint128 manaMinFee = SafeCast.toUint128(rollup.getManaMinFeeAt(Timestamp.wrap(block.timestamp), true)); bytes32 inHash = inbox.getRoot(full.checkpoint.checkpointNumber); - header.contentCommitment.inHash = inHash; + header.inHash = inHash; header.gasFees.feePerL2Gas = manaMinFee; } @@ -707,44 +707,6 @@ contract ValidatorSelectionTest is ValidatorSelectionTestBase { return ree; } - bytes32 l2ToL1MessageTreeRoot; - { - uint32 numTxs = full.checkpoint.numTxs; - // NB: The below works with full checkpoints because we require the largest possible subtrees - // for L2 to L1 messages - usually we make variable height subtrees, the roots of which - // form a balanced tree - - // The below is a little janky - we know that this test deals with full txs with equal numbers - // of msgs or txs with no messages, so the division works - // TODO edit full.messages to include attesterViewrmation about msgs per tx? - uint256 subTreeHeight = merkleTestUtil.calculateTreeHeightFromSize( - full.messages.l2ToL1Messages.length == 0 ? 0 : full.messages.l2ToL1Messages.length / numTxs - ); - uint256 outHashTreeHeight = merkleTestUtil.calculateTreeHeightFromSize(numTxs); - uint256 numMessagesWithPadding = numTxs * Constants.MAX_L2_TO_L1_MSGS_PER_TX; - - uint256 treeHeight = subTreeHeight + outHashTreeHeight; - NaiveMerkle tree = new NaiveMerkle(treeHeight); - for (uint256 i = 0; i < numMessagesWithPadding; i++) { - if (i < full.messages.l2ToL1Messages.length) { - tree.insertLeaf(full.messages.l2ToL1Messages[i]); - } else { - tree.insertLeaf(bytes32(0)); - } - } - - l2ToL1MessageTreeRoot = tree.computeRoot(); - } - - bytes32 root = outbox.getRootData(full.checkpoint.checkpointNumber); - - // If we are trying to read a checkpoint beyond the proven chain, we should see "nothing". - if (rollup.getProvenCheckpointNumber() >= full.checkpoint.checkpointNumber) { - assertEq(l2ToL1MessageTreeRoot, root, "Invalid l2 to l1 message tree root"); - } else { - assertEq(root, bytes32(0), "Invalid outbox root"); - } - assertEq(rollup.archive(), ree.proposeArgs.archive, "Invalid archive"); } @@ -777,7 +739,10 @@ contract ValidatorSelectionTest is ValidatorSelectionTestBase { address prover = address(0xcafe); PublicInputArgs memory args = PublicInputArgs({ - previousArchive: parentCheckpointLog.archive, endArchive: endFull.checkpoint.archive, proverId: prover + previousArchive: parentCheckpointLog.archive, + endArchive: endFull.checkpoint.archive, + outHash: bytes32(0), + proverId: prover }); bytes32[] memory fees = new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2); diff --git a/l1-contracts/test/validator-selection/tmnt207.t.sol b/l1-contracts/test/validator-selection/tmnt207.t.sol index 07e4e141b3d7..81ade0b314ce 100644 --- a/l1-contracts/test/validator-selection/tmnt207.t.sol +++ b/l1-contracts/test/validator-selection/tmnt207.t.sol @@ -228,6 +228,7 @@ contract Tmnt207Test is RollupBase { args: PublicInputArgs({ previousArchive: rollup.getCheckpoint(0).archive, endArchive: rollup.getCheckpoint(1).archive, + outHash: bytes32(0), proverId: address(0) }), fees: new bytes32[](Constants.AZTEC_MAX_EPOCH_DURATION * 2), diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-merge/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-merge/Prover.toml index bb1805ed468d..30789a6b3dee 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-merge/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-merge/Prover.toml @@ -535,7 +535,57 @@ proof = [ [inputs.previous_rollups.public_inputs] checkpoint_header_hashes = [ - "0x00d83cebec7a6172a67854376e6f545f7ce67c768dfba184f5fb6d5c5c6906a0", + "0x00984cd0def30213ebdd1f0f8cdcc06df34b77bb8bad1c0ea2fc69dec9cb0a41", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + out_hashes = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -587,24 +637,24 @@ proof = [ [inputs.previous_rollups.public_inputs.constants] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - vk_tree_root = "0x1a4b6efe54b7954bbca355f34a44cf50219847a84f1e3ad159046c9eb0f899eb" - protocol_contracts_hash = "0x0534a1f6f294b5e285b77984b6dbfb8ac151b3afaf51a3d28f1108e3d4afcc76" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + vk_tree_root = "0x1d09edaa1408f8fb8d509de57a697770231e4b20acb508b5945ff64fb1e206aa" + protocol_contracts_hash = "0x168f09154ab73f2bd206a4991e6e975aea5ebb0f86157404b942c33b91312cfa" prover_id = "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" [inputs.previous_rollups.public_inputs.previous_archive] - root = "0x1320e5d7599e880df5d78585fb88b450e8b4ce2336a90cfbdb6f6dd3eb1eb6b7" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" + root = "0x22289dd3c7f0f72246dfe6507d085d42bce8d07dc09751f3fa9f7bececd17ec9" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" [inputs.previous_rollups.public_inputs.new_archive] - root = "0x05f72291fc97f9243a5261d74122ef83137fb2a3e6c78c9b3678500177017db0" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000a" + root = "0x09e98cc6c97114639cce5a13293de3427d400511e7d9ea2bf688d190eb74965e" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x000000000000000000000000000000000000000000000000000000001558b000" + value = "0x00000000000000000000000000000000000000000000000000000000a81d9400" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] value = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -927,15 +977,15 @@ proof = [ ] [inputs.previous_rollups.public_inputs.end_blob_accumulator] - blob_commitments_hash_acc = "0x00b58346425ccb65e6073e03924577b238cc65e9d660e61b29ae26e7017b1750" - z_acc = "0x0ec19df71d6dd9cb1cd58ccfae8c2ecb418855e7430b36795d11ded3d89d0078" - gamma_acc = "0x2f92a8aef71905d31eef220737a2be4d77a0146151dc0ceb51b8f3a5809405f2" + blob_commitments_hash_acc = "0x00d00f4fc2e688320765cedeac098047eebb20fa9572a247a632cedcd72a9f9b" + z_acc = "0x1ddf994f4302e6737fc68be5906a92ad2426cfa7c358a3a7b8ef38eacc1dfb67" + gamma_acc = "0x0a15c7f493706c658fb99d5f2678f4de13f89872db51ebbfcd6b24f90052ad59" [inputs.previous_rollups.public_inputs.end_blob_accumulator.y_acc] limbs = [ - "0xee6bd6de581eb988d51f63dbcf8d94", - "0xefdbe9e1de40b4a361545da7d3a72c", - "0x67c2" + "0x858b2e4957229911cbcc3ee38ef267", + "0xdc046c1ce49632cb38d5b54b285dd1", + "0x38ba" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc] @@ -943,142 +993,142 @@ proof = [ [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.x] limbs = [ - "0xde11d6495843f889a8b89615071352", - "0xf1d56a664c8a871ff1fd7784379f87", - "0x506f744458db53bf89860b85d60ed2", - "0x01e8c5" + "0xefad2ec0b6238cca22999015e80c7c", + "0xfd57233583b0cd6f4500f4b5733578", + "0x8679bf4fca2d99b62f3774b28086a9", + "0x0314ac" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.y] limbs = [ - "0xc746aefaf0b7a48d3f806960b122a9", - "0x5b1068c8550241e6464052d72d2c3b", - "0x74fc7cd39c447a8361b8dd0d9c0091", - "0x03b175" + "0xdb30236e86bb95ad79cb269c8f9336", + "0xc4cca35eb958d02117af3f656a0f8a", + "0x95eb954bb153f1b16e46b6d599b492", + "0x136f94" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.gamma_pow_acc] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.public_inputs.final_blob_challenges] - z = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" + z = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" [inputs.previous_rollups.public_inputs.final_blob_challenges.gamma] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.vk_data] leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000011" sibling_path = [ - "0x10970b97168e70b35aca267c83590003a395df1abf5a11cc884b427b7e76729c", - "0x2c8ba1ce7bcec9e8132b88fec5cd7dd5f77cabe4cc06d1171b65a8da9d487a1a", - "0x289bd773768e8165df9fbbdb2658d08314bc31ce2dbab3bb5b411ae5e2d38fd3", - "0x21716c14360902685b3dd8405f3f6cecd55078eea46d2c1863e70afa35c60842", - "0x20c759db36dd119b1d53141b37044fcb28feb41eb4c4bcef7f68ae7f16a59e46", - "0x1e0bb05cf0a7812744d88250e872d29da49f3bd4284a036de39b4bab0bbec197", - "0x10f3c69caaea623bfae6beea1030333a045ef9e119a60afcf1b07abe6b6dabb0" + "0x18dca1047a7914862657fe554e0a3c889b6e7dab936da0636e80a71430674320", + "0x0eca8e3d2c584b1daffa29edcb5618e68c7f1c5df89140703f674149007ad5fa", + "0x27c08dafd69a994e3dbd9ea9df9bc109e52c5775426c94f432352a09b2adddda", + "0x15a8e5eb2c93ba5b8b0d86c618c0287c6a76a42a6261d9c179535190910f86fe", + "0x14052465b6d95be9d3f3fb0e62c98d1edbe05194f80732f3d96e87d037f82ea9", + "0x2e57df8d5011ee5b90dce76a79fa869133ddd3244983885d73e012ea5ec9a2c5", + "0x0ee8b26e949aa6c26896821c0651c765193f0425f01d748573ddadf7b56a417a" ] [inputs.previous_rollups.vk_data.vk] key = [ "0x0000000000000000000000000000000000000000000000000000000000000017", - "0x00000000000000000000000000000000000000000000000000000000000000db", + "0x000000000000000000000000000000000000000000000000000000000000010b", "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000000000a4addc3d15184ad44ee3491b10b697fbcb", - "0x000000000000000000000000000000000004248a518173e75ec75a59de8b4a49", - "0x0000000000000000000000000000000c59afbdb8091ae2124a60d518101efd0b", - "0x0000000000000000000000000000000000100c54a9302700eb69cbe10cba97f2", - "0x0000000000000000000000000000001b64713de08d2a1889a1f8f9726a677ffe", - "0x00000000000000000000000000000000002d1471c9f9f556eb0eb78a7657ddff", - "0x0000000000000000000000000000005a8165fb5b03c0c1ed26016c6a41c49306", - "0x0000000000000000000000000000000000030c604f1bb1adddea8e95f40420b1", - "0x00000000000000000000000000000021ef7902b72d855b1c5066c8f97169b22f", - "0x00000000000000000000000000000000000ba7a4515f2bccd0337e1b9913d9b4", - "0x00000000000000000000000000000026a4525028ee83fde24042b00b4320908e", - "0x00000000000000000000000000000000002606ce67c5bd97ed27abbf830c57eb", - "0x0000000000000000000000000000001c9d8b838fac9156dd98b14c2df0810fc5", - "0x00000000000000000000000000000000000df02d2c047af635e0db62710ddf51", - "0x000000000000000000000000000000296feef6bed51b3c7129c50e3486ff82b7", - "0x000000000000000000000000000000000025acd3c9ff0bfafb8f0f0f46128de2", - "0x000000000000000000000000000000016bb61ef76e1ee0bc486c53658dfc271c", - "0x0000000000000000000000000000000000132c57c3319698cf519be1cb7106eb", - "0x000000000000000000000000000000b7756b802897666538b98b57637d624bf6", - "0x0000000000000000000000000000000000263615035ac1ee49f6ddd16c17161f", - "0x0000000000000000000000000000007917e8d72f94519994926d2188afa59b22", - "0x00000000000000000000000000000000001ac7287b2286ece9472c2b0313afec", - "0x000000000000000000000000000000c86b1f13f292b9a7fd027d22f0b3891a83", - "0x0000000000000000000000000000000000016fa3e871fbf819c301d93bc24254", - "0x000000000000000000000000000000ad91540d93c85513f28474ddc14d9df5d4", - "0x000000000000000000000000000000000002b2a3959b62c8c91a925752e929d9", - "0x000000000000000000000000000000e4c37933e963c358ce5dbd7445d7a148c6", - "0x000000000000000000000000000000000017c37db68400e1ece0d2a8f05c3ee5", - "0x00000000000000000000000000000048fb157aeeb69ac9ac557cf314385f0fcb", - "0x00000000000000000000000000000000000709b839adfbad629ad7ff6bc5391a", - "0x00000000000000000000000000000049feaa0f8145465703d5ce4df863757f30", - "0x000000000000000000000000000000000022a9c0cbac7edde598bc907ffb8fef", - "0x0000000000000000000000000000004223dbc0fd145c9dd4cd32fe19fb96a917", - "0x00000000000000000000000000000000002c3b8721be4d5959bb7f3eb0762329", - "0x0000000000000000000000000000008352d64e102d1db8bec8033cb357fe976c", - "0x0000000000000000000000000000000000286aa9e75b54ebaf83a6460ee8559b", - "0x0000000000000000000000000000002c91b72f90f172bbbc8cf856d484a35d82", - "0x00000000000000000000000000000000001be5b05e5acc279e5498e7b2677c3c", - "0x000000000000000000000000000000d72322b19cc3c4ac5a3c7b42f986d3222f", - "0x0000000000000000000000000000000000132c1da3de787da93632a5277492b3", - "0x0000000000000000000000000000002efcedb78bce4033c2bfa56e7e8b4f311a", - "0x00000000000000000000000000000000001c486e865a50ccab68e84032ba3d52", - "0x000000000000000000000000000000e35c30b170ef9d285099f6a401e6a79a00", - "0x000000000000000000000000000000000021b678b6d947e6b994c6ef1c78c2bd", - "0x000000000000000000000000000000f0fcc932a2b3fd7239f5429a16781cba7a", - "0x000000000000000000000000000000000020775976c42386197d53c1c776db61", - "0x000000000000000000000000000000b947fd5f8858760abaa6eec1db4877df71", - "0x00000000000000000000000000000000001378ee0f05c2cf3b90ff8ac789d3e5", - "0x000000000000000000000000000000ddcd61f0723018bdd4b44ead37a6c763bc", - "0x000000000000000000000000000000000022d1ef563be2af569163e5b7c89529", - "0x000000000000000000000000000000f789dc1de6e5bc852bcf4b7024501ebfc7", - "0x00000000000000000000000000000000001fcae32a5a0e3f31284b94b998eb32", - "0x0000000000000000000000000000001d680b27b411438b9d682a255b7a565c1d", - "0x0000000000000000000000000000000000008a7157314cbdcd0f7eac82c67b61", - "0x0000000000000000000000000000007a19338030c9f7a1b3db961e52f518d061", - "0x00000000000000000000000000000000000d4308734c110c89a75f5e0938ad8f", - "0x00000000000000000000000000000073edae47f4c3a27dc86c4fa03323e0dc96", - "0x00000000000000000000000000000000001f1cd06860f5665135a2ce7f1729df", - "0x000000000000000000000000000000bdcf58226ff3e6549529df1d1a9d696369", - "0x00000000000000000000000000000000000bb20a605bc5c417ded90abc3283a6", - "0x000000000000000000000000000000236e6ffbeb012d64a3e51190310b7bdf94", - "0x0000000000000000000000000000000000180dfd6f8bc458c630c3042c74a12f", - "0x000000000000000000000000000000d215ced9fab1477eee5d861c0fedf82e8f", - "0x00000000000000000000000000000000001b5aef42c385c52a3e19fc96d3c069", - "0x00000000000000000000000000000041a87e897fd5db13a21400e1f305748dac", - "0x000000000000000000000000000000000028661e94b53462f7aa33a7edaafb03", - "0x000000000000000000000000000000db0b01933ffaa5cbaa0c4b00a97c88bab0", - "0x00000000000000000000000000000000000cb49875192963da14b2e90874802c", - "0x0000000000000000000000000000007f4a3c352be3b4dc12ee7aa892d271c8e2", - "0x000000000000000000000000000000000018859077eebb1a622d55af50ecb62c", - "0x00000000000000000000000000000016395c017b6bdcbc01a4b66ba36b2e3676", - "0x000000000000000000000000000000000020e02a68038d79b2df595743a1d517", - "0x0000000000000000000000000000005216c2f6b2cd003a57f0971e67a6a4bfd1", - "0x00000000000000000000000000000000002b9bddfd05979d093880198bb1021f", - "0x000000000000000000000000000000bc30d06668a9c57d2d4fefabbfa2b743d1", - "0x00000000000000000000000000000000000249209ff2e5a2868359b760e39a69", - "0x000000000000000000000000000000fda5b1d02f438a2366a268ded092c3fdf9", - "0x00000000000000000000000000000000001bdd80759cc81ee9e4f54c6e4fb947", - "0x00000000000000000000000000000085c551241de41500c5ab4b4f53c1bff1b9", - "0x00000000000000000000000000000000001373f130bddc56203a563ea82d680c", - "0x0000000000000000000000000000002851a00032a55807e186581b9b1c0f8ee3", - "0x00000000000000000000000000000000000e3c26b4680e961e43b09e01fd4c53", - "0x00000000000000000000000000000024d349d3935bd6244a7445d94a0514d663", - "0x00000000000000000000000000000000000531f17ce276d0394382cabf112d1c", - "0x0000000000000000000000000000006b6278d87e24137bcdb746d699992e6fe3", - "0x0000000000000000000000000000000000099cb1ebe224fa90e84cb905336537", - "0x00000000000000000000000000000019fff9608cade5e9a7373068a04ff86a15", - "0x000000000000000000000000000000000028da1b919b4e0540053ee2900ec512", + "0x000000000000000000000000000000f0b37e9e5df76e62eb9469b90c6e4bc0b7", + "0x000000000000000000000000000000000026643eea736aa2427aaecf8a8cdc8a", + "0x0000000000000000000000000000004d95e8ad7b8cdc1afa3526573452a14bd9", + "0x0000000000000000000000000000000000126bda933b57e5ba7e1b42d7c1f70f", + "0x0000000000000000000000000000007cd5093806dff0faea13ce79edc8f737ed", + "0x000000000000000000000000000000000013664a45a760dfc0a7448092747401", + "0x00000000000000000000000000000057dbbaa73aa0a16e6af027e1ed5256d90d", + "0x00000000000000000000000000000000001938f3daff94392bda03e4b122a9c0", + "0x000000000000000000000000000000de6da06111605ebf7c53e228cfdc4ab3f5", + "0x0000000000000000000000000000000000114805ae329a379ecf3a6c795d094e", + "0x000000000000000000000000000000f8e442d4c304b6f27e1d1f006c01dacf94", + "0x000000000000000000000000000000000017e9d8ffa0ae45ab8e44975cc145ff", + "0x0000000000000000000000000000006d24fc1ca89aaf6b1be200c50a8fc37c77", + "0x000000000000000000000000000000000003f9315ebe09d275561f2972c2108c", + "0x000000000000000000000000000000533abe16a35f1e9c886c7041a3ff15389e", + "0x0000000000000000000000000000000000247d6343749a26419dcc083472fcd3", + "0x00000000000000000000000000000039b973def469757f5165d5e1a7e6eb5ec9", + "0x00000000000000000000000000000000002ff61f3b9028335190f9f604751f03", + "0x00000000000000000000000000000019e7b7c1324d6919acc32680f54acff5d4", + "0x0000000000000000000000000000000000222a537495db8299822d419ff2f718", + "0x00000000000000000000000000000070f621b620d0bd187bc4fcba25ab95d1cf", + "0x0000000000000000000000000000000000119aab86254554ef238106df72a42a", + "0x000000000000000000000000000000dda6a04fe5258ccc40645c54a5c7967e2f", + "0x00000000000000000000000000000000002ed1283de5917d4c92bc03040e7093", + "0x000000000000000000000000000000cc370b48224682881251952ed5edbdc094", + "0x00000000000000000000000000000000000b9b8febbe02d6a48df2cd3f18b9ce", + "0x000000000000000000000000000000d0646c0b18d3265eb27cd5542da553d879", + "0x000000000000000000000000000000000014c6a7a02ec38f4ee6ce45a70d9f26", + "0x0000000000000000000000000000003e9d9aeb9ee52b9e9be4ad303bc22435cf", + "0x000000000000000000000000000000000027bddbac658fcf0880d0a9a1d4c53a", + "0x0000000000000000000000000000003cae5490c7fd87f8065508dc0628adb7b7", + "0x00000000000000000000000000000000002f77b974dfae1d921187cedfeeef50", + "0x000000000000000000000000000000697ec1cd59c7afe58f5fa131bd007da5e2", + "0x0000000000000000000000000000000000148c6d01f350da2890559b0219f2c0", + "0x00000000000000000000000000000010acb90112ad892796b108602782640e7e", + "0x00000000000000000000000000000000001f94386fbbb37abd8130d09fd1e93e", + "0x00000000000000000000000000000021ca68c5be6fc3c822ad31277813eb3a2e", + "0x000000000000000000000000000000000006f224595426d2d8ece3d29d781ae5", + "0x000000000000000000000000000000146c656363e3e54866f9918961ec09f1f6", + "0x00000000000000000000000000000000001b473c202f63a7b42d9636b9fe533c", + "0x000000000000000000000000000000a3e8155622f590ef2697bcde811823db04", + "0x00000000000000000000000000000000000da0d2540632e7591f2c7544823e81", + "0x000000000000000000000000000000f4c66c4636580f9b200aa34e348bf42d79", + "0x00000000000000000000000000000000001d0b3e578fdea3917a2dfb5ad99427", + "0x000000000000000000000000000000104e58edf0c59d158463a6cd4b42443614", + "0x00000000000000000000000000000000000246a978d84b57cc347519adb1c6d5", + "0x0000000000000000000000000000007248c15d65b185fb0e2f9923caa67e8e33", + "0x00000000000000000000000000000000000ed6eea32fa2e8ab86cf5719eb29ab", + "0x000000000000000000000000000000974f7a626fd9e24f2fad8d3aea489002a1", + "0x00000000000000000000000000000000002c9389f277ddcdd3589487e9521bcc", + "0x0000000000000000000000000000009ff18ac14770452db31032bd995595366f", + "0x00000000000000000000000000000000001f79cbab90757a1eb79887ce1c5e99", + "0x000000000000000000000000000000bc612b629cb4e4652c5266bd50043b4977", + "0x000000000000000000000000000000000017a825d9c664e6a9f74f72144cbd55", + "0x0000000000000000000000000000009dd851373bfd3e4f35094510914b379a0b", + "0x00000000000000000000000000000000000e6beae01bb00e5d379530ab4ef5ff", + "0x000000000000000000000000000000e1c33d6ebc144c08ee02610917f20b3069", + "0x00000000000000000000000000000000000d76f52fdbfd4708f7329a9e6d0fe8", + "0x0000000000000000000000000000006788f0e3fcd96afa3c047d9d4d017b555d", + "0x0000000000000000000000000000000000119339342012d2dba44b4a958459dd", + "0x0000000000000000000000000000008153a5080734adcd5e6e105d6828393dd5", + "0x0000000000000000000000000000000000270f5c4da3b4652f61dd7551d9d445", + "0x000000000000000000000000000000cdab7f28f412c0b68186d6a7c44376cff0", + "0x00000000000000000000000000000000001a50865a4867aef98c081eb22605f9", + "0x000000000000000000000000000000224aa96ed03655edb4ffa513202c2333f2", + "0x000000000000000000000000000000000010c37a3c85e008273dcb106d3ccad7", + "0x000000000000000000000000000000bb8c2556164dc200ac98822d1b759136cc", + "0x000000000000000000000000000000000029c5dcce7db4f32bad229128428061", + "0x0000000000000000000000000000006f67460159b30e0d0be4422ce6f455660b", + "0x00000000000000000000000000000000001b3efa709ff66a41006751a6a8954e", + "0x000000000000000000000000000000b23934412a1be1d2b2dd65faedf5a63485", + "0x00000000000000000000000000000000002d9eb50f51f8d476ba66a4f67ed44f", + "0x000000000000000000000000000000c74146c1322ac277ffea4041893b12d798", + "0x00000000000000000000000000000000002f59f80ea60da26752b4ae4d50962c", + "0x0000000000000000000000000000000fbd1e57e933a79a1fe3c8ad2aa3bca1d7", + "0x00000000000000000000000000000000002ddd75cc9d81f1874b5a62e9c917f5", + "0x0000000000000000000000000000002677faa3bd2f7d14dbfa9a7089c5321369", + "0x00000000000000000000000000000000001b05ae1af86a67ec196e8a7c633c93", + "0x0000000000000000000000000000008a75a59a7e7c2396ac27ffd1a6f0b7bb87", + "0x0000000000000000000000000000000000215d7bab219bbdbbcfd85d9d143497", + "0x000000000000000000000000000000a0b049accf71f0922db3fb9f107e4bdee7", + "0x0000000000000000000000000000000000005893f9fab88d8609b6647b647b34", + "0x000000000000000000000000000000093b02c9c55f604ca357325806e8764195", + "0x000000000000000000000000000000000022d52af719bc5f09cd1594968f49bd", + "0x0000000000000000000000000000005e56b62243533a98687e0abc1f716094dd", + "0x0000000000000000000000000000000000014649c15b83be4a6dfaee9fcc9a8f", + "0x000000000000000000000000000000d3ae2c40abc3c4cc4fc28f79d5ebe1fde0", + "0x00000000000000000000000000000000002f2134f4febf2d0a4b58dd0a5a8b10", "0x000000000000000000000000000000f4a6c6ffdf80a72db78762e237d58cd5f6", "0x000000000000000000000000000000000026814a59803555635a3b6dfd056d19", "0x000000000000000000000000000000f45b8d96069231f48e0d0c34d57593a6a6", @@ -1099,12 +1149,12 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000004d3023af24c3e44ce85cf3cc342e769ccb", - "0x0000000000000000000000000000000000240c758e2198740d86d04d8c549e2d", - "0x0000000000000000000000000000008594fde0103e2a267b8bd33d78387a5ce7", - "0x00000000000000000000000000000000002933a8a1f202c0b54945abac713645" + "0x0000000000000000000000000000002e124a22456d7157a2a277879c9d783090", + "0x00000000000000000000000000000000001102e847b55ee32be93060b233546e", + "0x000000000000000000000000000000fbc5cb4c513a6849f7b399a61aed283b4e", + "0x00000000000000000000000000000000000a6b5f546c49ec5e93ed6634ccb104" ] - hash = "0x2433a1c7e91c3fb04f1e430a666c0d72b25b400f5d917893bbc7606816f4fc19" + hash = "0x0c7a54c58332565673dee37ff88d07b9e0c8a47029bc3aa26d5b3bf5fe9ed3c4" [[inputs.previous_rollups]] proof = [ @@ -1643,7 +1693,57 @@ proof = [ [inputs.previous_rollups.public_inputs] checkpoint_header_hashes = [ - "0x001db8fbab7ff4c5c62a033de2ecb9d82f64b5d8b37b99a3c71a2e44872fa278", + "0x008dfc3acf42eeed1077a492752a78413c22e7270bf39a0c8812de8b689e07a6", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + out_hashes = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1695,24 +1795,24 @@ proof = [ [inputs.previous_rollups.public_inputs.constants] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - vk_tree_root = "0x1a4b6efe54b7954bbca355f34a44cf50219847a84f1e3ad159046c9eb0f899eb" - protocol_contracts_hash = "0x0534a1f6f294b5e285b77984b6dbfb8ac151b3afaf51a3d28f1108e3d4afcc76" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + vk_tree_root = "0x1d09edaa1408f8fb8d509de57a697770231e4b20acb508b5945ff64fb1e206aa" + protocol_contracts_hash = "0x168f09154ab73f2bd206a4991e6e975aea5ebb0f86157404b942c33b91312cfa" prover_id = "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" [inputs.previous_rollups.public_inputs.previous_archive] - root = "0x05f72291fc97f9243a5261d74122ef83137fb2a3e6c78c9b3678500177017db0" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000a" + root = "0x09e98cc6c97114639cce5a13293de3427d400511e7d9ea2bf688d190eb74965e" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.previous_rollups.public_inputs.new_archive] - root = "0x053c3534268e82117a5610b7cd76f4987b1e36d22a3de7b7930466d021d78231" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" + root = "0x269715ee30c08bb3173de05b8eadf8bf41d01d847f727214614165ac64ecdd2d" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x0000000000000000000000000000000000000000000000000000000e8447f080" + value = "0x000000000000000000000000000000000000000000000000000000cbe0facb6e" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] value = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -1997,15 +2097,15 @@ proof = [ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.previous_rollups.public_inputs.start_blob_accumulator] - blob_commitments_hash_acc = "0x00b58346425ccb65e6073e03924577b238cc65e9d660e61b29ae26e7017b1750" - z_acc = "0x0ec19df71d6dd9cb1cd58ccfae8c2ecb418855e7430b36795d11ded3d89d0078" - gamma_acc = "0x2f92a8aef71905d31eef220737a2be4d77a0146151dc0ceb51b8f3a5809405f2" + blob_commitments_hash_acc = "0x00d00f4fc2e688320765cedeac098047eebb20fa9572a247a632cedcd72a9f9b" + z_acc = "0x1ddf994f4302e6737fc68be5906a92ad2426cfa7c358a3a7b8ef38eacc1dfb67" + gamma_acc = "0x0a15c7f493706c658fb99d5f2678f4de13f89872db51ebbfcd6b24f90052ad59" [inputs.previous_rollups.public_inputs.start_blob_accumulator.y_acc] limbs = [ - "0xee6bd6de581eb988d51f63dbcf8d94", - "0xefdbe9e1de40b4a361545da7d3a72c", - "0x67c2" + "0x858b2e4957229911cbcc3ee38ef267", + "0xdc046c1ce49632cb38d5b54b285dd1", + "0x38ba" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc] @@ -2013,37 +2113,37 @@ proof = [ [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc.x] limbs = [ - "0xde11d6495843f889a8b89615071352", - "0xf1d56a664c8a871ff1fd7784379f87", - "0x506f744458db53bf89860b85d60ed2", - "0x01e8c5" + "0xefad2ec0b6238cca22999015e80c7c", + "0xfd57233583b0cd6f4500f4b5733578", + "0x8679bf4fca2d99b62f3774b28086a9", + "0x0314ac" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc.y] limbs = [ - "0xc746aefaf0b7a48d3f806960b122a9", - "0x5b1068c8550241e6464052d72d2c3b", - "0x74fc7cd39c447a8361b8dd0d9c0091", - "0x03b175" + "0xdb30236e86bb95ad79cb269c8f9336", + "0xc4cca35eb958d02117af3f656a0f8a", + "0x95eb954bb153f1b16e46b6d599b492", + "0x136f94" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.gamma_pow_acc] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator] - blob_commitments_hash_acc = "0x005865ce1a0b0202a3e4b0dbf9909e234e23d638ea5e6dc3872a47fb5e041981" - z_acc = "0x0b2bf2d679e2e31af98cdc699b125df2732baeaef744e4775bea733393a39e9b" - gamma_acc = "0x017c5abe6b4223eae59f0eb8ce6eae81bec286a6c28f2a5d0b8e71356737b3f1" + blob_commitments_hash_acc = "0x0061c128b6e5e328cec427fcf0b1c353ea3208575ff358fa81abf9fb843cb491" + z_acc = "0x2d039041871ff4cc5ac065864dde94da555d65b49a237b13a8c0f75a85af274b" + gamma_acc = "0x2dadaba9ece90b38fb0803553b4020cb866e3427535a429b086d864343323baf" [inputs.previous_rollups.public_inputs.end_blob_accumulator.y_acc] limbs = [ - "0x8107f53fcf625c091ba4bc25b255d6", - "0x061ed93bd1f502fd80ebc94dc50a87", - "0x5f92" + "0x9193021f85a085569c6ac73d112ff4", + "0x7574c46fb46b478e3c658c3fa27697", + "0x1daa" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc] @@ -2051,142 +2151,142 @@ proof = [ [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.x] limbs = [ - "0x26c6aa38377db8781b2702cc94b2aa", - "0x2479cc12deb996e114a514c729422b", - "0xb0254d09b98802bc86e4d1daf99abd", - "0x14f29d" + "0x3a55d4654bbabd3b5f39ba647c0e67", + "0x9a7977eab0355037ff4baaf9ac042c", + "0x4a50fe848369d9bd0b94750148d4e8", + "0x16f323" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.y] limbs = [ - "0x564fdb7a980f1a53b4b5b1a37162ff", - "0x1381933a1980151066bbd2dffc0057", - "0xfd17d9f2a70ac88a5e15419b6bd944", - "0x000702" + "0x9645afe72e727a41df17167069da44", + "0x5eb254478841eafc1816ebc890d119", + "0x5ce5379749a407c4a29fb80cbc3bf5", + "0x095b08" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.gamma_pow_acc] limbs = [ - "0x6f9d69c94ba3447ce83027ea3f0382", - "0x940b662ffa08a800e3880d6c3fdcff", - "0x143b" + "0x1999fbf0bf82cde0820011637a47ad", + "0xf36feab1d91a69a41daeddf9bfc9f2", + "0x0e31" ] [inputs.previous_rollups.public_inputs.final_blob_challenges] - z = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" + z = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" [inputs.previous_rollups.public_inputs.final_blob_challenges.gamma] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.vk_data] leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000011" sibling_path = [ - "0x10970b97168e70b35aca267c83590003a395df1abf5a11cc884b427b7e76729c", - "0x2c8ba1ce7bcec9e8132b88fec5cd7dd5f77cabe4cc06d1171b65a8da9d487a1a", - "0x289bd773768e8165df9fbbdb2658d08314bc31ce2dbab3bb5b411ae5e2d38fd3", - "0x21716c14360902685b3dd8405f3f6cecd55078eea46d2c1863e70afa35c60842", - "0x20c759db36dd119b1d53141b37044fcb28feb41eb4c4bcef7f68ae7f16a59e46", - "0x1e0bb05cf0a7812744d88250e872d29da49f3bd4284a036de39b4bab0bbec197", - "0x10f3c69caaea623bfae6beea1030333a045ef9e119a60afcf1b07abe6b6dabb0" + "0x18dca1047a7914862657fe554e0a3c889b6e7dab936da0636e80a71430674320", + "0x0eca8e3d2c584b1daffa29edcb5618e68c7f1c5df89140703f674149007ad5fa", + "0x27c08dafd69a994e3dbd9ea9df9bc109e52c5775426c94f432352a09b2adddda", + "0x15a8e5eb2c93ba5b8b0d86c618c0287c6a76a42a6261d9c179535190910f86fe", + "0x14052465b6d95be9d3f3fb0e62c98d1edbe05194f80732f3d96e87d037f82ea9", + "0x2e57df8d5011ee5b90dce76a79fa869133ddd3244983885d73e012ea5ec9a2c5", + "0x0ee8b26e949aa6c26896821c0651c765193f0425f01d748573ddadf7b56a417a" ] [inputs.previous_rollups.vk_data.vk] key = [ "0x0000000000000000000000000000000000000000000000000000000000000017", - "0x00000000000000000000000000000000000000000000000000000000000000db", + "0x000000000000000000000000000000000000000000000000000000000000010b", "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000000000a4addc3d15184ad44ee3491b10b697fbcb", - "0x000000000000000000000000000000000004248a518173e75ec75a59de8b4a49", - "0x0000000000000000000000000000000c59afbdb8091ae2124a60d518101efd0b", - "0x0000000000000000000000000000000000100c54a9302700eb69cbe10cba97f2", - "0x0000000000000000000000000000001b64713de08d2a1889a1f8f9726a677ffe", - "0x00000000000000000000000000000000002d1471c9f9f556eb0eb78a7657ddff", - "0x0000000000000000000000000000005a8165fb5b03c0c1ed26016c6a41c49306", - "0x0000000000000000000000000000000000030c604f1bb1adddea8e95f40420b1", - "0x00000000000000000000000000000021ef7902b72d855b1c5066c8f97169b22f", - "0x00000000000000000000000000000000000ba7a4515f2bccd0337e1b9913d9b4", - "0x00000000000000000000000000000026a4525028ee83fde24042b00b4320908e", - "0x00000000000000000000000000000000002606ce67c5bd97ed27abbf830c57eb", - "0x0000000000000000000000000000001c9d8b838fac9156dd98b14c2df0810fc5", - "0x00000000000000000000000000000000000df02d2c047af635e0db62710ddf51", - "0x000000000000000000000000000000296feef6bed51b3c7129c50e3486ff82b7", - "0x000000000000000000000000000000000025acd3c9ff0bfafb8f0f0f46128de2", - "0x000000000000000000000000000000016bb61ef76e1ee0bc486c53658dfc271c", - "0x0000000000000000000000000000000000132c57c3319698cf519be1cb7106eb", - "0x000000000000000000000000000000b7756b802897666538b98b57637d624bf6", - "0x0000000000000000000000000000000000263615035ac1ee49f6ddd16c17161f", - "0x0000000000000000000000000000007917e8d72f94519994926d2188afa59b22", - "0x00000000000000000000000000000000001ac7287b2286ece9472c2b0313afec", - "0x000000000000000000000000000000c86b1f13f292b9a7fd027d22f0b3891a83", - "0x0000000000000000000000000000000000016fa3e871fbf819c301d93bc24254", - "0x000000000000000000000000000000ad91540d93c85513f28474ddc14d9df5d4", - "0x000000000000000000000000000000000002b2a3959b62c8c91a925752e929d9", - "0x000000000000000000000000000000e4c37933e963c358ce5dbd7445d7a148c6", - "0x000000000000000000000000000000000017c37db68400e1ece0d2a8f05c3ee5", - "0x00000000000000000000000000000048fb157aeeb69ac9ac557cf314385f0fcb", - "0x00000000000000000000000000000000000709b839adfbad629ad7ff6bc5391a", - "0x00000000000000000000000000000049feaa0f8145465703d5ce4df863757f30", - "0x000000000000000000000000000000000022a9c0cbac7edde598bc907ffb8fef", - "0x0000000000000000000000000000004223dbc0fd145c9dd4cd32fe19fb96a917", - "0x00000000000000000000000000000000002c3b8721be4d5959bb7f3eb0762329", - "0x0000000000000000000000000000008352d64e102d1db8bec8033cb357fe976c", - "0x0000000000000000000000000000000000286aa9e75b54ebaf83a6460ee8559b", - "0x0000000000000000000000000000002c91b72f90f172bbbc8cf856d484a35d82", - "0x00000000000000000000000000000000001be5b05e5acc279e5498e7b2677c3c", - "0x000000000000000000000000000000d72322b19cc3c4ac5a3c7b42f986d3222f", - "0x0000000000000000000000000000000000132c1da3de787da93632a5277492b3", - "0x0000000000000000000000000000002efcedb78bce4033c2bfa56e7e8b4f311a", - "0x00000000000000000000000000000000001c486e865a50ccab68e84032ba3d52", - "0x000000000000000000000000000000e35c30b170ef9d285099f6a401e6a79a00", - "0x000000000000000000000000000000000021b678b6d947e6b994c6ef1c78c2bd", - "0x000000000000000000000000000000f0fcc932a2b3fd7239f5429a16781cba7a", - "0x000000000000000000000000000000000020775976c42386197d53c1c776db61", - "0x000000000000000000000000000000b947fd5f8858760abaa6eec1db4877df71", - "0x00000000000000000000000000000000001378ee0f05c2cf3b90ff8ac789d3e5", - "0x000000000000000000000000000000ddcd61f0723018bdd4b44ead37a6c763bc", - "0x000000000000000000000000000000000022d1ef563be2af569163e5b7c89529", - "0x000000000000000000000000000000f789dc1de6e5bc852bcf4b7024501ebfc7", - "0x00000000000000000000000000000000001fcae32a5a0e3f31284b94b998eb32", - "0x0000000000000000000000000000001d680b27b411438b9d682a255b7a565c1d", - "0x0000000000000000000000000000000000008a7157314cbdcd0f7eac82c67b61", - "0x0000000000000000000000000000007a19338030c9f7a1b3db961e52f518d061", - "0x00000000000000000000000000000000000d4308734c110c89a75f5e0938ad8f", - "0x00000000000000000000000000000073edae47f4c3a27dc86c4fa03323e0dc96", - "0x00000000000000000000000000000000001f1cd06860f5665135a2ce7f1729df", - "0x000000000000000000000000000000bdcf58226ff3e6549529df1d1a9d696369", - "0x00000000000000000000000000000000000bb20a605bc5c417ded90abc3283a6", - "0x000000000000000000000000000000236e6ffbeb012d64a3e51190310b7bdf94", - "0x0000000000000000000000000000000000180dfd6f8bc458c630c3042c74a12f", - "0x000000000000000000000000000000d215ced9fab1477eee5d861c0fedf82e8f", - "0x00000000000000000000000000000000001b5aef42c385c52a3e19fc96d3c069", - "0x00000000000000000000000000000041a87e897fd5db13a21400e1f305748dac", - "0x000000000000000000000000000000000028661e94b53462f7aa33a7edaafb03", - "0x000000000000000000000000000000db0b01933ffaa5cbaa0c4b00a97c88bab0", - "0x00000000000000000000000000000000000cb49875192963da14b2e90874802c", - "0x0000000000000000000000000000007f4a3c352be3b4dc12ee7aa892d271c8e2", - "0x000000000000000000000000000000000018859077eebb1a622d55af50ecb62c", - "0x00000000000000000000000000000016395c017b6bdcbc01a4b66ba36b2e3676", - "0x000000000000000000000000000000000020e02a68038d79b2df595743a1d517", - "0x0000000000000000000000000000005216c2f6b2cd003a57f0971e67a6a4bfd1", - "0x00000000000000000000000000000000002b9bddfd05979d093880198bb1021f", - "0x000000000000000000000000000000bc30d06668a9c57d2d4fefabbfa2b743d1", - "0x00000000000000000000000000000000000249209ff2e5a2868359b760e39a69", - "0x000000000000000000000000000000fda5b1d02f438a2366a268ded092c3fdf9", - "0x00000000000000000000000000000000001bdd80759cc81ee9e4f54c6e4fb947", - "0x00000000000000000000000000000085c551241de41500c5ab4b4f53c1bff1b9", - "0x00000000000000000000000000000000001373f130bddc56203a563ea82d680c", - "0x0000000000000000000000000000002851a00032a55807e186581b9b1c0f8ee3", - "0x00000000000000000000000000000000000e3c26b4680e961e43b09e01fd4c53", - "0x00000000000000000000000000000024d349d3935bd6244a7445d94a0514d663", - "0x00000000000000000000000000000000000531f17ce276d0394382cabf112d1c", - "0x0000000000000000000000000000006b6278d87e24137bcdb746d699992e6fe3", - "0x0000000000000000000000000000000000099cb1ebe224fa90e84cb905336537", - "0x00000000000000000000000000000019fff9608cade5e9a7373068a04ff86a15", - "0x000000000000000000000000000000000028da1b919b4e0540053ee2900ec512", + "0x000000000000000000000000000000f0b37e9e5df76e62eb9469b90c6e4bc0b7", + "0x000000000000000000000000000000000026643eea736aa2427aaecf8a8cdc8a", + "0x0000000000000000000000000000004d95e8ad7b8cdc1afa3526573452a14bd9", + "0x0000000000000000000000000000000000126bda933b57e5ba7e1b42d7c1f70f", + "0x0000000000000000000000000000007cd5093806dff0faea13ce79edc8f737ed", + "0x000000000000000000000000000000000013664a45a760dfc0a7448092747401", + "0x00000000000000000000000000000057dbbaa73aa0a16e6af027e1ed5256d90d", + "0x00000000000000000000000000000000001938f3daff94392bda03e4b122a9c0", + "0x000000000000000000000000000000de6da06111605ebf7c53e228cfdc4ab3f5", + "0x0000000000000000000000000000000000114805ae329a379ecf3a6c795d094e", + "0x000000000000000000000000000000f8e442d4c304b6f27e1d1f006c01dacf94", + "0x000000000000000000000000000000000017e9d8ffa0ae45ab8e44975cc145ff", + "0x0000000000000000000000000000006d24fc1ca89aaf6b1be200c50a8fc37c77", + "0x000000000000000000000000000000000003f9315ebe09d275561f2972c2108c", + "0x000000000000000000000000000000533abe16a35f1e9c886c7041a3ff15389e", + "0x0000000000000000000000000000000000247d6343749a26419dcc083472fcd3", + "0x00000000000000000000000000000039b973def469757f5165d5e1a7e6eb5ec9", + "0x00000000000000000000000000000000002ff61f3b9028335190f9f604751f03", + "0x00000000000000000000000000000019e7b7c1324d6919acc32680f54acff5d4", + "0x0000000000000000000000000000000000222a537495db8299822d419ff2f718", + "0x00000000000000000000000000000070f621b620d0bd187bc4fcba25ab95d1cf", + "0x0000000000000000000000000000000000119aab86254554ef238106df72a42a", + "0x000000000000000000000000000000dda6a04fe5258ccc40645c54a5c7967e2f", + "0x00000000000000000000000000000000002ed1283de5917d4c92bc03040e7093", + "0x000000000000000000000000000000cc370b48224682881251952ed5edbdc094", + "0x00000000000000000000000000000000000b9b8febbe02d6a48df2cd3f18b9ce", + "0x000000000000000000000000000000d0646c0b18d3265eb27cd5542da553d879", + "0x000000000000000000000000000000000014c6a7a02ec38f4ee6ce45a70d9f26", + "0x0000000000000000000000000000003e9d9aeb9ee52b9e9be4ad303bc22435cf", + "0x000000000000000000000000000000000027bddbac658fcf0880d0a9a1d4c53a", + "0x0000000000000000000000000000003cae5490c7fd87f8065508dc0628adb7b7", + "0x00000000000000000000000000000000002f77b974dfae1d921187cedfeeef50", + "0x000000000000000000000000000000697ec1cd59c7afe58f5fa131bd007da5e2", + "0x0000000000000000000000000000000000148c6d01f350da2890559b0219f2c0", + "0x00000000000000000000000000000010acb90112ad892796b108602782640e7e", + "0x00000000000000000000000000000000001f94386fbbb37abd8130d09fd1e93e", + "0x00000000000000000000000000000021ca68c5be6fc3c822ad31277813eb3a2e", + "0x000000000000000000000000000000000006f224595426d2d8ece3d29d781ae5", + "0x000000000000000000000000000000146c656363e3e54866f9918961ec09f1f6", + "0x00000000000000000000000000000000001b473c202f63a7b42d9636b9fe533c", + "0x000000000000000000000000000000a3e8155622f590ef2697bcde811823db04", + "0x00000000000000000000000000000000000da0d2540632e7591f2c7544823e81", + "0x000000000000000000000000000000f4c66c4636580f9b200aa34e348bf42d79", + "0x00000000000000000000000000000000001d0b3e578fdea3917a2dfb5ad99427", + "0x000000000000000000000000000000104e58edf0c59d158463a6cd4b42443614", + "0x00000000000000000000000000000000000246a978d84b57cc347519adb1c6d5", + "0x0000000000000000000000000000007248c15d65b185fb0e2f9923caa67e8e33", + "0x00000000000000000000000000000000000ed6eea32fa2e8ab86cf5719eb29ab", + "0x000000000000000000000000000000974f7a626fd9e24f2fad8d3aea489002a1", + "0x00000000000000000000000000000000002c9389f277ddcdd3589487e9521bcc", + "0x0000000000000000000000000000009ff18ac14770452db31032bd995595366f", + "0x00000000000000000000000000000000001f79cbab90757a1eb79887ce1c5e99", + "0x000000000000000000000000000000bc612b629cb4e4652c5266bd50043b4977", + "0x000000000000000000000000000000000017a825d9c664e6a9f74f72144cbd55", + "0x0000000000000000000000000000009dd851373bfd3e4f35094510914b379a0b", + "0x00000000000000000000000000000000000e6beae01bb00e5d379530ab4ef5ff", + "0x000000000000000000000000000000e1c33d6ebc144c08ee02610917f20b3069", + "0x00000000000000000000000000000000000d76f52fdbfd4708f7329a9e6d0fe8", + "0x0000000000000000000000000000006788f0e3fcd96afa3c047d9d4d017b555d", + "0x0000000000000000000000000000000000119339342012d2dba44b4a958459dd", + "0x0000000000000000000000000000008153a5080734adcd5e6e105d6828393dd5", + "0x0000000000000000000000000000000000270f5c4da3b4652f61dd7551d9d445", + "0x000000000000000000000000000000cdab7f28f412c0b68186d6a7c44376cff0", + "0x00000000000000000000000000000000001a50865a4867aef98c081eb22605f9", + "0x000000000000000000000000000000224aa96ed03655edb4ffa513202c2333f2", + "0x000000000000000000000000000000000010c37a3c85e008273dcb106d3ccad7", + "0x000000000000000000000000000000bb8c2556164dc200ac98822d1b759136cc", + "0x000000000000000000000000000000000029c5dcce7db4f32bad229128428061", + "0x0000000000000000000000000000006f67460159b30e0d0be4422ce6f455660b", + "0x00000000000000000000000000000000001b3efa709ff66a41006751a6a8954e", + "0x000000000000000000000000000000b23934412a1be1d2b2dd65faedf5a63485", + "0x00000000000000000000000000000000002d9eb50f51f8d476ba66a4f67ed44f", + "0x000000000000000000000000000000c74146c1322ac277ffea4041893b12d798", + "0x00000000000000000000000000000000002f59f80ea60da26752b4ae4d50962c", + "0x0000000000000000000000000000000fbd1e57e933a79a1fe3c8ad2aa3bca1d7", + "0x00000000000000000000000000000000002ddd75cc9d81f1874b5a62e9c917f5", + "0x0000000000000000000000000000002677faa3bd2f7d14dbfa9a7089c5321369", + "0x00000000000000000000000000000000001b05ae1af86a67ec196e8a7c633c93", + "0x0000000000000000000000000000008a75a59a7e7c2396ac27ffd1a6f0b7bb87", + "0x0000000000000000000000000000000000215d7bab219bbdbbcfd85d9d143497", + "0x000000000000000000000000000000a0b049accf71f0922db3fb9f107e4bdee7", + "0x0000000000000000000000000000000000005893f9fab88d8609b6647b647b34", + "0x000000000000000000000000000000093b02c9c55f604ca357325806e8764195", + "0x000000000000000000000000000000000022d52af719bc5f09cd1594968f49bd", + "0x0000000000000000000000000000005e56b62243533a98687e0abc1f716094dd", + "0x0000000000000000000000000000000000014649c15b83be4a6dfaee9fcc9a8f", + "0x000000000000000000000000000000d3ae2c40abc3c4cc4fc28f79d5ebe1fde0", + "0x00000000000000000000000000000000002f2134f4febf2d0a4b58dd0a5a8b10", "0x000000000000000000000000000000f4a6c6ffdf80a72db78762e237d58cd5f6", "0x000000000000000000000000000000000026814a59803555635a3b6dfd056d19", "0x000000000000000000000000000000f45b8d96069231f48e0d0c34d57593a6a6", @@ -2207,9 +2307,9 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000004d3023af24c3e44ce85cf3cc342e769ccb", - "0x0000000000000000000000000000000000240c758e2198740d86d04d8c549e2d", - "0x0000000000000000000000000000008594fde0103e2a267b8bd33d78387a5ce7", - "0x00000000000000000000000000000000002933a8a1f202c0b54945abac713645" + "0x0000000000000000000000000000002e124a22456d7157a2a277879c9d783090", + "0x00000000000000000000000000000000001102e847b55ee32be93060b233546e", + "0x000000000000000000000000000000fbc5cb4c513a6849f7b399a61aed283b4e", + "0x00000000000000000000000000000000000a6b5f546c49ec5e93ed6634ccb104" ] - hash = "0x2433a1c7e91c3fb04f1e430a666c0d72b25b400f5d917893bbc7606816f4fc19" + hash = "0x0c7a54c58332565673dee37ff88d07b9e0c8a47029bc3aa26d5b3bf5fe9ed3c4" diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-root-single-block/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-root-single-block/Prover.toml index b8abe30559d7..7ce39bfcd0d9 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-root-single-block/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-checkpoint-root-single-block/Prover.toml @@ -534,69 +534,69 @@ proof = [ ] [inputs.previous_rollup.public_inputs] - timestamp = "0x0000000000000000000000000000000000000000000000000000000069419d26" - block_headers_hash = "0x29ced1ffffe86cfb712b76d4a1599de0c20186c6ef21dc54decb38508e52a56d" + timestamp = "0x0000000000000000000000000000000000000000000000000000000069581915" + block_headers_hash = "0x1d97e19f96527a0284bdec5d6a64a5937361c8e44a242125731f25e761707575" in_hash = "0x00de7b349d2306334734e4f58b1302a6ed5a6c796a706f6597a5641b6d468223" out_hash = "0x0000000000000000000000000000000000000000000000000000000000000000" - accumulated_fees = "0x0000000000000000000000000000000000000000000000000000000e8447f080" - accumulated_mana_used = "0x0000000000000000000000000000000000000000000000000000000000015c30" + accumulated_fees = "0x000000000000000000000000000000000000000000000000000000cbe0facb6e" + accumulated_mana_used = "0x0000000000000000000000000000000000000000000000000000000000026ceb" [inputs.previous_rollup.public_inputs.constants] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - vk_tree_root = "0x1a4b6efe54b7954bbca355f34a44cf50219847a84f1e3ad159046c9eb0f899eb" - protocol_contracts_hash = "0x0534a1f6f294b5e285b77984b6dbfb8ac151b3afaf51a3d28f1108e3d4afcc76" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + vk_tree_root = "0x1d09edaa1408f8fb8d509de57a697770231e4b20acb508b5945ff64fb1e206aa" + protocol_contracts_hash = "0x168f09154ab73f2bd206a4991e6e975aea5ebb0f86157404b942c33b91312cfa" prover_id = "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000042" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000022" [inputs.previous_rollup.public_inputs.constants.coinbase] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [inputs.previous_rollup.public_inputs.constants.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.previous_rollup.public_inputs.constants.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000000aac58" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000540eca" [inputs.previous_rollup.public_inputs.previous_archive] - root = "0x05f72291fc97f9243a5261d74122ef83137fb2a3e6c78c9b3678500177017db0" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000a" + root = "0x09e98cc6c97114639cce5a13293de3427d400511e7d9ea2bf688d190eb74965e" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000008" [inputs.previous_rollup.public_inputs.new_archive] - root = "0x053c3534268e82117a5610b7cd76f4987b1e36d22a3de7b7930466d021d78231" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" + root = "0x269715ee30c08bb3173de05b8eadf8bf41d01d847f727214614165ac64ecdd2d" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" [inputs.previous_rollup.public_inputs.start_state.l1_to_l2_message_tree] root = "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000002400" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000001c00" [inputs.previous_rollup.public_inputs.start_state.partial.note_hash_tree] -root = "0x0e85d5ec62d6e47cb67fe83116a4a0fef0c4e916858253863e0087988a7fe5b3" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000240" +root = "0x14909b79963ad0cbfc0f981003c5b03076d4a9ab0923c85c31df80cd82828f4b" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000001c0" [inputs.previous_rollup.public_inputs.start_state.partial.nullifier_tree] -root = "0x2d276c1989cc1709d8675c5eaad4e7e98faa591d1e26ef8ab977191ce6c55fd8" -next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000002c0" +root = "0x18d73a29d13a8749be57acc221c10d781fbcf263361757df4112babe10f2b356" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000240" [inputs.previous_rollup.public_inputs.start_state.partial.public_data_tree] -root = "0x1c97934bf20b6e18255c9f864bad31800acca1409f5f868c24a05f364977f25c" -next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000008b" +root = "0x10a373a8e9227b99f9acdb0de3e2765c154516d787c521bde7255c849c35b6ff" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000008a" [inputs.previous_rollup.public_inputs.end_state.l1_to_l2_message_tree] root = "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000002800" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000002000" [inputs.previous_rollup.public_inputs.end_state.partial.note_hash_tree] -root = "0x202fb9572f911d6701ab3890283df5d1b58b3f0f1eb2eb1b55faa4a567ac4a6f" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000300" +root = "0x1c7b09b86fb93b378e86f8c00f3251407b1984dfd96aef78a068c90e97c240fe" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000240" [inputs.previous_rollup.public_inputs.end_state.partial.nullifier_tree] -root = "0x14cc89ee7086ab87ff72f47f0824890b7d39bed23c8acc06a791941c46faed91" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000380" +root = "0x282e6df1c192864c0eb348d5b8ff9db2d3570428bcd06b58ba2e44049612a6a5" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000002c0" [inputs.previous_rollup.public_inputs.end_state.partial.public_data_tree] -root = "0x1ccf01418813c281b6d6cb505f8d8dd8c25b78762906a55ffa5ddccea4e97d7b" +root = "0x11a2946cfe59163a200216c738b8dcd435e03b7594ca0df74d56fc8d8a2e79de" next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000008b" [inputs.previous_rollup.public_inputs.start_sponge_blob] @@ -618,33 +618,33 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 squeeze_mode = false [inputs.previous_rollup.public_inputs.end_sponge_blob] - num_absorbed_fields = "0x000000000000000000000000000000000000000000000000000000000000005c" + num_absorbed_fields = "0x0000000000000000000000000000000000000000000000000000000000000054" [inputs.previous_rollup.public_inputs.end_sponge_blob.sponge] cache = [ - "0x1ccf01418813c281b6d6cb505f8d8dd8c25b78762906a55ffa5ddccea4e97d7b", - "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x14cc89ee7086ab87ff72f47f0824890b7d39bed23c8acc06a791941c46faed91" + "0x282e6df1c192864c0eb348d5b8ff9db2d3570428bcd06b58ba2e44049612a6a5", + "0x11a2946cfe59163a200216c738b8dcd435e03b7594ca0df74d56fc8d8a2e79de", + "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5" ] state = [ - "0x1d0702af0d53f9509c2d8fff4a851bf2b1be5466fa68358cf862c2e9bd498504", - "0x26696205961d67b24e496f9aca3e2211b9422dc62d67fa9818e5291b2d53e614", - "0x113e14bdb5b5b3d5b036cc343a2a07110e9329411d0f57d6260ed6decca5ebd3", - "0x291ee8bba3f90ffee7a3a10be1ac0f864bcbdc24ef0878579c2bef6033e02f46" + "0x2b922d17f5e52e96dd15a5efc6e7cf4b280db7429e1922d4cbfcad0f279a79fb", + "0x1e16a81e4da05596e7ba8948cffbd3ddced152649841d019211def8930c8ea5b", + "0x120edf0cb3735c409b8d87d01cbcc099ff315e6bc7f54bcedae1e675dae28add", + "0x20095453383d3d843daf70d57bb51dbf36b0746fbcb5c2f2a82e23e1e7e910fe" ] - cache_size = "0x0000000000000000000000000000000000000000000000000000000000000002" + cache_size = "0x0000000000000000000000000000000000000000000000000000000000000003" squeeze_mode = false [inputs.previous_rollup.vk_data] leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000a" sibling_path = [ "0x17cf0a243f031f6ac5b99004821dedaed8be26ebb264fa25f0d4bc2e1e0b1b03", - "0x14a1f67959f56e20492704f11d294608bf99da7d04e565c6f015c64887c005bc", + "0x0d1541ab290ebaafecaad3c149f14bba578cd22149b946a119ef8a5d273a59d5", "0x29bd4e1bf0f93c64c677e7a1f82450a0710a9fc71da5731d255ae525a61f3960", - "0x171530d71ead8762e0f35de49ca23f91b5a38436f0ea23b4a36f60b6fdd4a252", - "0x1818329cd6e0775c348fdb6cd0af2afc2f5eb9f6ce14465bfc2045819f042c3c", - "0x1e0bb05cf0a7812744d88250e872d29da49f3bd4284a036de39b4bab0bbec197", - "0x10f3c69caaea623bfae6beea1030333a045ef9e119a60afcf1b07abe6b6dabb0" + "0x1ee94963ac084413a39372eb818b23f7d285aafb4ad9353e67cf44c2d06b31f5", + "0x16a280db65b21da91235a6f3d01c5f41d3e808e53e91f44d84a74c2ac5278700", + "0x2e57df8d5011ee5b90dce76a79fa869133ddd3244983885d73e012ea5ec9a2c5", + "0x0ee8b26e949aa6c26896821c0651c765193f0425f01d748573ddadf7b56a417a" ] [inputs.previous_rollup.vk_data.vk] @@ -769,10 +769,10 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 [inputs.hints] previous_archive_sibling_path = [ - "0x132b47d3c2f2559781be57a675f0d45239f6bc531a7d2b4d01a816ddca63f436", - "0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1", - "0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290", - "0x0d97bbdc21af16e427bf1753ed496386e0b627b1ac6818628a455d06665e9e1e", + "0x1c85081d05a5b0d148e7296ecaca3c8979266561bd10bf1a5586e373ddd19632", + "0x08b05f23517940bc4d3e10589b4f9606cef1a1f0329936b8876859bacf3bd221", + "0x23ffb8ee82738e8f6edb8e91dc7b051b76c86404f7c0742ad083512fb3bfffee", + "0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20", "0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e", "0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf", "0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76", @@ -801,99 +801,99 @@ previous_archive_sibling_path = [ "0x2a529be462b81ca30265b558763b1498289c9d88277ab14f0838cb1fce4b472c" ] blobs_fields = [ + "0x0074785f7374617274000000010000000300000000000000000000000000000a", + "0x242cae53abcf4e477c9144be52578125d779f18cae6d2bb63427ceecba53189c", + "0x000000000000000000000000000000000000000000000000000000cb38dd376e", + "0x0110b7865594348df7342af98342b0529275fbfb23f2d416bf5270cb527a1879", + "0x0ad97daebaaff712e637534c054bf4ca6f9b837cc61e4cfedc8012a9c37dbb20", + "0x0000000000000000000000000000000000000000000000000000000000002328", + "0x15ff45f057d6e2571af5ff9a3236bdc512b046030ee5900a7574ca9e1e68d80f", + "0x00000000000000000000000000000000000000000000000000000000000003e8", + "0x19669f043149225696e76cdf9e03d57d4970ba3543d58e69f2d5390bed69ab1f", + "0x00000000000000000000000000000000000000000000021e19e0abc36bbdf4e4", "0x0074785f73746172740002000300000001000300360000000000000000000043", - "0x00f48772cf8ab89691793d140dd9c991df10ea27fe2ac390639cfa7c02fc81a0", - "0x000000000000000000000000000000000000000000000000000000001558b000", - "0x25a7386088225e8f14616ea71aea418d385a04c261d059c5a9b8b42affd39a76", - "0x2c113ec14453027997b070952c1392d0b6d7f667eaba23cd8f6aa7a0099f995d", - "0x0291ec956d9127c3de833f4cbdf522dca0bbb3617014b940f3f0aedd561ea514", - "0x0beb67909429d0c978fe36fd8cbd3a381361ae0a602b8cdc9c2798b8bf200c24", - "0x06f05b3c39ac5b5c39990eda5bcb52f06e498711e13687a4ed5c7c1084c5b154", - "0x263b38e215884d44e859ca4442d5dbd4fe5f5205d0bd2ea8ae17012bd470eae3", - "0x00000000000000000000000000000000000000000000021e19e0c490dd496a54", + "0x2d2bb05210ad5456c45d576ad509dfd6521e3d0e1e37a7419195c2a8c8722451", + "0x00000000000000000000000000000000000000000000000000000000a81d9400", + "0x2d7d91fe9f42302807c54d608b79446da5d88b5d5342b208b556b8d376e58f37", + "0x2f6f0e85b2e407dee41eefb02299724efdf659f5f8fa8fe4b8dd0c04d82367c2", + "0x23dbe46b2f6d084a16ae415f78cc141e4c853b46aecdcb86784db1397096456e", + "0x1e90ff95d913f826c1c4457b42097ae35fc382b4317468fd2b220a3bc230d910", + "0x14dd672c66b5604bef22fd29c390a1b83004cdba07c2969593e984e6200b0908", + "0x19669f043149225696e76cdf9e03d57d4970ba3543d58e69f2d5390bed69ab1f", + "0x00000000000000000000000000000000000000000000021e19e0abc2c3a060e4", "0x0000000000000000000000000000000000000000000000000000000000000012", - "0x104f9cf45b666a8afd1f20708d58fdd6d17c2f9b42b320da2693730e0eda1582", - "0x2376612166bf1156700e1942bb78835dd7452fec92740c25c1800c528962bc2a", - "0x000026e0fd0d3690421d06074415190d79fda515f285f6359b1b647a3a400a7a", - "0x00e3c7e6c441ce139be7e39e3d38b0eec11498516d7fc2dacbfb0f8cce2474dc", - "0x000fc2836580decd0621d40fa3647b79cd9063ce5fb2e43771a193077a22a370", - "0x0062cfc6d76755c787edb23d7afaced45065c0135d8c6381d1c0ce4e917306a8", - "0x001b71fd9ad521feab985a8d616fe6c266ab6d849645876e102698305feff05f", - "0x00238eae2ad73413b843f185831c0ba4b769e3c003049cac4ce1c0a7803b9091", - "0x0053072c9a10b6902ff794353cd81388a643b7db603b4a44e2f189c1aea81109", - "0x0059f15951174dd49fb57070e1724a586229fc0fb177d277f04c36894149ce98", - "0x001d3ee77ed11d5555ed0f0c1caad5580e8374d70cae7e0a620f360fb2aa00fc", - "0x00bf60abc5d90894103a367e0419cd586307682cef6d9654dbe18a9c581f1583", - "0x003814ef82640bf8da0c730650154523df29f0994a4e805e0bc43e83714f7077", - "0x002844f878ab28a9d93fd1a8e2edddf21863565f3f3cc6bb16081c22134a4c40", - "0x0029b1442cd42973c9a9da1bcd35d64ebb6d8b181917be6b9ddf5ac6b7669674", - "0x0068682e16f78146f9854cafe9fb9b5c113f3d878ad213c1c8769c482c58bcc2", - "0x001ee05852c9f5a9d77ee2d6a481f3f6ad4385b0adf65c62f9d7058250600b36", - "0x00ed4435d8a04fb45217c1a0b36f827a26bbad4302a0516024a11f22ea7ce99d", + "0x1fca537762a43f1aed60d6ac3a4e6670d051ea921a9e97a0f03b69d7f8cc8fca", + "0x01865aacf4804ce1fa38ad2eecc5b76468efcf492c61589d2f10df5cd7d04191", + "0x00003d50057ffdc0ffd57cfe82d3eba134b8f68f43f2c41be4a8375441055f05", + "0x00fd9237c94e7ab2edcbc682590e1de5916ab353c991c5cca42016e471bbc87c", + "0x00fa44a8900858975b2c80ff6575e411975a86004784e25c1bd49ce6299fe948", + "0x00c9c6f1fd67ebf67f2c10ea3d212f1f495f85e35bdc472a8c9c68c087c10dec", + "0x002ee853ffe55704f2a4ea4b4067845aaac677073ed18957cd0da34a525a4d24", + "0x001ac3daff126657db86234e5a53f79138a9f36b24e5a05c9617d6cfa8737476", + "0x0080c4af2bfbb726b310bb7ac0200fca3c1eff03d4c278ae47d8f041ba50b0d4", + "0x002c9573d7703b57c004e39d603199c3715badbfd4547ac98529579c8fd0e61c", + "0x007fb2293bd002bd5d2d7ea66221f3d5c4f3168521bfccba0e75baebfecdf34f", + "0x005dec813a6e69f8c18c01d8522f563508041485cf1b080c375ce7acb4290f68", + "0x00f8a7b6b10d25991f790ada047fe072c0bdaf0563545a05603e371c589892cb", + "0x00bc681a57653925e2e593085e2f4f19fd7a6aed0bbd4c6ff492415aa012d01b", + "0x009164ad1fe0a2a4be65fa9e079f6f558e30cdc3847ad63a5c6ccce766db6ddb", + "0x00052a44dacdc0b9c22ab9c335339fc65ca730f951d3bb049e070f31a800560a", + "0x004dec08adfab3804da145db79ecc8451014af56259b42f2e10e1f30e60314da", + "0x00b74533262fbf606d282213588bead96e085830b28d5eb298245c630979bfbb", "0x0000000000000000000000000000000000000000000000000000000000000012", - "0x28964d16abcc917c3c0035a9d282be4c0db27874fd0bb656bd63eb64d73dc70a", - "0x158d4a5c946afd9dbeb4419636525cd0aa136e5965d7475a959f06ad0ec31001", - "0x0001d4f1ae582e26224eec58999fe48c46fc0bf289b17d57ac21f1cd619dbcce", - "0x00100ee695898e615e29127270a02545818146a3bec4a1890f21271ba5c3734a", - "0x002bd3be04a157b16b019c9c62d4cc4d4ba58c5df1103b25cfb3c6acd5eff723", - "0x00adeb86e54b143d2c5c6cc4e7ad5907ca90f88d0ee60fba3dac093f5dc66776", - "0x00e5e3bc37999f09a4c4d5dd883d6168538cb2efe49fcb1921b9cbabade18ef1", - "0x0026158653cead4ea00c56be09e9d7d9666381f322082d3ab7106a67856d9f06", - "0x008829a6a8f9235ad7c21a24e131cf632c844bad43cd2443d64c31d1430676f4", - "0x00e9e09d10798ff2a7c729f84e8c8e972aec2d18dcfaf484bf2da8de0fc0d596", - "0x0007f2af3c2155744b97f97c16b97593f5e5d71ccf3532ecfef7af1e305bbd61", - "0x008303a98e128ae6be840e1da38d0b537394d01e9c77415f691f7c695795afde", - "0x0039ed64b20386bfc43c0515de11469cfbafe73e628929bd33d8b80bf3b04246", - "0x004104c28635a38637d6d87ce4665a811021fedbf8ee499c25e0e39fd566f955", - "0x00cad70da30e656fced9d14ca4ae599e7fd308ed88b46f024acd8351c17e1d67", - "0x007025e1c440520979dc64214b3607c2c6c79a3602be3eb6a2c8f8ddfc96f4ad", - "0x00c310fe2a07050c6175860d39736bed7b4e6b42d496c713f57d35aa051bc6f4", - "0x0022401dcbbbd8eb9a9a3a0413a1e4b9d92df41c7d34fd43b7618605137f6143", + "0x10ec7967b5246dcf7e8c320af955e09a804499d1855ebde7e30119c0ccc7488c", + "0x16a0528da25d39204a1f14cec80b3326da5b89218af5fb894c7bb4308b1c9cdb", + "0x00001d0cfacebef382052224adf6f0c206a9d5097e587d962c4bdefb7421d888", + "0x00a4c60fd5277839b08e33d48b2fa138883577dd47c40ed8b609e5914802afc3", + "0x00dd4d291b7d07c4822ed63031222fd385a1bdc40c0e64ad8def0a958b10d2dd", + "0x00aae5ebdfaeafcdeab7ee64bb128bda3214584a0b59e4c8cf29102502f96c7b", + "0x00bbdac436a927a5b7c49dee396596af2de776b513cdd729a5b40c4786174519", + "0x00d65af2ba5674f67c049d9210b9196bb74315f14523931ab4211a1e2118b549", + "0x008c3354548bb571add75da5828aa779e5f2d6bdfd00186b70932df0032db7b4", + "0x0099cfc93c57ca52f413c10f56656192f3cafa70b8049ac42fdba58747968383", + "0x005d835ce8469b12b70c1cd1409f817205c2b4ca9eba48a9333a61f87bdd182f", + "0x00528876d8eafd3ca7b6fda75e47b52c1d02db5146158540b3f0118586299549", + "0x00477cc8dd28ab65433e120865fabdc6af9ed1a42c5202d6edb349560ccc70b6", + "0x007476f1bd836434bb6780cfd90400f2f1356dfcfacec31631f279818ff0d6d0", + "0x0005b6bf03d73befcad55d05d15a49831f46d3bfd099d83051271792a3d95a25", + "0x00baa7859c951fc3d7ba32661c73a030c54181eeab1a35106af6fb82e54084ce", + "0x005cb99d4b3d93761f114392ca73be52dc20b13df6d2ea549a8bf09d1e7c643f", + "0x00531c63319952d9ab0e9ef59a3c34080259dfd467267a062ccd18a5aee51648", "0x0000000000000000000000000000000000000000000000000000000000000012", - "0x07d2133949fc92aad39fdb6e3f35bc79c9467bb3a336693bd929e06928f865d3", - "0x0f7a904caec3c5fc3c44fe7d2a57fe2e8faed8a086f1da01a2f4227032d115e5", - "0x0000fbde545a4c0eeb57c590af880a39c5ca75be1c39eb34d46d15bec34b868e", - "0x0033e2124ea1c70175d0dfec7ccb7c3f558b392b6404cee0350c9d2f29dd6661", - "0x00e19253ad2f23eadf6ac25eb9c9e18f36a237306a86582571ce1a9cbdab0391", - "0x0025384d797fcdd33efc3cb0a72af11dbd65145c05bd3c547be0a2eb701bebea", - "0x0099b23567079e1d8e80ee645ba8e4955722c63b6fc16462e400e6885b872241", - "0x000b628772fdc7cb772b6b3a9b254eca0a89c53ed39ed0fb944ca715e6ba8f62", - "0x00b1d6564b32e09be8100e6a5f9b6df0af90fc861ccedca2473a838a3272b9ba", - "0x00decccda42b63fcdcd903a3e6d2e5e3e919ac542beb0c17f2466edda734a208", - "0x00bb58aabe1b2174cc62808bdacd793bb1beb73b3a9f8739e73c01b53df06521", - "0x00c1abc5b73613a4f4d19bdf9ebfcdd1da18ba056c9058fa193abef1a1ad8635", - "0x006c5e977b19d6da367495e93c33f1e2f3e174c862ac4dbfa81d549b6aaf5d63", - "0x00951a9ac278d105a66fe3e55964812feb25d6d74f4b4c55ed807b06af9021d5", - "0x009513327155c1843f5e6fd8b1726712c7d2ae38ec2af1e2b6635baf53e62dab", - "0x00e73dbae6ad13bac0ef6b75f5ac9a00dce361bfa1f8ba543155f1596b3d221a", - "0x003134881a66b71629b4b0718fe50922ba325af357b621a5fb81360ba010c325", - "0x004a8f44d6b4fa611f2a68561eaaf17e02d4780ddb31bdd91b294163d0643924", - "0x0074785f7374617274000000010000000300000000000000000000000000000a", - "0x057a0facc5aa530263fc76f22dddd2153a59c60b41a5c6d842999a89e6a3cf45", - "0x0000000000000000000000000000000000000000000000000000000a0c9ee718", - "0x02dcba079b9df4df1d12b83e47065bf30660610338b52b397e18c94bc93c689c", - "0x0dfad2f25867781d558555f2050e1979f35066c4b54c8712d8a0f075842973bc", - "0x0000000000000000000000000000000000000000000000000000000000001fa4", - "0x29d600e6c509a9f2b0bc6e0ecbb7db0208069c76bc7e47729e1916e091eb5dcd", - "0x000000000000000000000000000000000000000000000000000000000000076c", - "0x263b38e215884d44e859ca4442d5dbd4fe5f5205d0bd2ea8ae17012bd470eae3", - "0x00000000000000000000000000000000000000000000021e19e0c486d0aa833c", - "0x0074785f73746172740000000100000002000000000000000000000000000008", - "0x2612453195e5b1bcd4cad7db6cc91f8bae048a9da95e3868781f020ec084bfe2", - "0x0000000000000000000000000000000000000000000000000000000462505968", - "0x04503d9a6da59b424e4b441cbda40e9f872c7470c73a850491e41ba0b6dd2314", - "0x1cea74144c2989477ce88cc9c4f35ee01f0eba20e588c89e25bcc4737abbbfbb", - "0x13f29ddd1b97d5441d6836e78eeac9c34bd01913215fd4974d0d3ccb3ff0278d", - "0x263b38e215884d44e859ca4442d5dbd4fe5f5205d0bd2ea8ae17012bd470eae3", - "0x00000000000000000000000000000000000000000000021e19e0c4826e5a29d4", - "0x000000000000000000626c6f636b5f656e640000000069419d260000000a0003", - "0x00000000000000000280000000000c000000000380000000008b000000015c30", - "0x05f72291fc97f9243a5261d74122ef83137fb2a3e6c78c9b3678500177017db0", - "0x202fb9572f911d6701ab3890283df5d1b58b3f0f1eb2eb1b55faa4a567ac4a6f", - "0x14cc89ee7086ab87ff72f47f0824890b7d39bed23c8acc06a791941c46faed91", - "0x1ccf01418813c281b6d6cb505f8d8dd8c25b78762906a55ffa5ddccea4e97d7b", + "0x1b2d3eb757a20cb1b6b3dd9d4edeead783f949e38cfda8b5666c5c9c87c6c1d9", + "0x0d92f7a4da58d4ab34985d28f92fabd49f9346f81486d577d056aa11361f1f25", + "0x00017137e0e184cc486e218343ddd55681880375599d6d9bc6c955bedcf562db", + "0x006fdb0d2f09c39786a6237bbbdf423dc0fbf2ff1a1a43e268ae6d165b557256", + "0x0043e329a40fdf0960cac576026e34aeae59cad1ad4a69fa94917e991a226e96", + "0x00529117d6d71ca611f0689ffa9afda7b870295504ce21773367091eeed9fb7d", + "0x000a0f16249385755e6238add1fd242b7509e073e7404ea4cab5b738e35fb58f", + "0x00906af789fa7d4f24fd1fe66252bcecd875782734efdc2388ed935ada63214c", + "0x00c9eadd156afeed58236290549f49c1547e4081f3652934a7fda5d7495f629f", + "0x00d3bbd4d748fe43546c02a7f59fcf66c136003ebb739a93256ec8b196af5c97", + "0x000b59cfdf12380855582c88511bf45332bd7b64e4d41aadec05bf001a8e6eb5", + "0x002bdf81e1fea728bcc84f037df6de0b0ad92d85c7ed50982da6e526adfd09f1", + "0x00b2d17eefd28beab7982530a61457a82d27b49d738b37a1361cedd5978ef913", + "0x00f3c37ff344af6eb60267d41605a962fbe16fc0aa1889334921d5e1051d5235", + "0x003085b4c0edeb51410c00f0036f84f6cd17f9ea3ed79828ab28611cfca2bd20", + "0x00db10685b5f2fe27a40b4146e393a02107c0fe69a2636f0bed11343815355b2", + "0x007c44ed927f871ed9dd7449c6db2df8a5229de361f3dc63bd5e639ee8191202", + "0x00b99c2f456feea091be69c6eb13b3862c776c5c827e56216c7f8edd38e080a9", + "0x000000000000000000626c6f636b5f656e640000000069581915000000080002", + "0x0000000000000000020000000000090000000002c0000000008b000000026ceb", + "0x09e98cc6c97114639cce5a13293de3427d400511e7d9ea2bf688d190eb74965e", + "0x1c7b09b86fb93b378e86f8c00f3251407b1984dfd96aef78a068c90e97c240fe", + "0x282e6df1c192864c0eb348d5b8ff9db2d3570428bcd06b58ba2e44049612a6a5", + "0x11a2946cfe59163a200216c738b8dcd435e03b7594ca0df74d56fc8d8a2e79de", "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5", - "0x0000000000000000000000000000636865636b706f696e745f656e640000005d", + "0x0000000000000000000000000000636865636b706f696e745f656e6400000055", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -25378,60 +25378,60 @@ blobs_fields = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000" ] -blobs_hash = "0x005daec1b04de5449efaa50110da8dd66ac55f8821c8d5a540bf5236a2e610f4" +blobs_hash = "0x0005a8612cf933cfaeeaa3a0e8b55437cd76888ba0fc421f03b5afa46a452d91" [inputs.hints.previous_block_header] - sponge_blob_hash = "0x1f668ac427c3a99dc228555fa07f1bf4f41eb15f4736c92c1056c7c33c490c50" - total_fees = "0x000000000000000000000000000000000000000000000000000000001558b000" + sponge_blob_hash = "0x2e4e56d5e534cd3343cfb3f5bfb83edd1a0831a5f60d69b640dfca05099479f9" + total_fees = "0x00000000000000000000000000000000000000000000000000000000a81d9400" total_mana_used = "0x0000000000000000000000000000000000000000000000000000000000000200" [inputs.hints.previous_block_header.last_archive] - root = "0x1320e5d7599e880df5d78585fb88b450e8b4ce2336a90cfbdb6f6dd3eb1eb6b7" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" + root = "0x22289dd3c7f0f72246dfe6507d085d42bce8d07dc09751f3fa9f7bececd17ec9" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" [inputs.hints.previous_block_header.state.l1_to_l2_message_tree] root = "0x0d582c10ff8115413aa5b70564fdd2f3cefe1f33a1e43a47bc495081e91e73e5" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000002400" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000001c00" [inputs.hints.previous_block_header.state.partial.note_hash_tree] -root = "0x0e85d5ec62d6e47cb67fe83116a4a0fef0c4e916858253863e0087988a7fe5b3" -next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000240" +root = "0x14909b79963ad0cbfc0f981003c5b03076d4a9ab0923c85c31df80cd82828f4b" +next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000001c0" [inputs.hints.previous_block_header.state.partial.nullifier_tree] -root = "0x2d276c1989cc1709d8675c5eaad4e7e98faa591d1e26ef8ab977191ce6c55fd8" -next_available_leaf_index = "0x00000000000000000000000000000000000000000000000000000000000002c0" +root = "0x18d73a29d13a8749be57acc221c10d781fbcf263361757df4112babe10f2b356" +next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000240" [inputs.hints.previous_block_header.state.partial.public_data_tree] -root = "0x1c97934bf20b6e18255c9f864bad31800acca1409f5f868c24a05f364977f25c" -next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000008b" +root = "0x10a373a8e9227b99f9acdb0de3e2765c154516d787c521bde7255c849c35b6ff" +next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000008a" [inputs.hints.previous_block_header.global_variables] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - block_number = "0x0000000000000000000000000000000000000000000000000000000000000009" - slot_number = "0x0000000000000000000000000000000000000000000000000000000000000041" - timestamp = "0x0000000000000000000000000000000000000000000000000000000069419d02" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + block_number = "0x0000000000000000000000000000000000000000000000000000000000000007" + slot_number = "0x0000000000000000000000000000000000000000000000000000000000000021" + timestamp = "0x00000000000000000000000000000000000000000000000000000000695818f1" [inputs.hints.previous_block_header.global_variables.coinbase] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [inputs.hints.previous_block_header.global_variables.fee_recipient] inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.hints.previous_block_header.global_variables.gas_fees] fee_per_da_gas = "0x0000000000000000000000000000000000000000000000000000000000000000" - fee_per_l2_gas = "0x00000000000000000000000000000000000000000000000000000000000aac58" + fee_per_l2_gas = "0x0000000000000000000000000000000000000000000000000000000000540eca" [inputs.hints.start_blob_accumulator] - blob_commitments_hash_acc = "0x00b58346425ccb65e6073e03924577b238cc65e9d660e61b29ae26e7017b1750" - z_acc = "0x0ec19df71d6dd9cb1cd58ccfae8c2ecb418855e7430b36795d11ded3d89d0078" - gamma_acc = "0x2f92a8aef71905d31eef220737a2be4d77a0146151dc0ceb51b8f3a5809405f2" + blob_commitments_hash_acc = "0x00d00f4fc2e688320765cedeac098047eebb20fa9572a247a632cedcd72a9f9b" + z_acc = "0x1ddf994f4302e6737fc68be5906a92ad2426cfa7c358a3a7b8ef38eacc1dfb67" + gamma_acc = "0x0a15c7f493706c658fb99d5f2678f4de13f89872db51ebbfcd6b24f90052ad59" [inputs.hints.start_blob_accumulator.y_acc] limbs = [ - "0xee6bd6de581eb988d51f63dbcf8d94", - "0xefdbe9e1de40b4a361545da7d3a72c", - "0x67c2" + "0x858b2e4957229911cbcc3ee38ef267", + "0xdc046c1ce49632cb38d5b54b285dd1", + "0x38ba" ] [inputs.hints.start_blob_accumulator.c_acc] @@ -25439,35 +25439,35 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 [inputs.hints.start_blob_accumulator.c_acc.x] limbs = [ - "0xde11d6495843f889a8b89615071352", - "0xf1d56a664c8a871ff1fd7784379f87", - "0x506f744458db53bf89860b85d60ed2", - "0x01e8c5" + "0xefad2ec0b6238cca22999015e80c7c", + "0xfd57233583b0cd6f4500f4b5733578", + "0x8679bf4fca2d99b62f3774b28086a9", + "0x0314ac" ] [inputs.hints.start_blob_accumulator.c_acc.y] limbs = [ - "0xc746aefaf0b7a48d3f806960b122a9", - "0x5b1068c8550241e6464052d72d2c3b", - "0x74fc7cd39c447a8361b8dd0d9c0091", - "0x03b175" + "0xdb30236e86bb95ad79cb269c8f9336", + "0xc4cca35eb958d02117af3f656a0f8a", + "0x95eb954bb153f1b16e46b6d599b492", + "0x136f94" ] [inputs.hints.start_blob_accumulator.gamma_pow_acc] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.hints.final_blob_challenges] - z = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" + z = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" [inputs.hints.final_blob_challenges.gamma] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [[inputs.hints.blob_commitments]] @@ -25475,18 +25475,18 @@ next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000 [inputs.hints.blob_commitments.x] limbs = [ - "0x2804dbdd825a8c5201852b6c89c55b", - "0xad018b5aca16357908427622b1fd3b", - "0xbbdabc135fc0c70cb1e188eedb0fca", - "0x0cf08d" + "0x88c657ff6082795d3f203695450c51", + "0xaaec4338fd4b251c6d8f19fa217ef8", + "0xb525b4c369d30a11d294e9ff4274dd", + "0x00ede5" ] [inputs.hints.blob_commitments.y] limbs = [ - "0x0dadab220c3b2a7ecccc2163c09750", - "0x47df67de7edcbd34ca61cdba6fc37e", - "0x5632966cee7437c487c0d5721d57ca", - "0x118653" + "0xf8bd1158a9393410844deda9a31b43", + "0xe26b4b6ee9c2530612f47233461998", + "0x3aa921f310cd68c09eec35d8c9976e", + "0x137e4f" ] [[inputs.hints.blob_commitments]] diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_rollup_public_inputs.nr index 49f8243e1c9b..220f0c6b914c 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/block_rollup_public_inputs.nr @@ -43,10 +43,10 @@ pub struct BlockRollupPublicInputs { // Block root rollups that are not the first in a checkpoint will have an `in_hash` value of 0. pub in_hash: Field, - // Hash of the `l2_to_l1` message subtree. It will be combined with the `out_hash` from other blocks in the - // same checkpoint to form a wonky tree. The root of that tree becomes the final `out_hash` used on L1. - // TODO(#15793): Keep accumulating `out_hash` all the way up to the root rollup, and set the final hash on L1 when - // proving an epoch. + // Root of the tree composed of all `out_hash` values from txs in this block. This root is combined with the + // `out_hash` values from other blocks within the same checkpoint to form a wonky tree. The `out_hash` roots from + // all checkpoints in an epoch then form another tree, whose root becomes the final **root** `out_hash` inserted + // into the Outbox on L1. pub out_hash: Field, // Accumulated fees for all blocks in this block range. diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/checkpoint_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/checkpoint_rollup_public_inputs.nr index 307d8b9f221f..860057e1be36 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/checkpoint_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/checkpoint_rollup_public_inputs.nr @@ -23,9 +23,11 @@ pub struct CheckpointRollupPublicInputs { // Hashes of checkpoint headers for this checkpoint range. pub checkpoint_header_hashes: [Field; AZTEC_MAX_EPOCH_DURATION], - // TODO(#15793): Keep accumulating `out_hash` all the way up to the root rollup, and set the final hash on L1 when - // proving an epoch. - // pub out_hash: Field, + // Array of `out_hash` values from all checkpoints in this checkpoint range. + // Each checkpoint root sets its own `out_hash` at index 0. Checkpoint merge propagates values from both left and + // right arrays. In the root rollup, these values are used as leaves to build a merkle tree, whose root becomes the + // final `out_hash` stored on L1. + pub out_hashes: [Field; AZTEC_MAX_EPOCH_DURATION], // Concatenation of all coinbase and fees for each checkpoint in this checkpoint range. pub fees: [FeeRecipient; AZTEC_MAX_EPOCH_DURATION], @@ -55,6 +57,7 @@ impl Empty for CheckpointRollupPublicInputs { previous_archive: AppendOnlyTreeSnapshot::empty(), new_archive: AppendOnlyTreeSnapshot::empty(), checkpoint_header_hashes: [0; AZTEC_MAX_EPOCH_DURATION], + out_hashes: [0; AZTEC_MAX_EPOCH_DURATION], fees: [FeeRecipient::empty(); AZTEC_MAX_EPOCH_DURATION], start_blob_accumulator: BlobAccumulator::empty(), end_blob_accumulator: BlobAccumulator::empty(), diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/root_rollup_public_inputs.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/root_rollup_public_inputs.nr index 08e81d13684c..506d9c6b4a66 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/root_rollup_public_inputs.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/abis/root_rollup_public_inputs.nr @@ -13,6 +13,7 @@ pub struct RootRollupPublicInputs { // - If you try to set a lower nextAvailableLeafIndex (overwrite), you'll fail the zero leaf check in the tree insertion code pub previous_archive_root: Field, pub new_archive_root: Field, + pub out_hash: Field, pub checkpoint_header_hashes: [Field; AZTEC_MAX_EPOCH_DURATION], pub fees: [FeeRecipient; AZTEC_MAX_EPOCH_DURATION], pub constants: EpochConstantData, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/consecutive_checkpoint_rollups_tests.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/consecutive_checkpoint_rollups_tests.nr index a1f49017c09d..65c482fe5b5f 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/consecutive_checkpoint_rollups_tests.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/consecutive_checkpoint_rollups_tests.nr @@ -1,14 +1,114 @@ use super::TestBuilder; use types::{ - abis::fee_recipient::FeeRecipient, address::EthAddress, - constants::CHECKPOINT_MERGE_ROLLUP_VK_INDEX, tests::utils::pad_end, traits::Empty, + abis::fee_recipient::FeeRecipient, + address::EthAddress, + constants::{CHECKPOINT_MERGE_ROLLUP_VK_INDEX, CHECKPOINT_ROOT_ROLLUP_VK_INDEX}, + tests::utils::pad_end, + traits::Empty, }; +// -- checkpoint header hashes --- + #[test] -fn correct_default_inputs() { - let builder = TestBuilder::default(); +fn accumulated_checkpoint_header_hashes_from_both_sides() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + ); + + let checkpoint_header_hashes = [123, 456, 7890, 12345]; + + builder.left_rollup.checkpoint_header_hashes[0] = checkpoint_header_hashes[0]; + builder.left_rollup.checkpoint_header_hashes[1] = checkpoint_header_hashes[1]; + builder.right_rollup.checkpoint_header_hashes[0] = checkpoint_header_hashes[2]; + builder.right_rollup.checkpoint_header_hashes[1] = checkpoint_header_hashes[3]; + let pi = builder.execute(); builder.assert_expected_public_inputs(pi); + + assert_eq(pi.checkpoint_header_hashes, pad_end(checkpoint_header_hashes)); +} + +// --- out_hashes --- + +#[test] +fn accumulated_out_hashes_from_both_side() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + CHECKPOINT_ROOT_ROLLUP_VK_INDEX, + 1, + ); + + builder.left_rollup.out_hashes[0] = 123; + builder.left_rollup.out_hashes[1] = 456; + builder.right_rollup.out_hashes[0] = 7890; + + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); + + assert_eq(pi.out_hashes, pad_end([123, 456, 7890])); +} + +#[test] +fn preserve_zero_out_hashes_from_left() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + CHECKPOINT_ROOT_ROLLUP_VK_INDEX, + 1, + ); + + builder.left_rollup.out_hashes[0] = 0; // First checkpoint has zero out hash. + builder.left_rollup.out_hashes[1] = 456; + builder.right_rollup.out_hashes[0] = 7890; + + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); + + assert_eq(pi.out_hashes, pad_end([0, 456, 7890])); +} + +#[test] +fn preserve_zero_out_hashes_from_right() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + ); + + builder.left_rollup.out_hashes[0] = 123; + builder.left_rollup.out_hashes[1] = 456; + builder.right_rollup.out_hashes[0] = 0; // First checkpoint in right rollup has zero out hash. + builder.right_rollup.out_hashes[1] = 7890; + + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); + + assert_eq(pi.out_hashes, pad_end([123, 456, 0, 7890])); +} + +#[test] +fn preserve_zero_out_hashes_from_both_side() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + ); + + builder.left_rollup.out_hashes[0] = 123; + builder.left_rollup.out_hashes[1] = 0; // Second checkpoint in left rollup has zero out hash. + builder.right_rollup.out_hashes[0] = 0; // First checkpoint in right rollup has zero out hash. + builder.right_rollup.out_hashes[1] = 7890; + + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); + + assert_eq(pi.out_hashes, pad_end([123, 0, 0, 7890])); } // --- fees --- @@ -107,6 +207,13 @@ fn preserve_empty_fees_from_both_sides() { // -- constants --- +#[test] +fn correct_default_inputs() { + let builder = TestBuilder::default(); + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); +} + #[test(should_fail_with = "Mismatched constants in checkpoint rollups")] fn mismatch_chain_id() { let mut builder = TestBuilder::default(); diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/mod.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/mod.nr index 7be11623191b..2bc85c185366 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/tests/mod.nr @@ -104,19 +104,23 @@ impl TestBuilder { assert(pi.previous_archive != pi.new_archive); let mut expected_header_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; + let mut expected_out_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; let mut expected_fees = [FeeRecipient::empty(); AZTEC_MAX_EPOCH_DURATION]; for i in 0..self.num_left_checkpoints as u32 { expected_header_hashes[i] = left.checkpoint_header_hashes[i]; + expected_out_hashes[i] = left.out_hashes[i]; expected_fees[i] = left.fees[i]; assert(left.checkpoint_header_hashes[i] != 0); } let offset = self.num_left_checkpoints as u32; for i in 0..self.num_right_checkpoints as u32 { expected_header_hashes[i + offset] = right.checkpoint_header_hashes[i]; + expected_out_hashes[i + offset] = right.out_hashes[i]; expected_fees[i + offset] = right.fees[i]; assert(right.checkpoint_header_hashes[i] != 0); } assert_eq(pi.checkpoint_header_hashes, expected_header_hashes); + assert_eq(pi.out_hashes, expected_out_hashes); assert_eq(pi.fees, expected_fees); assert_eq(pi.start_blob_accumulator, left.start_blob_accumulator); diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/utils/merge_checkpoint_rollups.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/utils/merge_checkpoint_rollups.nr index 40e5013ea456..1c43b4bd6608 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/utils/merge_checkpoint_rollups.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_merge/utils/merge_checkpoint_rollups.nr @@ -9,19 +9,22 @@ pub fn merge_checkpoint_rollups( let num_right_checkpoints = right.num_checkpoints() as u32; // Make sure that the total number of checkpoints does not exceed the maximum allowed in an epoch, preventing the - // merged arrays (`checkpoint_header_hashes`, `fees`) from being truncated. + // merged arrays (`checkpoint_header_hashes`, `out_hashes`, `fees`) from being truncated. let num_checkpoints = num_left_checkpoints + num_right_checkpoints; assert( num_checkpoints <= AZTEC_MAX_EPOCH_DURATION, "total number of checkpoints exceeds max allowed in an epoch", ); - // We use `copy_items_into_array` below because we know exactly how many items should be taken from each side when + // We use `copy_items_into_array` here because we know exactly how many items should be taken from each side when // merging checkpoints. - // It is especially critical for `fees` to copy the exact amount of items from both checkpoints. Because the L1 - // contracts will process fees by index, assuming each entry corresponds to the checkpoint at the same position. - // However, the existence of zero fees or recipients is not prohibited by the circuit. Therefore, preserving empty - // values is important. + // It is especially critical for `out_hashes` and `fees` to copy the exact amount of items from both checkpoints: + // - `out_hashes`: These become the leaves of a Merkle tree, where each checkpoint's `out_hash` must remain at the + // correct index within the epoch. + // - `fees`: The L1 contracts will process fees by index, assuming each entry corresponds to the checkpoint at the + // same position. + // However, a checkpoint may have a zero `out_hash` if none of its txs emitted L2-to-L1 messages, and the existence + // of zero fees or recipients is not prohibited by the circuit. Therefore, preserving empty values is important. // Using this helper (instead of helper like `array_merge`) ensures those empty entries are copied over. let checkpoint_header_hashes = copy_items_into_array( @@ -31,6 +34,13 @@ pub fn merge_checkpoint_rollups( num_right_checkpoints, ); + let out_hashes = copy_items_into_array( + left.out_hashes, + num_left_checkpoints, + right.out_hashes, + num_right_checkpoints, + ); + // We can't merge fees for the same recipient since the l1 contract iterates per checkpoint. let fees = copy_items_into_array( left.fees, @@ -44,6 +54,7 @@ pub fn merge_checkpoint_rollups( previous_archive: left.previous_archive, new_archive: right.new_archive, checkpoint_header_hashes, + out_hashes, fees, start_blob_accumulator: left.start_blob_accumulator, end_blob_accumulator: right.end_blob_accumulator, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/components/checkpoint_rollup_public_inputs_composer.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/components/checkpoint_rollup_public_inputs_composer.nr index 5dedc999da99..53bf6dfa0b8d 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/components/checkpoint_rollup_public_inputs_composer.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/components/checkpoint_rollup_public_inputs_composer.nr @@ -13,7 +13,6 @@ use types::{ }, blob_data::SpongeBlob, constants::{AZTEC_MAX_EPOCH_DURATION, FIELDS_PER_BLOB}, - content_commitment::ContentCommitment, traits::{Empty, Hash}, utils::arrays::assert_trailing_zeros, }; @@ -67,6 +66,9 @@ impl CheckpointRollupPublicInputsComposer { let mut checkpoint_header_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; checkpoint_header_hashes[0] = self.create_checkpoint_header().hash(); + let mut out_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; + out_hashes[0] = merged_rollup.out_hash; + let mut fees = [FeeRecipient::empty(); AZTEC_MAX_EPOCH_DURATION]; fees[0] = FeeRecipient { recipient: merged_rollup.constants.coinbase, @@ -79,6 +81,7 @@ impl CheckpointRollupPublicInputsComposer { constants, previous_archive: merged_rollup.previous_archive, new_archive: merged_rollup.new_archive, + out_hashes, checkpoint_header_hashes, fees, start_blob_accumulator: self.start_blob_accumulator, @@ -91,16 +94,11 @@ impl CheckpointRollupPublicInputsComposer { let merged_rollup = self.merged_rollup; let constants = merged_rollup.constants; - let content_commitment = ContentCommitment { - blobs_hash: self.blobs_hash, - in_hash: merged_rollup.in_hash, - out_hash: merged_rollup.out_hash, - }; - CheckpointHeader { last_archive_root: merged_rollup.previous_archive.root, block_headers_hash: merged_rollup.block_headers_hash, - content_commitment, + blobs_hash: self.blobs_hash, + in_hash: merged_rollup.in_hash, slot_number: constants.slot_number, timestamp: merged_rollup.timestamp, coinbase: constants.coinbase, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/consecutive_rollups_tests.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/consecutive_rollups_tests.nr index b9ac2b9039ba..92129ab874f3 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/consecutive_rollups_tests.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/consecutive_rollups_tests.nr @@ -1,22 +1,9 @@ use super::TestBuilder; +use types::{hash::accumulate_sha256, tests::utils::assert_array_eq}; // Note: We only test a few cases here to ensure the code path is triggered. More comprehensive tests for merging and // validating consecutive block rollups can be found in `block_merge/tests/consecutive_block_rollups_tests.nr`. -#[test] -fn propagate_right_out_hash_when_left_is_zero() { - let mut builder = TestBuilder::default(); - - builder.left_rollup.out_hash = 0; - builder.right_rollup.out_hash = 123; - - let (pi, _) = builder.execute_with_mock(); - builder.assert_expected_public_inputs(pi); - - let checkpoint_header = builder.get_expected_checkpoint_header(); - assert_eq(checkpoint_header.content_commitment.out_hash, 123); -} - #[test(should_fail_with = "Right rollup must not carry in_hash")] fn non_zero_in_hash_in_right_rollup() { let mut builder = TestBuilder::default(); @@ -45,3 +32,56 @@ fn mismatch_timestamps() { builder.execute_with_mock_and_fail(); } + +// --- out_hashes --- + +#[test] +fn accumulated_out_hash_correctly() { + let mut builder = TestBuilder::default(); + + builder.left_rollup.out_hash = 456; + builder.right_rollup.out_hash = 123; + + let (pi, _) = builder.execute_with_mock(); + builder.assert_expected_public_inputs(pi); + + assert_array_eq(pi.out_hashes, [accumulate_sha256(456, 123)]); +} + +#[test] +fn propagate_left_out_hash_when_right_is_zero() { + let mut builder = TestBuilder::default(); + + builder.left_rollup.out_hash = 456; + builder.right_rollup.out_hash = 0; + + let (pi, _) = builder.execute_with_mock(); + builder.assert_expected_public_inputs(pi); + + assert_array_eq(pi.out_hashes, [456]); +} + +#[test] +fn propagate_right_out_hash_when_left_is_zero() { + let mut builder = TestBuilder::default(); + + builder.left_rollup.out_hash = 0; + builder.right_rollup.out_hash = 123; + + let (pi, _) = builder.execute_with_mock(); + builder.assert_expected_public_inputs(pi); + + assert_array_eq(pi.out_hashes, [123]); +} + +#[test] +fn output_zero_when_both_out_hashes_are_zero() { + let mut builder = TestBuilder::default(); + + builder.left_rollup.out_hash = 0; + builder.right_rollup.out_hash = 0; + + let (pi, _) = builder.execute_with_mock(); + + assert_array_eq(pi.out_hashes, []); +} diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/mod.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/mod.nr index 9f16dabe1cf8..2d41b36cc1e1 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/checkpoint_root/tests/mod.nr @@ -28,7 +28,6 @@ use types::{ BLOCK_ROOT_FIRST_ROLLUP_VK_INDEX, BLOCK_ROOT_ROLLUP_VK_INDEX, BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP_VK_INDEX, BLOCK_ROOT_SINGLE_TX_ROLLUP_VK_INDEX, }, - content_commitment::ContentCommitment, tests::utils::{assert_array_eq, make_fixture, pad_end}, traits::{Hash, Serialize}, }; @@ -298,11 +297,6 @@ impl TestBuilder { accumulate_block_headers_hash(left.block_headers_hash, right.block_headers_hash) }; - let out_hash = if self.is_single_block { - left.out_hash - } else { - accumulate_out_hash(left.out_hash, right.out_hash) - }; let total_mana_used = if self.is_single_block { left.accumulated_mana_used } else { @@ -312,11 +306,8 @@ impl TestBuilder { CheckpointHeader { last_archive_root: left.previous_archive.root, block_headers_hash, - content_commitment: ContentCommitment { - blobs_hash: self.hints.blobs_hash, - in_hash: left.in_hash, - out_hash, - }, + blobs_hash: self.hints.blobs_hash, + in_hash: left.in_hash, slot_number: left.constants.slot_number, timestamp: right.timestamp, coinbase: left.constants.coinbase, @@ -357,6 +348,13 @@ impl TestBuilder { [expected_checkpoint_header.hash()], ); + let out_hash = if self.is_single_block { + left.out_hash + } else { + accumulate_out_hash(left.out_hash, right.out_hash) + }; + assert_array_eq(pi.out_hashes, [out_hash]); + let total_fees = if self.is_single_block { left.accumulated_fees } else { diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/mod.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/mod.nr index 64db32c3994b..6c4804e69080 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/mod.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/mod.nr @@ -1,3 +1,4 @@ +pub(crate) mod utils; pub mod root_rollup; mod tests; diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup.nr index 34391fa0ffda..5fff4d1860ca 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/root_rollup.nr @@ -1,6 +1,7 @@ use crate::{ abis::{CheckpointRollupPublicInputs, RootRollupPublicInputs}, checkpoint_merge::{merge_checkpoint_rollups, validate_consecutive_checkpoint_rollups}, + root::utils::compute_epoch_out_hash::compute_epoch_out_hash, }; use blob::utils::validate_final_blob_batching_challenges; use types::{ @@ -85,6 +86,8 @@ pub fn execute(inputs: RootRollupPrivateInputs) -> RootRollupPublicInputs { merge_checkpoint_rollups(left, right) }; + let out_hash = compute_epoch_out_hash(merged.out_hashes); + // Note: for blob batching, in `validate_consecutive_checkpoint_rollups` we have checked: // - left.end_blob_accumulator == right.start_blob_accumulator // - left.final_blob_challenges == right.final_blob_challenges @@ -104,6 +107,7 @@ pub fn execute(inputs: RootRollupPrivateInputs) -> RootRollupPublicInputs { RootRollupPublicInputs { previous_archive_root: merged.previous_archive.root, new_archive_root: merged.new_archive.root, + out_hash, checkpoint_header_hashes: merged.checkpoint_header_hashes, fees: merged.fees, constants: merged.constants, diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/tests/consecutive_rollups_tests.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/tests/consecutive_rollups_tests.nr index 6d08a614b1ba..2b9d61c14006 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/tests/consecutive_rollups_tests.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/tests/consecutive_rollups_tests.nr @@ -1,4 +1,9 @@ +use crate::root::utils::compute_epoch_out_hash::compute_epoch_out_hash; use super::TestBuilder; +use types::{ + constants::{AZTEC_MAX_EPOCH_DURATION, CHECKPOINT_MERGE_ROLLUP_VK_INDEX}, + tests::utils::pad_end, +}; // Note: We only test a few cases here to ensure the code path is triggered. More comprehensive tests for validating // consecutive rollups can be found in `checkpoint_merge/tests/consecutive_checkpoint_rollups_tests.nr`. @@ -29,3 +34,31 @@ fn non_consecutive_archives() { builder.execute_and_fail(); } + +#[test] +fn correct_epoch_out_hash() { + let mut builder = TestBuilder::new( + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 4, + CHECKPOINT_MERGE_ROLLUP_VK_INDEX, + 2, + ); + + builder.left_rollup.out_hashes[0] = 11; + builder.left_rollup.out_hashes[1] = 0; + builder.left_rollup.out_hashes[2] = 0; + builder.left_rollup.out_hashes[3] = 44; + builder.right_rollup.out_hashes[0] = 0; + builder.right_rollup.out_hashes[1] = 66; + + let pi = builder.execute(); + builder.assert_expected_public_inputs(pi); + + let checkpoint_out_hashes: [Field; AZTEC_MAX_EPOCH_DURATION] = pad_end([11, 0, 0, 44, 0, 66]); + let expected_out_hash = compute_epoch_out_hash(checkpoint_out_hashes); + assert_eq(pi.out_hash, expected_out_hash); + + // The following is generated from `yarn-project/stdlib/src/messaging/out_hash.test.ts` + let out_hash_from_ts = 0x00f83de1d6645701e7faa407066fad314e8c42676338856beb5da9d4062fbb28; + assert_eq(expected_out_hash, out_hash_from_ts); +} diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/compute_epoch_out_hash.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/compute_epoch_out_hash.nr new file mode 100644 index 000000000000..382278f26467 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/compute_epoch_out_hash.nr @@ -0,0 +1,77 @@ +use types::{ + constants::AZTEC_MAX_EPOCH_DURATION, hash::accumulate_sha256, merkle_tree::MerkleTree, + traits::Empty, utils::arrays::subarray, +}; + +/// Computes the final `out_hash` for an epoch by constructing an unbalanced Merkle tree from the `out_hash` values of +/// all checkpoints in the epoch. +/// +/// The leaves in the tree are ordered according to the checkpoints' indices within the epoch. +/// +/// An epoch contains 48 checkpoints, which we split into: +/// - A left balanced subtree of 32 leaves. +/// - A right balanced subtree of 16 leaves. +/// +/// The root of this unbalanced tree becomes the epoch `out_hash` stored on L1. +/// +/// An unbalanced tree is intentionally used here (unlike the wonky tree construction used at the checkpoint level) +/// because the epoch `out_hash` may be recalculated and updated on L1 when an extended (larger) epoch proof is +/// submitted that includes additional checkpoints. (See EpochProofLib.sol for more details.) +/// +/// If the epoch tree were constructed as a wonky tree, its shape could change significantly when new checkpoints are +/// added. This would shift existing leaves to different positions, producing different leaf ids for the same message. +/// That would allow the same message to be consumed again using its newly assigned leaf id. +/// +/// By using a fixed unbalanced tree structure, the positions (leaf ids) of existing checkpoints remain stable even as +/// more checkpoints are appended. +pub fn compute_epoch_out_hash(out_hashes: [Field; AZTEC_MAX_EPOCH_DURATION]) -> Field { + std::static_assert( + AZTEC_MAX_EPOCH_DURATION == 48, + "Remember to update these constants of 32 and 16", + ); + let left_subtree_out_hashes: [Field; 32] = subarray(out_hashes, 0); + let right_subtree_out_hashes: [Field; 16] = subarray(out_hashes, 32); + let left_subtree_root = MerkleTree::new_sha(left_subtree_out_hashes).get_root(); + let right_subtree_root = MerkleTree::new_sha(right_subtree_out_hashes).get_root(); + let root = accumulate_sha256(left_subtree_root, right_subtree_root); + // Above is equivalent to: + // UnbalancedMerkleTree::new_sha::(out_hashes, AZTEC_MAX_EPOCH_DURATION).get_root() + // We compute it explicitly here for clarity and efficiency. + + if out_hashes.is_empty() { + 0 + } else { + root + } +} + +mod tests { + use super::compute_epoch_out_hash; + use types::{constants::AZTEC_MAX_EPOCH_DURATION, merkle_tree::UnbalancedMerkleTree}; + + #[test] + fn full_epoch_matches_ts() { + let mut out_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; + for i in 0..AZTEC_MAX_EPOCH_DURATION { + out_hashes[i] = 123 + i as Field; + } + + let out_hash = compute_epoch_out_hash(out_hashes); + + let unbalanced_tree_root = + UnbalancedMerkleTree::new_sha::<_, 7>(out_hashes, AZTEC_MAX_EPOCH_DURATION).get_root(); + assert_eq(unbalanced_tree_root, out_hash); + + // The following is generated from `yarn-project/stdlib/src/messaging/out_hash.test.ts` + let full_epoch_out_hash_from_ts = + 0x00cac4cadfb6b99199909262a27271d0d84c27a8cdc23e45ac77c6ce031ba732; + assert_eq(out_hash, full_epoch_out_hash_from_ts); + } + + #[test] + fn no_messages_in_epoch_produces_zero_out_hash() { + let out_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; + let out_hash = compute_epoch_out_hash(out_hashes); + assert_eq(out_hash, 0); + } +} diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/mod.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/mod.nr new file mode 100644 index 000000000000..e0674af75d41 --- /dev/null +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/mod.nr @@ -0,0 +1 @@ +pub mod compute_epoch_out_hash; diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/rollup_fixture_builder.nr b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/rollup_fixture_builder.nr index 7d5bd5fef68d..4e64284b8825 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/rollup_fixture_builder.nr +++ b/noir-projects/noir-protocol-circuits/crates/rollup-lib/src/tests/rollup_fixture_builder.nr @@ -332,11 +332,13 @@ impl RollupFixtureBuilder { end_slot_number: Field, ) -> CheckpointRollupPublicInputs { let mut checkpoint_header_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; + let mut out_hashes = [0; AZTEC_MAX_EPOCH_DURATION]; let mut fees = [FeeRecipient::empty(); AZTEC_MAX_EPOCH_DURATION]; let num_checkpoints = (end_slot_number - start_slot_number) as u32 + 1; for i in 0..num_checkpoints { let slot_number = i as Field + start_slot_number; checkpoint_header_hashes[i] = self.get_checkpoint_header_hash(slot_number); + out_hashes[i] = self.get_out_hash(slot_number as u32); fees[i] = self.get_fee_and_coinbase(slot_number); } @@ -347,6 +349,7 @@ impl RollupFixtureBuilder { previous_archive: self.get_archive(start_slot_number as u32 - 1), new_archive: self.get_archive(end_slot_number as u32), checkpoint_header_hashes, + out_hashes, fees, start_blob_accumulator: self.get_blob_accumulator(start_slot_number - 1), end_blob_accumulator: self.get_blob_accumulator(end_slot_number), @@ -408,8 +411,8 @@ impl RollupFixtureBuilder { block_number as Field * 429317 } - fn get_out_hash(_self: Self, tx_or_block_number: u32) -> Field { - tx_or_block_number as Field * 60415 + fn get_out_hash(_self: Self, tx_or_block_or_slot_number: u32) -> Field { + tx_or_block_or_slot_number as Field * 60415 } fn get_in_hash(_self: Self, slot_number: Field) -> Field { diff --git a/noir-projects/noir-protocol-circuits/crates/rollup-root/Prover.toml b/noir-projects/noir-protocol-circuits/crates/rollup-root/Prover.toml index e4f9cd1c0585..46c2ceeb3a16 100644 --- a/noir-projects/noir-protocol-circuits/crates/rollup-root/Prover.toml +++ b/noir-projects/noir-protocol-circuits/crates/rollup-root/Prover.toml @@ -535,8 +535,58 @@ proof = [ [inputs.previous_rollups.public_inputs] checkpoint_header_hashes = [ - "0x00d83cebec7a6172a67854376e6f545f7ce67c768dfba184f5fb6d5c5c6906a0", - "0x001db8fbab7ff4c5c62a033de2ecb9d82f64b5d8b37b99a3c71a2e44872fa278", + "0x00984cd0def30213ebdd1f0f8cdcc06df34b77bb8bad1c0ea2fc69dec9cb0a41", + "0x008dfc3acf42eeed1077a492752a78413c22e7270bf39a0c8812de8b689e07a6", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + out_hashes = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -587,30 +637,30 @@ proof = [ [inputs.previous_rollups.public_inputs.constants] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - vk_tree_root = "0x1a4b6efe54b7954bbca355f34a44cf50219847a84f1e3ad159046c9eb0f899eb" - protocol_contracts_hash = "0x0534a1f6f294b5e285b77984b6dbfb8ac151b3afaf51a3d28f1108e3d4afcc76" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + vk_tree_root = "0x1d09edaa1408f8fb8d509de57a697770231e4b20acb508b5945ff64fb1e206aa" + protocol_contracts_hash = "0x168f09154ab73f2bd206a4991e6e975aea5ebb0f86157404b942c33b91312cfa" prover_id = "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" [inputs.previous_rollups.public_inputs.previous_archive] - root = "0x1320e5d7599e880df5d78585fb88b450e8b4ce2336a90cfbdb6f6dd3eb1eb6b7" - next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" + root = "0x22289dd3c7f0f72246dfe6507d085d42bce8d07dc09751f3fa9f7bececd17ec9" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000007" [inputs.previous_rollups.public_inputs.new_archive] - root = "0x053c3534268e82117a5610b7cd76f4987b1e36d22a3de7b7930466d021d78231" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" + root = "0x269715ee30c08bb3173de05b8eadf8bf41d01d847f727214614165ac64ecdd2d" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x000000000000000000000000000000000000000000000000000000001558b000" + value = "0x00000000000000000000000000000000000000000000000000000000a81d9400" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x0000000000000000000000000000000000000000000000000000000e8447f080" + value = "0x000000000000000000000000000000000000000000000000000000cbe0facb6e" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] value = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -927,15 +977,15 @@ proof = [ ] [inputs.previous_rollups.public_inputs.end_blob_accumulator] - blob_commitments_hash_acc = "0x005865ce1a0b0202a3e4b0dbf9909e234e23d638ea5e6dc3872a47fb5e041981" - z_acc = "0x0b2bf2d679e2e31af98cdc699b125df2732baeaef744e4775bea733393a39e9b" - gamma_acc = "0x017c5abe6b4223eae59f0eb8ce6eae81bec286a6c28f2a5d0b8e71356737b3f1" + blob_commitments_hash_acc = "0x0061c128b6e5e328cec427fcf0b1c353ea3208575ff358fa81abf9fb843cb491" + z_acc = "0x2d039041871ff4cc5ac065864dde94da555d65b49a237b13a8c0f75a85af274b" + gamma_acc = "0x2dadaba9ece90b38fb0803553b4020cb866e3427535a429b086d864343323baf" [inputs.previous_rollups.public_inputs.end_blob_accumulator.y_acc] limbs = [ - "0x8107f53fcf625c091ba4bc25b255d6", - "0x061ed93bd1f502fd80ebc94dc50a87", - "0x5f92" + "0x9193021f85a085569c6ac73d112ff4", + "0x7574c46fb46b478e3c658c3fa27697", + "0x1daa" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc] @@ -943,142 +993,142 @@ proof = [ [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.x] limbs = [ - "0x26c6aa38377db8781b2702cc94b2aa", - "0x2479cc12deb996e114a514c729422b", - "0xb0254d09b98802bc86e4d1daf99abd", - "0x14f29d" + "0x3a55d4654bbabd3b5f39ba647c0e67", + "0x9a7977eab0355037ff4baaf9ac042c", + "0x4a50fe848369d9bd0b94750148d4e8", + "0x16f323" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.y] limbs = [ - "0x564fdb7a980f1a53b4b5b1a37162ff", - "0x1381933a1980151066bbd2dffc0057", - "0xfd17d9f2a70ac88a5e15419b6bd944", - "0x000702" + "0x9645afe72e727a41df17167069da44", + "0x5eb254478841eafc1816ebc890d119", + "0x5ce5379749a407c4a29fb80cbc3bf5", + "0x095b08" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.gamma_pow_acc] limbs = [ - "0x6f9d69c94ba3447ce83027ea3f0382", - "0x940b662ffa08a800e3880d6c3fdcff", - "0x143b" + "0x1999fbf0bf82cde0820011637a47ad", + "0xf36feab1d91a69a41daeddf9bfc9f2", + "0x0e31" ] [inputs.previous_rollups.public_inputs.final_blob_challenges] - z = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" + z = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" [inputs.previous_rollups.public_inputs.final_blob_challenges.gamma] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.vk_data] leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000013" sibling_path = [ - "0x04322b0fc74ad0f10d13b0fc436b43b611a1036d78cf9f1efb4d327e140cc757", - "0x03a370c4247cdb92c29415908e9e64e6fad57e92218400f3afbc82b8971bf85e", - "0x289bd773768e8165df9fbbdb2658d08314bc31ce2dbab3bb5b411ae5e2d38fd3", - "0x21716c14360902685b3dd8405f3f6cecd55078eea46d2c1863e70afa35c60842", - "0x20c759db36dd119b1d53141b37044fcb28feb41eb4c4bcef7f68ae7f16a59e46", - "0x1e0bb05cf0a7812744d88250e872d29da49f3bd4284a036de39b4bab0bbec197", - "0x10f3c69caaea623bfae6beea1030333a045ef9e119a60afcf1b07abe6b6dabb0" + "0x2c4591e69f3c84af346a0cf3a1a1111d98d9080945762d06e29a2af188b34ad3", + "0x1150af696337df05dc1da63f1549a02df3800fca4883350a5b15a079b800cc21", + "0x27c08dafd69a994e3dbd9ea9df9bc109e52c5775426c94f432352a09b2adddda", + "0x15a8e5eb2c93ba5b8b0d86c618c0287c6a76a42a6261d9c179535190910f86fe", + "0x14052465b6d95be9d3f3fb0e62c98d1edbe05194f80732f3d96e87d037f82ea9", + "0x2e57df8d5011ee5b90dce76a79fa869133ddd3244983885d73e012ea5ec9a2c5", + "0x0ee8b26e949aa6c26896821c0651c765193f0425f01d748573ddadf7b56a417a" ] [inputs.previous_rollups.vk_data.vk] key = [ "0x0000000000000000000000000000000000000000000000000000000000000015", - "0x00000000000000000000000000000000000000000000000000000000000000db", + "0x000000000000000000000000000000000000000000000000000000000000010b", "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000003bfb3ccf99f9bc16eaf3cfe0f61623419", - "0x00000000000000000000000000000000001025e4bd1877f172c4946a144dc0dc", - "0x0000000000000000000000000000001a8659c521e646c9a98108674c8cff4370", - "0x000000000000000000000000000000000016cf561525965758277ae981b68cc6", - "0x00000000000000000000000000000044096f8b4245d38ec7abbc1845914b0bf9", - "0x000000000000000000000000000000000011367ce39be540b8627f116bdd5fa9", - "0x00000000000000000000000000000098a1b7b52c81a4baf2ed27c14a02db7d34", - "0x0000000000000000000000000000000000142417c2a10f69c7698974bd16f3fc", - "0x000000000000000000000000000000aaf62cc64c59469719f9a5277be19e3e17", - "0x00000000000000000000000000000000000ceed73f9dea30cb0ebc59fce1e562", - "0x0000000000000000000000000000009ab06a9fde6fe11e5c74d9709161cc0fad", - "0x000000000000000000000000000000000019cb7a65c05c1490d6b42655338178", - "0x000000000000000000000000000000bdbfc5e3def1a44e645b452b06517226f1", - "0x00000000000000000000000000000000002daf909d4893bd0d71dc33595f3a26", - "0x000000000000000000000000000000de785598e447234953afac14e35e1d0fe1", - "0x00000000000000000000000000000000000556ba4b9d433ca56b210ff162c8a3", - "0x0000000000000000000000000000006701c0e0751232eb3d94f9c2e6ef40cf64", - "0x00000000000000000000000000000000000feac0957756a7504b7fb484de6dad", - "0x000000000000000000000000000000566dccb5883bc1adb6c47cab96af255c7a", - "0x00000000000000000000000000000000001898ae76577dc46b9c201b3d8ebf3b", - "0x0000000000000000000000000000001a88fd9a0afbb9a427b0c520c80ef4d19e", - "0x00000000000000000000000000000000002fa51110405203e0340b6e7b50b3aa", - "0x000000000000000000000000000000384c5714fada043e9f97157518bedcbc2a", - "0x00000000000000000000000000000000002167a86b8163310fd80edaadc16b31", - "0x00000000000000000000000000000008e5133f9c6d2fc781535575d29146644d", - "0x0000000000000000000000000000000000072f88399a140f000b89d64caada31", - "0x0000000000000000000000000000008a49100c2ed9330fa80bff0b940dbf1685", - "0x0000000000000000000000000000000000064b440c4c5f93a93c9dc9d0b2f5e5", - "0x000000000000000000000000000000d5eec9a441543a515cbeddc880fa3002b8", - "0x00000000000000000000000000000000000cb83cd25e2cc5518cae1912853af7", - "0x000000000000000000000000000000035ed6799be26e75bbc00b9b8e6dfc478c", - "0x00000000000000000000000000000000001530dfd5c2a38829d04228e5b0847f", - "0x0000000000000000000000000000003f9b58022c224acc6b0cda445997502d50", - "0x00000000000000000000000000000000001f26b8626e086d563168ab9aac0a1f", - "0x0000000000000000000000000000002825a301b366c62f7438639bf09e5e0a86", - "0x00000000000000000000000000000000000991d6998a46164518b2624d9e028f", - "0x000000000000000000000000000000fe845fad3ee3eb582f755550e42082812b", - "0x00000000000000000000000000000000001366d39afa71f0ad50d051fcb77b92", - "0x00000000000000000000000000000041615a13a5edf890eaa143e262504ad618", - "0x000000000000000000000000000000000020895b5f7d7a2a3037ceef2cd4d479", - "0x000000000000000000000000000000b79db31b93ba42e76cbb982d18129fe0fa", - "0x000000000000000000000000000000000011e39b9e0bcef2ed27789617d22211", - "0x0000000000000000000000000000006a6e722a4f6f1f38ee9603ea0d35d86655", - "0x00000000000000000000000000000000001b73d41e387463183fc9a286aa2fc9", - "0x0000000000000000000000000000001a429ae78e0110ef468484f61375fab430", - "0x00000000000000000000000000000000001e72381acfe71f8f454ac01ce97480", - "0x0000000000000000000000000000001d0a2bb6ab0e44b91862a681c02b7cfbe9", - "0x00000000000000000000000000000000002c776d752ee6b04a67a0c8c4ed9b91", - "0x00000000000000000000000000000022877eb3a10b6e7f54abc7d88a2b6732bf", - "0x000000000000000000000000000000000028e88c00c949ecfb33798668bf0327", - "0x000000000000000000000000000000b13aeeaf7ef687274b3cba314e40a8c587", - "0x00000000000000000000000000000000001dcfba14ca69b3140cc77a70f5dcb7", - "0x000000000000000000000000000000f1fd9d44abfc8df76119e11b6c662a0947", - "0x000000000000000000000000000000000005c6993e05f9ee0757fe5fcba58b08", - "0x0000000000000000000000000000000636b98dd11148edbcca4f8d20a655d674", - "0x000000000000000000000000000000000006f4fb0ce5433219249adf98b0f07b", - "0x0000000000000000000000000000001239713c4cac4d99dbe72c4bd942671bd2", - "0x0000000000000000000000000000000000304f3b60bf15fe80727934cd6e6ad4", - "0x000000000000000000000000000000506e0f68d329cbe6357874b506678ca399", - "0x00000000000000000000000000000000000067ed88019309db4bef2cd94fbbeb", - "0x0000000000000000000000000000004fae621038af3bd35037f088b59bbda351", - "0x000000000000000000000000000000000007217ba7a1d20a5676f4b9f2c47959", - "0x0000000000000000000000000000009d19ee0dc797c8c8819ad0b7ded73a2f56", - "0x000000000000000000000000000000000027d50af521dc7e8865a8db8bac0c3e", - "0x0000000000000000000000000000002e7d3cd7556fcc363faf3f66e60ab799b4", - "0x0000000000000000000000000000000000187adcc3f6e66b316616145d2510e6", - "0x0000000000000000000000000000000c853380b119459013ac6dd18c64ee1d48", - "0x00000000000000000000000000000000001ea5247716bf67b2630066039e6075", - "0x000000000000000000000000000000a4e8231734e3d49c97e15683d2098fb3a9", - "0x00000000000000000000000000000000000eeea38eafdc1f5425597aafbd220f", - "0x000000000000000000000000000000311f905f949c4af379fe91255967ae244b", - "0x000000000000000000000000000000000006dab4a9ae422012bda0f629e3336c", - "0x0000000000000000000000000000000891bfbf6a295491a6e9e24f2b622499ff", - "0x00000000000000000000000000000000002249d668071048c2bca9dd0a995d9c", - "0x0000000000000000000000000000006888f5222a73da4961cfee5c3768972c79", - "0x000000000000000000000000000000000014ac4b0b5f6912359ff67e4c9f8f01", - "0x0000000000000000000000000000007eea2964185f8c1fd9a9ebfd294674d259", - "0x00000000000000000000000000000000001ec647ccd25484f159e2351d4e675c", - "0x000000000000000000000000000000b6bf9be23353c2645df27b6370087602f2", - "0x0000000000000000000000000000000000141a7710135b217c5144756ff28484", - "0x0000000000000000000000000000007bfe24808529de554a19ae610fe0bc0a75", - "0x00000000000000000000000000000000000bd2aa7a3e881bf5421875875e1ba0", - "0x00000000000000000000000000000080b328c7062de22f7b29f76953539cbe6f", - "0x000000000000000000000000000000000027e4244539e76967d76de74a6d4e41", - "0x000000000000000000000000000000b554f0dc4ecb1c6a61a044b9f809de1f3c", - "0x000000000000000000000000000000000020461927b7ebdd0630c44ef5e1c3f1", - "0x000000000000000000000000000000f815101482f11ca969ca7b6ce272ed9f53", - "0x00000000000000000000000000000000001e44c9f4556ab137f04be7d2c6b53f", + "0x000000000000000000000000000000783605d10dee88f3446f8b79a2f1aaeaff", + "0x00000000000000000000000000000000001a51c023530c67e560bcb0ba1ec137", + "0x0000000000000000000000000000009e6718d8f26b0ae0d65b5122dd9064a8c5", + "0x000000000000000000000000000000000008bd4b7920342bfbd039db1ee55d88", + "0x000000000000000000000000000000617307e4b63ed7cec94b60740cb5c84df1", + "0x000000000000000000000000000000000025adbe69c2d429df4ab6ef0c126f61", + "0x00000000000000000000000000000030f510d2bee55700300bc3f0af83975837", + "0x00000000000000000000000000000000000324a35b0799a5aae877bb5d3a4434", + "0x0000000000000000000000000000006601766aaf353f0620b1c495fb18d5d7a5", + "0x00000000000000000000000000000000000a1f15fcfa16d3936cd496ab1b50d5", + "0x0000000000000000000000000000000a21994cf1d6512ac35c176f51b2f5f1e2", + "0x000000000000000000000000000000000000d5054b93257d9b333fc64da7f62f", + "0x000000000000000000000000000000ad8b390a78ff965f20e46b95c8cd7ae1fd", + "0x0000000000000000000000000000000000037269df9040410be86733e4030ddf", + "0x0000000000000000000000000000000627c33fd13cfb70089a81026bddff5e17", + "0x000000000000000000000000000000000015dcc64c27c12e8f1c8685b5f001ac", + "0x000000000000000000000000000000e42f55ee6eb3c52a64e50b67f638ea1057", + "0x00000000000000000000000000000000002e8b392b67b1f2b0f16935ea837893", + "0x00000000000000000000000000000039acb80c1d54b735ea469e710ad173bf1f", + "0x00000000000000000000000000000000002f9ce04519a345501f036c30948d78", + "0x0000000000000000000000000000003e49ff085d2de019f1c97fc6512775205c", + "0x00000000000000000000000000000000002f957094b6c0396f94ec83a572039c", + "0x0000000000000000000000000000008b7742a1acc5ea713db9cd9e9c0be79866", + "0x000000000000000000000000000000000014dfa9a9178a08acb822d16344aaa5", + "0x000000000000000000000000000000116f7a0ccaa1bd38458a7c98eb80c7cb61", + "0x0000000000000000000000000000000000120c83d9479c9bac206da050162421", + "0x0000000000000000000000000000000c1c8be1879b270512b6c0e158e62a7958", + "0x000000000000000000000000000000000004adb256778ba41a4be98cde5cabf6", + "0x000000000000000000000000000000446c8412f04925231f27e5e1f0648149f3", + "0x0000000000000000000000000000000000143418fc68626360bbfe3e9be9dcf1", + "0x0000000000000000000000000000000ec378de7ed7d1b9fc055a947c5933800d", + "0x00000000000000000000000000000000001af31da27f74ba1105460691a1ccff", + "0x00000000000000000000000000000050f02d627af23abc8135693fc27b715a21", + "0x000000000000000000000000000000000020273ab425e61cbde5ecd9b4b1b6b1", + "0x0000000000000000000000000000006d6c593e018875b80cceea141a738bf0f8", + "0x0000000000000000000000000000000000013dca7a9ddd9ffaacec686fc1561d", + "0x000000000000000000000000000000353e23babdbaa406bae078b5b853dd9a9a", + "0x00000000000000000000000000000000002a7aae4b5a4bfecd4cc1317e9281e2", + "0x000000000000000000000000000000e42f1f966270491d64a3939d1ebd0e90b4", + "0x000000000000000000000000000000000016e063d3cd03887298b6132fdef4dc", + "0x0000000000000000000000000000001cf7ccdfce4b029e0a7c645a61369c1350", + "0x000000000000000000000000000000000022db244bab52efbf0dc1f1d7936037", + "0x00000000000000000000000000000006e5d58c9dc15e920ceb4549afafdfe987", + "0x00000000000000000000000000000000001f94145535fe8593dc178b72d4769b", + "0x000000000000000000000000000000a0f2b503d1faf841263db52efbdacb5cfd", + "0x00000000000000000000000000000000000bcded0d4cc2918b7b0d6f3b77c32b", + "0x00000000000000000000000000000066e2bc79d1156502e32fa96ea98912509d", + "0x00000000000000000000000000000000003051493b3f6dd2dbadf7b1a63f5cb8", + "0x0000000000000000000000000000007c2ee57a35a7b5559dbf313b737bc09d7a", + "0x00000000000000000000000000000000000ee8f28706fc0bb1c55f45d9c5e11d", + "0x000000000000000000000000000000f9ceead3e0e56735d879248512cf821f51", + "0x00000000000000000000000000000000000f2eee5f869d378d227fbda3903593", + "0x0000000000000000000000000000001a10593f7bd44af1ae79e09a98443c187e", + "0x00000000000000000000000000000000002999c17673f49d88885c1ef73676ad", + "0x000000000000000000000000000000a930393c6b22785d5e556943a1f8f14dc3", + "0x00000000000000000000000000000000000b73acff2597886fa1cd4fa8f2aac5", + "0x00000000000000000000000000000062f81494b5e94f2b8217dbd5a879475a46", + "0x00000000000000000000000000000000000db12f9aa7f508d9ca86490c62a992", + "0x000000000000000000000000000000d0c3445d1a50dcf6cea71c7768df472337", + "0x000000000000000000000000000000000021293d21d9d80935bb85e397a41944", + "0x00000000000000000000000000000040fd67ea7b5f0ef171f70dbfb3e782b101", + "0x000000000000000000000000000000000000446797bb708230257e513fc42307", + "0x0000000000000000000000000000001c3d913e85dc452c14c2c0ec8fae60828f", + "0x00000000000000000000000000000000001a786c5a89c3fbf39f18e0b7907b9b", + "0x000000000000000000000000000000d7cdc1f7dd5d5630f070594c36389ba3eb", + "0x00000000000000000000000000000000002477b0d711eb5ad667d4862057754f", + "0x00000000000000000000000000000054937196f636509471a41d7a9a16cd776a", + "0x000000000000000000000000000000000011f6b9de18c26b9e5dd5282d74f559", + "0x0000000000000000000000000000003527b488c66ab52157394fe98e8d503375", + "0x00000000000000000000000000000000001f4504e41b71a68303cb5ca8c64d93", + "0x00000000000000000000000000000000b8e323d809309c01978b2e8a7dafb2ee", + "0x0000000000000000000000000000000000011c426eeb4e77c6988e411f746355", + "0x000000000000000000000000000000a6927ea3536393a48db7a5b3c59b62422d", + "0x00000000000000000000000000000000001c832a0455d56d6a0687a5e6c2d61a", + "0x0000000000000000000000000000009c2c6926b7652ed605f2da17cf15445b27", + "0x00000000000000000000000000000000002fb0bfd2531f75d7c2bdade45e7bad", + "0x000000000000000000000000000000f36b24b17547b2e8109c2ebc998631131c", + "0x00000000000000000000000000000000001a11a6b0991fed77080d99c5fee9e2", + "0x0000000000000000000000000000004c705bfe3c29784f4c8557e613a9843f5a", + "0x00000000000000000000000000000000000a050c6b7e67f7555bdfabad89e358", + "0x000000000000000000000000000000e377baa766a2445b47389d30cf80784d55", + "0x0000000000000000000000000000000000109bb1986d3fcc36f4f2e136a14af2", + "0x0000000000000000000000000000005ac701b98bf1793181c41a171f9b76474f", + "0x00000000000000000000000000000000001e713216db9aeac1bcc33dd1628ccc", + "0x000000000000000000000000000000a9a15e72d006e3c8084bb2381f2d67a85a", + "0x000000000000000000000000000000000009440926d77968e47e240b5064ce43", + "0x000000000000000000000000000000f5ea6a94972805f08278275e70b6c2ea02", + "0x00000000000000000000000000000000001bb709cac6b833dcdabea65f83d873", "0x0000000000000000000000000000007c6fc5ae0c56f06e0a35747f24625e5763", "0x00000000000000000000000000000000002194d92617bbb3ba3d9e53f4f13c5c", "0x00000000000000000000000000000002eb63f6e2fc21862f6fefead2978de7e0", @@ -1099,12 +1149,12 @@ proof = [ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000006b926900d67ecc1f0777516dbff5cdae12", - "0x000000000000000000000000000000000013b0fe41e1c78de6e661583ee93335", - "0x000000000000000000000000000000bfdc4966052344006b66eb17900fedf9aa", - "0x000000000000000000000000000000000027605868084bab94a433af9bcadc57" + "0x0000000000000000000000000000003caf66cc36f80eea9d90212b0c78b4fc86", + "0x000000000000000000000000000000000009bb4fa7081d3514d81b101a129d2e", + "0x000000000000000000000000000000a3763f418f71af04ee79ff2b2a03adebb6", + "0x000000000000000000000000000000000008970fb4ba80d3365abc03d46c3537" ] - hash = "0x066f25bde6af6a9165040cd65513a50b640b1c36cc089f9b6344b5dfa0016335" + hash = "0x288943084efa7a298dec1f9b1b6f91c4fae8eb7663a57569671abd0db6acfa7c" [[inputs.previous_rollups]] proof = [ @@ -1643,7 +1693,57 @@ proof = [ [inputs.previous_rollups.public_inputs] checkpoint_header_hashes = [ - "0x00ef9a3cbbe742a275f4965730b61985734718a6aaa5358e3da08b1d93f14f1f", + "0x0008699b92ac0bfcd163ece64e2591587cd8b8837afed7e06a189cc39fdbb258", + "0x00f4747636369993f75100d572ef9fec02f961c0659f170bd1aaf6686ff00962", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" +] + out_hashes = [ + "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1695,30 +1795,30 @@ proof = [ [inputs.previous_rollups.public_inputs.constants] chain_id = "0x0000000000000000000000000000000000000000000000000000000000007a69" - version = "0x000000000000000000000000000000000000000000000000000000002159904d" - vk_tree_root = "0x1a4b6efe54b7954bbca355f34a44cf50219847a84f1e3ad159046c9eb0f899eb" - protocol_contracts_hash = "0x0534a1f6f294b5e285b77984b6dbfb8ac151b3afaf51a3d28f1108e3d4afcc76" + version = "0x000000000000000000000000000000000000000000000000000000002b48465d" + vk_tree_root = "0x1d09edaa1408f8fb8d509de57a697770231e4b20acb508b5945ff64fb1e206aa" + protocol_contracts_hash = "0x168f09154ab73f2bd206a4991e6e975aea5ebb0f86157404b942c33b91312cfa" prover_id = "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc" [inputs.previous_rollups.public_inputs.previous_archive] - root = "0x053c3534268e82117a5610b7cd76f4987b1e36d22a3de7b7930466d021d78231" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" + root = "0x269715ee30c08bb3173de05b8eadf8bf41d01d847f727214614165ac64ecdd2d" + next_available_leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000009" [inputs.previous_rollups.public_inputs.new_archive] - root = "0x144a53463385316395c1fdaf3a55f14f60ec3eed7a0d49e00526a00b99d6cdd6" - next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000c" + root = "0x295f6d99e027381bec57f397644148bf7b55f854e53c728106cd9209e3183737" + next_available_leaf_index = "0x000000000000000000000000000000000000000000000000000000000000000b" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x000000000000000000000000000000000000000000000000000000048c9bc63a" + value = "0x00000000000000000000000000000000000000000000000000000009cc27d5a0" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x000000000000000000000000f39432d58e60985da7c877f185dd46da49513f1a" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] - value = "0x0000000000000000000000000000000000000000000000000000000000000000" + value = "0x000000000000000000000000000000000000000000000000000000114fda0060" [inputs.previous_rollups.public_inputs.fees.recipient] - inner = "0x0000000000000000000000000000000000000000000000000000000000000000" + inner = "0x0000000000000000000000007615f872a394533c2255abc6258ad2072dd2d7e8" [[inputs.previous_rollups.public_inputs.fees]] value = "0x0000000000000000000000000000000000000000000000000000000000000000" @@ -1997,15 +2097,15 @@ proof = [ inner = "0x0000000000000000000000000000000000000000000000000000000000000000" [inputs.previous_rollups.public_inputs.start_blob_accumulator] - blob_commitments_hash_acc = "0x005865ce1a0b0202a3e4b0dbf9909e234e23d638ea5e6dc3872a47fb5e041981" - z_acc = "0x0b2bf2d679e2e31af98cdc699b125df2732baeaef744e4775bea733393a39e9b" - gamma_acc = "0x017c5abe6b4223eae59f0eb8ce6eae81bec286a6c28f2a5d0b8e71356737b3f1" + blob_commitments_hash_acc = "0x0061c128b6e5e328cec427fcf0b1c353ea3208575ff358fa81abf9fb843cb491" + z_acc = "0x2d039041871ff4cc5ac065864dde94da555d65b49a237b13a8c0f75a85af274b" + gamma_acc = "0x2dadaba9ece90b38fb0803553b4020cb866e3427535a429b086d864343323baf" [inputs.previous_rollups.public_inputs.start_blob_accumulator.y_acc] limbs = [ - "0x8107f53fcf625c091ba4bc25b255d6", - "0x061ed93bd1f502fd80ebc94dc50a87", - "0x5f92" + "0x9193021f85a085569c6ac73d112ff4", + "0x7574c46fb46b478e3c658c3fa27697", + "0x1daa" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc] @@ -2013,37 +2113,37 @@ proof = [ [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc.x] limbs = [ - "0x26c6aa38377db8781b2702cc94b2aa", - "0x2479cc12deb996e114a514c729422b", - "0xb0254d09b98802bc86e4d1daf99abd", - "0x14f29d" + "0x3a55d4654bbabd3b5f39ba647c0e67", + "0x9a7977eab0355037ff4baaf9ac042c", + "0x4a50fe848369d9bd0b94750148d4e8", + "0x16f323" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.c_acc.y] limbs = [ - "0x564fdb7a980f1a53b4b5b1a37162ff", - "0x1381933a1980151066bbd2dffc0057", - "0xfd17d9f2a70ac88a5e15419b6bd944", - "0x000702" + "0x9645afe72e727a41df17167069da44", + "0x5eb254478841eafc1816ebc890d119", + "0x5ce5379749a407c4a29fb80cbc3bf5", + "0x095b08" ] [inputs.previous_rollups.public_inputs.start_blob_accumulator.gamma_pow_acc] limbs = [ - "0x6f9d69c94ba3447ce83027ea3f0382", - "0x940b662ffa08a800e3880d6c3fdcff", - "0x143b" + "0x1999fbf0bf82cde0820011637a47ad", + "0xf36feab1d91a69a41daeddf9bfc9f2", + "0x0e31" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator] - blob_commitments_hash_acc = "0x00a668539727af5b8ceaa5b3161726c835313da8fd0ec441753384ca0816c485" - z_acc = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" - gamma_acc = "0x23511c13fb7897b3550308c9527d4f94519b9a23ef25f82d322deea0bccdb6ad" + blob_commitments_hash_acc = "0x0025065f5ed8f2ccad703e508c2d570b7375daf87d12574672e598089e28be5b" + z_acc = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" + gamma_acc = "0x2ae2bb4a88c807bd2a98bd407e6e71191d0c2e2ce15c98c9322706582659eb4b" [inputs.previous_rollups.public_inputs.end_blob_accumulator.y_acc] limbs = [ - "0xe2b7fb7b83cc46d8f76367c325792f", - "0x48722f170b76b27999b3045188b2b0", - "0x51e6" + "0xed91cdafc809d15eb3cce53b4d9e4d", + "0x142834fd51a9d92180c76e22eea362", + "0x06d9" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc] @@ -2051,165 +2151,165 @@ proof = [ [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.x] limbs = [ - "0xfc0d40bad1be822ea41bb1911b74f3", - "0x3890b44f632966085e99ea9a769e6e", - "0x81f91677d9f9de4c21bea634e16846", - "0x086886" + "0x9ca21323b6cf74558fb0280a631248", + "0xc26aaf9c6fc18d93a995db0f318520", + "0x6dcfe711f5732d07e68c8ff78cbf90", + "0x05cf3e" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.c_acc.y] limbs = [ - "0xe52641f4855100af89a2334de76379", - "0x8f3410cc7ea939e608e5973086f85f", - "0xd34cafa3348ee93281c6cd51466159", - "0x0ff6b1" + "0x30e771b3f2524b0817c05e48c2abd0", + "0xe4f15c572a1a2b714c3592a2893725", + "0x3191e66cbe13cb3292ccb77599573d", + "0x19ff5b" ] [inputs.previous_rollups.public_inputs.end_blob_accumulator.gamma_pow_acc] limbs = [ - "0xa75690d62c63befb6f5d540579a155", - "0xfa36d491524a43aebc90190bbc6a8d", - "0x3c8d" + "0x6bb7e1d28bf088676e2139709920b2", + "0x4558ee7bd8f7be1fa691a91bab229f", + "0x49c8" ] [inputs.previous_rollups.public_inputs.final_blob_challenges] - z = "0x054102e3eb31c5ecb8cef08d9d1fed8c85e45295d511d890d6d3a51b436fa572" + z = "0x0c3e983243238663c7aad8bc815db35e3c100dae82c48d2f1d253ee4166c7989" [inputs.previous_rollups.public_inputs.final_blob_challenges.gamma] limbs = [ - "0x98ea8cc659c8aa69515b454cbdab15", - "0x518a864bc5a55083ff1e68b1d6eef7", - "0x2bfe" + "0x0f4f89a32fa76b0e8a3035d71bdd18", + "0x591ea6ab42eebe0b46067a282d1515", + "0x1dcd" ] [inputs.previous_rollups.vk_data] - leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000011" + leaf_index = "0x0000000000000000000000000000000000000000000000000000000000000013" sibling_path = [ - "0x10970b97168e70b35aca267c83590003a395df1abf5a11cc884b427b7e76729c", - "0x2c8ba1ce7bcec9e8132b88fec5cd7dd5f77cabe4cc06d1171b65a8da9d487a1a", - "0x289bd773768e8165df9fbbdb2658d08314bc31ce2dbab3bb5b411ae5e2d38fd3", - "0x21716c14360902685b3dd8405f3f6cecd55078eea46d2c1863e70afa35c60842", - "0x20c759db36dd119b1d53141b37044fcb28feb41eb4c4bcef7f68ae7f16a59e46", - "0x1e0bb05cf0a7812744d88250e872d29da49f3bd4284a036de39b4bab0bbec197", - "0x10f3c69caaea623bfae6beea1030333a045ef9e119a60afcf1b07abe6b6dabb0" + "0x2c4591e69f3c84af346a0cf3a1a1111d98d9080945762d06e29a2af188b34ad3", + "0x1150af696337df05dc1da63f1549a02df3800fca4883350a5b15a079b800cc21", + "0x27c08dafd69a994e3dbd9ea9df9bc109e52c5775426c94f432352a09b2adddda", + "0x15a8e5eb2c93ba5b8b0d86c618c0287c6a76a42a6261d9c179535190910f86fe", + "0x14052465b6d95be9d3f3fb0e62c98d1edbe05194f80732f3d96e87d037f82ea9", + "0x2e57df8d5011ee5b90dce76a79fa869133ddd3244983885d73e012ea5ec9a2c5", + "0x0ee8b26e949aa6c26896821c0651c765193f0425f01d748573ddadf7b56a417a" ] [inputs.previous_rollups.vk_data.vk] key = [ - "0x0000000000000000000000000000000000000000000000000000000000000017", - "0x00000000000000000000000000000000000000000000000000000000000000db", + "0x0000000000000000000000000000000000000000000000000000000000000015", + "0x000000000000000000000000000000000000000000000000000000000000010b", "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x000000000000000000000000000000a4addc3d15184ad44ee3491b10b697fbcb", - "0x000000000000000000000000000000000004248a518173e75ec75a59de8b4a49", - "0x0000000000000000000000000000000c59afbdb8091ae2124a60d518101efd0b", - "0x0000000000000000000000000000000000100c54a9302700eb69cbe10cba97f2", - "0x0000000000000000000000000000001b64713de08d2a1889a1f8f9726a677ffe", - "0x00000000000000000000000000000000002d1471c9f9f556eb0eb78a7657ddff", - "0x0000000000000000000000000000005a8165fb5b03c0c1ed26016c6a41c49306", - "0x0000000000000000000000000000000000030c604f1bb1adddea8e95f40420b1", - "0x00000000000000000000000000000021ef7902b72d855b1c5066c8f97169b22f", - "0x00000000000000000000000000000000000ba7a4515f2bccd0337e1b9913d9b4", - "0x00000000000000000000000000000026a4525028ee83fde24042b00b4320908e", - "0x00000000000000000000000000000000002606ce67c5bd97ed27abbf830c57eb", - "0x0000000000000000000000000000001c9d8b838fac9156dd98b14c2df0810fc5", - "0x00000000000000000000000000000000000df02d2c047af635e0db62710ddf51", - "0x000000000000000000000000000000296feef6bed51b3c7129c50e3486ff82b7", - "0x000000000000000000000000000000000025acd3c9ff0bfafb8f0f0f46128de2", - "0x000000000000000000000000000000016bb61ef76e1ee0bc486c53658dfc271c", - "0x0000000000000000000000000000000000132c57c3319698cf519be1cb7106eb", - "0x000000000000000000000000000000b7756b802897666538b98b57637d624bf6", - "0x0000000000000000000000000000000000263615035ac1ee49f6ddd16c17161f", - "0x0000000000000000000000000000007917e8d72f94519994926d2188afa59b22", - "0x00000000000000000000000000000000001ac7287b2286ece9472c2b0313afec", - "0x000000000000000000000000000000c86b1f13f292b9a7fd027d22f0b3891a83", - "0x0000000000000000000000000000000000016fa3e871fbf819c301d93bc24254", - "0x000000000000000000000000000000ad91540d93c85513f28474ddc14d9df5d4", - "0x000000000000000000000000000000000002b2a3959b62c8c91a925752e929d9", - "0x000000000000000000000000000000e4c37933e963c358ce5dbd7445d7a148c6", - "0x000000000000000000000000000000000017c37db68400e1ece0d2a8f05c3ee5", - "0x00000000000000000000000000000048fb157aeeb69ac9ac557cf314385f0fcb", - "0x00000000000000000000000000000000000709b839adfbad629ad7ff6bc5391a", - "0x00000000000000000000000000000049feaa0f8145465703d5ce4df863757f30", - "0x000000000000000000000000000000000022a9c0cbac7edde598bc907ffb8fef", - "0x0000000000000000000000000000004223dbc0fd145c9dd4cd32fe19fb96a917", - "0x00000000000000000000000000000000002c3b8721be4d5959bb7f3eb0762329", - "0x0000000000000000000000000000008352d64e102d1db8bec8033cb357fe976c", - "0x0000000000000000000000000000000000286aa9e75b54ebaf83a6460ee8559b", - "0x0000000000000000000000000000002c91b72f90f172bbbc8cf856d484a35d82", - "0x00000000000000000000000000000000001be5b05e5acc279e5498e7b2677c3c", - "0x000000000000000000000000000000d72322b19cc3c4ac5a3c7b42f986d3222f", - "0x0000000000000000000000000000000000132c1da3de787da93632a5277492b3", - "0x0000000000000000000000000000002efcedb78bce4033c2bfa56e7e8b4f311a", - "0x00000000000000000000000000000000001c486e865a50ccab68e84032ba3d52", - "0x000000000000000000000000000000e35c30b170ef9d285099f6a401e6a79a00", - "0x000000000000000000000000000000000021b678b6d947e6b994c6ef1c78c2bd", - "0x000000000000000000000000000000f0fcc932a2b3fd7239f5429a16781cba7a", - "0x000000000000000000000000000000000020775976c42386197d53c1c776db61", - "0x000000000000000000000000000000b947fd5f8858760abaa6eec1db4877df71", - "0x00000000000000000000000000000000001378ee0f05c2cf3b90ff8ac789d3e5", - "0x000000000000000000000000000000ddcd61f0723018bdd4b44ead37a6c763bc", - "0x000000000000000000000000000000000022d1ef563be2af569163e5b7c89529", - "0x000000000000000000000000000000f789dc1de6e5bc852bcf4b7024501ebfc7", - "0x00000000000000000000000000000000001fcae32a5a0e3f31284b94b998eb32", - "0x0000000000000000000000000000001d680b27b411438b9d682a255b7a565c1d", - "0x0000000000000000000000000000000000008a7157314cbdcd0f7eac82c67b61", - "0x0000000000000000000000000000007a19338030c9f7a1b3db961e52f518d061", - "0x00000000000000000000000000000000000d4308734c110c89a75f5e0938ad8f", - "0x00000000000000000000000000000073edae47f4c3a27dc86c4fa03323e0dc96", - "0x00000000000000000000000000000000001f1cd06860f5665135a2ce7f1729df", - "0x000000000000000000000000000000bdcf58226ff3e6549529df1d1a9d696369", - "0x00000000000000000000000000000000000bb20a605bc5c417ded90abc3283a6", - "0x000000000000000000000000000000236e6ffbeb012d64a3e51190310b7bdf94", - "0x0000000000000000000000000000000000180dfd6f8bc458c630c3042c74a12f", - "0x000000000000000000000000000000d215ced9fab1477eee5d861c0fedf82e8f", - "0x00000000000000000000000000000000001b5aef42c385c52a3e19fc96d3c069", - "0x00000000000000000000000000000041a87e897fd5db13a21400e1f305748dac", - "0x000000000000000000000000000000000028661e94b53462f7aa33a7edaafb03", - "0x000000000000000000000000000000db0b01933ffaa5cbaa0c4b00a97c88bab0", - "0x00000000000000000000000000000000000cb49875192963da14b2e90874802c", - "0x0000000000000000000000000000007f4a3c352be3b4dc12ee7aa892d271c8e2", - "0x000000000000000000000000000000000018859077eebb1a622d55af50ecb62c", - "0x00000000000000000000000000000016395c017b6bdcbc01a4b66ba36b2e3676", - "0x000000000000000000000000000000000020e02a68038d79b2df595743a1d517", - "0x0000000000000000000000000000005216c2f6b2cd003a57f0971e67a6a4bfd1", - "0x00000000000000000000000000000000002b9bddfd05979d093880198bb1021f", - "0x000000000000000000000000000000bc30d06668a9c57d2d4fefabbfa2b743d1", - "0x00000000000000000000000000000000000249209ff2e5a2868359b760e39a69", - "0x000000000000000000000000000000fda5b1d02f438a2366a268ded092c3fdf9", - "0x00000000000000000000000000000000001bdd80759cc81ee9e4f54c6e4fb947", - "0x00000000000000000000000000000085c551241de41500c5ab4b4f53c1bff1b9", - "0x00000000000000000000000000000000001373f130bddc56203a563ea82d680c", - "0x0000000000000000000000000000002851a00032a55807e186581b9b1c0f8ee3", - "0x00000000000000000000000000000000000e3c26b4680e961e43b09e01fd4c53", - "0x00000000000000000000000000000024d349d3935bd6244a7445d94a0514d663", - "0x00000000000000000000000000000000000531f17ce276d0394382cabf112d1c", - "0x0000000000000000000000000000006b6278d87e24137bcdb746d699992e6fe3", - "0x0000000000000000000000000000000000099cb1ebe224fa90e84cb905336537", - "0x00000000000000000000000000000019fff9608cade5e9a7373068a04ff86a15", - "0x000000000000000000000000000000000028da1b919b4e0540053ee2900ec512", - "0x000000000000000000000000000000f4a6c6ffdf80a72db78762e237d58cd5f6", - "0x000000000000000000000000000000000026814a59803555635a3b6dfd056d19", - "0x000000000000000000000000000000f45b8d96069231f48e0d0c34d57593a6a6", - "0x00000000000000000000000000000000000b9dc32399025796005b2f68c15991", - "0x000000000000000000000000000000750e1b5cb997a3adf8540bf55bb9264ec4", - "0x00000000000000000000000000000000001f6cd5b6d43f67798ae4655c016f37", - "0x000000000000000000000000000000596cc6183848f32c60ec74fe2bcd76b20f", - "0x00000000000000000000000000000000000ed62d10b019355f008b46412d0e2d", - "0x000000000000000000000000000000d7c0c94a47c8ea795b876db23f9fac0856", - "0x00000000000000000000000000000000001c87d112f4f2a05269ff6ffe553d69", - "0x0000000000000000000000000000006dedbb854a45d7b794c26cf116c03fbd10", - "0x00000000000000000000000000000000000395dc40aba865aaf1109997fe9b15", - "0x000000000000000000000000000000834c5e938cf9e8bd4bd5847e2408407276", - "0x000000000000000000000000000000000008524b40cf87b668119022f691cfac", - "0x000000000000000000000000000000e699df860731437ec57f9890fe4b3a4205", - "0x00000000000000000000000000000000000e1e9d4327e635f547da67aef57e86", + "0x000000000000000000000000000000783605d10dee88f3446f8b79a2f1aaeaff", + "0x00000000000000000000000000000000001a51c023530c67e560bcb0ba1ec137", + "0x0000000000000000000000000000009e6718d8f26b0ae0d65b5122dd9064a8c5", + "0x000000000000000000000000000000000008bd4b7920342bfbd039db1ee55d88", + "0x000000000000000000000000000000617307e4b63ed7cec94b60740cb5c84df1", + "0x000000000000000000000000000000000025adbe69c2d429df4ab6ef0c126f61", + "0x00000000000000000000000000000030f510d2bee55700300bc3f0af83975837", + "0x00000000000000000000000000000000000324a35b0799a5aae877bb5d3a4434", + "0x0000000000000000000000000000006601766aaf353f0620b1c495fb18d5d7a5", + "0x00000000000000000000000000000000000a1f15fcfa16d3936cd496ab1b50d5", + "0x0000000000000000000000000000000a21994cf1d6512ac35c176f51b2f5f1e2", + "0x000000000000000000000000000000000000d5054b93257d9b333fc64da7f62f", + "0x000000000000000000000000000000ad8b390a78ff965f20e46b95c8cd7ae1fd", + "0x0000000000000000000000000000000000037269df9040410be86733e4030ddf", + "0x0000000000000000000000000000000627c33fd13cfb70089a81026bddff5e17", + "0x000000000000000000000000000000000015dcc64c27c12e8f1c8685b5f001ac", + "0x000000000000000000000000000000e42f55ee6eb3c52a64e50b67f638ea1057", + "0x00000000000000000000000000000000002e8b392b67b1f2b0f16935ea837893", + "0x00000000000000000000000000000039acb80c1d54b735ea469e710ad173bf1f", + "0x00000000000000000000000000000000002f9ce04519a345501f036c30948d78", + "0x0000000000000000000000000000003e49ff085d2de019f1c97fc6512775205c", + "0x00000000000000000000000000000000002f957094b6c0396f94ec83a572039c", + "0x0000000000000000000000000000008b7742a1acc5ea713db9cd9e9c0be79866", + "0x000000000000000000000000000000000014dfa9a9178a08acb822d16344aaa5", + "0x000000000000000000000000000000116f7a0ccaa1bd38458a7c98eb80c7cb61", + "0x0000000000000000000000000000000000120c83d9479c9bac206da050162421", + "0x0000000000000000000000000000000c1c8be1879b270512b6c0e158e62a7958", + "0x000000000000000000000000000000000004adb256778ba41a4be98cde5cabf6", + "0x000000000000000000000000000000446c8412f04925231f27e5e1f0648149f3", + "0x0000000000000000000000000000000000143418fc68626360bbfe3e9be9dcf1", + "0x0000000000000000000000000000000ec378de7ed7d1b9fc055a947c5933800d", + "0x00000000000000000000000000000000001af31da27f74ba1105460691a1ccff", + "0x00000000000000000000000000000050f02d627af23abc8135693fc27b715a21", + "0x000000000000000000000000000000000020273ab425e61cbde5ecd9b4b1b6b1", + "0x0000000000000000000000000000006d6c593e018875b80cceea141a738bf0f8", + "0x0000000000000000000000000000000000013dca7a9ddd9ffaacec686fc1561d", + "0x000000000000000000000000000000353e23babdbaa406bae078b5b853dd9a9a", + "0x00000000000000000000000000000000002a7aae4b5a4bfecd4cc1317e9281e2", + "0x000000000000000000000000000000e42f1f966270491d64a3939d1ebd0e90b4", + "0x000000000000000000000000000000000016e063d3cd03887298b6132fdef4dc", + "0x0000000000000000000000000000001cf7ccdfce4b029e0a7c645a61369c1350", + "0x000000000000000000000000000000000022db244bab52efbf0dc1f1d7936037", + "0x00000000000000000000000000000006e5d58c9dc15e920ceb4549afafdfe987", + "0x00000000000000000000000000000000001f94145535fe8593dc178b72d4769b", + "0x000000000000000000000000000000a0f2b503d1faf841263db52efbdacb5cfd", + "0x00000000000000000000000000000000000bcded0d4cc2918b7b0d6f3b77c32b", + "0x00000000000000000000000000000066e2bc79d1156502e32fa96ea98912509d", + "0x00000000000000000000000000000000003051493b3f6dd2dbadf7b1a63f5cb8", + "0x0000000000000000000000000000007c2ee57a35a7b5559dbf313b737bc09d7a", + "0x00000000000000000000000000000000000ee8f28706fc0bb1c55f45d9c5e11d", + "0x000000000000000000000000000000f9ceead3e0e56735d879248512cf821f51", + "0x00000000000000000000000000000000000f2eee5f869d378d227fbda3903593", + "0x0000000000000000000000000000001a10593f7bd44af1ae79e09a98443c187e", + "0x00000000000000000000000000000000002999c17673f49d88885c1ef73676ad", + "0x000000000000000000000000000000a930393c6b22785d5e556943a1f8f14dc3", + "0x00000000000000000000000000000000000b73acff2597886fa1cd4fa8f2aac5", + "0x00000000000000000000000000000062f81494b5e94f2b8217dbd5a879475a46", + "0x00000000000000000000000000000000000db12f9aa7f508d9ca86490c62a992", + "0x000000000000000000000000000000d0c3445d1a50dcf6cea71c7768df472337", + "0x000000000000000000000000000000000021293d21d9d80935bb85e397a41944", + "0x00000000000000000000000000000040fd67ea7b5f0ef171f70dbfb3e782b101", + "0x000000000000000000000000000000000000446797bb708230257e513fc42307", + "0x0000000000000000000000000000001c3d913e85dc452c14c2c0ec8fae60828f", + "0x00000000000000000000000000000000001a786c5a89c3fbf39f18e0b7907b9b", + "0x000000000000000000000000000000d7cdc1f7dd5d5630f070594c36389ba3eb", + "0x00000000000000000000000000000000002477b0d711eb5ad667d4862057754f", + "0x00000000000000000000000000000054937196f636509471a41d7a9a16cd776a", + "0x000000000000000000000000000000000011f6b9de18c26b9e5dd5282d74f559", + "0x0000000000000000000000000000003527b488c66ab52157394fe98e8d503375", + "0x00000000000000000000000000000000001f4504e41b71a68303cb5ca8c64d93", + "0x00000000000000000000000000000000b8e323d809309c01978b2e8a7dafb2ee", + "0x0000000000000000000000000000000000011c426eeb4e77c6988e411f746355", + "0x000000000000000000000000000000a6927ea3536393a48db7a5b3c59b62422d", + "0x00000000000000000000000000000000001c832a0455d56d6a0687a5e6c2d61a", + "0x0000000000000000000000000000009c2c6926b7652ed605f2da17cf15445b27", + "0x00000000000000000000000000000000002fb0bfd2531f75d7c2bdade45e7bad", + "0x000000000000000000000000000000f36b24b17547b2e8109c2ebc998631131c", + "0x00000000000000000000000000000000001a11a6b0991fed77080d99c5fee9e2", + "0x0000000000000000000000000000004c705bfe3c29784f4c8557e613a9843f5a", + "0x00000000000000000000000000000000000a050c6b7e67f7555bdfabad89e358", + "0x000000000000000000000000000000e377baa766a2445b47389d30cf80784d55", + "0x0000000000000000000000000000000000109bb1986d3fcc36f4f2e136a14af2", + "0x0000000000000000000000000000005ac701b98bf1793181c41a171f9b76474f", + "0x00000000000000000000000000000000001e713216db9aeac1bcc33dd1628ccc", + "0x000000000000000000000000000000a9a15e72d006e3c8084bb2381f2d67a85a", + "0x000000000000000000000000000000000009440926d77968e47e240b5064ce43", + "0x000000000000000000000000000000f5ea6a94972805f08278275e70b6c2ea02", + "0x00000000000000000000000000000000001bb709cac6b833dcdabea65f83d873", + "0x0000000000000000000000000000007c6fc5ae0c56f06e0a35747f24625e5763", + "0x00000000000000000000000000000000002194d92617bbb3ba3d9e53f4f13c5c", + "0x00000000000000000000000000000002eb63f6e2fc21862f6fefead2978de7e0", + "0x000000000000000000000000000000000011ca88979a66ada092bb26e2b64b86", + "0x000000000000000000000000000000c6ced8daf349335d74908736241f5f3328", + "0x00000000000000000000000000000000001d346dd159688f85b77717f8197777", + "0x0000000000000000000000000000001d06ddfeea51240c79980d4daac8144443", + "0x000000000000000000000000000000000010e952d77959f4aa6fe9cb7222d990", + "0x00000000000000000000000000000046fcc9155039d285eaa76f4b0f8839e447", + "0x0000000000000000000000000000000000109830b81fd8b5e0a3327bf961ea67", + "0x000000000000000000000000000000297471377a71b5240987690610bad14c78", + "0x000000000000000000000000000000000028de29af66333e8ea2ee2d23ff9df4", + "0x000000000000000000000000000000556e43d9f4f122ba79d3484e023fb4da7d", + "0x0000000000000000000000000000000000062b31b3719d79c253d59707efcc41", + "0x000000000000000000000000000000a840d8e4c75295a90dc312b4d2571c52c3", + "0x0000000000000000000000000000000000283eb52c07506637e09fb73d7875ad", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000002", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000004d3023af24c3e44ce85cf3cc342e769ccb", - "0x0000000000000000000000000000000000240c758e2198740d86d04d8c549e2d", - "0x0000000000000000000000000000008594fde0103e2a267b8bd33d78387a5ce7", - "0x00000000000000000000000000000000002933a8a1f202c0b54945abac713645" + "0x0000000000000000000000000000003caf66cc36f80eea9d90212b0c78b4fc86", + "0x000000000000000000000000000000000009bb4fa7081d3514d81b101a129d2e", + "0x000000000000000000000000000000a3763f418f71af04ee79ff2b2a03adebb6", + "0x000000000000000000000000000000000008970fb4ba80d3365abc03d46c3537" ] - hash = "0x2433a1c7e91c3fb04f1e430a666c0d72b25b400f5d917893bbc7606816f4fc19" + hash = "0x288943084efa7a298dec1f9b1b6f91c4fae8eb7663a57569671abd0db6acfa7c" diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/abis/checkpoint_header.nr b/noir-projects/noir-protocol-circuits/crates/types/src/abis/checkpoint_header.nr index 02ceecdde079..c5c7fa4ef864 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/abis/checkpoint_header.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/abis/checkpoint_header.nr @@ -2,7 +2,6 @@ use crate::{ abis::gas_fees::GasFees, address::{AztecAddress, EthAddress}, constants::{CHECKPOINT_HEADER_LENGTH, CHECKPOINT_HEADER_SIZE_IN_BYTES}, - content_commitment::ContentCommitment, hash::sha256_to_field, traits::{Deserialize, Empty, FromField, Hash, Serialize, ToField}, }; @@ -12,7 +11,8 @@ use std::meta::derive; pub struct CheckpointHeader { pub last_archive_root: Field, pub block_headers_hash: Field, - pub content_commitment: ContentCommitment, + pub blobs_hash: Field, + pub in_hash: Field, pub slot_number: Field, // The timestamp of the slot. All blocks in the checkpoint share the same timestamp, which must equal to this value. pub timestamp: u64, @@ -29,7 +29,8 @@ impl Empty for CheckpointHeader { Self { last_archive_root: 0, block_headers_hash: 0, - content_commitment: ContentCommitment::empty(), + blobs_hash: 0, + in_hash: 0, slot_number: 0, timestamp: 0, coinbase: EthAddress::zero(), @@ -46,9 +47,8 @@ impl CheckpointHeader { let last_archive_root_bytes: [u8; 32] = self.last_archive_root.to_be_bytes(); let block_headers_hash_bytes: [u8; 32] = self.block_headers_hash.to_be_bytes(); - let blobs_hash_bytes: [u8; 32] = self.content_commitment.blobs_hash.to_be_bytes(); - let in_hash_bytes: [u8; 32] = self.content_commitment.in_hash.to_be_bytes(); - let out_hash_bytes: [u8; 32] = self.content_commitment.out_hash.to_be_bytes(); + let blobs_hash_bytes: [u8; 32] = self.blobs_hash.to_be_bytes(); + let in_hash_bytes: [u8; 32] = self.in_hash.to_be_bytes(); let slot_number_bytes: [u8; 32] = self.slot_number.to_be_bytes(); let coinbase_bytes: [u8; 20] = self.coinbase.to_be_bytes(); let fee_recipient_bytes: [u8; 32] = self.fee_recipient.to_field().to_be_bytes(); @@ -63,31 +63,30 @@ impl CheckpointHeader { bytes[i + 32] = block_headers_hash_bytes[i]; bytes[i + 64] = blobs_hash_bytes[i]; bytes[i + 96] = in_hash_bytes[i]; - bytes[i + 128] = out_hash_bytes[i]; - bytes[i + 160] = slot_number_bytes[i]; + bytes[i + 128] = slot_number_bytes[i]; } let mut timestamp = self.timestamp; for i in 0..8 { - bytes[200 - 1 - i] = timestamp as u8; + bytes[168 - 1 - i] = timestamp as u8; timestamp = timestamp >> 8; } for i in 0..20 { - bytes[i + 200] = coinbase_bytes[i]; + bytes[i + 168] = coinbase_bytes[i]; } for i in 0..32 { - bytes[i + 220] = fee_recipient_bytes[i]; + bytes[i + 188] = fee_recipient_bytes[i]; } for i in 0..16 { - bytes[i + 252] = gas_fees_per_da_gas_bytes[i]; - bytes[i + 268] = gas_fees_per_l2_gas_bytes[i]; + bytes[i + 220] = gas_fees_per_da_gas_bytes[i]; + bytes[i + 236] = gas_fees_per_l2_gas_bytes[i]; } for i in 0..32 { - bytes[i + 284] = total_mana_used_bytes[i]; + bytes[i + 252] = total_mana_used_bytes[i]; } bytes @@ -106,7 +105,7 @@ fn empty_checkpoint_header_hash_matches_ts() { // Generated from checkpoint_header.test.ts let empty_checkpoint_header_hash_from_ts = - 0x007802c95d2f1ade746d97350a18ddbfdb9f5bee2803436917a3cf3d6a685a3a; + 0x00d72511e843bf5a2e44e8bd1da20c2626311d1d6679424f717807a1db731d62; assert_eq(header.hash(), empty_checkpoint_header_hash_from_ts); } @@ -116,7 +115,8 @@ fn checkpoint_header_hash_matches_ts() { let header = CheckpointHeader { last_archive_root: 123, block_headers_hash: 456, - content_commitment: ContentCommitment { blobs_hash: 77, in_hash: 88, out_hash: 99 }, + blobs_hash: 77, + in_hash: 88, slot_number: 1234, timestamp: 5678, coinbase: EthAddress::from_field(9090), @@ -132,7 +132,7 @@ fn checkpoint_header_hash_matches_ts() { // Generated from checkpoint_header.test.ts let checkpoint_header_hash_from_ts = - 0x007df45447387f2e48b4acae48b6c7f72eb63a9f6611c2f665df39f013a20dcf; + 0x00710281705a29930cf34f3470280e346449cd5a5d551177db509d2b5d3a5f21; assert_eq(header.hash(), checkpoint_header_hash_from_ts); } diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr index abdc33875625..cd919d0664a2 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/constants.nr @@ -288,7 +288,6 @@ pub global GAS_SETTINGS_LENGTH: u32 = GAS_LENGTH /* gas_limits */ + GAS_FEES_LENGTH /* max_fees_per_gas */ + GAS_FEES_LENGTH /* max_priority_fees_per_gas */; pub global CALL_CONTEXT_LENGTH: u32 = 4; -pub global CONTENT_COMMITMENT_LENGTH: u32 = 3; pub global CONTRACT_INSTANCE_LENGTH: u32 = 16; pub global CONTRACT_STORAGE_READ_LENGTH: u32 = 3; pub global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: u32 = 3; @@ -383,17 +382,10 @@ pub global BLOCK_HEADER_LENGTH: u32 = APPEND_ONLY_TREE_SNAPSHOT_LENGTH + GLOBAL_VARIABLES_LENGTH + TOTAL_FEES_LENGTH + TOTAL_MANA_USED_LENGTH; -// Global variables are all 32 bytes, apart from coinbase which is 20, hence -12. A state reference is just 4 snapshots. -pub global BLOCK_HEADER_LENGTH_BYTES: u32 = APPEND_ONLY_TREE_SNAPSHOT_LENGTH_BYTES - + 32 * CONTENT_COMMITMENT_LENGTH - + 4 * APPEND_ONLY_TREE_SNAPSHOT_LENGTH_BYTES - + 32 * GLOBAL_VARIABLES_LENGTH - - 12 - + 32 * TOTAL_FEES_LENGTH - + 32 * TOTAL_MANA_USED_LENGTH; pub global CHECKPOINT_HEADER_LENGTH: u32 = 1 /* last_archive_root */ + 1 /* block_headers_hash */ - + CONTENT_COMMITMENT_LENGTH + + 1 /* blobs_hash */ + + 1 /* in_hash */ + 1 /* slot_number */ + 1 /* timestamp */ + 1 /* coinbase */ @@ -581,11 +573,13 @@ pub global BLOCK_ROLLUP_PUBLIC_INPUTS_LENGTH: u32 = CHECKPOINT_CONSTANT_DATA_LEN pub global CHECKPOINT_ROLLUP_PUBLIC_INPUTS_LENGTH: u32 = EPOCH_CONSTANT_DATA_LENGTH + 2 * APPEND_ONLY_TREE_SNAPSHOT_LENGTH /* previous_archive and new_archive */ + AZTEC_MAX_EPOCH_DURATION /* checkpoint_header_hashes */ + + AZTEC_MAX_EPOCH_DURATION /* out_hashes */ + AZTEC_MAX_EPOCH_DURATION * FEE_RECIPIENT_LENGTH /* fees */ + 2 * BLOB_ACCUMULATOR_LENGTH /* start and end blob accumulators */ + FINAL_BLOB_BATCHING_CHALLENGES_LENGTH; pub global ROOT_ROLLUP_PUBLIC_INPUTS_LENGTH: u32 = 1 /* previous_archive_root */ + 1 /* end_archive_root */ + + 1 /* out_hash */ + 1 /* chain_id */ + 1 /* version */ + 1 /* vk_tree_root */ diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr b/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr deleted file mode 100644 index 9461e2ccab7b..000000000000 --- a/noir-projects/noir-protocol-circuits/crates/types/src/content_commitment.nr +++ /dev/null @@ -1,32 +0,0 @@ -use crate::traits::{Deserialize, Empty, Serialize}; - -#[derive(Deserialize, Eq, Serialize)] -pub struct ContentCommitment { - pub blobs_hash: Field, - pub in_hash: Field, - pub out_hash: Field, -} - -impl Empty for ContentCommitment { - fn empty() -> Self { - Self { blobs_hash: 0, in_hash: 0, out_hash: 0 } - } -} - -mod test { - use crate::{ - constants::CONTENT_COMMITMENT_LENGTH, - content_commitment::ContentCommitment, - traits::{Deserialize, Serialize}, - }; - - #[test] - fn test_content_commitment_serialization() { - let item = ContentCommitment { blobs_hash: 123, in_hash: 456, out_hash: 789 }; - // We use the CONTENT_COMMITMENT_LENGTH constant to ensure that there is a match - // between the derived trait implementation and the constant - let serialized: [Field; CONTENT_COMMITMENT_LENGTH] = item.serialize(); - let deserialized = ContentCommitment::deserialize(serialized); - assert(item.eq(deserialized)); - } -} diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr b/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr index 7949e0ade392..a57fd4456391 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/lib.nr @@ -16,7 +16,6 @@ pub mod contract_class_id; pub mod merkle_tree; pub mod contract_instance; pub mod messaging; -pub mod content_commitment; pub mod poseidon2; pub mod abis; diff --git a/yarn-project/archiver/src/archiver/archiver.test.ts b/yarn-project/archiver/src/archiver/archiver.test.ts index 11afbc7d3e02..dc69987142f1 100644 --- a/yarn-project/archiver/src/archiver/archiver.test.ts +++ b/yarn-project/archiver/src/archiver/archiver.test.ts @@ -733,7 +733,7 @@ describe('Archiver', () => { expect.stringMatching(/Mismatch inHash for checkpoint 3/i), expect.objectContaining({ computedInHash, - publishedInHash: checkpoints[2].header.contentCommitment.inHash, + publishedInHash: checkpoints[2].header.inHash, }), ); }, 10_000); diff --git a/yarn-project/archiver/src/archiver/archiver.ts b/yarn-project/archiver/src/archiver/archiver.ts index fbe7d9112442..f10228753595 100644 --- a/yarn-project/archiver/src/archiver/archiver.ts +++ b/yarn-project/archiver/src/archiver/archiver.ts @@ -1050,7 +1050,7 @@ export class Archiver // checkpoints we just retrieved. const l1ToL2Messages = await this.getL1ToL2Messages(published.checkpoint.number); const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages); - const publishedInHash = published.checkpoint.header.contentCommitment.inHash; + const publishedInHash = published.checkpoint.header.inHash; if (!computedInHash.equals(publishedInHash)) { this.log.fatal(`Mismatch inHash for checkpoint ${published.checkpoint.number}`, { checkpointHash: published.checkpoint.hash(), diff --git a/yarn-project/archiver/src/archiver/l1/calldata_retriever.test.ts b/yarn-project/archiver/src/archiver/l1/calldata_retriever.test.ts index 35c6be59b562..6907cd29bf49 100644 --- a/yarn-project/archiver/src/archiver/l1/calldata_retriever.test.ts +++ b/yarn-project/archiver/src/archiver/l1/calldata_retriever.test.ts @@ -13,7 +13,6 @@ import { Signature } from '@aztec/stdlib/block'; import { GasFees } from '@aztec/stdlib/gas'; import { ConsensusPayload, SignatureDomainSeparator } from '@aztec/stdlib/p2p'; import { CheckpointHeader } from '@aztec/stdlib/rollup'; -import { ContentCommitment } from '@aztec/stdlib/tx'; import { type MockProxy, mock } from 'jest-mock-extended'; import { @@ -1135,7 +1134,7 @@ describe('CalldataRetriever', () => { expect(result.blockHash).toBe(tx.blockHash); // Verify all components are properly decoded - expect(result.header.contentCommitment).toBeInstanceOf(ContentCommitment); + expect(result.header.inHash).toBeInstanceOf(Fr); expect(result.header.gasFees).toBeInstanceOf(GasFees); // Verify instrumentation was called @@ -1208,7 +1207,7 @@ describe('CalldataRetriever', () => { expect(result.blockHash).toBe(blockHash); // Verify all components are properly decoded - expect(result.header.contentCommitment).toBeInstanceOf(ContentCommitment); + expect(result.header.inHash).toBeInstanceOf(Fr); expect(result.header.gasFees).toBeInstanceOf(GasFees); // Verify proxy implementation was checked diff --git a/yarn-project/aztec-node/src/aztec-node/server.ts b/yarn-project/aztec-node/src/aztec-node/server.ts index 0049a5594b1e..b0e4988bf64d 100644 --- a/yarn-project/aztec-node/src/aztec-node/server.ts +++ b/yarn-project/aztec-node/src/aztec-node/server.ts @@ -14,7 +14,7 @@ import { createEthereumChain } from '@aztec/ethereum/chain'; import { getPublicClient } from '@aztec/ethereum/client'; import { RegistryContract, RollupContract } from '@aztec/ethereum/contracts'; import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses'; -import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types'; +import { BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types'; import { compactArray, pick } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/curves/bn254'; import { EthAddress } from '@aztec/foundation/eth-address'; @@ -967,15 +967,28 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable { } /** - * Returns all the L2 to L1 messages in a block. - * @param blockNumber - The block number at which to get the data. - * @returns The L2 to L1 messages (undefined if the block number is not found). + * Returns all the L2 to L1 messages in an epoch. + * @param epoch - The epoch at which to get the data. + * @returns The L2 to L1 messages (empty array if the epoch is not found). */ - public async getL2ToL1Messages(blockNumber: BlockParameter): Promise { - const block = await this.blockSource.getBlock( - blockNumber === 'latest' ? await this.getBlockNumber() : (blockNumber as BlockNumber), + public async getL2ToL1Messages(epoch: EpochNumber): Promise { + // Assumes `getBlocksForEpoch` returns blocks in ascending order of block number. + const blocks = await this.blockSource.getBlocksForEpoch(epoch); + const blocksInCheckpoints: L2Block[][] = []; + let previousSlotNumber = SlotNumber.ZERO; + let checkpointIndex = -1; + for (const block of blocks) { + const slotNumber = block.header.globalVariables.slotNumber; + if (slotNumber !== previousSlotNumber) { + checkpointIndex++; + blocksInCheckpoints.push([]); + previousSlotNumber = slotNumber; + } + blocksInCheckpoints[checkpointIndex].push(block); + } + return blocksInCheckpoints.map(blocks => + blocks.map(block => block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs)), ); - return block?.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs); } /** diff --git a/yarn-project/aztec.js/src/ethereum/portal_manager.ts b/yarn-project/aztec.js/src/ethereum/portal_manager.ts index bd90e1720b0a..2a6c9fa24039 100644 --- a/yarn-project/aztec.js/src/ethereum/portal_manager.ts +++ b/yarn-project/aztec.js/src/ethereum/portal_manager.ts @@ -1,5 +1,6 @@ import type { ExtendedViemWalletClient, ViemContract } from '@aztec/ethereum/types'; import { extractEvent } from '@aztec/ethereum/utils'; +import type { EpochNumber } from '@aztec/foundation/branded-types'; import { sha256ToField } from '@aztec/foundation/crypto/sha256'; import { Fr } from '@aztec/foundation/curves/bn254'; import { EthAddress } from '@aztec/foundation/eth-address'; @@ -408,26 +409,26 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager { * Withdraws funds from the portal by consuming an L2 to L1 message. Returns once the tx is mined on L1. * @param amount - Amount to withdraw. * @param recipient - Who will receive the funds. - * @param blockNumber - L2 block number of the message. + * @param epochNumber - Epoch number of the message. * @param messageIndex - Index of the message. * @param siblingPath - Sibling path of the message. */ public async withdrawFunds( amount: bigint, recipient: EthAddress, - blockNumber: bigint, + epochNumber: EpochNumber, messageIndex: bigint, siblingPath: SiblingPath, ) { this.logger.info( - `Sending L1 tx to consume message at block ${blockNumber} index ${messageIndex} to withdraw ${amount}`, + `Sending L1 tx to consume message at epoch ${epochNumber} index ${messageIndex} to withdraw ${amount}`, ); const messageLeafId = getL2ToL1MessageLeafId({ leafIndex: messageIndex, siblingPath }); - const isConsumedBefore = await this.outbox.read.hasMessageBeenConsumedAtCheckpoint([blockNumber, messageLeafId]); + const isConsumedBefore = await this.outbox.read.hasMessageBeenConsumedAtEpoch([BigInt(epochNumber), messageLeafId]); if (isConsumedBefore) { throw new Error( - `L1 to L2 message at block ${blockNumber} index ${messageIndex} height ${siblingPath.pathSize} has already been consumed`, + `L2 to L1 message at epoch ${epochNumber} index ${messageIndex} height ${siblingPath.pathSize} has already been consumed`, ); } @@ -436,7 +437,7 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager { recipient.toString(), amount, false, - BigInt(blockNumber), + BigInt(epochNumber), messageIndex, siblingPath.toBufferArray().map((buf: Buffer): Hex => `0x${buf.toString('hex')}`), ]); @@ -445,10 +446,10 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager { hash: await this.extendedClient.writeContract(withdrawRequest), }); - const isConsumedAfter = await this.outbox.read.hasMessageBeenConsumedAtCheckpoint([blockNumber, messageLeafId]); + const isConsumedAfter = await this.outbox.read.hasMessageBeenConsumedAtEpoch([BigInt(epochNumber), messageLeafId]); if (!isConsumedAfter) { throw new Error( - `L1 to L2 message at block ${blockNumber} index ${messageIndex} height ${siblingPath.pathSize} not consumed after withdrawal`, + `L2 to L1 message at epoch ${epochNumber} index ${messageIndex} height ${siblingPath.pathSize} not consumed after withdrawal`, ); } } diff --git a/yarn-project/aztec/src/cli/aztec_start_action.ts b/yarn-project/aztec/src/cli/aztec_start_action.ts index d16cfe89308c..8217313dd09c 100644 --- a/yarn-project/aztec/src/cli/aztec_start_action.ts +++ b/yarn-project/aztec/src/cli/aztec_start_action.ts @@ -35,6 +35,11 @@ export async function aztecStart(options: any, userLog: LogFn, debugLogger: Logg l1RpcUrls: options.l1RpcUrls, testAccounts: localNetwork.testAccounts, realProofs: false, + // Setting the epoch duration to 4 by default for local network. This allows the epoch to be "proven" faster, so + // the users can consume out hash without having to wait for a long time. + // Note: We are not proving anything in the local network (realProofs == false). But in `createLocalNetwork`, + // the EpochTestSettler will set the out hash to the outbox when an epoch is complete. + aztecEpochDuration: 4, }, userLog, ); diff --git a/yarn-project/aztec/src/local-network/local-network.ts b/yarn-project/aztec/src/local-network/local-network.ts index 2f77e628596c..bc78df4d470d 100644 --- a/yarn-project/aztec/src/local-network/local-network.ts +++ b/yarn-project/aztec/src/local-network/local-network.ts @@ -34,6 +34,7 @@ import { foundry } from 'viem/chains'; import { createAccountLogs } from '../cli/util.js'; import { DefaultMnemonic } from '../mnemonic.js'; import { AnvilTestWatcher } from '../testing/anvil_test_watcher.js'; +import { EpochTestSettler } from '../testing/epoch_test_settler.js'; import { getBananaFPCAddress, setupBananaFPC } from './banana_fpc.js'; import { getSponsoredFPCAddress } from './sponsored_fpc.js'; @@ -97,7 +98,11 @@ export async function createLocalNetwork(config: Partial = { if ((config.l1RpcUrls?.length || 0) > 1) { logger.warn(`Multiple L1 RPC URLs provided. Local networks will only use the first one: ${l1RpcUrl}`); } - const aztecNodeConfig: AztecNodeConfig = { ...getConfigEnvVars(), ...config }; + + const aztecNodeConfig: AztecNodeConfig = { + ...getConfigEnvVars(), + ...config, + }; const hdAccount = mnemonicToAccount(config.l1Mnemonic || DefaultMnemonic); if ( aztecNodeConfig.publisherPrivateKeys == undefined || @@ -134,10 +139,13 @@ export async function createLocalNetwork(config: Partial = { : []; const { genesisArchiveRoot, prefilledPublicData, fundingNeeded } = await getGenesisValues(fundedAddresses); - let watcher: AnvilTestWatcher | undefined = undefined; const dateProvider = new TestDateProvider(); + + let cheatcodes: EthCheatCodes | undefined; + let rollupAddress: EthAddress | undefined; + let watcher: AnvilTestWatcher | undefined; if (!aztecNodeConfig.p2pEnabled) { - const l1ContractAddresses = await deployContractsToL1( + ({ rollupAddress } = await deployContractsToL1( aztecNodeConfig, aztecNodeConfig.validatorPrivateKeys.getValue()[0], { @@ -145,7 +153,7 @@ export async function createLocalNetwork(config: Partial = { genesisArchiveRoot, feeJuicePortalInitialBalance: fundingNeeded, }, - ); + )); const chain = aztecNodeConfig.l1RpcUrls.length > 0 @@ -157,13 +165,12 @@ export async function createLocalNetwork(config: Partial = { transport: fallback([httpViemTransport(l1RpcUrl)]) as any, }); - watcher = new AnvilTestWatcher( - new EthCheatCodes([l1RpcUrl], dateProvider), - l1ContractAddresses.rollupAddress, - publicClient, - dateProvider, - ); + cheatcodes = new EthCheatCodes([l1RpcUrl], dateProvider); + + watcher = new AnvilTestWatcher(cheatcodes, rollupAddress, publicClient, dateProvider); watcher.setisLocalNetwork(true); + watcher.setIsMarkingAsProven(false); // Do not mark as proven in the watcher. It's marked in the epochTestSettler after the out hash is set. + await watcher.start(); } @@ -172,6 +179,14 @@ export async function createLocalNetwork(config: Partial = { const blobClient = createBlobClient(); const node = await createAztecNode(aztecNodeConfig, { telemetry, blobClient, dateProvider }, { prefilledPublicData }); + let epochTestSettler: EpochTestSettler | undefined; + if (!aztecNodeConfig.p2pEnabled) { + epochTestSettler = new EpochTestSettler(cheatcodes!, rollupAddress!, node.getBlockSource(), { + pollingIntervalMs: 200, + }); + await epochTestSettler.start(); + } + if (initialAccounts.length) { const PXEConfig = { proverEnabled: aztecNodeConfig.realProofs }; const wallet = await TestWallet.create(node, PXEConfig); @@ -196,6 +211,7 @@ export async function createLocalNetwork(config: Partial = { const stop = async () => { await node.stop(); await watcher?.stop(); + await epochTestSettler?.stop(); }; return { node, stop }; diff --git a/yarn-project/aztec/src/testing/epoch_test_settler.ts b/yarn-project/aztec/src/testing/epoch_test_settler.ts new file mode 100644 index 000000000000..bfa5ff5ebeed --- /dev/null +++ b/yarn-project/aztec/src/testing/epoch_test_settler.ts @@ -0,0 +1,59 @@ +import { Fr } from '@aztec/aztec.js/fields'; +import { type EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test'; +import { type EpochNumber, SlotNumber } from '@aztec/foundation/branded-types'; +import { EpochMonitor } from '@aztec/prover-node'; +import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block'; +import { computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging'; + +export class EpochTestSettler { + private rollupCheatCodes: RollupCheatCodes; + private epochMonitor?: EpochMonitor; + + constructor( + cheatcodes: EthCheatCodes, + rollupAddress: EthAddress, + private l2BlockSource: L2BlockSource, + private options: { pollingIntervalMs: number; provingDelayMs?: number }, + ) { + this.rollupCheatCodes = new RollupCheatCodes(cheatcodes, { rollupAddress }); + } + + async start() { + const { epochDuration } = await this.rollupCheatCodes.getConfig(); + this.epochMonitor = new EpochMonitor(this.l2BlockSource, { epochDuration: Number(epochDuration) }, this.options); + this.epochMonitor.start(this); + } + + async stop() { + await this.epochMonitor?.stop(); + } + + async handleEpochReadyToProve(epoch: EpochNumber): Promise { + const blocks = await this.l2BlockSource.getBlocksForEpoch(epoch); + const messagesInEpoch: Fr[][][][] = []; + let previousSlotNumber = SlotNumber.ZERO; + let checkpointIndex = -1; + for (const block of blocks) { + const slotNumber = block.header.globalVariables.slotNumber; + if (slotNumber !== previousSlotNumber) { + checkpointIndex++; + messagesInEpoch[checkpointIndex] = []; + previousSlotNumber = slotNumber; + } + messagesInEpoch[checkpointIndex].push(block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs)); + } + + const [firstMessage] = messagesInEpoch.flat(3); + if (firstMessage) { + const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, firstMessage); + await this.rollupCheatCodes.insertOutbox(epoch, outHash.toBigInt()); + } + + // Mark the blocks as proven. + for (const block of blocks) { + await this.rollupCheatCodes.markAsProven(block.number); + } + + return true; + } +} diff --git a/yarn-project/aztec/src/testing/index.ts b/yarn-project/aztec/src/testing/index.ts index a758fd4eaa8c..eaf2f836c9a3 100644 --- a/yarn-project/aztec/src/testing/index.ts +++ b/yarn-project/aztec/src/testing/index.ts @@ -1,3 +1,4 @@ export { AnvilTestWatcher } from './anvil_test_watcher.js'; export { EthCheatCodes, RollupCheatCodes } from '@aztec/ethereum/test'; export { CheatCodes } from './cheat_codes.js'; +export { EpochTestSettler } from './epoch_test_settler.js'; diff --git a/yarn-project/constants/src/constants.gen.ts b/yarn-project/constants/src/constants.gen.ts index fa64bff27485..9f06c760d9dd 100644 --- a/yarn-project/constants/src/constants.gen.ts +++ b/yarn-project/constants/src/constants.gen.ts @@ -137,7 +137,6 @@ export const GAS_FEES_LENGTH = 2; export const GAS_LENGTH = 2; export const GAS_SETTINGS_LENGTH = 8; export const CALL_CONTEXT_LENGTH = 4; -export const CONTENT_COMMITMENT_LENGTH = 3; export const CONTRACT_INSTANCE_LENGTH = 16; export const CONTRACT_STORAGE_READ_LENGTH = 3; export const CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3; @@ -198,9 +197,8 @@ export const TX_REQUEST_LENGTH = 15; export const TOTAL_FEES_LENGTH = 1; export const TOTAL_MANA_USED_LENGTH = 1; export const BLOCK_HEADER_LENGTH = 22; -export const BLOCK_HEADER_LENGTH_BYTES = 616; -export const CHECKPOINT_HEADER_LENGTH = 12; -export const CHECKPOINT_HEADER_SIZE_IN_BYTES = 316; +export const CHECKPOINT_HEADER_LENGTH = 11; +export const CHECKPOINT_HEADER_SIZE_IN_BYTES = 284; export const SCOPED_READ_REQUEST_LEN = 3; export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 902; export const PRIVATE_CONTEXT_INPUTS_LENGTH = 37; @@ -229,8 +227,8 @@ export const CHECKPOINT_CONSTANT_DATA_LENGTH = 10; export const EPOCH_CONSTANT_DATA_LENGTH = 5; export const TX_ROLLUP_PUBLIC_INPUTS_LENGTH = 52; export const BLOCK_ROLLUP_PUBLIC_INPUTS_LENGTH = 56; -export const CHECKPOINT_ROLLUP_PUBLIC_INPUTS_LENGTH = 193; -export const ROOT_ROLLUP_PUBLIC_INPUTS_LENGTH = 158; +export const CHECKPOINT_ROLLUP_PUBLIC_INPUTS_LENGTH = 241; +export const ROOT_ROLLUP_PUBLIC_INPUTS_LENGTH = 159; export const NUM_MSGS_PER_BASE_PARITY = 256; export const NUM_BASE_PARITY_PER_ROOT_PARITY = 4; export const RECURSIVE_PROOF_LENGTH = 457; diff --git a/yarn-project/end-to-end/src/bench/node_rpc_perf.test.ts b/yarn-project/end-to-end/src/bench/node_rpc_perf.test.ts index 41903361c82e..fcd0eb9cf602 100644 --- a/yarn-project/end-to-end/src/bench/node_rpc_perf.test.ts +++ b/yarn-project/end-to-end/src/bench/node_rpc_perf.test.ts @@ -10,7 +10,8 @@ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; import { Fr } from '@aztec/aztec.js/fields'; import type { Logger } from '@aztec/aztec.js/log'; import type { AztecNode } from '@aztec/aztec.js/node'; -import { BlockNumber } from '@aztec/foundation/branded-types'; +import type { RollupCheatCodes } from '@aztec/ethereum/test'; +import { BlockNumber, EpochNumber } from '@aztec/foundation/branded-types'; import { Timer } from '@aztec/foundation/timer'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { SiloedTag, Tag } from '@aztec/stdlib/logs'; @@ -97,11 +98,13 @@ describe('e2e_node_rpc_perf', () => { let aztecNode: AztecNode; let wallet: TestWallet; let ownerAddress: AztecAddress; + let rollupCheatCodes: RollupCheatCodes; let teardown: () => Promise; const benchmarkResults: BenchmarkResult[] = []; // Data collected during block building for use in benchmarks let blockNumber: number; + let epoch: EpochNumber; let contractAddress: AztecAddress; let contractClassId: Fr; let blockHash: Fr; @@ -138,6 +141,7 @@ describe('e2e_node_rpc_perf', () => { aztecNode, wallet, accounts: [ownerAddress], + cheatCodes: { rollup: rollupCheatCodes }, } = await setup(1, { archiverPollingIntervalMS: 200, sequencerPollingIntervalMS: 200, @@ -162,6 +166,8 @@ describe('e2e_node_rpc_perf', () => { blockNumber = await aztecNode.getBlockNumber(); + epoch = await rollupCheatCodes.getEpoch(); + // Get block hash and archive for benchmarking getBlockByHash/getBlockByArchive const block = await aztecNode.getBlock(BlockNumber(blockNumber)); blockHash = await block!.hash(); @@ -457,9 +463,7 @@ describe('e2e_node_rpc_perf', () => { }); it('benchmarks getL2ToL1Messages', async () => { - const { stats } = await benchmark('getL2ToL1Messages', () => - aztecNode.getL2ToL1Messages(BlockNumber(blockNumber)), - ); + const { stats } = await benchmark('getL2ToL1Messages', () => aztecNode.getL2ToL1Messages(epoch)); addResult('getL2ToL1Messages', stats); expect(stats.avg).toBeLessThan(2000); }); diff --git a/yarn-project/end-to-end/src/composed/e2e_token_bridge_tutorial_test.test.ts b/yarn-project/end-to-end/src/composed/e2e_token_bridge_tutorial_test.test.ts index 587f6c0a7fff..b2c7e0cd1db9 100644 --- a/yarn-project/end-to-end/src/composed/e2e_token_bridge_tutorial_test.test.ts +++ b/yarn-project/end-to-end/src/composed/e2e_token_bridge_tutorial_test.test.ts @@ -1,12 +1,15 @@ // This test should only use packages that are published to npm // docs:start:imports import { EthAddress } from '@aztec/aztec.js/addresses'; +import { waitForProven } from '@aztec/aztec.js/contracts'; import { L1TokenManager, L1TokenPortalManager } from '@aztec/aztec.js/ethereum'; import { Fr } from '@aztec/aztec.js/fields'; import { createLogger } from '@aztec/aztec.js/log'; import { createAztecNodeClient, waitForNode } from '@aztec/aztec.js/node'; import { createExtendedL1Client } from '@aztec/ethereum/client'; +import { RollupContract } from '@aztec/ethereum/contracts'; import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract'; +import { CheckpointNumber } from '@aztec/foundation/branded-types'; import { FeeAssetHandlerAbi, FeeAssetHandlerBytecode, @@ -205,6 +208,7 @@ describe('e2e_cross_chain_messaging token_bridge_tutorial_test', () => { .exit_to_l1_public(EthAddress.fromString(ownerEthAddress), withdrawAmount, EthAddress.ZERO, authwitNonce) .send({ from: ownerAztecAddress }) .wait(); + await waitForProven(node, l2TxReceipt, { provenTimeout: 500 }); const newL2Balance = await l2TokenContract.methods .balance_of_public(ownerAztecAddress) @@ -213,7 +217,10 @@ describe('e2e_cross_chain_messaging token_bridge_tutorial_test', () => { // docs:end:l2-withdraw // docs:start:l1-withdraw - const result = await computeL2ToL1MembershipWitness(node, await node.getBlockNumber(), l2ToL1Message); + const rollup = new RollupContract(l1Client, l1ContractAddresses.rollupAddress.toString()); + const epoch = await rollup.getEpochNumberForCheckpoint(CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber!)); + + const result = await computeL2ToL1MembershipWitness(node, epoch, l2ToL1Message); if (!result) { throw new Error('L2 to L1 message not found'); } @@ -221,7 +228,7 @@ describe('e2e_cross_chain_messaging token_bridge_tutorial_test', () => { await l1PortalManager.withdrawFunds( withdrawAmount, EthAddress.fromString(ownerEthAddress), - BigInt(l2TxReceipt.blockNumber!), + epoch, result.leafIndex, result.siblingPath, ); @@ -229,5 +236,5 @@ describe('e2e_cross_chain_messaging token_bridge_tutorial_test', () => { logger.info(`New L1 balance of ${ownerEthAddress} is ${newL1Balance}`); // docs:end:l1-withdraw expect(newL1Balance).toBe(withdrawAmount); - }, 110_000); + }, 150_000); }); diff --git a/yarn-project/end-to-end/src/composed/uniswap_trade_on_l1_from_l2.test.ts b/yarn-project/end-to-end/src/composed/uniswap_trade_on_l1_from_l2.test.ts index 49fd168d00ab..3845a3e3d916 100644 --- a/yarn-project/end-to-end/src/composed/uniswap_trade_on_l1_from_l2.test.ts +++ b/yarn-project/end-to-end/src/composed/uniswap_trade_on_l1_from_l2.test.ts @@ -1,5 +1,5 @@ import { setup as e2eSetup } from '../fixtures/utils.js'; -import { type UniswapSetupContext, uniswapL1L2TestSuite } from '../shared/uniswap_l1_l2.js'; +import { uniswapL1L2TestSuite } from '../shared/uniswap_l1_l2.js'; // This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we // don't need to burn through RPC requests. @@ -10,31 +10,12 @@ const EXPECTED_FORKED_BLOCK = 0; //17514288; let teardown: () => Promise; // docs:start:uniswap_setup -const testSetup = async (): Promise => { - const { - aztecNode, - teardown: teardown_, - deployL1ContractsValues, - wallet, - accounts: [ownerAddress, sponsorAddress], - logger, - cheatCodes, - } = await e2eSetup(2, { stateLoad: dumpedState }); +const testSetup = async () => { + const context = await e2eSetup(2, { stateLoad: dumpedState, startProverNode: true }); - const l1Client = deployL1ContractsValues.l1Client; + teardown = context.teardown; - teardown = teardown_; - - return { - aztecNode, - logger, - l1Client, - wallet, - ownerAddress, - sponsorAddress, - deployL1ContractsValues, - cheatCodes, - }; + return context; }; // docs:end:uniswap_setup diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts index cbe8806f303a..a186e8f1ed90 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts @@ -1,23 +1,26 @@ import type { AztecNodeConfig } from '@aztec/aztec-node'; import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; +import { waitForProven } from '@aztec/aztec.js/contracts'; import { type Logger, createLogger } from '@aztec/aztec.js/log'; import type { AztecNode } from '@aztec/aztec.js/node'; +import type { TxReceipt } from '@aztec/aztec.js/tx'; import { CheatCodes } from '@aztec/aztec/testing'; import { createExtendedL1Client } from '@aztec/ethereum/client'; +import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts'; import type { DeployAztecL1ContractsArgs, DeployAztecL1ContractsReturnType, } from '@aztec/ethereum/deploy-aztec-l1-contracts'; import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract'; import type { ExtendedViemWalletClient } from '@aztec/ethereum/types'; -import { InboxAbi, OutboxAbi, TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts'; +import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types'; +import { sleep } from '@aztec/foundation/sleep'; +import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts'; import { TokenContract } from '@aztec/noir-contracts.js/Token'; import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge'; import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client'; import type { TestWallet } from '@aztec/test-wallet/server'; -import { getContract } from 'viem'; - import { MNEMONIC } from '../fixtures/fixtures.js'; import { type ISnapshotManager, @@ -33,6 +36,7 @@ const { E2E_DATA_PATH: dataPath } = process.env; export class CrossChainMessagingTest { private snapshotManager: ISnapshotManager; + private requireEpochProven: boolean; logger: Logger; aztecNode!: AztecNode; aztecNodeConfig!: AztecNodeConfig; @@ -50,8 +54,9 @@ export class CrossChainMessagingTest { l2Token!: TokenContract; l2Bridge!: TokenBridgeContract; - inbox!: any; // GetContractReturnType | undefined; - outbox!: any; // GetContractReturnType | undefined; + rollup!: RollupContract; + inbox!: InboxContract; + outbox!: OutboxContract; cheatCodes!: CheatCodes; deployL1ContractsValues!: DeployAztecL1ContractsReturnType; @@ -66,10 +71,7 @@ export class CrossChainMessagingTest { initialValidators: [], ...deployL1ContractsArgs, }); - } - - async assumeProven() { - await this.cheatCodes.rollup.markAsProven(); + this.requireEpochProven = opts.startProverNode ?? false; } async setup() { @@ -80,6 +82,30 @@ export class CrossChainMessagingTest { this.cheatCodes = this.ctx.cheatCodes; this.deployL1ContractsValues = this.ctx.deployL1ContractsValues; this.aztecNodeAdmin = this.ctx.aztecNode; + + if (this.requireEpochProven) { + // Turn off the watcher to prevent it from keep marking blocks as proven. + this.ctx.watcher.setIsMarkingAsProven(false); + } + } + + async advanceToEpochProven(l2TxReceipt: TxReceipt): Promise { + const epoch = await this.rollup.getEpochNumberForCheckpoint( + CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber!), + ); + // Warp to the next epoch. + await this.cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1)); + // Wait for the tx to be proven. + await waitForProven(this.aztecNode, l2TxReceipt, { provenTimeout: 300 }); + // Return the epoch the tx is in. + return epoch; + } + + async catchUpProvenChain() { + const bn = await this.aztecNode.getBlockNumber(); + while ((await this.aztecNode.getProvenBlockNumber()) < bn) { + await sleep(1000); + } } snapshot = ( @@ -147,17 +173,12 @@ export class CrossChainMessagingTest { const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString()); const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC); + this.l1Client = l1Client; - const inbox = getContract({ - address: this.aztecNodeConfig.l1Contracts.inboxAddress.toString(), - abi: InboxAbi, - client: l1Client, - }); - const outbox = getContract({ - address: this.aztecNodeConfig.l1Contracts.outboxAddress.toString(), - abi: OutboxAbi, - client: l1Client, - }); + const l1Contracts = this.aztecNodeConfig.l1Contracts; + this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString()); + this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString()); + this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString()); this.crossChainTestHarness = new CrossChainTestHarness( this.aztecNode, @@ -173,9 +194,6 @@ export class CrossChainMessagingTest { this.ownerAddress, ); - this.l1Client = l1Client; - this.inbox = inbox; - this.outbox = outbox; return Promise.resolve(); }, ); diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts index 0661e3556798..fd8a98deec43 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/l2_to_l1.test.ts @@ -2,8 +2,8 @@ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; import { BatchCall } from '@aztec/aztec.js/contracts'; import { Fr } from '@aztec/aztec.js/fields'; import type { Wallet } from '@aztec/aztec.js/wallet'; -import { RollupContract } from '@aztec/ethereum/contracts'; -import { BlockNumber } from '@aztec/foundation/branded-types'; +import { OutboxContract, RollupContract, type ViemL2ToL1Msg } from '@aztec/ethereum/contracts'; +import { EpochNumber } from '@aztec/foundation/branded-types'; import { OutboxAbi } from '@aztec/l1-artifacts'; import { TestContract } from '@aztec/noir-test-contracts.js/Test'; import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash'; @@ -11,17 +11,16 @@ import type { AztecNode, AztecNodeAdmin } from '@aztec/stdlib/interfaces/client' import { type L2ToL1MembershipWitness, computeL2ToL1MembershipWitness, - computeL2ToL1MembershipWitnessFromMessagesForAllTxs, getL2ToL1MessageLeafId, } from '@aztec/stdlib/messaging'; -import { type Hex, decodeEventLog, getContract } from 'viem'; +import { type Hex, decodeEventLog } from 'viem'; import type { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js'; import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; describe('e2e_cross_chain_messaging l2_to_l1', () => { - const t = new CrossChainMessagingTest('l2_to_l1'); + const t = new CrossChainMessagingTest('l2_to_l1', { startProverNode: true }); let crossChainTestHarness: CrossChainTestHarness; let aztecNode: AztecNode; @@ -29,33 +28,24 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { let msgSender: EthAddress; let wallet: Wallet; let user1Address: AztecAddress; - let outbox: any; + let rollup: RollupContract; + let outbox: OutboxContract; - let version: number = 1; + let version: bigint; let contract: TestContract; beforeAll(async () => { await t.applyBaseSnapshots(); await t.setup(); - ({ crossChainTestHarness, aztecNode, aztecNodeAdmin, wallet, user1Address } = t); - msgSender = EthAddress.fromString(t.deployL1ContractsValues.l1Client.account.address); + ({ crossChainTestHarness, aztecNode, aztecNodeAdmin, wallet, user1Address, rollup, outbox } = t); - outbox = getContract({ - address: crossChainTestHarness.l1ContractAddresses.outboxAddress.toString(), - abi: OutboxAbi, - client: crossChainTestHarness.l1Client, - }); + msgSender = EthAddress.fromString(t.deployL1ContractsValues.l1Client.account.address); - version = Number( - await new RollupContract( - crossChainTestHarness.l1Client, - crossChainTestHarness.l1ContractAddresses.rollupAddress.toString(), - ).getVersion(), - ); + version = BigInt(await rollup.getVersion()); contract = await TestContract.deploy(wallet).send({ from: user1Address }).deployed(); - }, 300_000); + }); afterAll(async () => { await t.teardown(); @@ -68,28 +58,30 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { const contents = [Fr.random(), Fr.random()]; const messages = contents.map(content => makeL2ToL1Message(recipient, content)); - // Configure the node be able to rollup only 1 tx. + // Configure the node to be able to rollup only 1 tx. await aztecNodeAdmin.setConfig({ minTxsPerBlock: 1 }); - const call = new BatchCall(wallet, [ + const txReceipt = await new BatchCall(wallet, [ contract.methods.create_l2_to_l1_message_arbitrary_recipient_private(contents[0], recipient), contract.methods.create_l2_to_l1_message_arbitrary_recipient_public(contents[1], recipient), - ]); - const txReceipt = await call.send({ from: user1Address }).wait(); + ]) + .send({ from: user1Address }) + .wait(); - // Check that the block contains the 2 messages. const blockNumber = txReceipt.blockNumber!; + + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(txReceipt); + + // Check that the block contains the 2 messages. const block = (await aztecNode.getBlock(blockNumber))!; const l2ToL1Messages = block.body.txEffects.flatMap(txEffect => txEffect.l2ToL1Msgs); expect(l2ToL1Messages).toStrictEqual([computeMessageLeaf(messages[0]), computeMessageLeaf(messages[1])]); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven. - await t.assumeProven(); - // Consume messages[0]. - await expectConsumeMessageToSucceed(blockNumber, messages[0]); + await expectConsumeMessageToSucceed(epoch, messages[0]); // Consume messages[1]. - await expectConsumeMessageToSucceed(blockNumber, messages[1]); + await expectConsumeMessageToSucceed(epoch, messages[1]); }); // When the block contains a tx with no messages, the zero txOutHash is skipped and won't be included in the top tree. @@ -112,55 +104,13 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { ]); // Check that the 2 txs are in the same block. - const blockNumber = withMessageReceipt.blockNumber!; - expect(noMessageReceipt.blockNumber).toEqual(blockNumber); + expect(noMessageReceipt.blockNumber).toEqual(withMessageReceipt.blockNumber); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven. - await t.assumeProven(); - - const msgLeaf = computeMessageLeaf(message); - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, msgLeaf))!; - expect(witness.siblingPath.pathSize).toBe(0); - expect(witness.root).toEqual(msgLeaf); + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(withMessageReceipt); // Consume the message. - await expectConsumeMessageToSucceed(blockNumber, message, witness); - }, 60_000); - - it('1 tx with 3 messages (wonky)', async () => { - const { recipients, contents, messages } = generateMessages(3); - const leaves = messages.map(msg => computeMessageLeaf(msg)); - - // Configure the node be able to rollup only 1 tx. - await aztecNodeAdmin.setConfig({ minTxsPerBlock: 1 }); - - const call = createBatchCall(wallet, recipients, contents); - const txReceipt = await call.send({ from: user1Address }).wait(); - - // Check that the block contains all the messages. - const blockNumber = txReceipt.blockNumber!; - const block = (await aztecNode.getBlock(blockNumber))!; - const l2ToL1Messages = block.body.txEffects.flatMap(txEffect => txEffect.l2ToL1Msgs); - expect(l2ToL1Messages).toStrictEqual(leaves); - - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven. - await t.assumeProven(); - - // Consume messages[1], which is in the subtree of height 2. - { - const msgIndex = 1; - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, leaves[msgIndex]))!; - expect(witness.siblingPath.pathSize).toBe(2); - await expectConsumeMessageToSucceed(blockNumber, messages[msgIndex], witness); - } - - // Consume messages[2], which is in the subtree of height 1. - { - const msgIndex = 2; - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, leaves[msgIndex]))!; - expect(witness.siblingPath.pathSize).toBe(1); - await expectConsumeMessageToSucceed(blockNumber, messages[msgIndex], witness); - } + await expectConsumeMessageToSucceed(epoch, message); }); it('2 txs (balanced), one with 3 messages (wonky), one with 4 messages (balanced)', async () => { @@ -192,38 +142,26 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { expect(messagesForAllTxs.flat()).toEqual(expectedLeaves); } - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven. - await t.assumeProven(); + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(l2TxReceipt1); // Consume messages in tx0. { // Consume messages[0], which is in the subtree of height 2. const msg = tx0.messages[0]; - const leaf = computeMessageLeaf(msg); - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, leaf))!; - // 1 edge for the root to tx0, 2 edges for the tx subtree of height 2. - expect(witness.siblingPath.pathSize).toBe(1 + 2); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } { // Consume messages[2], which is in the subtree of height 1. const msg = tx0.messages[2]; - const leaf = computeMessageLeaf(msg); - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, leaf))!; - // 1 edge for the root to tx0, 1 edge for the tx subtree of height 1. - expect(witness.siblingPath.pathSize).toBe(1 + 1); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } // Consume messages in tx1. { // Consume messages[2], which is in the subtree of height 2. const msg = tx1.messages[0]; - const leaf = computeMessageLeaf(msg); - const witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, leaf))!; - // 1 edge for the root to tx1, 2 edges for the tx subtree of height 2. - expect(witness.siblingPath.pathSize).toBe(1 + 2); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } }); @@ -250,58 +188,41 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { expect(l2TxReceipt1.blockNumber).toEqual(blockNumber); expect(l2TxReceipt2.blockNumber).toEqual(blockNumber); - const block = (await aztecNode.getBlock(blockNumber))!; - const messagesForAllTxs = block.body.txEffects.map(txEffect => txEffect.l2ToL1Msgs); - // We cannot guarantee the order of txs in a block, so we figure it out from the txEffects. - // The 3 txs will be in a wonky tree, the height of the first 2 txs will be 2 and the last one will be 1. - const getHeightFromRootToTx = (tx: ReturnType) => - tx.messages.length === messagesForAllTxs[2].length ? 1 : 2; - - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven. - await t.assumeProven(); + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(l2TxReceipt2); // Consume messages in tx0. { // Consume messages[0], which is in the subtree of height 2. const msg = tx0.messages[0]; - const leaf = computeMessageLeaf(msg); - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, leaf); - expect(witness.siblingPath.pathSize).toBe(2 + getHeightFromRootToTx(tx0)); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } { // Consume messages[2], which is in the subtree of height 1. const msg = tx0.messages[2]; - const leaf = computeMessageLeaf(msg); - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, leaf); - expect(witness.siblingPath.pathSize).toBe(1 + getHeightFromRootToTx(tx0)); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } // Consume messages in tx1. { // Consume messages[0], which is the tx subtree root. const msg = tx1.messages[0]; - const leaf = computeMessageLeaf(msg); - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, leaf); - expect(witness.siblingPath.pathSize).toBe(getHeightFromRootToTx(tx1)); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } // Consume messages in tx2. { // Consume messages[1], which is in the subtree of height 1. const msg = tx2.messages[1]; - const leaf = computeMessageLeaf(msg); - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, leaf); - expect(witness.siblingPath.pathSize).toBe(1 + getHeightFromRootToTx(tx2)); - await expectConsumeMessageToSucceed(blockNumber, msg, witness); + await expectConsumeMessageToSucceed(epoch, msg); } }); - function makeL2ToL1Message(recipient: EthAddress, content: Fr = Fr.ZERO) { + // TODO(#17027): Add tests for multiple blocks per checkpoint. + + function makeL2ToL1Message(recipient: EthAddress, content: Fr = Fr.ZERO): ViemL2ToL1Msg { return { - sender: { actor: contract.address.toString() as Hex, version: BigInt(version) }, + sender: { actor: contract.address.toString() as Hex, version }, recipient: { actor: recipient.toString() as Hex, chainId: BigInt(crossChainTestHarness.l1Client.chain.id), @@ -335,36 +256,17 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { return { recipients, contents, messages }; } - function consumeMessage( - blockNumber: BlockNumber, - msg: ReturnType, - witness: L2ToL1MembershipWitness, - ) { - return outbox.write.consume( - [ - msg, - BigInt(blockNumber), - witness.leafIndex, - witness.siblingPath - .toBufferArray() - .map((buf: Buffer) => `0x${buf.toString('hex')}`) as readonly `0x${string}`[], - ], - {} as any, - ); - } - - async function expectConsumeMessageToSucceed( - blockNumber: BlockNumber, - msg: ReturnType, - witness?: L2ToL1MembershipWitness, - ) { + async function expectConsumeMessageToSucceed(epoch: EpochNumber, msg: ReturnType) { const msgLeaf = computeMessageLeaf(msg); - if (!witness) { - witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, msgLeaf))!; - } + const witness = (await computeL2ToL1MembershipWitness(aztecNode, epoch, msgLeaf))!; const leafId = getL2ToL1MessageLeafId(witness); - const txHash = await consumeMessage(blockNumber, msg, witness); + const txHash = await outbox.consume( + msg, + epoch, + witness.leafIndex, + witness.siblingPath.toFields().map(f => f.toString()), + ); const l1Receipt = await t.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash, @@ -385,30 +287,37 @@ describe('e2e_cross_chain_messaging l2_to_l1', () => { }) as { eventName: 'MessageConsumed'; args: { - checkpointNumber: bigint; + epoch: bigint; root: `0x${string}`; messageHash: `0x${string}`; leafId: bigint; }; }; - expect(topics.args.checkpointNumber).toBe(BigInt(blockNumber)); + expect(topics.args.epoch).toBe(BigInt(epoch)); expect(topics.args.root).toBe(witness.root.toString()); expect(topics.args.messageHash).toBe(msgLeaf.toString()); expect(topics.args.leafId).toBe(leafId); - // Ensuring we cannot consume the same message again. - await expectConsumeMessageToFail(blockNumber, msg, witness); + // Ensure we cannot consume the same message again. + await expectConsumeMessageToFail(epoch, msg, witness); } async function expectConsumeMessageToFail( - blockNumber: BlockNumber, + epoch: EpochNumber, msg: ReturnType, witness?: L2ToL1MembershipWitness, ) { if (!witness) { const msgLeaf = computeMessageLeaf(msg); - witness = (await computeL2ToL1MembershipWitness(aztecNode, blockNumber, msgLeaf))!; + witness = (await computeL2ToL1MembershipWitness(aztecNode, epoch, msgLeaf))!; } - await expect(consumeMessage(blockNumber, msg, witness)).rejects.toThrow(); + await expect( + outbox.consume( + msg, + epoch, + witness.leafIndex, + witness.siblingPath.toFields().map(f => f.toString()), + ), + ).rejects.toThrow(); } }); diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts index e9ac1f165e24..7886f799170f 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_failure_cases.test.ts @@ -1,7 +1,6 @@ import { EthAddress } from '@aztec/aztec.js/addresses'; import { Fr } from '@aztec/aztec.js/fields'; import { L1Actor, L1ToL2Message, L2Actor } from '@aztec/aztec.js/messaging'; -import { RollupContract } from '@aztec/ethereum/contracts'; import { sha256ToField } from '@aztec/foundation/crypto/sha256'; import { toFunctionSelector } from 'viem'; @@ -13,21 +12,16 @@ describe('e2e_cross_chain_messaging token_bridge_failure_cases', () => { const t = new CrossChainMessagingTest('token_bridge_failure_cases'); let version: number = 1; - let { crossChainTestHarness, ethAccount, l2Bridge, ownerAddress, user1Address, user2Address } = t; + let { crossChainTestHarness, ethAccount, l2Bridge, ownerAddress, user1Address, user2Address, rollup } = t; beforeAll(async () => { await t.applyBaseSnapshots(); await t.setup(); // Have to destructure again to ensure we have latest refs. - ({ crossChainTestHarness, user1Address, user2Address, ownerAddress } = t); + ({ crossChainTestHarness, user1Address, user2Address, ownerAddress, rollup } = t); ethAccount = crossChainTestHarness.ethAccount; l2Bridge = crossChainTestHarness.l2Bridge; ownerAddress = crossChainTestHarness.ownerAddress; - - const rollup = new RollupContract( - crossChainTestHarness.l1Client, - crossChainTestHarness.l1ContractAddresses.rollupAddress.toString(), - ); version = Number(await rollup.getVersion()); }, 300_000); diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts index 19f320e39b7a..4dc5c434280c 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_private.test.ts @@ -2,8 +2,6 @@ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; import { Fr } from '@aztec/aztec.js/fields'; import type { Logger } from '@aztec/aztec.js/log'; import type { AztecNode } from '@aztec/aztec.js/node'; -import { CheatCodes } from '@aztec/aztec/testing'; -import { RollupContract } from '@aztec/ethereum/contracts'; import type { TokenContract } from '@aztec/noir-contracts.js/Token'; import type { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge'; import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging'; @@ -13,7 +11,7 @@ import type { CrossChainTestHarness } from '../shared/cross_chain_test_harness.j import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; describe('e2e_cross_chain_messaging token_bridge_private', () => { - const t = new CrossChainMessagingTest('token_bridge_private'); + const t = new CrossChainMessagingTest('token_bridge_private', { startProverNode: true }); let crossChainTestHarness: CrossChainTestHarness; let ethAccount: EthAddress; @@ -25,25 +23,15 @@ describe('e2e_cross_chain_messaging token_bridge_private', () => { let wallet: TestWallet; let user2Address: AztecAddress; - let rollup: RollupContract; - let cheatCodes: CheatCodes; - - beforeEach(async () => { + beforeAll(async () => { await t.applyBaseSnapshots(); await t.setup(); // Have to destructure again to ensure we have latest refs. ({ crossChainTestHarness, ethAccount, aztecNode, logger, ownerAddress, l2Bridge, l2Token, wallet, user2Address } = t); - - rollup = new RollupContract( - crossChainTestHarness!.l1Client, - crossChainTestHarness!.l1ContractAddresses.rollupAddress, - ); - - cheatCodes = t.ctx.cheatCodes; }, 300_000); - afterEach(async () => { + afterAll(async () => { await t.teardown(); }); @@ -85,20 +73,16 @@ describe('e2e_cross_chain_messaging token_bridge_private', () => { ); await crossChainTestHarness.expectPrivateBalanceOnL2(ownerAddress, bridgeAmount - withdrawAmount); - const l2ToL1MessageResult = await computeL2ToL1MembershipWitness( - aztecNode, - l2TxReceipt.blockNumber!, - l2ToL1Message, - ); + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(l2TxReceipt); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber()); + const l2ToL1MessageResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, l2ToL1Message); // Check balance before and after exit. expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(l1TokenBalance - bridgeAmount); await crossChainTestHarness.withdrawFundsFromBridgeOnL1( withdrawAmount, - l2TxReceipt.blockNumber!, + epoch, l2ToL1MessageResult!.leafIndex, l2ToL1MessageResult!.siblingPath, ); @@ -107,12 +91,12 @@ describe('e2e_cross_chain_messaging token_bridge_private', () => { // This test checks that it's enough to have the claim secret to claim the funds to whoever we want. it('Claim secret is enough to consume the message', async () => { - const l1TokenBalance = 1000000n; - const bridgeAmount = 100n; + const initialPublicBalance = await crossChainTestHarness.getL1BalanceOf(ethAccount); + const initialPrivateBalance = await crossChainTestHarness.getL2PrivateBalanceOf(ownerAddress); - await crossChainTestHarness.mintTokensOnL1(l1TokenBalance); + const bridgeAmount = 100n; const claim = await crossChainTestHarness.sendTokensToPortalPrivate(bridgeAmount); - expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(l1TokenBalance - bridgeAmount); + expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(initialPublicBalance - bridgeAmount); // Wait for the message to be available for consumption await crossChainTestHarness.makeMessageConsumable(claim.messageHash); @@ -123,7 +107,7 @@ describe('e2e_cross_chain_messaging token_bridge_private', () => { .send({ from: user2Address }) .wait(); - await crossChainTestHarness.expectPrivateBalanceOnL2(ownerAddress, bridgeAmount); + await crossChainTestHarness.expectPrivateBalanceOnL2(ownerAddress, initialPrivateBalance + bridgeAmount); }), 90_000; }); diff --git a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts index 19352f322cac..f1cccacfcb82 100644 --- a/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts +++ b/yarn-project/end-to-end/src/e2e_cross_chain_messaging/token_bridge_public.test.ts @@ -5,7 +5,7 @@ import { NO_L1_TO_L2_MSG_ERROR } from '../fixtures/fixtures.js'; import { CrossChainMessagingTest } from './cross_chain_messaging_test.js'; describe('e2e_cross_chain_messaging token_bridge_public', () => { - const t = new CrossChainMessagingTest('token_bridge_public'); + const t = new CrossChainMessagingTest('token_bridge_public', { startProverNode: true }); let { crossChainTestHarness, ethAccount, aztecNode, logger, ownerAddress, l2Bridge, l2Token, wallet, user2Address } = t; @@ -80,20 +80,16 @@ describe('e2e_cross_chain_messaging token_bridge_public', () => { const l2TxReceipt = await crossChainTestHarness.withdrawPublicFromAztecToL1(withdrawAmount, authwitNonce); await crossChainTestHarness.expectPublicBalanceOnL2(ownerAddress, afterBalance - withdrawAmount); - // Check balance before and after exit. - expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(l1TokenBalance - bridgeAmount); - - const l2ToL1MessageResult = await computeL2ToL1MembershipWitness( - aztecNode, - l2TxReceipt.blockNumber!, - l2ToL1Message, - ); + // Advance the epoch until the tx is proven since the messages are inserted to the outbox when the epoch is proven. + const epoch = await t.advanceToEpochProven(l2TxReceipt); - await t.assumeProven(); + const l2ToL1MessageResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, l2ToL1Message); + // Check balance before and after exit. + expect(await crossChainTestHarness.getL1BalanceOf(ethAccount)).toBe(l1TokenBalance - bridgeAmount); await crossChainTestHarness.withdrawFundsFromBridgeOnL1( withdrawAmount, - l2TxReceipt.blockNumber!, + epoch, l2ToL1MessageResult!.leafIndex, l2ToL1MessageResult!.siblingPath, ); diff --git a/yarn-project/end-to-end/src/e2e_l1_publisher/e2e_l1_publisher.test.ts b/yarn-project/end-to-end/src/e2e_l1_publisher/e2e_l1_publisher.test.ts index a3c17a93030c..2f2b63722893 100644 --- a/yarn-project/end-to-end/src/e2e_l1_publisher/e2e_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/e2e_l1_publisher/e2e_l1_publisher.test.ts @@ -35,15 +35,13 @@ import { Buffer32 } from '@aztec/foundation/buffer'; import { times, timesParallel } from '@aztec/foundation/collection'; import { SecretValue } from '@aztec/foundation/config'; import { Secp256k1Signer, flipSignature } from '@aztec/foundation/crypto/secp256k1-signer'; -import { SHA256Trunc, sha256ToField } from '@aztec/foundation/crypto/sha256'; +import { sha256ToField } from '@aztec/foundation/crypto/sha256'; import { EthAddress } from '@aztec/foundation/eth-address'; import { retryUntil } from '@aztec/foundation/retry'; import { sleep } from '@aztec/foundation/sleep'; import { hexToBuffer } from '@aztec/foundation/string'; import { TestDateProvider } from '@aztec/foundation/timer'; -import { openTmpStore } from '@aztec/kv-store/lmdb'; -import { OutboxAbi, RollupAbi } from '@aztec/l1-artifacts'; -import { StandardTree } from '@aztec/merkle-tree'; +import { RollupAbi } from '@aztec/l1-artifacts'; import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree'; import { ProtocolContractsList, protocolContractsHash } from '@aztec/protocol-contracts'; import { buildBlockWithCleanDB } from '@aztec/prover-client/block-factory'; @@ -78,15 +76,7 @@ import { import { beforeEach, describe, expect, it, jest } from '@jest/globals'; import type { Anvil } from '@viem/anvil'; import { type MockProxy, mock } from 'jest-mock-extended'; -import { - type Address, - type GetContractReturnType, - encodeFunctionData, - getAbiItem, - getAddress, - getContract, - multicall3Abi, -} from 'viem'; +import { type Address, encodeFunctionData, getAbiItem, getAddress, multicall3Abi } from 'viem'; import { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts'; import { foundry } from 'viem/chains'; @@ -118,10 +108,8 @@ describe('L1Publisher integration', () => { let governanceProposerContract: GovernanceProposerContract; let rollupAddress: Address; - let outboxAddress: Address; let rollup: RollupContract; - let outbox: GetContractReturnType; let publisher: SequencerPublisher; @@ -183,17 +171,11 @@ describe('L1Publisher integration', () => { ethCheatCodes = new EthCheatCodesWithState(config.l1RpcUrls, dateProvider); rollupAddress = getAddress(l1ContractAddresses.rollupAddress.toString()); - outboxAddress = getAddress(l1ContractAddresses.outboxAddress.toString()); rollupCheatCodes = new RollupCheatCodes(ethCheatCodes, l1ContractAddresses); // Set up contract instances rollup = new RollupContract(l1Client, l1ContractAddresses.rollupAddress); - outbox = getContract({ - address: outboxAddress, - abi: OutboxAbi, - client: l1Client, - }); l1Constants = { ...(await rollup.getRollupConstants()), @@ -356,25 +338,11 @@ describe('L1Publisher integration', () => { await setup(); }); - const buildL2ToL1MsgTreeRoot = (l2ToL1MsgsArray: Fr[]) => { - const treeHeight = Math.ceil(Math.log2(l2ToL1MsgsArray.length)); - const tree = new StandardTree( - openTmpStore(true), - new SHA256Trunc(), - 'temp_outhash_sibling_path', - treeHeight, - 0n, - Fr, - ); - tree.appendLeaves(l2ToL1MsgsArray); - return new Fr(tree.getRoot(true)); - }; - const buildAndPublishBlock = async (numTxs: number, jsonFileNamePrefix: string) => { const archiveInRollup_ = await rollup.archive(); expect(hexToBuffer(archiveInRollup_.toString())).toEqual(new Fr(GENESIS_ARCHIVE_ROOT).toBuffer()); - const blockNumber = await l1Client.getBlockNumber(); + const l1BlockNumber = await l1Client.getBlockNumber(); // random recipient address, just kept consistent for easy testing ts/sol. const recipientAddress = AztecAddress.fromString( @@ -419,24 +387,16 @@ describe('L1Publisher integration', () => { ); const block = await buildBlock(globalVariables, txs, currentL1ToL2Messages); + const totalManaUsed = txs.reduce((acc, tx) => acc.add(new Fr(tx.gasUsed.totalGas.l2Gas)), Fr.ZERO); expect(totalManaUsed.toBigInt()).toEqual(block.header.totalManaUsed.toBigInt()); prevHeader = block.getBlockHeader(); blockSource.getL1ToL2Messages.mockResolvedValueOnce(currentL1ToL2Messages); - const l2ToL1MsgsArray = block.body.txEffects.flatMap(txEffect => txEffect.l2ToL1Msgs); - - const emptyRoot = await outbox.read.getRootData([BigInt(block.header.globalVariables.blockNumber)]); - - // Check that we have not yet written a root to this blocknumber - expect(BigInt(emptyRoot)).toStrictEqual(0n); - const checkpointBlobFields = block.getCheckpointBlobFields(); const blockBlobs = getBlobsPerL1Block(checkpointBlobFields); - expect(block.header.contentCommitment.blobsHash).toEqual( - sha256ToField(blockBlobs.map(b => b.getEthVersionedBlobHash())), - ); + expect(block.header.blobsHash).toEqual(sha256ToField(blockBlobs.map(b => b.getEthVersionedBlobHash()))); let prevBlobAccumulatorHash = (await rollup.getCurrentBlobCommitmentsHash()).toBuffer(); @@ -469,11 +429,11 @@ describe('L1Publisher integration', () => { abi: RollupAbi, name: 'CheckpointProposed', }), - fromBlock: blockNumber + 1n, + fromBlock: l1BlockNumber + 1n, }); expect(logs).toHaveLength(i + 1); expect(logs[i].args.checkpointNumber).toEqual(BigInt(i + 1)); - const thisCheckpointNumber = CheckpointNumber(block.header.globalVariables.blockNumber); + const thisCheckpointNumber = CheckpointNumber.fromBlockNumber(block.header.globalVariables.blockNumber); const prevCheckpointNumber = CheckpointNumber(thisCheckpointNumber - 1); const isFirstCheckpointOfEpoch = thisCheckpointNumber == CheckpointNumber(1) || @@ -525,18 +485,6 @@ describe('L1Publisher integration', () => { }); expect(ethTx.input).toEqual(expectedData); - const expectedRoot = !numTxs ? Fr.ZERO : buildL2ToL1MsgTreeRoot(l2ToL1MsgsArray); - const returnedRoot = await outbox.read.getRootData([BigInt(block.header.globalVariables.blockNumber)]); - - // check that values are inserted into the outbox - expect(Fr.ZERO.toString()).toEqual(returnedRoot); - - const actualRoot = await ethCheatCodes.load( - EthAddress.fromString(outbox.address), - ethCheatCodes.keccak256(0n, 1n + BigInt(i)), - ); - expect(expectedRoot).toEqual(new Fr(actualRoot)); - // There is a 1 block lag between before messages get consumed from the inbox currentL1ToL2Messages = nextL1ToL2Messages; // We wipe the messages from previous iteration @@ -786,9 +734,9 @@ describe('L1Publisher integration', () => { }); it(`shows propose custom errors if tx simulation fails`, async () => { - // Set up different l1-to-l2 messages than the ones on the inbox, so this submission reverts - // because the INBOX.consume does not match the header.contentCommitment.inHash and we get - // a Rollup__BlobHash that is not caught by validateHeader before. + // Set up different l1-to-l2 messages than the ones on the inbox, so this submission reverts because the + // INBOX.consume does not match the header.inHash and we get a Rollup__BlobHash that is not caught by + // validateHeader before. const l1ToL2Messages = new Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(1n)); const block = await buildSingleBlock({ l1ToL2Messages }); diff --git a/yarn-project/end-to-end/src/e2e_l1_publisher/write_json.ts b/yarn-project/end-to-end/src/e2e_l1_publisher/write_json.ts index 8f317161c215..186d902bc620 100644 --- a/yarn-project/end-to-end/src/e2e_l1_publisher/write_json.ts +++ b/yarn-project/end-to-end/src/e2e_l1_publisher/write_json.ts @@ -52,11 +52,8 @@ export async function writeJson( header: { lastArchiveRoot: asHex(block.header.lastArchive.root), blockHeadersHash: asHex(block.header.blockHeadersHash), - contentCommitment: { - blobsHash: asHex(block.header.contentCommitment.blobsHash), - inHash: asHex(block.header.contentCommitment.inHash), - outHash: asHex(block.header.contentCommitment.outHash), - }, + blobsHash: asHex(block.header.blobsHash), + inHash: asHex(block.header.inHash), slotNumber: Number(block.header.globalVariables.slotNumber), timestamp: Number(block.header.globalVariables.timestamp), coinbase: asHex(block.header.globalVariables.coinbase, 40), diff --git a/yarn-project/end-to-end/src/e2e_p2p/add_rollup.test.ts b/yarn-project/end-to-end/src/e2e_p2p/add_rollup.test.ts index eb605825f261..ce77e4933b07 100644 --- a/yarn-project/end-to-end/src/e2e_p2p/add_rollup.test.ts +++ b/yarn-project/end-to-end/src/e2e_p2p/add_rollup.test.ts @@ -1,6 +1,7 @@ import { type InitialAccountData, getInitialTestAccountsData } from '@aztec/accounts/testing'; import type { AztecNodeService } from '@aztec/aztec-node'; import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; +import { waitForProven } from '@aztec/aztec.js/contracts'; import { generateClaimSecret } from '@aztec/aztec.js/ethereum'; import { Fr } from '@aztec/aztec.js/fields'; import { RollupCheatCodes } from '@aztec/aztec/testing'; @@ -24,8 +25,10 @@ import { import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree'; import { TestContract } from '@aztec/noir-test-contracts.js/Test'; import { protocolContractsHash } from '@aztec/protocol-contracts'; +import type { ProverNode } from '@aztec/prover-node'; import { getPXEConfig } from '@aztec/pxe/server'; import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash'; +import { tryStop } from '@aztec/stdlib/interfaces/server'; import { computeL2ToL1MembershipWitness, getL2ToL1MessageLeafId } from '@aztec/stdlib/messaging'; import { TestWallet } from '@aztec/test-wallet/server'; import { getGenesisValues } from '@aztec/world-state/testing'; @@ -39,7 +42,7 @@ import { foundry } from 'viem/chains'; import { shouldCollectMetrics } from '../fixtures/fixtures.js'; import { sendL1ToL2Message } from '../fixtures/l1_to_l2_messaging.js'; -import { createNodes } from '../fixtures/setup_p2p_test.js'; +import { ATTESTER_PRIVATE_KEYS_START_INDEX, createNodes, createProverNode } from '../fixtures/setup_p2p_test.js'; import { setupSharedBlobStorage } from '../fixtures/utils.js'; import { P2PNetworkTest, SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES } from './p2p_network.js'; @@ -62,6 +65,7 @@ jest.setTimeout(1000 * 60 * 10); describe('e2e_p2p_add_rollup', () => { let t: P2PNetworkTest; let nodes: AztecNodeService[]; + let proverNode: ProverNode; let l1TxUtils: L1TxUtils; beforeAll(async () => { @@ -77,6 +81,7 @@ describe('e2e_p2p_add_rollup', () => { listenAddress: '127.0.0.1', governanceProposerRoundSize: 10, }, + startProverNode: false, // Start one later using p2p. }); await t.applyBaseSnapshots(); @@ -84,9 +89,12 @@ describe('e2e_p2p_add_rollup', () => { await t.removeInitialNode(); l1TxUtils = createL1TxUtilsFromViemWallet(t.ctx.deployL1ContractsValues.l1Client); + + t.ctx.watcher.setIsMarkingAsProven(false); }); afterAll(async () => { + await tryStop(proverNode); await t.stopNodes(nodes); await t.teardown(); for (let i = 0; i < NUM_VALIDATORS; i++) { @@ -222,6 +230,20 @@ describe('e2e_p2p_add_rollup', () => { shouldCollectMetrics(), ); + // create a prover node that uses p2p only (not rpc) to gather txs to test prover tx collection + t.logger.warn(`Creating prover node`); + proverNode = await createProverNode( + t.ctx.aztecNodeConfig, + BOOT_NODE_UDP_PORT + NUM_VALIDATORS + 1, + t.bootstrapNodeEnr, + ATTESTER_PRIVATE_KEYS_START_INDEX + NUM_VALIDATORS + 1, + { dateProvider: t.ctx.dateProvider }, + t.prefilledPublicData, + `${DATA_DIR}-prover`, + shouldCollectMetrics(), + ); + await proverNode.start(); + await sleep(4000); t.logger.info('Start progressing time to cast votes'); @@ -264,13 +286,11 @@ describe('e2e_p2p_add_rollup', () => { l1ContractAddresses, }); - let l2OutgoingReceipt; - const makeMessageConsumable = async (msgHash: Fr) => { // We poll isL1ToL2MessageSynced endpoint until the message is available await retryUntil(async () => await node.isL1ToL2MessageSynced(msgHash), 'message sync', 10); - l2OutgoingReceipt = await testContract.methods + const receipt = await testContract.methods .create_l2_to_l1_message_arbitrary_recipient_private(contentOutFromRollup, ethRecipient) .send({ from: aliceAddress }) .wait(); @@ -279,9 +299,11 @@ describe('e2e_p2p_add_rollup', () => { .create_l2_to_l1_message_arbitrary_recipient_private(contentOutFromRollup, ethRecipient) .send({ from: aliceAddress }) .wait(); + + return receipt; }; - await makeMessageConsumable(message1Hash); + const l2OutgoingReceipt = await makeMessageConsumable(message1Hash); // Then we finish up the L1 -> L2 message const [message1Index] = (await node.getL1ToL2MessageMembershipWitness('latest', message1Hash))!; @@ -314,12 +336,18 @@ describe('e2e_p2p_add_rollup', () => { chainId: new Fr(l1Client.chain.id), }); - const l2ToL1MessageResult = await computeL2ToL1MembershipWitness(node, l2OutgoingReceipt!.blockNumber, leaf); - const leafId = getL2ToL1MessageLeafId(l2ToL1MessageResult!); + const rollup = new RollupContract(l1Client, l1ContractAddresses.rollupAddress); + const epoch = await rollup.getEpochNumberForCheckpoint( + CheckpointNumber.fromBlockNumber(l2OutgoingReceipt.blockNumber!), + ); - // We need to mark things as proven + const l2ToL1MessageResult = (await computeL2ToL1MembershipWitness(node, epoch, leaf))!; + const leafId = getL2ToL1MessageLeafId(l2ToL1MessageResult); + + // We need to advance to the next epoch so that the out hash will be set to outbox when the epoch is proven. const cheatcodes = RollupCheatCodes.create(l1RpcUrls, l1ContractAddresses, t.ctx.dateProvider); - await cheatcodes.markAsProven(); + await cheatcodes.advanceToEpoch(EpochNumber(epoch + 1)); + await waitForProven(node, l2OutgoingReceipt, { provenTimeout: 300 }); // Then we want to go and comsume it! const outbox = getContract({ @@ -335,7 +363,7 @@ describe('e2e_p2p_add_rollup', () => { functionName: 'consume', args: [ l2ToL1Message, - BigInt(l2OutgoingReceipt!.blockNumber!), + BigInt(epoch), BigInt(l2ToL1MessageResult!.leafIndex), l2ToL1MessageResult!.siblingPath .toBufferArray() @@ -356,7 +384,7 @@ describe('e2e_p2p_add_rollup', () => { }) as { eventName: 'MessageConsumed'; args: { - checkpointNumber: bigint; + epoch: bigint; root: `0x${string}`; messageHash: `0x${string}`; leafId: bigint; @@ -461,6 +489,9 @@ describe('e2e_p2p_add_rollup', () => { `Attesters new before: ${attestersBeforeNew.length}. Attesters new after: ${attestersAfterNew.length}`, ); + // Stop the prover node. + await proverNode.stop(); + // stop all nodes for (let i = 0; i < NUM_VALIDATORS; i++) { const node = nodes[i]; @@ -517,6 +548,19 @@ describe('e2e_p2p_add_rollup', () => { shouldCollectMetrics(), ); + t.logger.warn(`Creating new prover node`); + proverNode = await createProverNode( + newConfig, + BOOT_NODE_UDP_PORT + NUM_VALIDATORS + 1, + t.bootstrapNodeEnr, + ATTESTER_PRIVATE_KEYS_START_INDEX + NUM_VALIDATORS + 1, + { dateProvider: t.ctx.dateProvider }, + prefilledPublicData, + `${DATA_DIR_NEW}-prover`, + shouldCollectMetrics(), + ); + await proverNode.start(); + // wait a bit for peers to discover each other await sleep(4000); diff --git a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts index b24f9764804b..471dd20e7c1f 100644 --- a/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/shared/cross_chain_test_harness.ts @@ -16,7 +16,7 @@ import type { Wallet } from '@aztec/aztec.js/wallet'; import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract'; import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses'; import type { ExtendedViemWalletClient } from '@aztec/ethereum/types'; -import { BlockNumber } from '@aztec/foundation/branded-types'; +import { EpochNumber } from '@aztec/foundation/branded-types'; import { retryUntil } from '@aztec/foundation/retry'; import type { FieldsOf } from '@aztec/foundation/types'; import { TestERC20Abi, TokenPortalAbi, TokenPortalBytecode } from '@aztec/l1-artifacts'; @@ -324,17 +324,11 @@ export class CrossChainTestHarness { withdrawFundsFromBridgeOnL1( amount: bigint, - blockNumber: BlockNumber, + epochNumber: EpochNumber, messageIndex: bigint, siblingPath: SiblingPath, ) { - return this.l1TokenPortalManager.withdrawFunds( - amount, - this.ethAccount, - BigInt(blockNumber), - messageIndex, - siblingPath, - ); + return this.l1TokenPortalManager.withdrawFunds(amount, this.ethAccount, epochNumber, messageIndex, siblingPath); } async transferToPrivateOnL2(shieldAmount: bigint) { diff --git a/yarn-project/end-to-end/src/shared/index.ts b/yarn-project/end-to-end/src/shared/index.ts index d4a8d83d2c76..da82734ffeea 100644 --- a/yarn-project/end-to-end/src/shared/index.ts +++ b/yarn-project/end-to-end/src/shared/index.ts @@ -1 +1 @@ -export { uniswapL1L2TestSuite, type UniswapSetupContext } from './uniswap_l1_l2.js'; +export { uniswapL1L2TestSuite } from './uniswap_l1_l2.js'; diff --git a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts index a673b01658fc..c4ad2a0bf42d 100644 --- a/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts +++ b/yarn-project/end-to-end/src/shared/uniswap_l1_l2.ts @@ -1,5 +1,6 @@ import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses'; import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization'; +import { waitForProven } from '@aztec/aztec.js/contracts'; import { generateClaimSecret } from '@aztec/aztec.js/ethereum'; import { Fr } from '@aztec/aztec.js/fields'; import type { Logger } from '@aztec/aztec.js/log'; @@ -10,6 +11,7 @@ import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-az import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract'; import type { ExtendedViemWalletClient } from '@aztec/ethereum/types'; import { extractEvent } from '@aztec/ethereum/utils'; +import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types'; import { sha256ToField } from '@aztec/foundation/crypto/sha256'; import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts'; import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap'; @@ -20,7 +22,7 @@ import type { TestWallet } from '@aztec/test-wallet/server'; import { jest } from '@jest/globals'; import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem'; -import { ensureAccountContractsPublished } from '../fixtures/utils.js'; +import { type EndToEndContext, ensureAccountContractsPublished } from '../fixtures/utils.js'; import { CrossChainTestHarness } from './cross_chain_test_harness.js'; // PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we @@ -32,28 +34,8 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js'; const TIMEOUT = 360_000; -/** Objects to be returned by the uniswap setup function */ -export type UniswapSetupContext = { - /** Aztec Node instance */ - aztecNode: AztecNode; - /** Logger instance named as the current test. */ - logger: Logger; - /** The L1 wallet client, extended with public actions. */ - l1Client: ExtendedViemWalletClient; - /** The wallet. */ - wallet: TestWallet; - /** The owner address. */ - ownerAddress: AztecAddress; - /** The sponsor wallet. */ - sponsorAddress: AztecAddress; - /** */ - deployL1ContractsValues: DeployAztecL1ContractsReturnType; - /** Cheat codes instance. */ - cheatCodes: CheatCodes; -}; - export const uniswapL1L2TestSuite = ( - setup: () => Promise, + setup: () => Promise, cleanup: () => Promise, expectedForkBlockNumber = 17514288, ) => { @@ -90,8 +72,19 @@ export const uniswapL1L2TestSuite = ( let cheatCodes: CheatCodes; let version: number; beforeAll(async () => { - ({ aztecNode, logger, l1Client, wallet, ownerAddress, sponsorAddress, deployL1ContractsValues, cheatCodes } = - await setup()); + const t = await setup(); + ({ + aztecNode, + logger, + deployL1ContractsValues, + cheatCodes, + wallet, + accounts: [ownerAddress, sponsorAddress], + } = t); + + l1Client = deployL1ContractsValues.l1Client; + + t.watcher?.setIsMarkingAsProven(false); if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) { throw new Error('This test must be run on a fork of mainnet with the expected fork block'); @@ -259,24 +252,19 @@ export const uniswapL1L2TestSuite = ( // ensure that uniswap contract didn't eat the funds. await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber()); + // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch. + const checkpointNumber = CheckpointNumber.fromBlockNumber(l2UniswapInteractionReceipt.blockNumber!); + const epoch = await rollup.getEpochNumberForCheckpoint(checkpointNumber); + await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1)); + await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 }); // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private() logger.info('Execute withdraw and swap on the uniswapPortal!'); const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf( daiCrossChainHarness.tokenPortalAddress, ); - const swapResult = await computeL2ToL1MembershipWitness( - aztecNode, - l2UniswapInteractionReceipt.blockNumber!, - swapPrivateLeaf, - ); - const withdrawResult = await computeL2ToL1MembershipWitness( - aztecNode, - l2UniswapInteractionReceipt.blockNumber!, - withdrawLeaf, - ); + const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf); + const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf); const swapPrivateL2MessageIndex = swapResult!.leafIndex; const swapPrivateSiblingPath = swapResult!.siblingPath; @@ -285,7 +273,7 @@ export const uniswapL1L2TestSuite = ( const withdrawSiblingPath = withdrawResult!.siblingPath; const withdrawMessageMetadata = { - _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(withdrawL2MessageIndex), _path: withdrawSiblingPath .toBufferArray() @@ -293,7 +281,7 @@ export const uniswapL1L2TestSuite = ( }; const swapPrivateMessageMetadata = { - _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(swapPrivateL2MessageIndex), _path: swapPrivateSiblingPath .toBufferArray() @@ -504,7 +492,7 @@ export const uniswapL1L2TestSuite = ( // ); // const withdrawMessageMetadata = { - // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!), + // _epoch: epoch, // _leafIndex: BigInt(withdrawL2MessageIndex), // _path: withdrawSiblingPath // .toBufferArray() @@ -512,7 +500,7 @@ export const uniswapL1L2TestSuite = ( // }; // const swapPrivateMessageMetadata = { - // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!), + // _epoch: epoch, // _leafIndex: BigInt(swapPrivateL2MessageIndex), // _path: swapPrivateSiblingPath // .toBufferArray() @@ -856,12 +844,11 @@ export const uniswapL1L2TestSuite = ( chainId: new Fr(l1Client.chain.id), }); - const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPrivateLeaf); - const withdrawResult = await computeL2ToL1MembershipWitness( - aztecNode, - withdrawReceipt.blockNumber!, - withdrawLeaf, + const epoch = await rollup.getEpochNumberForCheckpoint( + CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!), ); + const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf); + const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf); const swapPrivateL2MessageIndex = swapResult!.leafIndex; const swapPrivateSiblingPath = swapResult!.siblingPath; @@ -870,7 +857,7 @@ export const uniswapL1L2TestSuite = ( const withdrawSiblingPath = withdrawResult!.siblingPath; const withdrawMessageMetadata = { - _checkpointNumber: BigInt(withdrawReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(withdrawL2MessageIndex), _path: withdrawSiblingPath .toBufferArray() @@ -878,7 +865,7 @@ export const uniswapL1L2TestSuite = ( }; const swapPrivateMessageMetadata = { - _checkpointNumber: BigInt(withdrawReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(swapPrivateL2MessageIndex), _path: swapPrivateSiblingPath .toBufferArray() @@ -888,8 +875,9 @@ export const uniswapL1L2TestSuite = ( // ensure that user's funds were burnt await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber()); + // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch. + await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1)); + await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 }); // On L1 call swap_public! logger.info('call swap_public on L1'); @@ -991,12 +979,11 @@ export const uniswapL1L2TestSuite = ( chainId: new Fr(l1Client.chain.id), }); - const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPublicLeaf); - const withdrawResult = await computeL2ToL1MembershipWitness( - aztecNode, - withdrawReceipt.blockNumber!, - withdrawLeaf, + const epoch = await rollup.getEpochNumberForCheckpoint( + CheckpointNumber.fromBlockNumber(withdrawReceipt.blockNumber!), ); + const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPublicLeaf); + const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf); const swapPublicL2MessageIndex = swapResult!.leafIndex; const swapPublicSiblingPath = swapResult!.siblingPath; @@ -1005,7 +992,7 @@ export const uniswapL1L2TestSuite = ( const withdrawSiblingPath = withdrawResult!.siblingPath; const withdrawMessageMetadata = { - _checkpointNumber: BigInt(withdrawReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(withdrawL2MessageIndex), _path: withdrawSiblingPath .toBufferArray() @@ -1013,7 +1000,7 @@ export const uniswapL1L2TestSuite = ( }; const swapPublicMessageMetadata = { - _checkpointNumber: BigInt(withdrawReceipt.blockNumber!), + _epoch: BigInt(epoch), _leafIndex: BigInt(swapPublicL2MessageIndex), _path: swapPublicSiblingPath .toBufferArray() @@ -1023,8 +1010,9 @@ export const uniswapL1L2TestSuite = ( // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!) await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n); - // Since the outbox is only consumable when the block is proven, we need to set the block to be proven - await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber()); + // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch. + await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1)); + await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 }); // Call swap_private on L1 logger.info('Execute withdraw and swap on the uniswapPortal!'); diff --git a/yarn-project/ethereum/src/contracts/index.ts b/yarn-project/ethereum/src/contracts/index.ts index d340cd36166e..b93c489d6591 100644 --- a/yarn-project/ethereum/src/contracts/index.ts +++ b/yarn-project/ethereum/src/contracts/index.ts @@ -7,6 +7,7 @@ export * from './governance_proposer.js'; export * from './gse.js'; export * from './inbox.js'; export * from './multicall.js'; +export * from './outbox.js'; export * from './registry.js'; export * from './rollup.js'; export * from './empire_slashing_proposer.js'; diff --git a/yarn-project/ethereum/src/contracts/outbox.ts b/yarn-project/ethereum/src/contracts/outbox.ts new file mode 100644 index 000000000000..698c4fa40665 --- /dev/null +++ b/yarn-project/ethereum/src/contracts/outbox.ts @@ -0,0 +1,98 @@ +import type { EpochNumber } from '@aztec/foundation/branded-types'; +import { EthAddress } from '@aztec/foundation/eth-address'; +import { OutboxAbi } from '@aztec/l1-artifacts/OutboxAbi'; + +import { type GetContractReturnType, type Hex, encodeAbiParameters, getContract, hexToBigInt, keccak256 } from 'viem'; + +import { getPublicClient } from '../client.js'; +import type { DeployAztecL1ContractsReturnType } from '../deploy_aztec_l1_contracts.js'; +import type { L1ReaderConfig } from '../l1_reader.js'; +import { type ExtendedViemWalletClient, type ViemClient, isExtendedClient } from '../types.js'; + +export type ViemL1Actor = { + actor: Hex; + chainId: bigint; +}; + +export type ViemL2Actor = { + actor: Hex; + version: bigint; +}; + +export type ViemL2ToL1Msg = { + sender: ViemL2Actor; + recipient: ViemL1Actor; + content: Hex; +}; + +export class OutboxContract { + private readonly outbox: GetContractReturnType; + + static getFromL1ContractsValues(deployL1ContractsValues: DeployAztecL1ContractsReturnType) { + const { + l1Client, + l1ContractAddresses: { outboxAddress }, + } = deployL1ContractsValues; + return new OutboxContract(l1Client, outboxAddress.toString()); + } + + static getFromConfig(config: L1ReaderConfig) { + const client = getPublicClient(config); + const address = config.l1Contracts.outboxAddress.toString(); + return new OutboxContract(client, address); + } + + static getEpochRootStorageSlot(epoch: EpochNumber) { + return hexToBigInt(keccak256(encodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], [BigInt(epoch), 0n]))); + } + + constructor( + public readonly client: ViemClient, + address: Hex | EthAddress, + ) { + if (address instanceof EthAddress) { + address = address.toString(); + } + this.outbox = getContract({ address, abi: OutboxAbi, client }); + } + + public get address() { + return this.outbox.address; + } + + public getContract(): GetContractReturnType { + return this.outbox; + } + + public hasMessageBeenConsumedAtEpoch(epoch: EpochNumber, leafId: bigint) { + return this.outbox.read.hasMessageBeenConsumedAtEpoch([BigInt(epoch), leafId]); + } + + public getRootData(epoch: EpochNumber) { + return this.outbox.read.getRootData([BigInt(epoch)]); + } + + public consume(message: ViemL2ToL1Msg, epoch: EpochNumber, leafIndex: bigint, path: Hex[]) { + const wallet = this.assertWallet(); + return wallet.write.consume([message, BigInt(epoch), leafIndex, path]); + } + + public async getMessageConsumedEvents( + l1BlockHash: Hex, + ): Promise<{ epoch: bigint; root: Hex; messageHash: Hex; leafId: bigint }[]> { + const events = await this.outbox.getEvents.MessageConsumed({}, { blockHash: l1BlockHash, strict: true }); + return events.map(event => ({ + epoch: event.args.epoch!, + root: event.args.root!, + messageHash: event.args.messageHash!, + leafId: event.args.leafId!, + })); + } + + private assertWallet(): GetContractReturnType { + if (!isExtendedClient(this.client)) { + throw new Error('Wallet client is required for this operation'); + } + return this.outbox as GetContractReturnType; + } +} diff --git a/yarn-project/ethereum/src/contracts/rollup.ts b/yarn-project/ethereum/src/contracts/rollup.ts index 3eacdb27d0d9..b15583dbc827 100644 --- a/yarn-project/ethereum/src/contracts/rollup.ts +++ b/yarn-project/ethereum/src/contracts/rollup.ts @@ -60,13 +60,15 @@ export type L1RollupContractAddresses = Pick< export type EpochProofPublicInputArgs = { previousArchive: `0x${string}`; endArchive: `0x${string}`; + outHash: `0x${string}`; proverId: `0x${string}`; }; export type ViemHeader = { lastArchiveRoot: `0x${string}`; blockHeadersHash: `0x${string}`; - contentCommitment: ViemContentCommitment; + blobsHash: `0x${string}`; + inHash: `0x${string}`; slotNumber: bigint; timestamp: bigint; coinbase: `0x${string}`; @@ -75,12 +77,6 @@ export type ViemHeader = { totalManaUsed: bigint; }; -export type ViemContentCommitment = { - blobsHash: `0x${string}`; - inHash: `0x${string}`; - outHash: `0x${string}`; -}; - export type ViemGasFees = { feePerDaGas: bigint; feePerL2Gas: bigint; diff --git a/yarn-project/ethereum/src/test/rollup_cheat_codes.ts b/yarn-project/ethereum/src/test/rollup_cheat_codes.ts index c0ea677903a8..9ba13afb6793 100644 --- a/yarn-project/ethereum/src/test/rollup_cheat_codes.ts +++ b/yarn-project/ethereum/src/test/rollup_cheat_codes.ts @@ -1,4 +1,4 @@ -import { RollupContract } from '@aztec/ethereum/contracts'; +import { OutboxContract, RollupContract } from '@aztec/ethereum/contracts'; import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses'; import type { ViemPublicClient } from '@aztec/ethereum/types'; import { CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types'; @@ -250,6 +250,15 @@ export class RollupCheatCodes { }); } + public insertOutbox(epoch: EpochNumber, outHash: bigint) { + return this.ethCheatCodes.execWithPausedAnvil(async () => { + const outboxAddress = await this.rollup.read.getOutbox(); + const epochRootSlot = OutboxContract.getEpochRootStorageSlot(epoch); + await this.ethCheatCodes.store(EthAddress.fromString(outboxAddress), epochRootSlot, outHash); + this.logger.warn(`Advanced outbox to epoch ${epoch} with out hash ${outHash}`); + }); + } + /** * Executes an action impersonated as the owner of the Rollup contract. * @param action - The action to execute diff --git a/yarn-project/foundation/src/eth-address/index.ts b/yarn-project/foundation/src/eth-address/index.ts index 0633ed837b6e..8c5fecbbefc3 100644 --- a/yarn-project/foundation/src/eth-address/index.ts +++ b/yarn-project/foundation/src/eth-address/index.ts @@ -249,7 +249,7 @@ export class EthAddress { /** Converts a number into an address. Useful for testing. */ static fromNumber(num: bigint | number): EthAddress { const buffer = Buffer.alloc(EthAddress.SIZE_IN_BYTES); - buffer.writeBigUInt64BE(BigInt(num), 0); + buffer.writeBigUInt64BE(BigInt(num), EthAddress.SIZE_IN_BYTES - 8); return new EthAddress(buffer); } diff --git a/yarn-project/foundation/src/trees/unbalanced_merkle_tree.test.ts b/yarn-project/foundation/src/trees/unbalanced_merkle_tree.test.ts index 4532e5a83cda..56652c96697e 100644 --- a/yarn-project/foundation/src/trees/unbalanced_merkle_tree.test.ts +++ b/yarn-project/foundation/src/trees/unbalanced_merkle_tree.test.ts @@ -13,6 +13,10 @@ describe('computeUnbalancedMerkleTreeRoot', () => { expect(computeUnbalancedMerkleTreeRoot([])).toEqual(Buffer.alloc(32)); }); + it('0 leaves', () => { + expect(computeUnbalancedMerkleTreeRoot([])).toEqual(Buffer.alloc(32)); + }); + it('1 leaf', () => { const leaves = createLeaves(1); const expectedRoot = leaves[0]; diff --git a/yarn-project/foundation/src/trees/unbalanced_merkle_tree.ts b/yarn-project/foundation/src/trees/unbalanced_merkle_tree.ts index 92ce2c7e1712..42e564303e68 100644 --- a/yarn-project/foundation/src/trees/unbalanced_merkle_tree.ts +++ b/yarn-project/foundation/src/trees/unbalanced_merkle_tree.ts @@ -4,12 +4,16 @@ import { poseidonMerkleHash, shaMerkleHash, } from './balanced_merkle_tree.js'; +import { UnbalancedMerkleTreeCalculator } from './unbalanced_merkle_tree_calculator.js'; export const computeUnbalancedShaRoot = (leaves: Buffer[]) => computeUnbalancedMerkleTreeRoot(leaves, shaMerkleHash); export const computeUnbalancedPoseidonRoot = async (leaves: Buffer[]) => await computeUnbalancedMerkleTreeRootAsync(leaves, poseidonMerkleHash); +export const computeCompressedUnbalancedShaRoot = (leaves: Buffer[]) => + computeCompressedUnbalancedMerkleTreeRoot(leaves); + /** * Computes the Merkle root of an unbalanced tree. * @@ -101,6 +105,16 @@ export async function computeUnbalancedMerkleTreeRootAsync( return root!; } +export function computeCompressedUnbalancedMerkleTreeRoot( + leaves: Buffer[], + valueToCompress = Buffer.alloc(32), + emptyRoot = Buffer.alloc(32), + hasher = shaMerkleHash, +): Buffer { + const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher); + return calculator.getRoot(); +} + /// Get the depth of the maximum balanced tree that can be created with the given number of leaves. The subtree will be /// the left most subtree of the wonky tree with a total of `numLeaves` leaves. /// diff --git a/yarn-project/foundation/src/trees/unbalanced_merkle_tree_calculator.ts b/yarn-project/foundation/src/trees/unbalanced_merkle_tree_calculator.ts index dfe10ce6c087..6e67633877ba 100644 --- a/yarn-project/foundation/src/trees/unbalanced_merkle_tree_calculator.ts +++ b/yarn-project/foundation/src/trees/unbalanced_merkle_tree_calculator.ts @@ -3,16 +3,6 @@ import type { Hasher } from './hasher.js'; import { SiblingPath } from './sibling_path.js'; import { type TreeNodeLocation, UnbalancedTreeStore } from './unbalanced_tree_store.js'; -export function computeCompressedUnbalancedMerkleTreeRoot( - leaves: Buffer[], - valueToCompress = Buffer.alloc(32), - emptyRoot = Buffer.alloc(32), - hasher?: Hasher['hash'], -): Buffer { - const calculator = UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress, emptyRoot, hasher); - return calculator.getRoot(); -} - interface TreeNode { value: Buffer; leafIndex?: number; diff --git a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts index 66c4643e7f99..1151b2a766b8 100644 --- a/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts +++ b/yarn-project/noir-protocol-circuits-types/src/conversion/server.ts @@ -484,6 +484,7 @@ export function mapRootRollupPublicInputsFromNoir( return new RootRollupPublicInputs( mapFieldFromNoir(rootRollupPublicInputs.previous_archive_root), mapFieldFromNoir(rootRollupPublicInputs.new_archive_root), + mapFieldFromNoir(rootRollupPublicInputs.out_hash), mapTupleFromNoir(rootRollupPublicInputs.checkpoint_header_hashes, AZTEC_MAX_EPOCH_DURATION, mapFieldFromNoir), mapTupleFromNoir(rootRollupPublicInputs.fees, AZTEC_MAX_EPOCH_DURATION, mapFeeRecipientFromNoir), mapEpochConstantDataFromNoir(rootRollupPublicInputs.constants), @@ -636,6 +637,7 @@ export function mapCheckpointRollupPublicInputsFromNoir(inputs: CheckpointRollup mapAppendOnlyTreeSnapshotFromNoir(inputs.previous_archive), mapAppendOnlyTreeSnapshotFromNoir(inputs.new_archive), mapTupleFromNoir(inputs.checkpoint_header_hashes, AZTEC_MAX_EPOCH_DURATION, mapFieldFromNoir), + mapTupleFromNoir(inputs.out_hashes, AZTEC_MAX_EPOCH_DURATION, mapFieldFromNoir), mapTupleFromNoir(inputs.fees, AZTEC_MAX_EPOCH_DURATION, mapFeeRecipientFromNoir), mapBlobAccumulatorFromNoir(inputs.start_blob_accumulator), mapBlobAccumulatorFromNoir(inputs.end_blob_accumulator), @@ -651,6 +653,7 @@ export function mapCheckpointRollupPublicInputsToNoir( previous_archive: mapAppendOnlyTreeSnapshotToNoir(inputs.previousArchive), new_archive: mapAppendOnlyTreeSnapshotToNoir(inputs.newArchive), checkpoint_header_hashes: mapTuple(inputs.checkpointHeaderHashes, mapFieldToNoir), + out_hashes: mapTuple(inputs.outHashes, mapFieldToNoir), fees: mapTuple(inputs.fees, mapFeeRecipientToNoir), start_blob_accumulator: mapBlobAccumulatorToNoir(inputs.startBlobAccumulator), end_blob_accumulator: mapBlobAccumulatorToNoir(inputs.endBlobAccumulator), diff --git a/yarn-project/prover-client/src/block-factory/light.ts b/yarn-project/prover-client/src/block-factory/light.ts index d8fa4cb51047..9e3659f27435 100644 --- a/yarn-project/prover-client/src/block-factory/light.ts +++ b/yarn-project/prover-client/src/block-factory/light.ts @@ -5,9 +5,9 @@ import { Fr } from '@aztec/foundation/curves/bn254'; import { createLogger } from '@aztec/foundation/log'; import { L2Block, L2BlockHeader } from '@aztec/stdlib/block'; import type { IBlockFactory, MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'; -import { computeBlockOutHash, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging'; +import { computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging'; import { MerkleTreeId } from '@aztec/stdlib/trees'; -import { ContentCommitment, type GlobalVariables, type ProcessedTx } from '@aztec/stdlib/tx'; +import type { GlobalVariables, ProcessedTx } from '@aztec/stdlib/tx'; import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client'; import { @@ -87,17 +87,16 @@ export class LightweightBlockFactory implements IBlockFactory { await this.db.updateArchive(header); const newArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, this.db); - const outHash = computeBlockOutHash(txs.map(tx => tx.txEffect.l2ToL1Msgs)); const inHash = computeInHashFromL1ToL2Messages(this.l1ToL2Messages!); const numBlobFields = blockBlobFields.length + 1; const blobFields = blockBlobFields.concat([encodeCheckpointEndMarker({ numBlobFields })]); const blobsHash = computeBlobsHashFromBlobs(getBlobsPerL1Block(blobFields)); const blockHeaderHash = await header.hash(); - const contentCommitment = new ContentCommitment(blobsHash, inHash, outHash); const l2BlockHeader = L2BlockHeader.from({ ...header, blockHeadersHash: blockHeaderHash, - contentCommitment, + blobsHash, + inHash, }); const block = new L2Block(newArchive, l2BlockHeader, body); diff --git a/yarn-project/prover-client/src/light/lightweight_checkpoint_builder.ts b/yarn-project/prover-client/src/light/lightweight_checkpoint_builder.ts index 27ff133718c2..cdfef236f7ed 100644 --- a/yarn-project/prover-client/src/light/lightweight_checkpoint_builder.ts +++ b/yarn-project/prover-client/src/light/lightweight_checkpoint_builder.ts @@ -7,12 +7,11 @@ import { createLogger } from '@aztec/foundation/log'; import { L2BlockNew } from '@aztec/stdlib/block'; import { Checkpoint } from '@aztec/stdlib/checkpoint'; import type { MerkleTreeWriteOperations } from '@aztec/stdlib/interfaces/server'; -import { computeCheckpointOutHash, computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging'; +import { computeInHashFromL1ToL2Messages } from '@aztec/stdlib/messaging'; import { CheckpointHeader, computeBlockHeadersHash } from '@aztec/stdlib/rollup'; import { AppendOnlyTreeSnapshot, MerkleTreeId } from '@aztec/stdlib/trees'; import { type CheckpointGlobalVariables, - ContentCommitment, type GlobalVariables, type ProcessedTx, StateReference, @@ -157,8 +156,6 @@ export class LightweightCheckpointBuilder { const inHash = computeInHashFromL1ToL2Messages(this.l1ToL2Messages); - const outHash = computeCheckpointOutHash(blocks.map(block => block.body.txEffects.map(tx => tx.l2ToL1Msgs))); - const { slotNumber, coinbase, feeRecipient, gasFees } = this.constants; // TODO(palla/mbps): Should we source this from the constants instead? @@ -169,7 +166,8 @@ export class LightweightCheckpointBuilder { const header = CheckpointHeader.from({ lastArchiveRoot: this.lastArchives[0].root, - contentCommitment: new ContentCommitment(blobsHash, inHash, outHash), + blobsHash, + inHash, blockHeadersHash, slotNumber, timestamp, diff --git a/yarn-project/prover-client/src/orchestrator/orchestrator_rollup_structure.test.ts b/yarn-project/prover-client/src/orchestrator/orchestrator_rollup_structure.test.ts index 074ed1631753..fdf53c01092e 100644 --- a/yarn-project/prover-client/src/orchestrator/orchestrator_rollup_structure.test.ts +++ b/yarn-project/prover-client/src/orchestrator/orchestrator_rollup_structure.test.ts @@ -1,5 +1,5 @@ import { BatchedBlobAccumulator } from '@aztec/blob-lib'; -import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants'; +import { AZTEC_MAX_EPOCH_DURATION, MAX_L2_TO_L1_MSGS_PER_TX } from '@aztec/constants'; import { asyncMap } from '@aztec/foundation/async-map'; import { EpochNumber } from '@aztec/foundation/branded-types'; import { padArrayEnd } from '@aztec/foundation/collection'; @@ -7,8 +7,10 @@ import { Fr } from '@aztec/foundation/curves/bn254'; import { EthAddress } from '@aztec/foundation/eth-address'; import { createLogger } from '@aztec/foundation/log'; import { Gas, GasFees } from '@aztec/stdlib/gas'; +import { ScopedL2ToL1Message, computeL2ToL1MembershipWitnessFromMessagesInEpoch } from '@aztec/stdlib/messaging'; import { FeeRecipient } from '@aztec/stdlib/rollup'; import type { ServerCircuitName } from '@aztec/stdlib/stats'; +import { makeScopedL2ToL1Message } from '@aztec/stdlib/testing'; import { MerkleTreeId } from '@aztec/stdlib/trees'; import type { GlobalVariables } from '@aztec/stdlib/tx'; @@ -38,6 +40,13 @@ describe('prover/orchestrator/rollup-structure', () => { }); }; + const makeL2ToL1Messages = (blockGlobalVariables: GlobalVariables, txIndex: number) => { + // Tweak the l2-to-l1 messages to have different amounts for building the out hashes in various tree shapes. + const numL2ToL1Messages = (blockGlobalVariables.blockNumber + txIndex) % (MAX_L2_TO_L1_MSGS_PER_TX + 1); + const messages = Array.from({ length: numL2ToL1Messages }, () => makeScopedL2ToL1Message((txIndex + 1) * 456)); + return padArrayEnd(messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX); + }; + beforeEach(async () => { context = await TestContext.new(logger); @@ -78,6 +87,7 @@ describe('prover/orchestrator/rollup-structure', () => { const numCheckpoints = numTxsPerBlockInCheckpoints.length; const numL1ToL2Messages = 2; + const l1ToL2MessagesInEpoch: Fr[][][][] = []; const epochStartArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, await context.worldState.fork()); const expectedFees: FeeRecipient[] = []; @@ -92,9 +102,14 @@ describe('prover/orchestrator/rollup-structure', () => { makeProcessedTxOpts: (blockGlobalVariables: GlobalVariables, txIndex: number) => ({ gasUsed: mockTxGasUsed(txIndex, blockGlobalVariables.blockNumber), privateOnly: txIndex % 2 === 0, + avmAccumulatedData: { + l2ToL1Msgs: makeL2ToL1Messages(blockGlobalVariables, txIndex), + }, }), }); + l1ToL2MessagesInEpoch[checkpointIndex] = checkpoint.blocks.map(b => b.txs.map(tx => tx.txEffect.l2ToL1Msgs)); + // Accumulate the fees for the checkpoint, to be compared with the values from the root rollup's public inputs. const totalFee = checkpoint.blocks .map(b => b.txs) @@ -135,6 +150,10 @@ describe('prover/orchestrator/rollup-structure', () => { const epochEndArchive = await getTreeSnapshot(MerkleTreeId.ARCHIVE, await context.worldState.fork()); expect(result.publicInputs.endArchiveRoot).toEqual(epochEndArchive.root); + const firstMessage = l1ToL2MessagesInEpoch.flat(4)[0]; + const { root: outHash } = computeL2ToL1MembershipWitnessFromMessagesInEpoch(l1ToL2MessagesInEpoch, firstMessage); + expect(result.publicInputs.outHash).toEqual(outHash); + const expectedCheckpointHeaderHashes = checkpoints.map(c => c.header.hash()); expect(result.publicInputs.checkpointHeaderHashes).toEqual( padArrayEnd(expectedCheckpointHeaderHashes, Fr.ZERO, AZTEC_MAX_EPOCH_DURATION), diff --git a/yarn-project/prover-node/src/index.ts b/yarn-project/prover-node/src/index.ts index 043f10af0f0d..2d9cdc2b5d8f 100644 --- a/yarn-project/prover-node/src/index.ts +++ b/yarn-project/prover-node/src/index.ts @@ -1,5 +1,6 @@ export * from './actions/index.js'; export * from './config.js'; export * from './factory.js'; +export * from './monitors/index.js'; export * from './prover-node-publisher.js'; export * from './prover-node.js'; diff --git a/yarn-project/prover-node/src/prover-node-publisher.ts b/yarn-project/prover-node/src/prover-node-publisher.ts index a961f418c3ef..2222ffc05e05 100644 --- a/yarn-project/prover-node/src/prover-node-publisher.ts +++ b/yarn-project/prover-node/src/prover-node-publisher.ts @@ -266,6 +266,7 @@ export class ProverNodePublisher { { previousArchive: args.publicInputs.previousArchiveRoot.toString(), endArchive: args.publicInputs.endArchiveRoot.toString(), + outHash: args.publicInputs.outHash.toString(), proverId: EthAddress.fromField(args.publicInputs.constants.proverId).toString(), } /*_args*/, makeTuple(AZTEC_MAX_EPOCH_DURATION * 2, i => diff --git a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts index 7ce7c09d3053..548cfa66124c 100644 --- a/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts +++ b/yarn-project/sequencer-client/src/publisher/sequencer-publisher.ts @@ -459,7 +459,7 @@ export class SequencerPublisher { [], // no signers Signature.empty().toViemSignature(), `0x${'0'.repeat(64)}`, // 32 empty bytes - header.contentCommitment.blobsHash.toString(), + header.blobsHash.toString(), flags, ] as const; diff --git a/yarn-project/sequencer-client/src/test/utils.ts b/yarn-project/sequencer-client/src/test/utils.ts index ebaed1a77ed3..516336fa3340 100644 --- a/yarn-project/sequencer-client/src/test/utils.ts +++ b/yarn-project/sequencer-client/src/test/utils.ts @@ -11,13 +11,7 @@ import { CommitteeAttestation, L2BlockNew } from '@aztec/stdlib/block'; import { BlockAttestation, BlockProposal, ConsensusPayload } from '@aztec/stdlib/p2p'; import { CheckpointHeader } from '@aztec/stdlib/rollup'; import { makeAppendOnlyTreeSnapshot, mockTxForRollup } from '@aztec/stdlib/testing'; -import { - BlockHeader, - ContentCommitment, - GlobalVariables, - type Tx, - makeProcessedTxFromPrivateOnlyTx, -} from '@aztec/stdlib/tx'; +import { BlockHeader, GlobalVariables, type Tx, makeProcessedTxFromPrivateOnlyTx } from '@aztec/stdlib/tx'; import type { MockProxy } from 'jest-mock-extended'; @@ -77,15 +71,15 @@ export function createMockSignatures(signer: Secp256k1Signer): CommitteeAttestat /** * Creates a CheckpointHeader from an L2BlockNew for testing purposes. - * Uses mock values for contentCommitment and blockHeadersHash since - * L2BlockNew doesn't have these fields. + * Uses mock values for blockHeadersHash, blobsHash and inHash since L2BlockNew doesn't have these fields. */ function createCheckpointHeaderFromBlock(block: L2BlockNew): CheckpointHeader { const gv = block.header.globalVariables; return new CheckpointHeader( block.header.lastArchive.root, Fr.random(), // blockHeadersHash - mock value for testing - ContentCommitment.empty(), // contentCommitment - mock value for testing + Fr.random(), // blobsHash - mock value for testing + Fr.random(), // inHash - mock value for testing gv.slotNumber, gv.timestamp, gv.coinbase, diff --git a/yarn-project/stdlib/src/block/l2_block.ts b/yarn-project/stdlib/src/block/l2_block.ts index 864dc7a88bca..f4de4cd8ca08 100644 --- a/yarn-project/stdlib/src/block/l2_block.ts +++ b/yarn-project/stdlib/src/block/l2_block.ts @@ -101,7 +101,7 @@ export class L2Block { return new L2Block( makeAppendOnlyTreeSnapshot(l2BlockNum + 1), - makeL2BlockHeader(0, l2BlockNum, slotNumber ?? l2BlockNum, {}, inHash), + makeL2BlockHeader(0, l2BlockNum, slotNumber ?? l2BlockNum, { inHash }), body, ); } @@ -175,7 +175,8 @@ export class L2Block { const block = checkpoint.blocks.at(-1)!; const header = new L2BlockHeader( new AppendOnlyTreeSnapshot(checkpointHeader.lastArchiveRoot, block.number), - checkpointHeader.contentCommitment, + checkpointHeader.blobsHash, + checkpointHeader.inHash, block.header.state, block.header.globalVariables, block.header.totalFees, diff --git a/yarn-project/stdlib/src/block/l2_block_code_to_purge.ts b/yarn-project/stdlib/src/block/l2_block_code_to_purge.ts index f73d29952dcf..9770908e64ae 100644 --- a/yarn-project/stdlib/src/block/l2_block_code_to_purge.ts +++ b/yarn-project/stdlib/src/block/l2_block_code_to_purge.ts @@ -7,7 +7,6 @@ import type { FieldsOf } from '@aztec/foundation/types'; import { AztecAddress } from '../aztec-address/index.js'; import { GasFees } from '../gas/gas_fees.js'; import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js'; -import { ContentCommitment } from '../tx/content_commitment.js'; import { GlobalVariables } from '../tx/global_variables.js'; import { PartialStateReference } from '../tx/partial_state_reference.js'; import { StateReference } from '../tx/state_reference.js'; @@ -18,12 +17,12 @@ export function makeL2BlockHeader( blockNumber?: number, slotNumber?: number, overrides: Partial> = {}, - inHash?: Fr, ) { return new L2BlockHeader( makeAppendOnlyTreeSnapshot(seed + 0x100), - overrides?.contentCommitment ?? makeContentCommitment(seed + 0x200, inHash), - overrides?.state ?? makeStateReference(seed + 0x600), + overrides.blobsHash ?? new Fr(seed + 0x200), + overrides.inHash ?? new Fr(seed + 0x300), + overrides.state ?? makeStateReference(seed + 0x600), makeGlobalVariables((seed += 0x700), { ...(blockNumber ? { blockNumber: BlockNumber(blockNumber) } : {}), ...(slotNumber ? { slotNumber: SlotNumber(slotNumber) } : {}), @@ -44,13 +43,6 @@ export function makeAppendOnlyTreeSnapshot(seed = 1): AppendOnlyTreeSnapshot { return new AppendOnlyTreeSnapshot(new Fr(seed), seed); } -/** - * Makes content commitment - */ -function makeContentCommitment(seed = 0, inHash?: Fr): ContentCommitment { - return new ContentCommitment(new Fr(seed + 0x100), inHash ?? new Fr(seed + 0x200), new Fr(seed + 0x300)); -} - /** * Makes arbitrary state reference. * @param seed - The seed to use for generating the state reference. diff --git a/yarn-project/stdlib/src/block/l2_block_header.ts b/yarn-project/stdlib/src/block/l2_block_header.ts index 0d7991ea89c6..5286d172e5bb 100644 --- a/yarn-project/stdlib/src/block/l2_block_header.ts +++ b/yarn-project/stdlib/src/block/l2_block_header.ts @@ -10,7 +10,7 @@ import { z } from 'zod'; import { CheckpointHeader } from '../rollup/checkpoint_header.js'; import { AppendOnlyTreeSnapshot } from '../trees/append_only_tree_snapshot.js'; -import { BlockHeader, ContentCommitment, GlobalVariables, StateReference } from '../tx/index.js'; +import { BlockHeader, GlobalVariables, StateReference } from '../tx/index.js'; /** * TO BE DELETED @@ -25,8 +25,8 @@ export class L2BlockHeader { constructor( /** Snapshot of archive before the block is applied. */ public lastArchive: AppendOnlyTreeSnapshot, - /** Hash of the body of an L2 block. */ - public contentCommitment: ContentCommitment, + public blobsHash: Fr, + public inHash: Fr, /** State reference. */ public state: StateReference, /** Global variables of an L2 block. */ @@ -45,7 +45,8 @@ export class L2BlockHeader { return z .object({ lastArchive: AppendOnlyTreeSnapshot.schema, - contentCommitment: ContentCommitment.schema, + blobsHash: schemas.Fr, + inHash: schemas.Fr, state: StateReference.schema, globalVariables: GlobalVariables.schema, totalFees: schemas.Fr, @@ -59,7 +60,8 @@ export class L2BlockHeader { static getFields(fields: FieldsOf) { return [ fields.lastArchive, - fields.contentCommitment, + fields.blobsHash, + fields.inHash, fields.state, fields.globalVariables, fields.totalFees, @@ -84,7 +86,8 @@ export class L2BlockHeader { getSize() { return ( this.lastArchive.getSize() + - this.contentCommitment.getSize() + + this.blobsHash.size + + this.inHash.size + this.state.getSize() + this.globalVariables.getSize() + this.totalFees.size + @@ -111,7 +114,8 @@ export class L2BlockHeader { return new L2BlockHeader( reader.readObject(AppendOnlyTreeSnapshot), - reader.readObject(ContentCommitment), + reader.readObject(Fr), + reader.readObject(Fr), reader.readObject(StateReference), reader.readObject(GlobalVariables), reader.readObject(Fr), @@ -126,7 +130,8 @@ export class L2BlockHeader { return new L2BlockHeader( AppendOnlyTreeSnapshot.fromFields(reader), - ContentCommitment.fromFields(reader), + reader.readField(), + reader.readField(), StateReference.fromFields(reader), GlobalVariables.fromFields(reader), reader.readField(), @@ -139,7 +144,8 @@ export class L2BlockHeader { static empty(fields: Partial> = {}) { return L2BlockHeader.from({ lastArchive: AppendOnlyTreeSnapshot.empty(), - contentCommitment: ContentCommitment.empty(), + blobsHash: Fr.ZERO, + inHash: Fr.ZERO, state: StateReference.empty(), globalVariables: GlobalVariables.empty(), totalFees: Fr.ZERO, @@ -153,7 +159,8 @@ export class L2BlockHeader { isEmpty(): boolean { return ( this.lastArchive.isEmpty() && - this.contentCommitment.isEmpty() && + this.blobsHash.isZero() && + this.inHash.isZero() && this.state.isEmpty() && this.globalVariables.isEmpty() && this.totalFees.isZero() && @@ -179,7 +186,8 @@ export class L2BlockHeader { return new CheckpointHeader( this.lastArchive.root, this.blockHeadersHash, - this.contentCommitment, + this.blobsHash, + this.inHash, this.globalVariables.slotNumber, this.globalVariables.timestamp, this.globalVariables.coinbase, @@ -203,7 +211,8 @@ export class L2BlockHeader { toInspect() { return { lastArchive: this.lastArchive.root.toString(), - contentCommitment: this.contentCommitment.toInspect(), + blobsHash: this.blobsHash.toString(), + inHash: this.inHash.toString(), state: this.state.toInspect(), globalVariables: this.globalVariables.toInspect(), totalFees: this.totalFees.toBigInt(), @@ -216,9 +225,8 @@ export class L2BlockHeader { [inspect.custom]() { return `L2BlockHeader { lastArchive: ${inspect(this.lastArchive)}, - contentCommitment.blobsHash: ${inspect(this.contentCommitment.blobsHash)}, - contentCommitment.inHash: ${inspect(this.contentCommitment.inHash)}, - contentCommitment.outHash: ${inspect(this.contentCommitment.outHash)}, + blobsHash: ${inspect(this.blobsHash)}, + inHash: ${inspect(this.inHash)}, state.l1ToL2MessageTree: ${inspect(this.state.l1ToL2MessageTree)}, state.noteHashTree: ${inspect(this.state.partial.noteHashTree)}, state.nullifierTree: ${inspect(this.state.partial.nullifierTree)}, @@ -233,12 +241,13 @@ export class L2BlockHeader { public equals(other: this): boolean { return ( - this.contentCommitment.equals(other.contentCommitment) && + this.lastArchive.equals(other.lastArchive) && + this.blobsHash.equals(other.blobsHash) && + this.inHash.equals(other.inHash) && this.state.equals(other.state) && this.globalVariables.equals(other.globalVariables) && this.totalFees.equals(other.totalFees) && this.totalManaUsed.equals(other.totalManaUsed) && - this.lastArchive.equals(other.lastArchive) && this.spongeBlobHash.equals(other.spongeBlobHash) && this.blockHeadersHash.equals(other.blockHeadersHash) ); diff --git a/yarn-project/stdlib/src/interfaces/aztec-node.test.ts b/yarn-project/stdlib/src/interfaces/aztec-node.test.ts index 1816a9ea7c55..ed92b4589612 100644 --- a/yarn-project/stdlib/src/interfaces/aztec-node.test.ts +++ b/yarn-project/stdlib/src/interfaces/aztec-node.test.ts @@ -6,7 +6,7 @@ import { PUBLIC_DATA_TREE_HEIGHT, } from '@aztec/constants'; import { type L1ContractAddresses, L1ContractsNames } from '@aztec/ethereum/l1-contract-addresses'; -import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types'; +import { BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types'; import { Buffer32 } from '@aztec/foundation/buffer'; import { timesAsync } from '@aztec/foundation/collection'; import { randomInt } from '@aztec/foundation/crypto/random'; @@ -141,8 +141,12 @@ describe('AztecNodeApiSchema', () => { }); it('getL2ToL1Messages', async () => { - const response = await context.client.getL2ToL1Messages(BlockNumber(1)); - expect(response?.length).toBe(3); + const response = await context.client.getL2ToL1Messages(EpochNumber(1)); + expect(response.length).toBe(3); + expect(response[0].length).toBe(4); + expect(response[0][0].length).toBe(2); + expect(response[0][0][0].length).toBe(3); + expect(response[0][0][0][0]).toBeInstanceOf(Fr); }); it('getArchiveSiblingPath', async () => { @@ -592,8 +596,16 @@ class MockAztecNode implements AztecNode { expect(l1ToL2Message).toBeInstanceOf(Fr); return Promise.resolve(true); } - getL2ToL1Messages(_blockNumber: number | 'latest'): Promise { - return Promise.resolve(Array.from({ length: 3 }, (_, i) => [new Fr(i)])); + getL2ToL1Messages(_epoch: EpochNumber): Promise { + return Promise.resolve( + Array.from({ length: 3 }, (_, i) => + Array.from({ length: 4 }, (_, j) => + Array.from({ length: 2 }, (_, k) => + Array.from({ length: 3 }).map((_, l) => new Fr(i * 11 + j * 22 + k * 33 + l * 44)), + ), + ), + ), + ); } getArchiveSiblingPath( blockNumber: number | 'latest', diff --git a/yarn-project/stdlib/src/interfaces/aztec-node.ts b/yarn-project/stdlib/src/interfaces/aztec-node.ts index f29fad0a9de1..66720ffbffb1 100644 --- a/yarn-project/stdlib/src/interfaces/aztec-node.ts +++ b/yarn-project/stdlib/src/interfaces/aztec-node.ts @@ -10,6 +10,8 @@ import { BlockNumber, BlockNumberPositiveSchema, BlockNumberSchema, + EpochNumber, + EpochNumberSchema, type SlotNumber, } from '@aztec/foundation/branded-types'; import type { Fr } from '@aztec/foundation/curves/bn254'; @@ -216,11 +218,12 @@ export interface AztecNode isL1ToL2MessageSynced(l1ToL2Message: Fr): Promise; /** - * Returns all the L2 to L1 messages in a block. - * @param blockNumber - The block number at which to get the data. - * @returns The L2 to L1 messages (undefined if the block number is not found). + * Returns all the L2 to L1 messages in an epoch. + * @param epoch - The epoch at which to get the data. + * @returns A nested array of the L2 to L1 messages in each tx of each block in each checkpoint in the epoch (empty + * array if the epoch is not found). */ - getL2ToL1Messages(blockNumber: BlockParameter): Promise; + getL2ToL1Messages(epoch: EpochNumber): Promise; /** * Get a block specified by its number. @@ -552,8 +555,8 @@ export const AztecNodeApiSchema: ApiSchemaFor = { getL2ToL1Messages: z .function() - .args(BlockParameterSchema) - .returns(z.array(z.array(schemas.Fr)).optional()), + .args(EpochNumberSchema) + .returns(z.array(z.array(z.array(z.array(schemas.Fr))))), getBlock: z.function().args(BlockParameterSchema).returns(L2Block.schema.optional()), diff --git a/yarn-project/stdlib/src/messaging/in_hash.ts b/yarn-project/stdlib/src/messaging/in_hash.ts index 1965b8c67336..52833bf937fe 100644 --- a/yarn-project/stdlib/src/messaging/in_hash.ts +++ b/yarn-project/stdlib/src/messaging/in_hash.ts @@ -3,7 +3,9 @@ import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/curves/bn254'; import { computeBalancedShaRoot } from '@aztec/foundation/trees'; -/** Computes the inHash for a block's ContentCommitment given its l1 to l2 messages. */ +/** + * Computes the inHash for a checkpoint (or the first block in a checkpoint) given its l1 to l2 messages. + */ export function computeInHashFromL1ToL2Messages(unpaddedL1ToL2Messages: Fr[]): Fr { const l1ToL2Messages = padArrayEnd(unpaddedL1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP); return new Fr(computeBalancedShaRoot(l1ToL2Messages.map(msg => msg.toBuffer()))); diff --git a/yarn-project/stdlib/src/messaging/l2_to_l1_membership.test.ts b/yarn-project/stdlib/src/messaging/l2_to_l1_membership.test.ts index 47687cbf955f..d56ea6013ce2 100644 --- a/yarn-project/stdlib/src/messaging/l2_to_l1_membership.test.ts +++ b/yarn-project/stdlib/src/messaging/l2_to_l1_membership.test.ts @@ -1,387 +1,898 @@ +import { MAX_L2_TO_L1_MSGS_PER_TX } from '@aztec/constants'; +import { randomInt } from '@aztec/foundation/crypto/random'; +import { sha256Trunc } from '@aztec/foundation/crypto/sha256'; import { Fr } from '@aztec/foundation/curves/bn254'; -import { computeL2ToL1MembershipWitnessFromMessagesForAllTxs } from './l2_to_l1_membership.js'; +import { + type L2ToL1MembershipWitness, + computeL2ToL1MembershipWitnessFromMessagesInEpoch, + getL2ToL1MessageLeafId, +} from './l2_to_l1_membership.js'; +import { computeEpochOutHash } from './out_hash.js'; describe('L2 to L1 membership', () => { - const generateMsgHashes = (numMsgs: number) => { - return Array.from({ length: numMsgs }, () => Fr.random()); - }; - - it('throws if the message is not found', () => { - const messagesForAllTxs = [generateMsgHashes(3), generateMsgHashes(1)]; - const targetMsg = Fr.random(); - expect(() => computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, targetMsg)).toThrow( - 'The L2ToL1Message you are trying to prove inclusion of does not exist', - ); - }); - - it('a single tx with 1 message', () => { - const txMessages = generateMsgHashes(1); - const messagesForAllTxs = [txMessages]; - - const targetMsg = txMessages[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, targetMsg); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(0); - }); - - it('a single tx with 2 messages', () => { - const txMessages = generateMsgHashes(2); - const messagesForAllTxs = [txMessages]; + let foundLeafIds: Set; - { - const m0 = txMessages[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(1); - } - - { - const m1 = txMessages[1]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m1); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(1); - } - }); + // The depth from the root to the checkpoint out hash in the left subtree (size 32). + const epochLeftTopTreeDepth = 6; - it('a single tx with messages in a wonky tree', () => { - // tx - // / \ - // . m2 - // / \ - // m0 m1 - const txMessages = generateMsgHashes(3); - const messagesForAllTxs = [txMessages]; - - { - const m0 = txMessages[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(2); - } - - { - const m1 = txMessages[1]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m1); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(2); - } + // The depth from the root to the checkpoint out hash in the right subtree (size 16). + const epochRightTopTreeDepth = 5; - { - const m2 = txMessages[2]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(1); - } - }); - - it('2 txs, one has 0 messages, one has 1 message', () => { - // root ----> m0 - // / \ - // [] [m0] - - const txMessages1 = generateMsgHashes(1); - const messagesForAllTxs = [[], txMessages1]; - - const m0 = txMessages1[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(0); - expect(witness.root).toEqual(m0); - }); - - it('multiple txs in a wonky tree, each tx has 1 message', () => { - // root - // / \ - // . [m2] - // / \ - // [m0] [m1] - - const txMessages0 = generateMsgHashes(1); - const txMessages1 = generateMsgHashes(1); - const txMessages2 = generateMsgHashes(1); - const messagesForAllTxs = [txMessages0, txMessages1, txMessages2]; - - { - const m0 = txMessages0[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(2); - } - - { - const m1 = txMessages1[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m1); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(2); - } + const msgHashes = (numMsgs: number) => { + return Array.from({ length: numMsgs }, () => Fr.random()); + }; - { - const m2 = txMessages2[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(1); + const hasher = (left: Buffer, right: Buffer) => sha256Trunc(Buffer.concat([left, right])); + + // This should match the implementation in Outbox.sol -> verifyMembership + const verifyMembership = (leaf: Fr, witness: L2ToL1MembershipWitness) => { + let subtreeRoot = leaf.toBuffer(); + let indexAtHeight = witness.leafIndex; + const path = witness.siblingPath.toBufferArray(); + for (let height = 0; height < path.length; height++) { + const isRight = (indexAtHeight & 1n) === 1n; + subtreeRoot = isRight ? hasher(path[height], subtreeRoot) : hasher(subtreeRoot, path[height]); + indexAtHeight >>= 1n; } - }); + expect(subtreeRoot).toEqual(witness.root.toBuffer()); + }; - it('multiple txs in a wonky tree, one tx has 0 messages', () => { - // root ----> root - // / \ / \ - // . [m2] m0 m2 - // / \ - // [m0] [] - - const txMessages0 = generateMsgHashes(1); - const txMessages2 = generateMsgHashes(1); - // tx1 has no messages. - const messagesForAllTxs = [txMessages0, [], txMessages2]; - - { - const m0 = txMessages0[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - expect(witness.leafIndex).toBe(0n); - expect(witness.siblingPath.pathSize).toBe(1); - } + const verifyMembershipForMessagesInEpoch = (messagesInEpoch: Fr[][][][]): L2ToL1MembershipWitness[] => { + let root = Fr.ZERO; + const messages = messagesInEpoch.flat(3); + const witnesses = messages.map((msg, i) => { + const witness = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, msg); + const leafId = getL2ToL1MessageLeafId(witness); + expect(foundLeafIds.has(leafId)).toBe(false); + foundLeafIds.add(leafId); + verifyMembership(msg, witness); + + if (i === 0) { + root = witness.root; + } else { + expect(witness.root).toEqual(root); + } + + return witness; + }); + + const computedRoot = computeEpochOutHash(messagesInEpoch); + expect(root).toEqual(computedRoot); + + return witnesses; + }; - { - const m2 = txMessages2[0]; - const witness = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - expect(witness.leafIndex).toBe(1n); - expect(witness.siblingPath.pathSize).toBe(1); - } + beforeEach(() => { + foundLeafIds = new Set(); }); - it('multiple txs in a wonky tree, each tx has messages in a balanced tree', () => { - // root - // / \ - // . tx2 - // / \ - // tx0 tx1 - - const txMessages0 = generateMsgHashes(2); - const txMessages1 = generateMsgHashes(4); - const txMessages2 = generateMsgHashes(2); - const messagesForAllTxs = [txMessages0, txMessages1, txMessages2]; - - { - // tx0 + describe('one block in one checkpoint in the epoch', () => { + it('throws if the message is not found', () => { + const messagesInEpoch = [[[msgHashes(3), msgHashes(1)]]]; + const targetMsg = Fr.random(); + expect(() => computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, targetMsg)).toThrow( + 'The L2ToL1Message you are trying to prove inclusion of does not exist', + ); + }); + + it('a single tx with 1 message', () => { + const txMessages = msgHashes(1); + const messagesInEpoch = [[[txMessages]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(epochLeftTopTreeDepth); + }); + + it('a single tx with 2 messages', () => { + // tx // / \ - // m0 m1 - - // m0 - const m0 = txMessages0[0]; - const witness0 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - // 2 edges from root to tx0, 1 edge from tx0 to m0 - expect(witness0.siblingPath.pathSize).toBe(2 + 1); - // The leaf is at index 0n in its tx subtree (height = 1), which has no tx subtrees on its left. - expect(witness0.leafIndex).toBe(0n); - } - - { - // tx1 - // / \ - // . . - // / \ / \ - // m0 m1 m2 m3 - - // m0 - const m0 = txMessages1[0]; - const witness0 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - // 2 edges from root to tx1, 2 edges from tx1 to m0 - expect(witness0.siblingPath.pathSize).toBe(2 + 2); - // The leaf is at index 0n in its tx subtree (height = 2), which has 1 tx subtree on its left. - expect(witness0.leafIndex).toBe(0n + 1n * (1n << 2n)); - - // m2 - const m2 = txMessages1[2]; - const witness2 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - // 2 edges from root to tx1, 2 edges from tx1 to m2 - expect(witness2.siblingPath.pathSize).toBe(2 + 2); - // The leaf is at index 2n in its tx subtree (height = 2), which has 1 tx subtree on its left. - expect(witness2.leafIndex).toBe(2n + 1n * (1n << 2n)); - } - - { - // tx2 + // m0 m1 + + const txMessages = msgHashes(2); + const messagesInEpoch = [[[txMessages]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + + { + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(1n); + expect(m1.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('a single tx with messages in a wonky tree', () => { + // tx + // / \ + // . m2 // / \ // m0 m1 - // m0 - const m1 = txMessages2[1]; - const witness1 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m1); - // 1 edge from root to tx2, 1 edge from tx2 to m1 - expect(witness1.siblingPath.pathSize).toBe(1 + 1); - // The leaf is at index 1n in its tx subtree (height = 1), which has 1 tx subtree on its left. - expect(witness1.leafIndex).toBe(1n + 1n * (1n << 1n)); - } - }); + const txMessages = msgHashes(3); + const messagesInEpoch = [[[txMessages]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(1n); + expect(m2.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('2 txs, one has 0 messages, one has 1 message', () => { + // root ----> m0 + // / \ + // [] m0 - it('multiple txs in a wonky tree, each tx has messages in a wonky tree', () => { - // root - // / \ - // . tx2 - // / \ - // tx0 tx1 - - const txMessages0 = generateMsgHashes(5); - const txMessages1 = generateMsgHashes(3); - const txMessages2 = generateMsgHashes(7); - const messagesForAllTxs = [txMessages0, txMessages1, txMessages2]; - - { - // tx0 - // / \ - // . m4 - // / \ - // . . - // / \ / \ - // m0 m1 m2 m3 - - // m2 - const m2 = txMessages0[2]; - const witness2 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - // 2 edges from root to tx0, 3 edges from tx0 to m2 - expect(witness2.siblingPath.pathSize).toBe(2 + 3); - // The leaf is at index 2n in its tx subtree (height = 3), which has no tx subtrees on its left. - expect(witness2.leafIndex).toBe(2n); - - // m4 - const m4 = txMessages0[4]; - const witness4 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m4); - // 2 edges from root to tx0, 1 edge from tx0 to m4 - expect(witness4.siblingPath.pathSize).toBe(2 + 1); - // The leaf is at index 1n in its tx subtree (height = 1), which has no tx subtrees on its left. - expect(witness4.leafIndex).toBe(1n); - } + const tx1 = msgHashes(1); + const messagesInEpoch = [[[[], tx1]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(epochLeftTopTreeDepth); + }); - { - // tx1 + it('multiple txs in a wonky tree, each tx has 1 message', () => { + // root // / \ // . m2 // / \ // m0 m1 - // m0 - const m0 = txMessages1[0]; - const witness0 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - // 2 edges from root to tx1, 2 edges from tx1 to m0 - expect(witness0.siblingPath.pathSize).toBe(2 + 2); - // The leaf is at index 0n in its tx subtree (height = 2), which has 1 tx subtree on its left. - expect(witness0.leafIndex).toBe(0n + 1n * (1n << 2n)); - - // m2 - const m2 = txMessages1[2]; - const witness2 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - // 2 edges from root to tx1, 1 edge from tx1 to m2 - expect(witness2.siblingPath.pathSize).toBe(2 + 1); - // The leaf is at index 1n in its tx subtree (height = 1), which has 1 tx subtree on its left. - expect(witness2.leafIndex).toBe(1n + 1n * (1n << 1n)); - } + const tx0 = msgHashes(1); + const tx1 = msgHashes(1); + const tx2 = msgHashes(1); + const messagesInEpoch = [[[tx0, tx1, tx2]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(1n); + expect(m2.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('multiple txs in a wonky tree, one tx has 0 messages', () => { + // root ----> root + // / \ / \ + // . m1 m0 m1 + // / \ + // m0 [] + + const tx0 = msgHashes(1); + const tx2 = msgHashes(1); + // tx1 has no messages. + const messagesInEpoch = [[[tx0, [], tx2]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + + { + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(1n); + expect(m1.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('multiple txs in a wonky tree, each tx has messages in a balanced tree', () => { + // root + // / \ + // . tx2 + // / \ + // tx0 tx1 + + const tx0 = msgHashes(2); + const tx1 = msgHashes(4); + const tx2 = msgHashes(2); + const messagesInEpoch = [[[tx0, tx1, tx2]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + // tx0 + // / \ + // m0 m1 + + // m0 + const m0 = witnesses[0]; + // 2 edges from root to tx0, 1 edge from tx0 to m0, plus edges in epoch tree + expect(m0.siblingPath.pathSize).toBe(2 + 1 + epochLeftTopTreeDepth); + // The leaf is at index 0n in its tx subtree (height = 1), which has no tx subtrees on its left. + expect(m0.leafIndex).toBe(0n); + } + + { + // tx1 + // / \ + // . . + // / \ / \ + // m2 m3 m4 m5 + + // m0 + const m2 = witnesses[2]; + // 2 edges from root to tx1, 2 edges from tx1 to m2, plus edges in epoch tree + expect(m2.siblingPath.pathSize).toBe(2 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 0n in its tx subtree (height = 2), which has 1 tx subtree on its left. + expect(m2.leafIndex).toBe(0n + 1n * (1n << 2n)); + + // m4 + const m4 = witnesses[4]; + // 2 edges from root to tx1, 2 edges from tx1 to m2, plus edges in epoch tree + expect(m4.siblingPath.pathSize).toBe(2 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 2n in its tx subtree (height = 2), which has 1 tx subtree on its left. + expect(m4.leafIndex).toBe(2n + 1n * (1n << 2n)); + } + + { + // tx2 + // / \ + // m6 m7 + + // m7 + const m7 = witnesses[7]; + // 1 edge from root to tx2, 1 edge from tx2 to m1, plus edges in epoch tree + expect(m7.siblingPath.pathSize).toBe(1 + 1 + epochLeftTopTreeDepth); + // The leaf is at index 1n in its tx subtree (height = 1), which has 1 tx subtree on its left. + expect(m7.leafIndex).toBe(1n + 1n * (1n << 1n)); + } + }); + + it('multiple txs in a wonky tree, each tx has messages in a wonky tree', () => { + // root + // / \ + // . tx2 + // / \ + // tx0 tx1 + + const tx0 = msgHashes(5); + const tx1 = msgHashes(3); + const tx2 = msgHashes(7); + const messagesInEpoch = [[[tx0, tx1, tx2]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + // tx0 + // / \ + // . m4 + // / \ + // . . + // / \ / \ + // m0 m1 m2 m3 + + // m2 + const m2 = witnesses[2]; + // 2 edges from root to tx0, 3 edges from tx0 to m2, plus edges in epoch tree + expect(m2.siblingPath.pathSize).toBe(2 + 3 + epochLeftTopTreeDepth); + // The leaf is at index 2n in its tx subtree (height = 3), which has no tx subtrees on its left. + expect(m2.leafIndex).toBe(2n); + + // m4 + const m4 = witnesses[4]; + // 2 edges from root to tx0, 1 edge from tx0 to m4, plus edges in epoch tree + expect(m4.siblingPath.pathSize).toBe(2 + 1 + epochLeftTopTreeDepth); + // The leaf is at index 1n in its tx subtree (height = 1), which has no tx subtrees on its left. + expect(m4.leafIndex).toBe(1n); + } + + { + // tx1 + // / \ + // . m7 + // / \ + // m5 m6 + + // m0 + const m5 = witnesses[5]; + // 2 edges from root to tx1, 2 edges from tx1 to m0, plus edges in epoch tree + expect(m5.siblingPath.pathSize).toBe(2 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 0n in its tx subtree (height = 2), which has 1 tx subtree on its left. + expect(m5.leafIndex).toBe(0n + 1n * (1n << 2n)); + + // m7 + const m7 = witnesses[7]; + // 2 edges from root to tx1, 1 edge from tx1 to m2, plus edges in epoch tree + expect(m7.siblingPath.pathSize).toBe(2 + 1 + epochLeftTopTreeDepth); + // The leaf is at index 1n in its tx subtree (height = 1), which has 1 tx subtree on its left. + expect(m7.leafIndex).toBe(1n + 1n * (1n << 1n)); + } + + { + // tx2 + // / \ + // . . + // / \ / \ + // . . . m14 + // / \ / \ / \ + // m8 m9 m10 m11 m12 m13 + + // m11 + const m11 = witnesses[11]; + // 1 edge from root to tx2, 3 edges from tx2 to m3, plus edges in epoch tree + expect(m11.siblingPath.pathSize).toBe(1 + 3 + epochLeftTopTreeDepth); + // The leaf is at index 3n in its tx subtree (height = 3), which has 1 tx subtree on its left. + expect(m11.leafIndex).toBe(3n + 1n * (1n << 3n)); + + // m12 + const m12 = witnesses[12]; + // 1 edge from root to tx2, 3 edges from tx2 to m4, plus edges in epoch tree + expect(m12.siblingPath.pathSize).toBe(1 + 3 + epochLeftTopTreeDepth); + // The leaf is at index 4n in its tx subtree (height = 3), which has 1 tx subtree on its left. + expect(m12.leafIndex).toBe(4n + 1n * (1n << 3n)); + + // m14 + const m14 = witnesses[14]; + // 1 edge from root to tx2, 2 edges from tx2 to m6, plus edges in epoch tree + expect(m14.siblingPath.pathSize).toBe(1 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 3n in its tx subtree (height = 2), which has 1 tx subtree on its left. + expect(m14.leafIndex).toBe(3n + 1n * (1n << 2n)); + } + }); + + it('multiple txs in a wonky tree, some txs have 0 messages, other txs have more than 1 message', () => { + // root ----> root + // / \ / \ + // . . tx2 tx6 + // / \ / \ + // . . . tx6 + // / \ / \ / \ + // [] [] tx2 [] [] [] + + const tx2 = msgHashes(3); + const tx6 = msgHashes(7); + const messagesInEpoch = [[[[], [], tx2, [], [], [], tx6]]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + // tx2 + // / \ + // . m2 + // / \ + // m0 m1 + + // m0 + const m0 = witnesses[0]; + // 1 edge from root to tx2, 2 edges from tx2 to m0, plus edges in epoch tree + expect(m0.siblingPath.pathSize).toBe(1 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 0n in its tx subtree (height = 2), which has no tx subtrees on its left. + expect(m0.leafIndex).toBe(0n); + + // m2 + const m2 = witnesses[2]; + // 1 edges from root to tx2, 1 edge from tx2 to m2, plus edges in epoch tree + expect(m2.siblingPath.pathSize).toBe(1 + 1 + epochLeftTopTreeDepth); + // The leaf is at index 1n in its tx subtree (height = 1), which has no tx subtrees on its left. + expect(m2.leafIndex).toBe(1n); + } + + { + // tx6 + // / \ + // . . + // / \ / \ + // . . . m9 + // / \ / \ / \ + // m3 m4 m5 m6 m7 m8 + + // m6 + const m6 = witnesses[6]; + // 1 edge from root to tx6, 3 edges from tx6 to m3, plus edges in epoch tree + expect(m6.siblingPath.pathSize).toBe(1 + 3 + epochLeftTopTreeDepth); + // The leaf is at index 3n in its tx subtree (height = 3), which has 1 tx subtree on its left. + expect(m6.leafIndex).toBe(3n + 1n * (1n << 3n)); + + // m7 + const m7 = witnesses[7]; + // 1 edge from root to tx6, 3 edges from tx6 to m4, plus edges in epoch tree + expect(m7.siblingPath.pathSize).toBe(1 + 3 + epochLeftTopTreeDepth); + // The leaf is at index 4n in its tx subtree (height = 3), which has 1 tx subtree on its left. + expect(m7.leafIndex).toBe(4n + 1n * (1n << 3n)); + + // m9 + const m9 = witnesses[9]; + // 1 edge from root to tx6, 2 edges from tx6 to m6, plus edges in epoch tree + expect(m9.siblingPath.pathSize).toBe(1 + 2 + epochLeftTopTreeDepth); + // The leaf is at index 3n in its tx subtree (height = 2), which has 1 tx subtree on its left. + expect(m9.leafIndex).toBe(3n + 1n * (1n << 2n)); + } + }); + }); - { - // tx2 - // / \ - // . . - // / \ / \ - // . . . m6 - // / \ / \ / \ - // m0 m1 m2 m3 m4 m5 - - // m3 - const m3 = txMessages2[3]; - const witness3 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m3); - // 1 edge from root to tx2, 3 edges from tx2 to m3 - expect(witness3.siblingPath.pathSize).toBe(1 + 3); - // The leaf is at index 3n in its tx subtree (height = 3), which has 1 tx subtree on its left. - expect(witness3.leafIndex).toBe(3n + 1n * (1n << 3n)); - - // m4 - const m4 = txMessages2[4]; - const witness4 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m4); - // 1 edge from root to tx2, 3 edges from tx2 to m4 - expect(witness4.siblingPath.pathSize).toBe(1 + 3); - // The leaf is at index 4n in its tx subtree (height = 3), which has 1 tx subtree on its left. - expect(witness4.leafIndex).toBe(4n + 1n * (1n << 3n)); - - // m6 - const m6 = txMessages2[6]; - const witness6 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m6); - // 1 edge from root to tx2, 2 edges from tx2 to m6 - expect(witness6.siblingPath.pathSize).toBe(1 + 2); - // The leaf is at index 3n in its tx subtree (height = 2), which has 1 tx subtree on its left. - expect(witness6.leafIndex).toBe(3n + 1n * (1n << 2n)); - } + describe('one block per checkpoint, multiple checkpoints in the epoch', () => { + it('3 checkpoints, each has 1 block that has txs with 1 message', () => { + // left epoch top tree + // / / / + // c0 c1 c2 + // / / \ / \ + // m0 . m3 m4 m5 + // / \ + // m1 m2 + + const checkpoint0 = [[msgHashes(1)]]; + const checkpoint1 = [[msgHashes(1), msgHashes(1), msgHashes(1)]]; + const checkpoint2 = [[msgHashes(1), msgHashes(1)]]; + const messagesInEpoch = [checkpoint0, checkpoint1, checkpoint2]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(epochLeftTopTreeDepth); + } + + { + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(4n); + expect(m1.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(4n); + expect(m4.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('3 checkpoints, each has 1 block, 1 block has txs with no messages, 2 block have txs with 1 message', () => { + // left epoch top tree + // / / / + // c0 c1 c2 + // / \ / \ + // . m2 m3 m4 + // / \ + // m0 m1 + + const checkpoint0 = [[msgHashes(1), msgHashes(1), msgHashes(1)]]; + const checkpoint1 = [[[]], [[], []]]; + const checkpoint2 = [[msgHashes(1), msgHashes(1)]]; + const messagesInEpoch = [checkpoint0, checkpoint1, checkpoint2]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(1n); + expect(m2.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + + { + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(5n); // Account for the 2 ghost leaves in c1. + expect(m4.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('3 checkpoints, each has 1 block, each block have multiple txs with or without messages', () => { + // left epoch top tree ------> left epoch top tree + // / / / / / / + // c0 c1 c2 c0 c1 c2 + // / \ / \ / \ / \ + // [] tx1 . . m0 m1 . m4 + // / \ / \ / \ + // m0 m1 tx5 [] m2 m3 + // / \ \ + // m2 m3 m4 + + const checkpoint0 = [[[], msgHashes(2), []]]; + const checkpoint1 = [[[], [], msgHashes(3), [], []]]; + const checkpoint2 = [[[], []]]; + const messagesInEpoch = [checkpoint0, checkpoint1, checkpoint2]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(4n); + expect(m2.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(3n); + expect(m4.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('full checkpoints in the epoch, with 3 checkpoints in the left epoch top tree and 4 checkpoints in the right epoch top tree that have messages', () => { + // left epoch top tree right epoch top tree + // / / / \ \ \ \ + // c7 c19 c31 c32 c33 c41 c47 + + const messagesInEpoch: Fr[][][][] = Array.from({ length: 48 }, () => [[[]]]); + // Add one message to each of the target checkpoints. + messagesInEpoch[7] = [[msgHashes(1)]]; // m0 + messagesInEpoch[11] = [[msgHashes(2)]]; // m1, m2 + messagesInEpoch[31] = [[msgHashes(3)]]; // m3, m4, m5 + messagesInEpoch[32] = [[msgHashes(2)]]; // m6, m7 + messagesInEpoch[33] = [[msgHashes(1)]]; // m8 + messagesInEpoch[43] = [[msgHashes(2)]]; // m9, m10 + messagesInEpoch[47] = [[msgHashes(3)]]; // m11, m12, m13 + + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + { + // c7 + // | + // m0 + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(7n); + expect(m0.siblingPath.pathSize).toBe(epochLeftTopTreeDepth); + } + { + // c11 + // / \ + // m1 m2 + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(11n * 2n); // 11 checkpoints before it, each has 2 (ghost) leaves. + expect(m1.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + { + // c31 + // / \ + // . m5 + // / \ + // m3 m4 + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(31n * 4n + 1n); // 31 checkpoints before it, each has 4 (ghost) leaves. + expect(m4.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + // For the checkpoints in the right epoch top tree, because its depth is 1 less than the left epoch top tree, the + // index starts from 16n, as if there's only 16 checkpoints before it. + { + // c32 + // / \ + // m6 m7 + const m6 = witnesses[6]; + expect(m6.leafIndex).toBe(16n * 2n); // 16 nodes before it, each has 2 (ghost) leaves. + expect(m6.siblingPath.pathSize).toBe(1 + epochRightTopTreeDepth); + } + { + // c33 + // | + // m8 + const m8 = witnesses[8]; + expect(m8.leafIndex).toBe(16n + 1n); + expect(m8.siblingPath.pathSize).toBe(epochRightTopTreeDepth); + } + { + // c43 + // / \ + // m9 m10 + const m10 = witnesses[10]; + expect(m10.leafIndex).toBe(27n * 2n + 1n); // (16 + 11) nodes before it, each has 2 (ghost) leaves. + expect(m10.siblingPath.pathSize).toBe(1 + epochRightTopTreeDepth); + } + { + // c47 + // / \ + // . m13 + // / \ + // m11 m12 + const m11 = witnesses[11]; + expect(m11.leafIndex).toBe(31n * 4n); // (16 + 15) nodes before it, each has 4 (ghost) leaves. + expect(m11.siblingPath.pathSize).toBe(2 + epochRightTopTreeDepth); + } + }); }); - it('multiple txs in a wonky tree, some txs have 0 messages, other txs have more than 1 message', () => { - // root ----> root - // / \ / \ - // . . tx2 tx6 - // / \ / \ - // . . . tx6 - // / \ / \ / \ - // [] [] tx2 [] [] [] - - const txMessages2 = generateMsgHashes(3); - const txMessages6 = generateMsgHashes(7); - const messagesForAllTxs = [[], [], txMessages2, [], [], [], txMessages6]; - - { - // tx2 + describe('multiple blocks in one checkpoint in the epoch', () => { + it('3 blocks in a wonky tree, each block has 1 tx with 1 message', () => { + // c0 // / \ - // . m2 + // . b2 // / \ - // m0 m1 + // b0 b1 + + const blocks = Array.from({ length: 3 }, () => msgHashes(1)); + const messagesInEpoch = [[blocks]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(1n); + expect(m1.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(1n); + expect(m2.siblingPath.pathSize).toBe(1 + epochLeftTopTreeDepth); + } + }); + + it('3 blocks, 2 has 0 messages, 1 has multiple messages from 2 txs', () => { + // c0 ----> c0 + // / \ / \ + // . b2 tx0 tx1 + // / \ / \ / \ + // b0 b1 m0 m1 . m4 + // / \ + // m2 m3 + + const tx0 = msgHashes(2); + const tx1 = msgHashes(3); + const block1 = [tx0, tx1]; + // block0 and block2 have no messages. + const messagesInEpoch = [[[], block1, []]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m3 = witnesses[3]; + expect(m3.leafIndex).toBe(5n); + expect(m3.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + + { + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(3n); + expect(m4.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + }); + + it('5 blocks in a wonky tree, 2 have no messages, 3 have some or all txs that have messages', () => { + // c0 ----> c0 + // / \ / \ + // . b4 . b4 + // / \ / \ / \ / \ + // . . . tx7 b0 b3 tx6 tx7 + // / \ / \ / \ / \ / \ + // b0 b1 b2 b3 tx5 tx6 tx0 tx1 tx2 tx4 + // / \ / \ + // tx0 tx1 . tx4 + // / \ + // tx2 tx3 + + const tx0 = msgHashes(2); // m0, m1 + const tx1 = msgHashes(1); // m2 + const block0 = [tx0, tx1]; + + const block1 = [[], []]; + + const block2 = [[], [], []]; + + const tx2 = msgHashes(3); // m3, m4, m5 + // tx3 has no messages. + const tx4 = msgHashes(2); // m6, m7 + const block3 = [tx2, [], tx4]; + + // tx5 has no messages. + const tx6 = msgHashes(5); // m8, m9, m10, m11, m12 + const tx7 = msgHashes(2); // m13, m14 + const block4 = [[], tx6, tx7]; + + const messagesInEpoch = [[block0, block1, block2, block3, block4]]; + const witnesses = verifyMembershipForMessagesInEpoch(messagesInEpoch); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(4 + epochLeftTopTreeDepth); + } + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(1n); + expect(m2.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + { + const m3 = witnesses[3]; + expect(m3.leafIndex).toBe(8n); + expect(m3.siblingPath.pathSize).toBe(5 + epochLeftTopTreeDepth); + } + { + const m7 = witnesses[7]; + expect(m7.leafIndex).toBe(7n); + expect(m7.siblingPath.pathSize).toBe(4 + epochLeftTopTreeDepth); + } + { + const m8 = witnesses[8]; + expect(m8.leafIndex).toBe(16n); + expect(m8.siblingPath.pathSize).toBe(5 + epochLeftTopTreeDepth); + } + { + const m10 = witnesses[10]; + expect(m10.leafIndex).toBe(18n); + expect(m10.siblingPath.pathSize).toBe(5 + epochLeftTopTreeDepth); + } + { + const m12 = witnesses[12]; + expect(m12.leafIndex).toBe(5n); + expect(m12.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + { + const m14 = witnesses[14]; + expect(m14.leafIndex).toBe(7n); + expect(m14.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + }); + + it('5 in 71 blocks have 1 message, in the middle of the epoch', () => { + // c0 + // / \ + // . . + // / \ / \ + // b6 . b45 b59 + // / \ + // b28 b29 + const messagesInCheckpoint: Fr[][][] = Array.from({ length: 71 }, () => [[]]); + messagesInCheckpoint[6] = [msgHashes(1)]; // m0 + messagesInCheckpoint[28] = [msgHashes(1)]; // m1 + messagesInCheckpoint[29] = [msgHashes(1)]; // m2 + messagesInCheckpoint[45] = [msgHashes(1)]; // m3 + messagesInCheckpoint[59] = [msgHashes(1)]; // m4 + + const witnesses = verifyMembershipForMessagesInEpoch([messagesInCheckpoint]); + + { + const m0 = witnesses[0]; + expect(m0.leafIndex).toBe(0n); + expect(m0.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m1 = witnesses[1]; + expect(m1.leafIndex).toBe(2n); + expect(m1.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + + { + const m2 = witnesses[2]; + expect(m2.leafIndex).toBe(3n); + expect(m2.siblingPath.pathSize).toBe(3 + epochLeftTopTreeDepth); + } + + { + const m3 = witnesses[3]; + expect(m3.leafIndex).toBe(2n); + expect(m3.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + + { + const m4 = witnesses[4]; + expect(m4.leafIndex).toBe(3n); + expect(m4.siblingPath.pathSize).toBe(2 + epochLeftTopTreeDepth); + } + }); + }); - // m0 - const m0 = txMessages2[0]; - const witness0 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m0); - // 1 edge from root to tx2, 2 edges from tx2 to m0. - expect(witness0.siblingPath.pathSize).toBe(1 + 2); - // The leaf is at index 0n in its tx subtree (height = 2), which has no tx subtrees on its left. - expect(witness0.leafIndex).toBe(0n); - - // m2 - const m2 = txMessages2[2]; - const witness2 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m2); - // 1 edges from root to tx2, 1 edge from tx2 to m2. - expect(witness2.siblingPath.pathSize).toBe(1 + 1); - // The leaf is at index 1n in its tx subtree (height = 1), which has no tx subtrees on its left. - expect(witness2.leafIndex).toBe(1n); - } + describe('multiple blocks per checkpoint, multiple checkpoints in the epoch', () => { + it('1 message in the epoch', () => { + const [msg] = msgHashes(1); + const messagesInEpoch = [ + [[[], []], [[], [], []], [[]]], + [[[]], [[], []]], + [[[], []], [[]], [[msg]], [[]]], + [[[], []]], + [[[], []], [[]], [[], [], []], [[], []]], + ]; + const witness = computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, msg); + expect(witness.leafIndex).toBe(2n); // The message is the root of the second checkpoint. + expect(witness.siblingPath.pathSize).toBe(epochLeftTopTreeDepth); + }); + + it('a complex epoch with multiple checkpoints, blocks, txs, and messages', () => { + const messagesInEpoch = [ + [ + [msgHashes(5), [], msgHashes(8), msgHashes(6), []], + [[], msgHashes(1), [], []], + [msgHashes(1), msgHashes(2), msgHashes(13), [], msgHashes(7)], + [[], [], [], msgHashes(9)], + [[], msgHashes(2), msgHashes(2), [], [], [], [], [], [], [], [], msgHashes(1)], + [msgHashes(1), [], msgHashes(11)], + [[], [], [], [], [], [], [], [], msgHashes(11), [], [], [], [], []], + [[], [], [], [], [], [], msgHashes(5), [], [], [], [], [], [], [], msgHashes(4), []], + [[], [], [], [], [], [], [], [], [], [], [], []], + [[], [], [], [], msgHashes(3), [], []], + ], + [[[], []], [[], [], []], [[]]], + [ + [[], msgHashes(3), [], []], + [[], []], + ], + [[[]], [[], [], [], [], []]], + [ + [[], [], []], + [msgHashes(1), [], [], []], + [[]], + [[], [], msgHashes(2)], + [msgHashes(1), [], msgHashes(3)], + [msgHashes(5)], + ], + ]; + verifyMembershipForMessagesInEpoch(messagesInEpoch); + }); + + it('a complex full epoch, with multiple checkpoints, blocks, txs, and messages', () => { + const messagesInEpoch: Fr[][][][] = Array.from({ length: 48 }, () => [[[]]]); + let totalNumMessages = 0; + for (let checkpointIndex = 0; checkpointIndex < 48; checkpointIndex++) { + const numBlocks = randomInt(72); // Assumes at most 72 blocks per checkpoint. + for (let blockIndex = 0; blockIndex < numBlocks; blockIndex++) { + const blockMessages = []; + const numTxs = randomInt(10); // Assumes at most 10 txs per block. + for (let txIndex = 0; txIndex < numTxs; txIndex++) { + const hasMessages = totalNumMessages < 500 && randomInt(101) > 99; // 1% chance of having messages. + const numMessages = hasMessages ? randomInt(MAX_L2_TO_L1_MSGS_PER_TX) : 0; + blockMessages.push(msgHashes(numMessages)); + totalNumMessages += numMessages; + } + messagesInEpoch[checkpointIndex][blockIndex] = blockMessages; + } + } + verifyMembershipForMessagesInEpoch(messagesInEpoch); + }); + }); - { - // tx6 - // / \ - // . . - // / \ / \ - // . . . m6 - // / \ / \ / \ - // m0 m1 m2 m3 m4 m5 - - // m3 - const m3 = txMessages6[3]; - const witness3 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m3); - // 1 edge from root to tx6, 3 edges from tx6 to m3. - expect(witness3.siblingPath.pathSize).toBe(1 + 3); - // The leaf is at index 3n in its tx subtree (height = 3), which has 1 tx subtree on its left. - expect(witness3.leafIndex).toBe(3n + 1n * (1n << 3n)); - - // m4 - const m4 = txMessages6[4]; - const witness4 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m4); - // 1 edge from root to tx6, 3 edges from tx6 to m4 - expect(witness4.siblingPath.pathSize).toBe(1 + 3); - // The leaf is at index 4n in its tx subtree (height = 3), which has 1 tx subtree on its left. - expect(witness4.leafIndex).toBe(4n + 1n * (1n << 3n)); - - // m6 - const m6 = txMessages6[6]; - const witness6 = computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, m6); - // 1 edge from root to tx6, 2 edges from tx6 to m6 - expect(witness6.siblingPath.pathSize).toBe(1 + 2); - // The leaf is at index 3n in its tx subtree (height = 2), which has 1 tx subtree on its left. - expect(witness6.leafIndex).toBe(3n + 1n * (1n << 2n)); - } + describe('static leaf ids', () => { + it('should preserve the same leaf ids when more checkpoints are added to the epoch', () => { + const messagesInShortEpoch = [ + [[[], msgHashes(3), []]], // 3 messages in checkpoint 0 + [[msgHashes(1)], [], [msgHashes(5)]], // 6 messages in checkpoint 1 + [[msgHashes(2)], [[], msgHashes(3)], []], // 5 messages in checkpoint 2 + ]; + verifyMembershipForMessagesInEpoch(messagesInShortEpoch); + + // Make a copy of foundLeafIds and reset it so that we can run verifyMembershipForMessagesInEpoch again. + const foundLeafIdsInShortEpoch = [...foundLeafIds]; + expect(foundLeafIdsInShortEpoch.length).toBe(3 + 6 + 5); + foundLeafIds = new Set(); + + const newCheckpoints = [ + [[], [], [msgHashes(1)], [msgHashes(10)]], // 11 message in checkpoint 3 + [[msgHashes(2)], [msgHashes(2)]], // 4 message in checkpoint 4 + [[msgHashes(7)]], // 7 message in checkpoint 5 + ]; + const messagesInLongEpoch = [...messagesInShortEpoch, ...newCheckpoints]; + verifyMembershipForMessagesInEpoch(messagesInLongEpoch); + + const foundLeafIdsInLongEpoch = [...foundLeafIds]; + expect(foundLeafIdsInLongEpoch.length).toBe(foundLeafIdsInShortEpoch.length + 11 + 4 + 7); + + // Verify that the leaf ids for the first N messages in the long epoch are exactly the same as they were in the + // short epoch. + expect(foundLeafIdsInLongEpoch.slice(0, foundLeafIdsInShortEpoch.length)).toEqual(foundLeafIdsInShortEpoch); + }); }); }); diff --git a/yarn-project/stdlib/src/messaging/l2_to_l1_membership.ts b/yarn-project/stdlib/src/messaging/l2_to_l1_membership.ts index 1c4030c2efae..5c2bb6de60b2 100644 --- a/yarn-project/stdlib/src/messaging/l2_to_l1_membership.ts +++ b/yarn-project/stdlib/src/messaging/l2_to_l1_membership.ts @@ -1,9 +1,99 @@ -import type { BlockNumber } from '@aztec/foundation/branded-types'; +import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants'; +import type { EpochNumber } from '@aztec/foundation/branded-types'; import { Fr } from '@aztec/foundation/curves/bn254'; import { SiblingPath, UnbalancedMerkleTreeCalculator, computeUnbalancedShaRoot } from '@aztec/foundation/trees'; +/** + * # L2-to-L1 Message Tree Structure and Leaf IDs + * + * ## Overview + * L2-to-L1 messages are organized in a hierarchical 4-level tree structure within each epoch: + * Epoch → Checkpoints → Blocks → Transactions → Messages + * + * Each level uses an unbalanced Merkle tree, and some levels use compression (skipping zero hashes). + * + * ## Tree Levels + * + * 1. **Message Tree (TX Out Hash)** + * - Leaves: Individual L2-to-L1 messages within a transaction + * - Root: TX out hash + * - Type: Unbalanced, non-compressed (the circuits ensure that all messages are not empty.) + * + * 2. **Block Tree** + * - Leaves: TX out hashes from all transactions in a block + * - Root: Block out hash + * - Type: Unbalanced, compressed (zero hashes are skipped) + * - Compression: If a tx has no messages (out hash = 0), that branch is ignored + * + * 3. **Checkpoint Tree** + * - Leaves: Block out hashes from all blocks in a checkpoint + * - Root: Checkpoint out hash + * - Type: Unbalanced, compressed (zero hashes are skipped) + * - Compression: If a block has no messages (out hash = 0), that branch is ignored + * + * 4. **Epoch Tree** + * - Leaves: Checkpoint out hashes from all checkpoints in an epoch (padded to AZTEC_MAX_EPOCH_DURATION) + * - Root: Epoch out hash (set in the root rollup's public inputs and inserted into the Outbox on L1 when the epoch is proven) + * - Type: Unbalanced, non-compressed + * - **Important**: Padded with zeros up to AZTEC_MAX_EPOCH_DURATION to allow for proofs of partial epochs + * + * ## Combined Membership Proof + * To prove a message exists in an epoch, we combine the sibling paths from all 4 trees: + * [message siblings] + [tx siblings] + [block siblings] + [checkpoint siblings] + * + * ## Leaf ID: Stable Message Identification + * + * Each message gets a unique, stable **leaf ID** that identifies its position in the combined tree. + * The leaf ID is computed as: + * leafId = 2^pathSize + leafIndex + * + * Where: + * - `pathSize`: Total length of the combined sibling path (from all 4 tree levels) + * - `leafIndex`: The message's index in a balanced tree representation at that height + * + * ### Why Leaf IDs Are Stable + * + * The leaf ID is based on the message's position in the tree structure, which is determined by: + * - The checkpoint index within the epoch + * - The block index within the checkpoint + * - The transaction index within the block + * - The message index within the transaction + * + * These indices are structural and do NOT depend on the total number of blocks/checkpoints in the epoch. + * + * ### Critical Property: Preserving Consumed Status + * + * **Problem**: On L1, epoch proofs can be submitted incrementally. For example: + * - First, a proof for checkpoints 1-10 of epoch 0 is submitted (proves the first 10 checkpoints) + * - Later, a proof for checkpoints 1-20 of epoch 0 is submitted (proves all 20 checkpoints) + * + * When the longer proof is submitted, it updates the epoch's out hash root on L1 to reflect the complete epoch (all 20 + * checkpoints). However, some messages from checkpoints 1-10 may have already been consumed. + * + * **Solution**: The Outbox on L1 tracks consumed messages using a bitmap indexed by leaf ID. + * Because leaf IDs are stable (they don't change when more checkpoints are added to the epoch), messages that were consumed + * under the shorter proof remain marked as consumed under the longer proof. + * + * This prevents double-spending of L2-to-L1 messages when longer epoch proofs are submitted. + */ + +/** + * Computes the unique leaf ID for an L2-to-L1 message. + * + * The leaf ID is stable across different epoch proof lengths and is used by the Outbox + * on L1 to track which messages have been consumed. + * + * @param membershipWitness - Contains the leafIndex and siblingPath for the message + * @returns The unique leaf ID used for tracking message consumption on L1 + */ +export function getL2ToL1MessageLeafId( + membershipWitness: Pick, +): bigint { + return 2n ** BigInt(membershipWitness.siblingPath.pathSize) + membershipWitness.leafIndex; +} + export interface MessageRetrieval { - getL2ToL1Messages(l2BlockNumber: BlockNumber): Promise; + getL2ToL1Messages(epoch: EpochNumber): Promise; } export type L2ToL1MembershipWitness = { @@ -14,76 +104,99 @@ export type L2ToL1MembershipWitness = { export async function computeL2ToL1MembershipWitness( messageRetriever: MessageRetrieval, - l2BlockNumber: BlockNumber, + epoch: EpochNumber, message: Fr, ): Promise { - const messagesForAllTxs = await messageRetriever.getL2ToL1Messages(l2BlockNumber); - if (!messagesForAllTxs) { + const messagesInEpoch = await messageRetriever.getL2ToL1Messages(epoch); + if (messagesInEpoch.length === 0) { return undefined; } - return computeL2ToL1MembershipWitnessFromMessagesForAllTxs(messagesForAllTxs, message); + return computeL2ToL1MembershipWitnessFromMessagesInEpoch(messagesInEpoch, message); } // TODO: Allow to specify the message to consume by its index or by an offset, in case there are multiple messages with // the same value. -export function computeL2ToL1MembershipWitnessFromMessagesForAllTxs( - messagesForAllTxs: Fr[][], +export function computeL2ToL1MembershipWitnessFromMessagesInEpoch( + messagesInEpoch: Fr[][][][], message: Fr, ): L2ToL1MembershipWitness { - // Find index of message in subtree and index of tx in a block. + // Find the index of the message in the tx, index of the tx in the block, and index of the block in the epoch. let messageIndexInTx = -1; - const txIndex = messagesForAllTxs.findIndex(messages => { - messageIndexInTx = messages.findIndex(msg => msg.equals(message)); - return messageIndexInTx !== -1; + let txIndex = -1; + let blockIndex = -1; + const checkpointIndex = messagesInEpoch.findIndex(messagesInCheckpoint => { + blockIndex = messagesInCheckpoint.findIndex(messagesInBlock => { + txIndex = messagesInBlock.findIndex(messagesInTx => { + messageIndexInTx = messagesInTx.findIndex(msg => msg.equals(message)); + return messageIndexInTx !== -1; + }); + return txIndex !== -1; + }); + return blockIndex !== -1; }); - if (txIndex === -1) { + if (checkpointIndex === -1) { throw new Error('The L2ToL1Message you are trying to prove inclusion of does not exist'); } - // Get the txOutHash and the sibling path of the message in the tx subtree. - const txMessages = messagesForAllTxs[txIndex]; - const txOutHashTree = UnbalancedMerkleTreeCalculator.create(txMessages.map(msg => msg.toBuffer())); - const txOutHash = txOutHashTree.getRoot(); - const messagePathInSubtree = txOutHashTree.getSiblingPath(message.toBuffer()); - - // Calculate txOutHash for all txs. - const txSubtreeRoots = messagesForAllTxs.map((messages, i) => { - // For a tx with no messages, we have to set an out hash of 0 to match what the circuit does. - if (messages.length === 0) { - return Fr.ZERO; - } + // Build the tx tree. + const messagesInTx = messagesInEpoch[checkpointIndex][blockIndex][txIndex]; + const txTree = UnbalancedMerkleTreeCalculator.create(messagesInTx.map(msg => msg.toBuffer())); + // Get the sibling path of the target message in the tx tree. + const pathToMessageInTxSubtree = txTree.getSiblingPathByLeafIndex(messageIndexInTx); - if (i === txIndex) { - return Fr.fromBuffer(txOutHash); - } + // Build the tree of the block containing the target message. + const blockTree = buildBlockTree(messagesInEpoch[checkpointIndex][blockIndex]); + // Get the sibling path of the tx out hash in the block tree. + const pathToTxOutHashInBlockTree = blockTree.getSiblingPathByLeafIndex(txIndex); - const root = computeUnbalancedShaRoot(messages.map(msg => msg.toBuffer())); - return Fr.fromBuffer(root); - }); + // Build the tree of the checkpoint containing the target message. + const checkpointTree = buildCheckpointTree(messagesInEpoch[checkpointIndex]); + // Get the sibling path of the block out hash in the checkpoint tree. + const pathToBlockOutHashInCheckpointTree = checkpointTree.getSiblingPathByLeafIndex(blockIndex); - // Construct the top tree. - // The leaves of this tree are the `txOutHashes`. - // The root of this tree should match the `out_hash` calculated in the circuits. Zero hashes are compressed to reduce - // cost if the non-zero leaves result in a shorter path. - const valueToCompress = Buffer.alloc(32); - const topTree = UnbalancedMerkleTreeCalculator.create( - txSubtreeRoots.map(root => root.toBuffer()), - valueToCompress, + // Compute the out hashes of all checkpoints in the epoch. + let checkpointOutHashes = messagesInEpoch.map((messagesInCheckpoint, i) => { + if (i === checkpointIndex) { + return checkpointTree.getRoot(); + } + return buildCheckpointTree(messagesInCheckpoint).getRoot(); + }); + // Pad to AZTEC_MAX_EPOCH_DURATION with zeros. + checkpointOutHashes = checkpointOutHashes.concat( + Array.from({ length: AZTEC_MAX_EPOCH_DURATION - messagesInEpoch.length }, () => Buffer.alloc(32)), ); - const root = Fr.fromBuffer(topTree.getRoot()); - // Compute the combined sibling path by appending the tx subtree path to the top tree path. - const txPathInTopTree = topTree.getSiblingPath(txOutHash); - const combinedPath = messagePathInSubtree.toBufferArray().concat(txPathInTopTree.toBufferArray()); + // Build the epoch tree with all the checkpoint out hashes, including the padded zeros + const epochTree = UnbalancedMerkleTreeCalculator.create(checkpointOutHashes); + // Get the sibling path of the checkpoint out hash in the epoch tree. + const pathToCheckpointOutHashInEpochTree = epochTree.getSiblingPathByLeafIndex(checkpointIndex); + + // The root of the epoch tree should match the `out_hash` in the root rollup's public inputs. + const root = Fr.fromBuffer(epochTree.getRoot()); + + // Compute the combined sibling path by appending the tx subtree path to the block tree path, then to the checkpoint + // tree path, then to the epoch tree path. + const combinedPath = pathToMessageInTxSubtree + .toBufferArray() + .concat(pathToTxOutHashInBlockTree.toBufferArray()) + .concat(pathToBlockOutHashInCheckpointTree.toBufferArray()) + .concat(pathToCheckpointOutHashInEpochTree.toBufferArray()); // Compute the combined index. - // It is the index of the message in the balanced tree at its current height. - const txLeafIndexAtLevel = topTree.getLeafLocation(txIndex).index; - const messageLeafPosition = txOutHashTree.getLeafLocation(messageIndexInTx); - const numLeavesInLeftSubtrees = txLeafIndexAtLevel * (1 << messageLeafPosition.level); - const combinedIndex = numLeavesInLeftSubtrees + messageLeafPosition.index; + // It is the index of the message in the balanced tree (by filling up the wonky tree with empty nodes) at its current + // height. It's used to validate the membership proof. + const messageLeafPosition = txTree.getLeafLocation(messageIndexInTx); + const txLeafPosition = blockTree.getLeafLocation(txIndex); + const blockLeafPosition = checkpointTree.getLeafLocation(blockIndex); + const checkpointLeafPosition = epochTree.getLeafLocation(checkpointIndex); + const numLeavesInLeftCheckpoints = checkpointLeafPosition.index * (1 << blockLeafPosition.level); + const indexAtCheckpointLevel = numLeavesInLeftCheckpoints + blockLeafPosition.index; + const numLeavesInLeftBlocks = indexAtCheckpointLevel * (1 << txLeafPosition.level); + const indexAtTxLevel = numLeavesInLeftBlocks + txLeafPosition.index; + const numLeavesInLeftTxs = indexAtTxLevel * (1 << messageLeafPosition.level); + const combinedIndex = numLeavesInLeftTxs + messageLeafPosition.index; return { root, @@ -92,8 +205,19 @@ export function computeL2ToL1MembershipWitnessFromMessagesForAllTxs( }; } -export function getL2ToL1MessageLeafId( - membershipWitness: Pick, -): bigint { - return 2n ** BigInt(membershipWitness.siblingPath.pathSize) + membershipWitness.leafIndex; +function buildCheckpointTree(messagesInCheckpoint: Fr[][][]) { + const blockOutHashes = messagesInCheckpoint.map(messagesInBlock => buildBlockTree(messagesInBlock).getRoot()); + return buildCompressedTree(blockOutHashes); +} + +function buildBlockTree(messagesInBlock: Fr[][]) { + const txOutHashes = messagesInBlock.map(messages => computeUnbalancedShaRoot(messages.map(msg => msg.toBuffer()))); + return buildCompressedTree(txOutHashes); +} + +function buildCompressedTree(leaves: Buffer[]) { + // Note: If a block or tx has no messages (i.e. leaf == Buffer.alloc(32)), we ignore that branch and only accumulate + // the non-zero hashes to match what the circuits do. + const valueToCompress = Buffer.alloc(32); + return UnbalancedMerkleTreeCalculator.create(leaves, valueToCompress); } diff --git a/yarn-project/stdlib/src/messaging/out_hash.test.ts b/yarn-project/stdlib/src/messaging/out_hash.test.ts new file mode 100644 index 000000000000..1c84bdeb4543 --- /dev/null +++ b/yarn-project/stdlib/src/messaging/out_hash.test.ts @@ -0,0 +1,50 @@ +import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants'; +import { Fr } from '@aztec/foundation/curves/bn254'; +import { updateInlineTestData } from '@aztec/foundation/testing/files'; + +import { computeEpochOutHash } from './out_hash.js'; + +describe('out hash', () => { + it('computes the out hash for a full epoch', () => { + const messagesInEpoch = Array.from({ length: AZTEC_MAX_EPOCH_DURATION }, (_, i) => [[[new Fr(i + 123)]]]); + + const outHash = computeEpochOutHash(messagesInEpoch).toString(); + + expect(outHash).toMatchInlineSnapshot(`"0x00cac4cadfb6b99199909262a27271d0d84c27a8cdc23e45ac77c6ce031ba732"`); + + // Run with AZTEC_GENERATE_TEST_DATA=1 to update noir test data. + updateInlineTestData( + 'noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/utils/compute_epoch_out_hash.nr', + 'full_epoch_out_hash_from_ts', + outHash, + ); + }); + + it('produces a zero out hash for an epoch with no txs/messages', () => { + const outHash = computeEpochOutHash([[], [[], []], [[[]], []]]); + expect(outHash).toEqual(Fr.ZERO); + }); + + it('computes the out hash for an epoch with some checkpoints that have no messages', () => { + const messagesInEpoch = [ + [[[new Fr(11)]]], + [], + [[], []], + [[], [[new Fr(44)]]], + [[], [[]]], + [[], [[], [new Fr(66)]], [[]]], + ]; + // The resulting checkpoint out hashes should match the fixtures in the noir test: [11, 0, 0, 44, 0, 66]. + + const outHash = computeEpochOutHash(messagesInEpoch).toString(); + + expect(outHash).toMatchInlineSnapshot(`"0x00f83de1d6645701e7faa407066fad314e8c42676338856beb5da9d4062fbb28"`); + + // Run with AZTEC_GENERATE_TEST_DATA=1 to update noir test data. + updateInlineTestData( + 'noir-projects/noir-protocol-circuits/crates/rollup-lib/src/root/tests/consecutive_rollups_tests.nr', + 'out_hash_from_ts', + outHash, + ); + }); +}); diff --git a/yarn-project/stdlib/src/messaging/out_hash.ts b/yarn-project/stdlib/src/messaging/out_hash.ts index 542d69a6ac1b..f50f8871c905 100644 --- a/yarn-project/stdlib/src/messaging/out_hash.ts +++ b/yarn-project/stdlib/src/messaging/out_hash.ts @@ -1,5 +1,7 @@ +import { AZTEC_MAX_EPOCH_DURATION } from '@aztec/constants'; +import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/curves/bn254'; -import { UnbalancedMerkleTreeCalculator, computeUnbalancedShaRoot } from '@aztec/foundation/trees'; +import { computeCompressedUnbalancedShaRoot, computeUnbalancedShaRoot } from '@aztec/foundation/trees'; export function computeTxOutHash(messages: Fr[]): Fr { if (!messages.length) { @@ -20,6 +22,19 @@ export function computeCheckpointOutHash(messagesForAllTxs: Fr[][][]): Fr { return aggregateOutHashes(blockOutHashes); } +export function computeEpochOutHash(messagesInEpoch: Fr[][][][]): Fr { + // Must match the implementation in `compute_epoch_out_hash.nr`. + const checkpointOutHashes = messagesInEpoch + .map(checkpoint => computeCheckpointOutHash(checkpoint)) + .map(hash => hash.toBuffer()); + if (checkpointOutHashes.every(hash => hash.equals(Buffer.alloc(32)))) { + return Fr.ZERO; + } + + const paddedOutHashes = padArrayEnd(checkpointOutHashes, Buffer.alloc(32), AZTEC_MAX_EPOCH_DURATION); + return Fr.fromBuffer(computeUnbalancedShaRoot(paddedOutHashes)); +} + // The root of this tree should match the `out_hash` calculated in the circuits. Zero hashes are compressed to reduce // cost if the non-zero leaves result in a shorter path. function aggregateOutHashes(outHashes: Fr[]): Fr { @@ -27,10 +42,5 @@ function aggregateOutHashes(outHashes: Fr[]): Fr { return Fr.ZERO; } - const valueToCompress = Buffer.alloc(32); - const tree = UnbalancedMerkleTreeCalculator.create( - outHashes.map(hash => hash.toBuffer()), - valueToCompress, - ); - return Fr.fromBuffer(tree.getRoot()); + return Fr.fromBuffer(computeCompressedUnbalancedShaRoot(outHashes.map(hash => hash.toBuffer()))); } diff --git a/yarn-project/stdlib/src/rollup/checkpoint_header.test.ts b/yarn-project/stdlib/src/rollup/checkpoint_header.test.ts index f9b5abea352e..c533d6028878 100644 --- a/yarn-project/stdlib/src/rollup/checkpoint_header.test.ts +++ b/yarn-project/stdlib/src/rollup/checkpoint_header.test.ts @@ -7,7 +7,6 @@ import { updateInlineTestData } from '@aztec/foundation/testing/files'; import { AztecAddress } from '../aztec-address/index.js'; import { GasFees } from '../gas/gas_fees.js'; import { makeCheckpointHeader } from '../tests/factories.js'; -import { ContentCommitment } from '../tx/content_commitment.js'; import { CheckpointHeader } from './checkpoint_header.js'; describe('CheckpointHeader', () => { @@ -23,7 +22,7 @@ describe('CheckpointHeader', () => { const header = CheckpointHeader.empty(); const hash = header.hash().toString(); - expect(hash).toMatchInlineSnapshot('"0x007802c95d2f1ade746d97350a18ddbfdb9f5bee2803436917a3cf3d6a685a3a"'); + expect(hash).toMatchInlineSnapshot('"0x00d72511e843bf5a2e44e8bd1da20c2626311d1d6679424f717807a1db731d62"'); // Run with AZTEC_GENERATE_TEST_DATA=1 to update noir test data updateInlineTestData( @@ -37,7 +36,8 @@ describe('CheckpointHeader', () => { const header = CheckpointHeader.from({ lastArchiveRoot: new Fr(123), blockHeadersHash: new Fr(456), - contentCommitment: new ContentCommitment(new Fr(77), new Fr(88), new Fr(99)), + blobsHash: new Fr(77), + inHash: new Fr(88), slotNumber: SlotNumber(1234), timestamp: BigInt(5678), coinbase: EthAddress.fromField(new Fr(9090)), @@ -47,7 +47,7 @@ describe('CheckpointHeader', () => { }); const hash = header.hash().toString(); - expect(hash).toMatchInlineSnapshot('"0x007df45447387f2e48b4acae48b6c7f72eb63a9f6611c2f665df39f013a20dcf"'); + expect(hash).toMatchInlineSnapshot('"0x00710281705a29930cf34f3470280e346449cd5a5d551177db509d2b5d3a5f21"'); // Run with AZTEC_GENERATE_TEST_DATA=1 to update noir test data updateInlineTestData( diff --git a/yarn-project/stdlib/src/rollup/checkpoint_header.ts b/yarn-project/stdlib/src/rollup/checkpoint_header.ts index 91ab0aaa7754..2efb37813bdb 100644 --- a/yarn-project/stdlib/src/rollup/checkpoint_header.ts +++ b/yarn-project/stdlib/src/rollup/checkpoint_header.ts @@ -14,7 +14,6 @@ import { z } from 'zod'; import { AztecAddress } from '../aztec-address/index.js'; import { GasFees } from '../gas/index.js'; import { schemas } from '../schemas/index.js'; -import { ContentCommitment } from '../tx/content_commitment.js'; import type { UInt64 } from '../types/shared.js'; /** @@ -27,8 +26,10 @@ export class CheckpointHeader { public lastArchiveRoot: Fr, /** Hash of the headers of all blocks in this checkpoint. */ public blockHeadersHash: Fr, - /** Content commitment of the L2 block. */ - public contentCommitment: ContentCommitment, + /** Hash of the blobs in the checkpoint. */ + public blobsHash: Fr, + /** Root of the l1 to l2 messages subtree. */ + public inHash: Fr, /** Slot number of the L2 block */ public slotNumber: SlotNumber, /** Timestamp of the L2 block. */ @@ -48,7 +49,8 @@ export class CheckpointHeader { .object({ lastArchiveRoot: schemas.Fr, blockHeadersHash: schemas.Fr, - contentCommitment: ContentCommitment.schema, + blobsHash: schemas.Fr, + inHash: schemas.Fr, slotNumber: schemas.SlotNumber, timestamp: schemas.BigInt, coinbase: schemas.EthAddress, @@ -63,7 +65,8 @@ export class CheckpointHeader { return [ fields.lastArchiveRoot, fields.blockHeadersHash, - fields.contentCommitment, + fields.blobsHash, + fields.inHash, fields.slotNumber, fields.timestamp, fields.coinbase, @@ -83,7 +86,8 @@ export class CheckpointHeader { return new CheckpointHeader( reader.readObject(Fr), reader.readObject(Fr), - reader.readObject(ContentCommitment), + reader.readObject(Fr), + reader.readObject(Fr), SlotNumber(Fr.fromBuffer(reader).toNumber()), reader.readUInt64(), reader.readObject(EthAddress), @@ -97,7 +101,8 @@ export class CheckpointHeader { return ( this.lastArchiveRoot.equals(other.lastArchiveRoot) && this.blockHeadersHash.equals(other.blockHeadersHash) && - this.contentCommitment.equals(other.contentCommitment) && + this.blobsHash.equals(other.blobsHash) && + this.inHash.equals(other.inHash) && this.slotNumber === other.slotNumber && this.timestamp === other.timestamp && this.coinbase.equals(other.coinbase) && @@ -112,7 +117,8 @@ export class CheckpointHeader { return serializeToBuffer([ this.lastArchiveRoot, this.blockHeadersHash, - this.contentCommitment, + this.blobsHash, + this.inHash, new Fr(this.slotNumber), bigintToUInt64BE(this.timestamp), this.coinbase, @@ -130,7 +136,8 @@ export class CheckpointHeader { return CheckpointHeader.from({ lastArchiveRoot: Fr.ZERO, blockHeadersHash: Fr.ZERO, - contentCommitment: ContentCommitment.empty(), + blobsHash: Fr.ZERO, + inHash: Fr.ZERO, slotNumber: SlotNumber.ZERO, timestamp: 0n, coinbase: EthAddress.ZERO, @@ -141,13 +148,12 @@ export class CheckpointHeader { }); } - static random( - overrides: Partial> & Partial> = {}, - ): CheckpointHeader { + static random(overrides: Partial> = {}): CheckpointHeader { return CheckpointHeader.from({ lastArchiveRoot: Fr.random(), blockHeadersHash: Fr.random(), - contentCommitment: ContentCommitment.random(overrides), + blobsHash: Fr.random(), + inHash: Fr.random(), slotNumber: SlotNumber(Math.floor(Math.random() * 1000) + 1), timestamp: BigInt(Math.floor(Date.now() / 1000)), coinbase: EthAddress.random(), @@ -162,7 +168,8 @@ export class CheckpointHeader { return ( this.lastArchiveRoot.isZero() && this.blockHeadersHash.isZero() && - this.contentCommitment.isEmpty() && + this.blobsHash.isZero() && + this.inHash.isZero() && this.slotNumber === 0 && this.timestamp === 0n && this.coinbase.isZero() && @@ -188,7 +195,8 @@ export class CheckpointHeader { return new CheckpointHeader( Fr.fromString(header.lastArchiveRoot), Fr.fromString(header.blockHeadersHash), - ContentCommitment.fromViem(header.contentCommitment), + Fr.fromString(header.blobsHash), + Fr.fromString(header.inHash), SlotNumber.fromBigInt(header.slotNumber), header.timestamp, new EthAddress(hexToBuffer(header.coinbase)), @@ -210,7 +218,8 @@ export class CheckpointHeader { return { lastArchiveRoot: this.lastArchiveRoot.toString(), blockHeadersHash: this.blockHeadersHash.toString(), - contentCommitment: this.contentCommitment.toViem(), + blobsHash: this.blobsHash.toString(), + inHash: this.inHash.toString(), slotNumber: BigInt(this.slotNumber), timestamp: this.timestamp, coinbase: this.coinbase.toString(), @@ -227,7 +236,8 @@ export class CheckpointHeader { return { lastArchive: this.lastArchiveRoot.toString(), blockHeadersHash: this.blockHeadersHash.toString(), - contentCommitment: this.contentCommitment.toInspect(), + blobsHash: this.blobsHash.toString(), + inHash: this.inHash.toString(), slotNumber: this.slotNumber, timestamp: this.timestamp, coinbase: this.coinbase.toString(), @@ -238,16 +248,16 @@ export class CheckpointHeader { } [inspect.custom]() { - const gasfees = `da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas}`; return `Header { lastArchiveRoot: ${this.lastArchiveRoot.toString()}, blockHeadersHash: ${this.blockHeadersHash.toString()}, - contentCommitment: ${inspect(this.contentCommitment)}, + blobsHash: ${inspect(this.blobsHash)}, + inHash: ${inspect(this.inHash)}, slotNumber: ${this.slotNumber}, timestamp: ${this.timestamp}, coinbase: ${this.coinbase.toString()}, feeRecipient: ${this.feeRecipient.toString()}, - gasFees: ${gasfees}, + gasFees: { da:${this.gasFees.feePerDaGas}, l2:${this.gasFees.feePerL2Gas} }, totalManaUsed: ${this.totalManaUsed.toBigInt()}, }`; } diff --git a/yarn-project/stdlib/src/rollup/checkpoint_rollup_public_inputs.ts b/yarn-project/stdlib/src/rollup/checkpoint_rollup_public_inputs.ts index c9d71a926de7..6f85389e61ff 100644 --- a/yarn-project/stdlib/src/rollup/checkpoint_rollup_public_inputs.ts +++ b/yarn-project/stdlib/src/rollup/checkpoint_rollup_public_inputs.ts @@ -31,6 +31,10 @@ export class CheckpointRollupPublicInputs { * The hashes of the headers of the constituent checkpoints. */ public checkpointHeaderHashes: Tuple, + /** + * The `out_hash` values from all checkpoints in this checkpoint range. + */ + public outHashes: Tuple, /** * The summed transaction fees and recipients of the constituent checkpoints. */ @@ -56,6 +60,7 @@ export class CheckpointRollupPublicInputs { reader.readObject(AppendOnlyTreeSnapshot), reader.readObject(AppendOnlyTreeSnapshot), reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr), + reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr), reader.readArray(AZTEC_MAX_EPOCH_DURATION, FeeRecipient), reader.readObject(BlobAccumulator), reader.readObject(BlobAccumulator), @@ -69,6 +74,7 @@ export class CheckpointRollupPublicInputs { this.previousArchive, this.newArchive, this.checkpointHeaderHashes, + this.outHashes, this.fees, this.startBlobAccumulator, this.endBlobAccumulator, diff --git a/yarn-project/stdlib/src/rollup/root_rollup_public_inputs.ts b/yarn-project/stdlib/src/rollup/root_rollup_public_inputs.ts index 717223ec8e2e..de6ec49cc635 100644 --- a/yarn-project/stdlib/src/rollup/root_rollup_public_inputs.ts +++ b/yarn-project/stdlib/src/rollup/root_rollup_public_inputs.ts @@ -21,6 +21,9 @@ export class RootRollupPublicInputs { public previousArchiveRoot: Fr, /** Root of the archive tree after this rollup is processed */ public endArchiveRoot: Fr, + /** Root of the unbalanced merkle tree consisting of the `out_hash` values from all checkpoints in this rollup. */ + public outHash: Fr, + /** Hashes of checkpoint headers for this rollup. */ public checkpointHeaderHashes: Tuple, public fees: Tuple, public constants: EpochConstantData, @@ -31,6 +34,7 @@ export class RootRollupPublicInputs { return [ fields.previousArchiveRoot, fields.endArchiveRoot, + fields.outHash, fields.checkpointHeaderHashes, fields.fees, fields.constants, @@ -58,6 +62,7 @@ export class RootRollupPublicInputs { public static fromBuffer(buffer: Buffer | BufferReader): RootRollupPublicInputs { const reader = BufferReader.asReader(buffer); return new RootRollupPublicInputs( + Fr.fromBuffer(reader), Fr.fromBuffer(reader), Fr.fromBuffer(reader), reader.readArray(AZTEC_MAX_EPOCH_DURATION, Fr), @@ -88,6 +93,7 @@ export class RootRollupPublicInputs { /** Creates a random instance. Used for testing only - will not prove/verify. */ static random() { return new RootRollupPublicInputs( + Fr.random(), Fr.random(), Fr.random(), makeTuple(AZTEC_MAX_EPOCH_DURATION, Fr.random), diff --git a/yarn-project/stdlib/src/tests/factories.ts b/yarn-project/stdlib/src/tests/factories.ts index 16d6272bf995..9759e6ba6947 100644 --- a/yarn-project/stdlib/src/tests/factories.ts +++ b/yarn-project/stdlib/src/tests/factories.ts @@ -164,7 +164,6 @@ import { NullifierLeaf, NullifierLeafPreimage } from '../trees/nullifier_leaf.js import { PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '../trees/public_data_leaf.js'; import { BlockHeader } from '../tx/block_header.js'; import { CallContext } from '../tx/call_context.js'; -import { ContentCommitment } from '../tx/content_commitment.js'; import { FunctionData } from '../tx/function_data.js'; import { GlobalVariables } from '../tx/global_variables.js'; import { PartialStateReference } from '../tx/partial_state_reference.js'; @@ -851,10 +850,11 @@ export function makeCheckpointRollupPublicInputs(seed = 0) { makeAppendOnlyTreeSnapshot(seed + 0x100), makeAppendOnlyTreeSnapshot(seed + 0x200), makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300), - makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x400), - makeBlobAccumulator(seed + 0x500), + makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400), + makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500), makeBlobAccumulator(seed + 0x600), - makeFinalBlobBatchingChallenges(seed + 0x700), + makeBlobAccumulator(seed + 0x700), + makeFinalBlobBatchingChallenges(seed + 0x800), ); } @@ -886,20 +886,14 @@ export function makeRootRollupPublicInputs(seed = 0): RootRollupPublicInputs { return new RootRollupPublicInputs( fr(seed + 0x100), fr(seed + 0x200), - makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x300), + fr(seed + 0x300), + makeTuple(AZTEC_MAX_EPOCH_DURATION, () => fr(seed), 0x400), makeTuple(AZTEC_MAX_EPOCH_DURATION, () => makeFeeRecipient(seed), 0x500), makeEpochConstantData(seed + 0x600), makeFinalBlobAccumulator(seed + 0x700), ); } -/** - * Makes content commitment - */ -export function makeContentCommitment(seed = 0): ContentCommitment { - return new ContentCommitment(fr(seed + 0x100), fr(seed + 0x200), fr(seed + 0x300)); -} - export function makeBlockHeader( seed = 0, overrides: Partial>> & Partial> = {}, @@ -923,7 +917,8 @@ export function makeL2BlockHeader( ) { return new L2BlockHeader( makeAppendOnlyTreeSnapshot(seed + 0x100), - overrides?.contentCommitment ?? makeContentCommitment(seed + 0x200), + overrides?.blobsHash ?? fr(seed + 0x200), + overrides?.inHash ?? fr(seed + 0x300), overrides?.state ?? makeStateReference(seed + 0x600), makeGlobalVariables((seed += 0x700), { ...(blockNumber !== undefined ? { blockNumber: BlockNumber(blockNumber) } : {}), @@ -940,7 +935,8 @@ export function makeCheckpointHeader(seed = 0) { return CheckpointHeader.from({ lastArchiveRoot: fr(seed + 0x100), blockHeadersHash: fr(seed + 0x150), - contentCommitment: makeContentCommitment(seed + 0x200), + blobsHash: fr(seed + 0x200), + inHash: fr(seed + 0x210), slotNumber: SlotNumber(seed + 0x300), timestamp: BigInt(seed + 0x400), coinbase: makeEthAddress(seed + 0x500), @@ -987,7 +983,7 @@ function makeCountedL2ToL1Message(seed = 0) { return new CountedL2ToL1Message(makeL2ToL1Message(seed), seed + 2); } -function makeScopedL2ToL1Message(seed = 1) { +export function makeScopedL2ToL1Message(seed = 1) { return new ScopedL2ToL1Message(makeL2ToL1Message(seed), makeAztecAddress(seed + 3)); } diff --git a/yarn-project/stdlib/src/tests/mocks.ts b/yarn-project/stdlib/src/tests/mocks.ts index 166bbfb3505b..be64a59d68de 100644 --- a/yarn-project/stdlib/src/tests/mocks.ts +++ b/yarn-project/stdlib/src/tests/mocks.ts @@ -6,7 +6,7 @@ import { MAX_NULLIFIERS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, } from '@aztec/constants'; -import { makeTuple } from '@aztec/foundation/array'; +import { type FieldsOf, makeTuple } from '@aztec/foundation/array'; import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types'; import { Buffer32 } from '@aztec/foundation/buffer'; import { padArrayEnd, times } from '@aztec/foundation/collection'; @@ -16,6 +16,7 @@ import { Fr } from '@aztec/foundation/curves/bn254'; import type { ContractArtifact } from '../abi/abi.js'; import { PublicTxEffect } from '../avm/avm.js'; +import type { AvmAccumulatedData } from '../avm/avm_accumulated_data.js'; import { AvmCircuitPublicInputs } from '../avm/avm_circuit_public_inputs.js'; import { PublicDataWrite } from '../avm/public_data_write.js'; import { RevertCode } from '../avm/revert_code.js'; @@ -202,6 +203,7 @@ export async function mockProcessedTx({ // The default gasUsed is the tx overhead. gasUsed = Gas.from({ daGas: FIXED_DA_GAS, l2Gas: FIXED_L2_GAS }), privateOnly = false, + avmAccumulatedData, ...mockTxOpts }: { seed?: number; @@ -213,6 +215,7 @@ export async function mockProcessedTx({ protocolContracts?: ProtocolContracts; feePaymentPublicDataWrite?: PublicDataWrite; privateOnly?: boolean; + avmAccumulatedData?: Partial>; } & Parameters[1] = {}) { seed *= 0x1000; // Avoid clashing with the previous mock values if seed only increases by 1. anchorBlockHeader ??= db?.getInitialHeader() ?? makeBlockHeader(seed); @@ -292,19 +295,22 @@ export async function mockProcessedTx({ avmOutput.previousRevertibleAccumulatedDataArrayLengths = avmOutput.previousRevertibleAccumulatedData.getArrayLengths(); // Assign final data emitted from avm. - avmOutput.accumulatedData.noteHashes = revertibleData.noteHashes; - avmOutput.accumulatedData.nullifiers = padArrayEnd( - nonRevertibleData.nullifiers.concat(revertibleData.nullifiers).filter(n => !n.isEmpty()), - Fr.ZERO, - MAX_NULLIFIERS_PER_TX, - ); - avmOutput.accumulatedData.l2ToL1Msgs = revertibleData.l2ToL1Msgs; - avmOutput.accumulatedData.publicDataWrites = makeTuple( - MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, - i => new PublicDataWrite(new Fr(i), new Fr(i + 10)), - seed + 0x2000, - ); - avmOutput.accumulatedData.publicDataWrites[0] = feePaymentPublicDataWrite; + avmOutput.accumulatedData.noteHashes = avmAccumulatedData?.noteHashes ?? revertibleData.noteHashes; + avmOutput.accumulatedData.nullifiers = + avmAccumulatedData?.nullifiers ?? + padArrayEnd( + nonRevertibleData.nullifiers.concat(revertibleData.nullifiers).filter(n => !n.isEmpty()), + Fr.ZERO, + MAX_NULLIFIERS_PER_TX, + ); + avmOutput.accumulatedData.l2ToL1Msgs = avmAccumulatedData?.l2ToL1Msgs ?? revertibleData.l2ToL1Msgs; + avmOutput.accumulatedData.publicDataWrites = + avmAccumulatedData?.publicDataWrites ?? + makeTuple( + MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + i => (i === 0 ? feePaymentPublicDataWrite : new PublicDataWrite(new Fr(i), new Fr(i + 10))), + seed + 0x2000, + ); avmOutput.accumulatedDataArrayLengths = avmOutput.accumulatedData.getArrayLengths(); avmOutput.gasSettings = gasSettings; // Note: The fee is computed from the tx's gas used, which only includes the gas used in private. But this shouldn't diff --git a/yarn-project/stdlib/src/tx/content_commitment.test.ts b/yarn-project/stdlib/src/tx/content_commitment.test.ts deleted file mode 100644 index 67469b848723..000000000000 --- a/yarn-project/stdlib/src/tx/content_commitment.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { CONTENT_COMMITMENT_LENGTH } from '@aztec/constants'; -import { randomInt } from '@aztec/foundation/crypto/random'; - -import { makeContentCommitment } from '../tests/factories.js'; -import { ContentCommitment } from './content_commitment.js'; - -describe('Content Commitment', () => { - let contentCommitment: ContentCommitment; - - beforeAll(() => { - contentCommitment = makeContentCommitment(randomInt(1000)); - }); - - it('serializes to buffer and deserializes it back', () => { - const buffer = contentCommitment.toBuffer(); - const res = ContentCommitment.fromBuffer(buffer); - expect(res).toEqual(contentCommitment); - }); - - it('serializes to field array and deserializes it back', () => { - const fieldArray = contentCommitment.toFields(); - const res = ContentCommitment.fromFields(fieldArray); - expect(res).toEqual(contentCommitment); - }); - - it('number of fields matches constant', () => { - const fields = contentCommitment.toFields(); - expect(fields.length).toBe(CONTENT_COMMITMENT_LENGTH); - }); -}); diff --git a/yarn-project/stdlib/src/tx/content_commitment.ts b/yarn-project/stdlib/src/tx/content_commitment.ts deleted file mode 100644 index 561e96249b73..000000000000 --- a/yarn-project/stdlib/src/tx/content_commitment.ts +++ /dev/null @@ -1,113 +0,0 @@ -import type { ViemContentCommitment } from '@aztec/ethereum/contracts'; -import { Fr } from '@aztec/foundation/curves/bn254'; -import { schemas } from '@aztec/foundation/schemas'; -import { BufferReader, FieldReader, serializeToBuffer, serializeToFields } from '@aztec/foundation/serialize'; -import { bufferToHex } from '@aztec/foundation/string'; -import type { FieldsOf } from '@aztec/foundation/types'; - -import { z } from 'zod'; - -export class ContentCommitment { - constructor( - public blobsHash: Fr, - public inHash: Fr, - public outHash: Fr, - ) {} - - static get schema() { - return z - .object({ - blobsHash: schemas.Fr, - inHash: schemas.Fr, - outHash: schemas.Fr, - }) - .transform(({ blobsHash, inHash, outHash }) => new ContentCommitment(blobsHash, inHash, outHash)); - } - - static getFields(fields: FieldsOf) { - return [fields.blobsHash, fields.inHash, fields.outHash] as const; - } - - static from(fields: FieldsOf) { - return new ContentCommitment(...ContentCommitment.getFields(fields)); - } - - getSize() { - return this.toBuffer().length; - } - - toBuffer() { - return serializeToBuffer(...ContentCommitment.getFields(this)); - } - - static fromBuffer(buffer: Buffer | BufferReader): ContentCommitment { - const reader = BufferReader.asReader(buffer); - - return new ContentCommitment(reader.readObject(Fr), reader.readObject(Fr), reader.readObject(Fr)); - } - - toInspect() { - return { - blobsHash: this.blobsHash.toString(), - inHash: this.inHash.toString(), - outHash: this.outHash.toString(), - }; - } - - toViem(): ViemContentCommitment { - return { - blobsHash: this.blobsHash.toString(), - inHash: this.inHash.toString(), - outHash: this.outHash.toString(), - }; - } - - static fromViem(contentCommitment: ViemContentCommitment) { - return new ContentCommitment( - Fr.fromString(contentCommitment.blobsHash), - Fr.fromString(contentCommitment.inHash), - Fr.fromString(contentCommitment.outHash), - ); - } - - toFields(): Fr[] { - return serializeToFields(...ContentCommitment.getFields(this)); - } - - static fromFields(fields: Fr[] | FieldReader): ContentCommitment { - const reader = FieldReader.asReader(fields); - return new ContentCommitment(reader.readField(), reader.readField(), reader.readField()); - } - - static random(overrides: Partial> = {}): ContentCommitment { - return ContentCommitment.from({ - blobsHash: Fr.random(), - inHash: Fr.random(), - outHash: Fr.random(), - ...overrides, - }); - } - - static empty(): ContentCommitment { - return new ContentCommitment(Fr.zero(), Fr.zero(), Fr.zero()); - } - - isEmpty(): boolean { - return this.blobsHash.isZero() && this.inHash.isZero() && this.outHash.isZero(); - } - - public toString(): string { - return bufferToHex(this.toBuffer()); - } - - static fromString(str: string): ContentCommitment { - const buffer = Buffer.from(str.replace(/^0x/i, ''), 'hex'); - return ContentCommitment.fromBuffer(buffer); - } - - public equals(other: this): boolean { - return ( - this.blobsHash.equals(other.blobsHash) && this.inHash.equals(other.inHash) && this.outHash.equals(other.outHash) - ); - } -} diff --git a/yarn-project/stdlib/src/tx/index.ts b/yarn-project/stdlib/src/tx/index.ts index 8bc1f355e30f..7f243c492049 100644 --- a/yarn-project/stdlib/src/tx/index.ts +++ b/yarn-project/stdlib/src/tx/index.ts @@ -1,7 +1,6 @@ export * from './block_header.js'; export * from './call_context.js'; export * from './global_variables.js'; -export * from './content_commitment.js'; export * from './state_reference.js'; export * from './partial_state_reference.js'; export * from './function_data.js'; diff --git a/yarn-project/txe/src/utils/block_creation.ts b/yarn-project/txe/src/utils/block_creation.ts index c64642965105..03d6be3d1038 100644 --- a/yarn-project/txe/src/utils/block_creation.ts +++ b/yarn-project/txe/src/utils/block_creation.ts @@ -8,7 +8,6 @@ import { BlockNumber } from '@aztec/foundation/branded-types'; import { padArrayEnd } from '@aztec/foundation/collection'; import { Fr } from '@aztec/foundation/curves/bn254'; import { Body, L2Block, L2BlockHeader } from '@aztec/stdlib/block'; -import { makeContentCommitment } from '@aztec/stdlib/testing'; import { AppendOnlyTreeSnapshot, MerkleTreeId, type MerkleTreeWriteOperations } from '@aztec/stdlib/trees'; import { GlobalVariables, TxEffect } from '@aztec/stdlib/tx'; @@ -53,7 +52,8 @@ export async function makeTXEBlockHeader( return new L2BlockHeader( new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root), Number(archiveInfo.size)), - makeContentCommitment(), + Fr.ZERO, + Fr.ZERO, stateReference, globalVariables, Fr.ZERO, diff --git a/yarn-project/validator-client/src/block_proposal_handler.ts b/yarn-project/validator-client/src/block_proposal_handler.ts index c6bc928fb363..e37d015d83f6 100644 --- a/yarn-project/validator-client/src/block_proposal_handler.ts +++ b/yarn-project/validator-client/src/block_proposal_handler.ts @@ -177,7 +177,7 @@ export class BlockProposalHandler { CheckpointNumber.fromBlockNumber(blockNumber), ); const computedInHash = computeInHashFromL1ToL2Messages(l1ToL2Messages); - const proposalInHash = proposal.payload.header.contentCommitment.inHash; + const proposalInHash = proposal.payload.header.inHash; if (!computedInHash.equals(proposalInHash)) { this.log.warn(`L1 to L2 messages in hash mismatch, skipping processing`, { proposalInHash: proposalInHash.toString(), diff --git a/yarn-project/validator-client/src/validator.test.ts b/yarn-project/validator-client/src/validator.test.ts index 0172ef81a208..a69b430f8548 100644 --- a/yarn-project/validator-client/src/validator.test.ts +++ b/yarn-project/validator-client/src/validator.test.ts @@ -30,7 +30,7 @@ import { type L1ToL2MessageSource, computeInHashFromL1ToL2Messages } from '@azte import type { BlockProposal } from '@aztec/stdlib/p2p'; import { makeBlockAttestation, makeBlockProposal, makeL2BlockHeader, mockTx } from '@aztec/stdlib/testing'; import { AppendOnlyTreeSnapshot } from '@aztec/stdlib/trees'; -import { BlockHeader, ContentCommitment, type Tx, TxHash } from '@aztec/stdlib/tx'; +import { BlockHeader, type Tx, TxHash } from '@aztec/stdlib/tx'; import { AttestationTimeoutError } from '@aztec/stdlib/validators'; import { describe, expect, it, jest } from '@jest/globals'; @@ -243,8 +243,7 @@ describe('ValidatorClient', () => { beforeEach(() => { const emptyInHash = computeInHashFromL1ToL2Messages([]); - const contentCommitment = new ContentCommitment(Fr.random(), emptyInHash, Fr.random()); - const blockHeader = makeL2BlockHeader(1, 100, 100, { contentCommitment }); + const blockHeader = makeL2BlockHeader(1, 100, 100, { inHash: emptyInHash }); blockNumber = BlockNumber(blockHeader.getBlockNumber()); proposal = makeBlockProposal({ header: blockHeader }); // Set the current time to the start of the slot of the proposal