More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 26,477 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 7267840 | 37 mins ago | IN | 0 ETH | 0.00000614 | ||||
Set Approval For... | 7263784 | 1 hr ago | IN | 0 ETH | 0.00000548 | ||||
Set Approval For... | 7263454 | 1 hr ago | IN | 0 ETH | 0.00000547 | ||||
Set Approval For... | 7262906 | 2 hrs ago | IN | 0 ETH | 0.00000488 | ||||
Set Approval For... | 7261846 | 2 hrs ago | IN | 0 ETH | 0.00000545 | ||||
Set Approval For... | 7261536 | 2 hrs ago | IN | 0 ETH | 0.00000526 | ||||
Set Approval For... | 7261323 | 2 hrs ago | IN | 0 ETH | 0.00000547 | ||||
Set Approval For... | 7260942 | 2 hrs ago | IN | 0 ETH | 0.00000577 | ||||
Set Approval For... | 7259459 | 3 hrs ago | IN | 0 ETH | 0.00000442 | ||||
Set Approval For... | 7259285 | 3 hrs ago | IN | 0 ETH | 0.00000523 | ||||
Set Approval For... | 7259137 | 3 hrs ago | IN | 0 ETH | 0.00000523 | ||||
Set Approval For... | 7259001 | 3 hrs ago | IN | 0 ETH | 0.00000553 | ||||
Set Approval For... | 7258892 | 3 hrs ago | IN | 0 ETH | 0.00000553 | ||||
Mint WL1 | 7258024 | 3 hrs ago | IN | 0.03 ETH | 0.00000732 | ||||
Mint WL1 | 7258019 | 3 hrs ago | IN | 0.005 ETH | 0.00000535 | ||||
Mint WL2 | 7258009 | 3 hrs ago | IN | 0 ETH | 0.0000055 | ||||
Mint WL1 | 7258005 | 3 hrs ago | IN | 0.005 ETH | 0.00000481 | ||||
Mint WL1 | 7257997 | 3 hrs ago | IN | 0.005 ETH | 0.0000067 | ||||
Mint WL1 | 7257990 | 3 hrs ago | IN | 0.005 ETH | 0.00000608 | ||||
Mint WL1 | 7257986 | 3 hrs ago | IN | 0.005 ETH | 0.00000502 | ||||
Mint WL1 | 7257975 | 3 hrs ago | IN | 0.005 ETH | 0.00000609 | ||||
Mint WL1 | 7257969 | 3 hrs ago | IN | 0.01 ETH | 0.00000537 | ||||
Mint WL2 | 7257968 | 3 hrs ago | IN | 0 ETH | 0.00000674 | ||||
Mint WL1 | 7257957 | 3 hrs ago | IN | 0.005 ETH | 0.00000627 | ||||
Mint WL1 | 7257955 | 3 hrs ago | IN | 0.005 ETH | 0.00000502 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
7258024 | 3 hrs ago | 0.03 ETH | ||||
7258019 | 3 hrs ago | 0.005 ETH | ||||
7258005 | 3 hrs ago | 0.005 ETH | ||||
7257997 | 3 hrs ago | 0.005 ETH | ||||
7257990 | 3 hrs ago | 0.005 ETH | ||||
7257986 | 3 hrs ago | 0.005 ETH | ||||
7257975 | 3 hrs ago | 0.005 ETH | ||||
7257969 | 3 hrs ago | 0.01 ETH | ||||
7257957 | 3 hrs ago | 0.005 ETH | ||||
7257955 | 3 hrs ago | 0.005 ETH | ||||
7257949 | 3 hrs ago | 0.005 ETH | ||||
7257942 | 3 hrs ago | 0.005 ETH | ||||
7257933 | 3 hrs ago | 0.005 ETH | ||||
7257925 | 3 hrs ago | 0.005 ETH | ||||
7257909 | 3 hrs ago | 0.005 ETH | ||||
7257895 | 3 hrs ago | 0.005 ETH | ||||
7257890 | 3 hrs ago | 0.005 ETH | ||||
7257877 | 3 hrs ago | 0.005 ETH | ||||
7257873 | 3 hrs ago | 0.005 ETH | ||||
7257871 | 3 hrs ago | 0.005 ETH | ||||
7257866 | 3 hrs ago | 0.005 ETH | ||||
7257856 | 3 hrs ago | 0.005 ETH | ||||
7257852 | 3 hrs ago | 0.005 ETH | ||||
7257844 | 3 hrs ago | 0.005 ETH | ||||
7257832 | 3 hrs ago | 0.005 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
LootBox
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.4.1
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {ERC1155} from "./Utils.sol"; import {Ownable} from "./Utils.sol"; import {MerkleProof} from "./Utils.sol"; import {IERC1155Receiver} from "./Utils.sol"; contract LootBox is ERC1155, Ownable { uint256 private _entropyNonce; uint256[] public tokenIdPool = [1, 2, 3, 4, 5, 6, 7]; uint256[] public tokenProbabilities = [32, 32, 15, 10, 4, 6, 1]; enum MintType { WL1, WL2, WL3 } struct MintConfig { uint256 price; uint256 startTime; uint256 endTime; uint8 freeMintsAllowed; bytes32 merkleRoot; } mapping(MintType => MintConfig) public mintConfigs; mapping(address => mapping(MintType => uint256)) public userMints; mapping(uint256 => uint256) public tokenIdSupply; event URIUpdated(string newURI); event Minted( address indexed minter, uint256 indexed tokenId, MintType indexed mintType ); event MintConfigUpdated( MintType indexed mintType, uint256 price, uint256 startTime, uint256 endTime, bytes32 merkleRoot, uint8 freeMints ); event OddsUpdated(uint256[] newProbabilities); uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status = _NOT_ENTERED; modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } constructor() ERC1155("77-Bit Origin Skins", "77OS", "https://api.ipfs.metadata/") {} function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal override { super._mint(to, id, amount, data); emit TransferSingle(_msgSender(), address(0), to, id, amount); } function updateMintConfig( MintType mintType, uint256 price, uint256 startTime, uint256 endTime, bytes32 merkleRoot, uint8 freeMints ) external onlyOwner { require(startTime < endTime, "Invalid mint time"); mintConfigs[mintType] = MintConfig( price, startTime, endTime, freeMints, merkleRoot ); emit MintConfigUpdated( mintType, price, startTime, endTime, merkleRoot, freeMints ); } function setURI(string memory newURI) external onlyOwner { _setURI(newURI); emit URIUpdated(newURI); } function withdraw() external onlyOwner { (bool success, ) = owner().call{value: address(this).balance}(""); require(success, "Transfer failed."); } function updateOdds( uint256[] calldata newProbabilities ) external onlyOwner { uint256 len = newProbabilities.length; require(len == tokenProbabilities.length, "Length mismatch"); uint256 sum; for (uint256 i = 0; i < len; ) { require(newProbabilities[i] > 0, "Probability cannot be zero"); sum += newProbabilities[i]; unchecked { ++i; } } require(sum == 100, "Probabilities must sum to 100"); tokenProbabilities = newProbabilities; emit OddsUpdated(newProbabilities); } function mintWL1( uint256 quantity, bytes32[] calldata proof ) external payable nonReentrant { _mintTokens(quantity, MintType.WL1, proof); } function mintWL2( uint256 quantity, bytes32[] calldata proof ) external payable nonReentrant { _mintTokens(quantity, MintType.WL2, proof); } function mintWL3( uint256 quantity, bytes32[] calldata proof ) external payable nonReentrant { _mintTokens(quantity, MintType.WL3, proof); } function _mintTokens( uint256 quantity, MintType mintType, bytes32[] memory proof ) internal { require(quantity > 0, "Must mint at least 1 NFT"); MintConfig memory config = mintConfigs[mintType]; require( block.timestamp >= config.startTime && block.timestamp <= config.endTime, "Mint not active" ); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( MerkleProof.verify(proof, config.merkleRoot, leaf), "Not whitelisted" ); // Free vs paid calculation uint256 freeMintsUsed = userMints[msg.sender][mintType]; uint256 freeRemaining = config.freeMintsAllowed > freeMintsUsed ? config.freeMintsAllowed - freeMintsUsed : 0; uint256 freeQuantity = quantity > freeRemaining ? freeRemaining : quantity; uint256 paidQuantity = quantity - freeQuantity; if (freeQuantity > 0) { userMints[msg.sender][mintType] += freeQuantity; } require(msg.value == paidQuantity * config.price, "Incorrect ETH sent"); for (uint256 i = 0; i < quantity; i++) { uint256 tokenId = _getRandomTokenId(); tokenIdSupply[tokenId]++; emit Minted(msg.sender, tokenId, mintType); _mint(msg.sender, tokenId, 1, ""); } } function _getRandomTokenId() internal returns (uint256) { // Increment nonce for each generation _entropyNonce++; uint256 rand = uint256( keccak256( abi.encodePacked( msg.sender, tx.gasprice, block.timestamp, blockhash(block.number), _entropyNonce ) ) ) % 100; uint256 cumulative; for (uint256 i = 0; i < tokenProbabilities.length; i++) { cumulative += tokenProbabilities[i]; if (rand < cumulative) { return tokenIdPool[i]; } } return tokenIdPool[tokenIdPool.length - 1]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; library Hashes { function commutativeKeccak256( bytes32 a, bytes32 b ) internal pure returns (bytes32) { return a < b ? efficientKeccak256(a, b) : efficientKeccak256(b, a); } /** * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory. */ function efficientKeccak256( bytes32 a, bytes32 b ) internal pure returns (bytes32 value) { assembly ("memory-safe") { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } library MerkleProof { /** *@dev The multiproof provided is not valid. */ error MerkleProofInvalidMultiproof(); /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. * * This version handles proofs in memory with the default hashing function. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leaves & pre-images are assumed to be sorted. * * This version handles proofs in memory with the default hashing function. */ function processProof( bytes32[] memory proof, bytes32 leaf ) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. * * This version handles proofs in memory with a custom hashing function. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bool) { return processProof(proof, leaf, hasher) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leaves & pre-images are assumed to be sorted. * * This version handles proofs in memory with a custom hashing function. */ function processProof( bytes32[] memory proof, bytes32 leaf, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = hasher(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. * * This version handles proofs in calldata with the default hashing function. */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leaves & pre-images are assumed to be sorted. * * This version handles proofs in calldata with the default hashing function. */ function processProofCalldata( bytes32[] calldata proof, bytes32 leaf ) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = Hashes.commutativeKeccak256(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. * * This version handles proofs in calldata with a custom hashing function. */ function verifyCalldata( bytes32[] calldata proof, bytes32 root, bytes32 leaf, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bool) { return processProofCalldata(proof, leaf, hasher) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leaves & pre-images are assumed to be sorted. * * This version handles proofs in calldata with a custom hashing function. */ function processProofCalldata( bytes32[] calldata proof, bytes32 leaf, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = hasher(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * This version handles multiproofs in memory with the default hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. * * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`. * The `leaves` must be validated independently. See {processMultiProof}. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * This version handles multiproofs in memory with the default hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op, * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not * validating the leaves elsewhere. */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofFlagsLen = proofFlags.length; // Check proof validity. if (leavesLen + proof.length != proofFlagsLen + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](proofFlagsLen); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < proofFlagsLen; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = Hashes.commutativeKeccak256(a, b); } if (proofFlagsLen > 0) { if (proofPos != proof.length) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[proofFlagsLen - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * This version handles multiproofs in memory with a custom hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. * * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`. * The `leaves` must be validated independently. See {processMultiProof}. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bool) { return processMultiProof(proof, proofFlags, leaves, hasher) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * This version handles multiproofs in memory with a custom hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op, * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not * validating the leaves elsewhere. */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofFlagsLen = proofFlags.length; // Check proof validity. if (leavesLen + proof.length != proofFlagsLen + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](proofFlagsLen); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < proofFlagsLen; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = hasher(a, b); } if (proofFlagsLen > 0) { if (proofPos != proof.length) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[proofFlagsLen - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * This version handles multiproofs in calldata with the default hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. * * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`. * The `leaves` must be validated independently. See {processMultiProofCalldata}. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * This version handles multiproofs in calldata with the default hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op, * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not * validating the leaves elsewhere. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofFlagsLen = proofFlags.length; // Check proof validity. if (leavesLen + proof.length != proofFlagsLen + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](proofFlagsLen); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < proofFlagsLen; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = Hashes.commutativeKeccak256(a, b); } if (proofFlagsLen > 0) { if (proofPos != proof.length) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[proofFlagsLen - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * This version handles multiproofs in calldata with a custom hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. * * NOTE: Consider the case where `root == proof[0] && leaves.length == 0` as it will return `true`. * The `leaves` must be validated independently. See {processMultiProofCalldata}. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves, hasher) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * This version handles multiproofs in calldata with a custom hashing function. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). * * NOTE: The _empty set_ (i.e. the case where `proof.length == 1 && leaves.length == 0`) is considered a no-op, * and therefore a valid multiproof (i.e. it returns `proof[0]`). Consider disallowing this case if you're not * validating the leaves elsewhere. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves, function(bytes32, bytes32) view returns (bytes32) hasher ) internal view returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofFlagsLen = proofFlags.length; // Check proof validity. if (leavesLen + proof.length != proofFlagsLen + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](proofFlagsLen); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < proofFlagsLen; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = hasher(a, b); } if (proofFlagsLen > 0) { if (proofPos != proof.length) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[proofFlagsLen - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC1155 is IERC165 { event TransferSingle( address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value ); event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); event ApprovalForAll( address indexed account, address indexed operator, bool approved ); event URI(string value, uint256 indexed id); function balanceOf( address account, uint256 id ) external view returns (uint256); function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); function setApprovalForAll(address operator, bool approved) external; function isApprovedForAll( address account, address operator ) external view returns (bool); function safeTransferFrom( address from, address to, uint256 id, uint256 value, bytes calldata data ) external; function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; } interface IERC1155MetadataURI is IERC1155 { function uri(uint256 id) external view returns (string memory); } interface IERC1155Receiver is IERC165 { function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract ERC165 is IERC165 { function supportsInterface( bytes4 interfaceId ) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } library Strings { function toString(uint256 value) internal pure returns (string memory) { if (value == 0) return "0"; uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Strings for uint256; // Token metadata string public name; string public symbol; string private _uri; // Balances and approvals mapping(uint256 => mapping(address => uint256)) private _balances; mapping(address => mapping(address => bool)) private _operatorApprovals; // Total supply tracking mapping(uint256 => uint256) private _totalSupply; constructor( string memory _name, string memory _symbol, string memory uri_ ) { name = _name; symbol = _symbol; _setURI(uri_); } // ERC165 function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } // ERC1155MetadataURI function uri( uint256 tokenId ) public view virtual override returns (string memory) { return string(abi.encodePacked(_uri, tokenId.toString())); } // ERC1155 function balanceOf( address account, uint256 id ) public view virtual override returns (uint256) { return _balances[id][account]; } function balanceOfBatch( address[] memory accounts, uint256[] memory ids ) public view virtual override returns (uint256[] memory) { require( accounts.length == ids.length, "ERC1155: accounts and ids length mismatch" ); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } function setApprovalForAll( address operator, bool approved ) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll( address account, address operator ) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } function safeTransferFrom( address from, address to, uint256 id, uint256 value, bytes memory data ) public virtual override { revert("Soulbound: Transfers are disabled"); } function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory values, bytes memory data ) public virtual override { revert("Soulbound: Transfers are disabled"); } // Internal functions function _setURI(string memory newuri) internal virtual { _uri = newuri; } function _mint( address to, uint256 id, uint256 value, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); _balances[id][to] += value; _totalSupply[id] += value; emit TransferSingle(_msgSender(), address(0), to, id, value); } function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 value, bytes memory data ) internal virtual { if (to.code.length > 0) { try IERC1155Receiver(to).onERC1155Received( operator, from, id, value, data ) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory values, bytes memory data ) private { if (to.code.length > 0) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, values, data ) returns (bytes4 response) { if ( response != IERC1155Receiver.onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function totalSupply(uint256 id) public view returns (uint256) { return _totalSupply[id]; } function exists(uint256 id) public view returns (bool) { return _totalSupply[id] > 0; } }
{ "optimizer": { "enabled": true, "mode": "3" }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi" ] } }, "libraries": {}, "isSystem": false, "forceEvmla": false }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"indexed":false,"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"MintConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"OddsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"newURI","type":"string"}],"name":"URIUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"mintConfigs","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint8","name":"freeMintsAllowed","type":"uint8"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintWL3","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenProbabilities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum LootBox.MintType","name":"mintType","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"},{"internalType":"uint8","name":"freeMints","type":"uint8"}],"name":"updateMintConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newProbabilities","type":"uint256[]"}],"name":"updateOdds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"enum LootBox.MintType","name":"","type":"uint8"}],"name":"userMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b00000000000000000000000000000000000000000000000000000000000000000100046d7263757f600235d35eeaecb5945230db2a90380a7ef8823eb337ebe900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0003000000000002000a000000000002000000000302001900000000020100190000006002200270000003f402200197000200000021035500010000000103550000008005000039000000400050043f00000001033001900000003d0000c13d000000040320008c00000ee60000413d000000000301043b000000e004300270000004020340009c0000005e0000213d000000000321034f000004140540009c000000ae0000a13d000004150540009c000001790000a13d000004160540009c000004320000213d000004190340009c0000046b0000613d0000041a0140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe011001970000000002000411000000000121004b000008c40000c13d000a00000002001d0000045501000041000000000010043900000000010004100000000400100443000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043f011001c70000800a020000390fcb0fc60000040f000000010220019000000d780000613d000000000301043b00000000010004140000000a05000029000000040250008c0000098a0000c13d0000000102000039000000000100003100000af10000013d0000000001000416000000000101004b00000ee60000c13d0000001301000039000000800010043f000003f501000041000000a00010043f0000000407000039000000c00070043f000003f601000041000000e00010043f0000014001000039000000400010043f0000001a01000039000001000010043f000003f701000041000001200010043f000000000100041a000000010210019000000001011002700000007f0310018f000000000301c0190000001f0130008c00000000010000190000000101002039000000000112004b000000860000613d000004610100004100000000001004350000002201000039000000040010043f000004620100004100000fcd00010430000004030340009c000001230000a13d000004040340009c000001df0000a13d000004050340009c0000044a0000213d000004080340009c000004780000613d000004090340009c00000ee60000c13d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000003fe0110009c00000ee60000213d00000000002004350000000401000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000ff01100190000004450000013d000000200130008c000000a10000413d000900000003001d000a00000007001d0000000000000435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000001f0220003900000005022002700000000002210019000000000321004b0000000a07000029000000a10000813d000000000001041b0000000101100039000000000321004b0000009d0000413d000000a00100043d000003f90110019700000026011001bf000000000010041b000000c00400043d000003fa0140009c000001340000413d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd000104300000041e0540009c000001ef0000213d000004220340009c000004850000613d000004230340009c000004940000613d000004240340009c00000ee60000c13d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000406500039000000000361034f000000000403043b000003fb0340009c000000a80000213d0000001f07400039000000200300008a000000000737016f0000003f07700039000000000737016f000004370870009c000000a80000213d00000024055000390000008007700039000000400070043f000000800040043f0000000005540019000000000225004b00000ee60000213d0000002002600039000000000121034f0000001f0240018f0000000505400272000000e30000613d00000000060000190000000507600210000000000871034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000000db0000413d000000000602004b000000f20000613d0000000505500210000000000151034f0000000302200210000000a005500039000000000605043300000000062601cf000000000626022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000161019f0000000000150435000000a00140003900000000000104350000000601000039000000000101041a000003fe011001970000000002000411000000000121004b00000b380000c13d000000800200043d000003fb0120009c000000a80000213d0000000201000039000000000501041a000000010450019000000001065002700000007f0460018f000000000406c0190000001f0640008c00000000060000190000000106002039000000000565013f0000000105500190000000580000c13d000000200540008c0000011b0000413d0000001f05200039000000050550027000000465065000410000046505000041000000200720008c000000000506801900000000001004350000001f0440003900000005044002700000046504400041000000000645004b0000011b0000813d000000000005041b0000000105500039000000000645004b000001170000413d0000001f0420008c00000d830000a13d0000000000100435000000000532017000000d960000c13d000000a006000039000004650400004100000da30000013d0000040d0340009c000002190000213d000004110340009c000004a70000613d000004120340009c000006bc0000613d000004130140009c00000ee60000c13d0000000001000416000000000101004b00000ee60000c13d0000000601000039000000000101041a000003fe01100197000000800010043f0000042c0100004100000fcc0001042e0000000106000039000000000106041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000900000006001d000a00000007001d000001630000413d000700000003001d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000008040000290000001f024000390000000502200270000000200340008c0000000002004019000000000301043b00000007010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000000906000029000001630000813d000000000002041b0000000102200039000000000312004b0000015f0000413d0000001f0140008c000008b80000a13d000800000004001d0000000000600435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000008080000290000000003280170000000000101043b000009040000c13d000000200200003900000009060000290000090f0000013d0000041b0340009c000006d50000613d0000041c0340009c000006f90000613d0000041d0340009c00000ee60000c13d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000004403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005045002100000003f064000390000043606600197000004370760009c000000a80000213d0000008006600039000000400060043f000000800050043f00000024033000390000000004340019000000000624004b00000ee60000213d000000000505004b000001ae0000613d0000008005000039000000000631034f000000000606043b000000200550003900000000006504350000002003300039000000000643004b000001a70000413d0000006403100370000000000303043b000003fb0430009c00000ee60000213d00000023043000390000045005000041000000000624004b000000000600001900000000060580190000045004400197000000000704004b0000000005008019000004500440009c000000000506c019000000000405004b00000ee60000c13d0000000404300039000000000441034f000000000504043b000003fb0450009c000000a80000213d00000005065002100000003f046000390000043607400197000000400400043d0000000007740019000000000847004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f000000000054043500000024033000390000000006360019000000000726004b00000ee60000213d000000000505004b0000089d0000613d000000000531034f000000000505043b000000200440003900000000005404350000002003300039000000000563004b000001d70000413d0000089d0000013d0000040a0340009c000007180000613d0000040b0340009c000007390000613d0000040c0340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000004740000013d0000041f0540009c000007a80000613d000004200540009c000007c60000613d000004210340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b000000020210008c00000ee60000213d0fcb0f270000040f0000000302100039000000000202041a0000000103100039000000000303041a0000000204100039000000000404041a000000000501041a0000000401100039000000000101041a000000400600043d000000800760003900000000001704350000004001600039000000000041043500000020016000390000000000310435000000ff0120018f000000600260003900000000001204350000000000560435000003f401000041000003f40260009c000000000601801900000040016002100000045f011001c700000fcc0001042e0000040e0340009c000007f20000613d0000040f0340009c0000081e0000613d000004100340009c00000ee60000c13d000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000604043b000003fb0460009c00000ee60000213d000000240330003900000005076002100000000004370019000000000224004b00000ee60000213d0000000d02000039000000000802041a000000020880008c000006ef0000613d0000000208000039000000000082041b0000003f027000390000043602200197000004370720009c000000a80000213d0000008002200039000000400020043f000000800060043f000000000206004b0000024b0000613d000000000231034f000000000202043b000000200550003900000000002504350000002003300039000000000243004b000002440000413d000000080100006b00000ad70000613d000600000008001d00000000008004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000004020000290000000002020433000400000002001d000000800200043d000000000202004b000002d20000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b000002c10000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000002c90000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b000002b20000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e740000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b0000030d0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b0000038f0000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b000003950000413d0000000101100039000000000521004b000003820000413d0000000801000039000000000101041a000000000201004b00000ee00000613d00000443011000410000039a0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000207000039000004440400004100000007050000290000000a060000290fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c000003140000413d00000d730000013d000004170540009c000008370000613d000004180340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000501000039000000200010043f000000400200003900000000010000190fcb0fab0000040f000000000101041a000000000101004b0000000001000019000000010100c039000000800010043f0000042c0100004100000fcc0001042e000004060340009c000008900000613d000004070340009c00000ee60000c13d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000601043b000003fe0160009c00000ee60000213d0000000601000039000000000201041a000003fe032001970000000005000411000000000353004b000008c40000c13d000000000306004b000009920000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002601000039000000a40010043f0000042601000041000000c40010043f0000042701000041000000e40010043f000004280100004100000fcd000104300000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b00000000001004350000000c01000039000000200010043f00000040020000390000000001000019000007130000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000802000039000000000202041a000000000221004b00000ee60000813d0fcb0f9c0000040f000006c80000013d0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000101043b00000000001004350000000301000039000007090000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000201043b000004680120019800000ee60000c13d0000000101000039000004690320009c000007150000613d0000046a0320009c000007150000613d0000046b0220009c000000000100c019000000800010043f0000042c0100004100000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c000006ef0000613d0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b000004d40000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b000004cd0000413d000000080100006b00000ad70000613d0000000101000039000600000001001d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000500000002001d000004380220009c000000a80000213d000000000101043b0000000504000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000300000003001d000000000023043500000080024000390000000401100039000000000101041a000400000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000004020000290000000002020433000400000002001d000000000101043b000000800200043d000000000202004b0000055c0000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b0000054b0000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000902000029000005530000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b0000053c0000413d000000040110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000003020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000400000003001d00000000010300190000000801004029000900000001001d000000000101004b00000e990000c13d000000090100002900000008021000690000000501000029000000000301043300000000412300a90000000404000029000000080440006b000005970000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000500070000003d00090001000000920004800b0000003d000200000000001d0000000501000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000501000029000600000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000004020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000060400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b000006190000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b0000061f0000413d0000000101100039000000000521004b0000060c0000413d0000000801000039000000000101041a000000000201004b00000ee00000613d0000044301100041000006240000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d0200003900000004030000390000000107000039000004440400004100000007050000290000000a06000029000600000007001d0fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000060300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c0000059e0000413d00000d730000013d0000000003000416000000240220008c00000ee60000413d000000000203004b00000ee60000c13d0000000401100370000000000101043b0000000902000039000000000202041a000000000221004b00000ee60000813d0fcb0f8e0000040f0000000302200210000000000101041a000000000121022f000000ff0220008c0000000001002019000000400200043d0000000000120435000003f401000041000003f40320009c000000000201801900000040012002100000042d011001c700000fcc0001042e000000440320008c00000ee60000413d0000000403100370000000000303043b000800000003001d0000002403100370000000000303043b000003fb0430009c00000ee60000213d0000002304300039000000000424004b00000ee60000813d0000000404300039000000000441034f000000000504043b000003fb0450009c00000ee60000213d000000240330003900000005065002100000000004360019000000000224004b00000ee60000213d0000000d02000039000000000702041a000000020770008c00000ac20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f0000045e01000041000000c40010043f0000042f0100004100000fcd000104300000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000003fe0320009c00000ee60000213d0000002401100370000000000101043b000a00000001001d000000020110008c00000ee60000213d00000000002004350000000b01000039000000200010043f0000004002000039000900000002001d00000000010000190fcb0fab0000040f0000000a020000290000000000200435000000200010043f000000000100001900000009020000290fcb0fab0000040f000000000101041a000000800010043f0000042c0100004100000fcc0001042e0000000003000416000000440220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000003fe0220009c00000ee60000213d0000002401100370000000000201043b000000000102004b0000000001000019000000010100c039000900000002001d000000000112004b00000ee60000c13d00000000020004110000000a0120006c000009a20000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000043401000041000000c40010043f0000043501000041000000e40010043f000004280100004100000fcd000104300000000003000416000000c40220008c00000ee60000413d000000000203004b00000ee60000c13d0000000402100370000000000202043b000a00000002001d000000020220008c00000ee60000213d0000008402100370000000000202043b000700000002001d0000006402100370000000000202043b000800000002001d0000004402100370000000000202043b000900000002001d0000002402100370000000000202043b000600000002001d000000a401100370000000000101043b000000ff0210008c00000ee60000213d0000000602000039000000000202041a000003fe022001970000000003000411000000000232004b000008c40000c13d00000009030000290000000804000029000000000243004b00000ade0000813d000000ff0210018f0000012001000039000000400010043f0000000601000029000000800010043f000000a00030043f000000c00040043f000500000002001d000000e00020043f0000000701000029000001000010043f0000000a0100002900000000001004350000000a01000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000800200043d000000000021041b0000000102100039000000a00300043d000000000032041b0000000202100039000000c00300043d000000000032041b0000000302100039000001000300008a000000000402041a000000000334016f000000e00400043d000000ff0440018f000000000343019f000000000032041b0000000401100039000001000200043d000000000021041b000000400100043d000000800210003900000005030000290000000000320435000000600210003900000007030000290000000000320435000000400210003900000008030000290000000000320435000000200210003900000009030000290000000000320435000000060200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000431011001c70000800d02000039000000020300003900000432040000410000000a050000290000099e0000013d0000000001000416000000000101004b00000ee60000c13d000000000200041a000000010320019000000001042002700000007f0140018f000000000104c0190000001f0410008c00000000040000190000000104002039000000000442013f0000000104400190000000580000c13d000000800010043f000000000303004b0000096f0000613d0000000000000435000000000201004b000009790000613d00000466030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000007be0000413d000009e00000013d0000000004000416000000240220008c00000ee60000413d000000000204004b00000ee60000c13d0000000401100370000000000101043b000000000201004b000008cd0000c13d000000c005000039000000400050043f0000000101000039000000800010043f0000046401000041000000a00010043f0000000203000039000000000203041a000000010420019000000001012002700000007f0610018f000000000601c0190000001f0160008c00000000010000190000000101002039000000000112013f0000000101100190000000580000c13d0000002001500039000000000404004b000a00000005001d0000097b0000613d0000000000300435000000000206004b0000097e0000613d000004650200004100000000030000190000000004130019000000000502041a000000000054043500000001022000390000002003300039000000000463004b000007ea0000413d0000097e0000013d0000000003000416000000240420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000503043b000003fb0350009c00000ee60000213d0000002303500039000000000323004b00000ee60000813d0000000404500039000000000341034f000000000303043b000003fb0630009c00000ee60000213d000000240650003900000005053002100000000007650019000000000227004b00000ee60000213d0000000602000039000000000202041a000003fe022001970000000007000411000000000272004b000008c40000c13d0000000902000039000000000702041a000000000773004b00000b430000c13d000000000703004b00000b4d0000c13d0000042501000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000044f01000041000000c40010043f0000042f0100004100000fcd000104300000000001000416000000000101004b00000ee60000c13d0000000103000039000000000203041a000000010520019000000001012002700000007f0410018f00000000010460190000001f0610008c00000000060000190000000106002039000000000662013f0000000106600190000000580000c13d000000800010043f000000000505004b000009760000c13d000001000100008a000000000112016f000000a00010043f000000000104004b000000a0020000390000008002006039000009e00000013d0000000004000416000000440520008c00000ee60000413d000000000404004b00000ee60000c13d0000000404100370000000000404043b000003fb0540009c00000ee60000213d0000002305400039000000000525004b00000ee60000813d0000000405400039000000000551034f000000000605043b000003fb0560009c000000a80000213d00000005056002100000003f075000390000043607700197000004370870009c000000a80000213d0000008007700039000000400070043f000000800060043f00000024044000390000000005450019000000000725004b00000ee60000213d000000000606004b0000085f0000613d000000a006000039000000000741034f000000000707043b000003fe0870009c00000ee60000213d00000000067604360000002004400039000000000754004b000008570000413d0000002404100370000000000404043b000003fb0540009c00000ee60000213d00000023054000390000045006000041000000000725004b000000000700001900000000070640190000045005500197000000000805004b000000000600a019000004500550009c000000000607c019000000000506004b00000ee60000613d0000000405400039000000000551034f000000000505043b000003fb0650009c000000a80000213d00000005065002100000003f076000390000043607700197000000400800043d0000000007780019000600000008001d000000000887004b00000000080000190000000108004039000003fb0970009c000000a80000213d0000000108800190000000a80000c13d000000400070043f00000006070000290000000007570436000500000007001d00000024044000390000000006460019000000000226004b00000ee60000213d000000000205004b00000dd70000c13d000000800100043d000000000101004b000000000100001900000de60000613d00000e220000013d0000000003000416000000a40420008c00000ee60000413d000000000303004b00000ee60000c13d0000000403100370000000000303043b000003fe0330009c00000ee60000213d0000002403100370000000000303043b000003fe0330009c00000ee60000213d0000008401100370000000000101043b000003fb0310009c00000ee60000213d00000004011000390fcb0f400000040f000000400100043d00000064021000390000042903000041000000000032043500000044021000390000042a03000041000000000032043500000024021000390000002103000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c000000000102801900000040011002100000042b011001c700000fcd00010430000000000104004b0000000001000019000008bc0000613d000000e00100043d0000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000091c0000013d0000042501000041000000800010043f0000002001000039000000840010043f000000a40010043f0000045401000041000000c40010043f0000042f0100004100000fcd00010430000000010500008a000000000601001900000000020000190000000004020019000000000254004b00000ee00000613d000000090260008c0000000a2660011a0000000102400039000008d00000213d000004600540009c000000a80000213d000000200500008a000000000454016f0000005f06400039000000000556016f000004370650009c000000a80000213d0000008005500039000000400050043f000000800020043f00000020054000390000001f0450018f0000000505500272000008ef0000613d00000000060000190000000507600210000000000873034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000008e70000413d000000000304004b000008f10000613d000000000302004b00000ee00000613d000000010320008a000000800400043d000000000443004b00000e670000813d000000090410008c0000000a4110011a000000f8044002100000009f0220003900000000050204330000046305500197000000000454019f00000464044001c700000000004204350000000002030019000008f10000213d000000400500043d000007d50000013d000000200200003900000000040000190000000906000029000000c0052000390000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000009070000413d000000000383004b0000091a0000813d0000000303800210000000f80330018f000000010400008a000000000334022f000000000343013f000000c0022000390000000002020433000000000232016f000000000021041b000000010180021000000001011001bf000000000016041b000001000500043d000003fb0150009c000000a80000213d0000000204000039000000000104041a000000010210019000000001021002700000007f0320018f000000000302c0190000001f0230008c00000000020000190000000102002039000000000121013f0000000101100190000000580000c13d000000200130008c000800000004001d0000094e0000413d000600000003001d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000007050000290000001f025000390000000502200270000000200350008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b00000008040000290000094e0000813d000000000002041b0000000102200039000000000312004b0000094a0000413d0000001f0150008c000009630000a13d000700000005001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000200200008a00000007070000290000000002270170000000000101043b000009f30000c13d0000012003000039000009ff0000013d000000000105004b0000000001000019000009670000613d000001200100043d0000000302500210000000010300008a000000000223022f000000000232013f000000000121016f0000000102500210000000000121019f00000a0c0000013d000001000300008a000000000232016f000000a00020043f000000000101004b000000a0020000390000008002006039000009e00000013d0000000000300435000000020220008c000009d70000813d0000008002000039000009e00000013d000001000300008a000000000232016f00000000002104350000000002610019000000800300043d000900000003001d000000a001000039000800000006001d0fcb0f040000040f000000080200002900000009022000290000000a0100002900000000002104350000002002200039000009e30000013d000003f402000041000003f40410009c0000000001028019000000c001100210000000000203004b00000ae80000c13d000000000205001900000aec0000013d000003fc02200197000000000262019f000000000021041b000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003fd011001c70000800d020000390000000303000039000003ff040000410fcb0fc10000040f000000010120019000000af50000c13d00000ee60000013d000800000002001d00000000002004350000000401000039000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000001000300008a000000000232016f0000000904000029000000ff0340018f000000000232019f000000000021041b000000400100043d0000000000410435000003f4020000410000000003000414000003f40430009c0000000003028019000003f40410009c00000000010280190000004001100210000000c002300210000000000112019f000003f8011001c70000800d020000390000000303000039000004330400004100000008050000290000000a060000290000099e0000013d00000447030000410000000004000019000000000503041a000000a002400039000000000052043500000001033000390000002004400039000000000514004b000009d90000413d000000600220008a0000008001000039000a00000001001d0fcb0ef10000040f000000400100043d000900000001001d0000000a020000290fcb0f110000040f00000009040000290000000001410049000003f402000041000003f40310009c0000000001028019000003f40340009c000000000402801900000040024002100000006001100210000000000121019f00000fcc0001042e00000020040000390000000003000019000000000504001900000100045000390000000004040433000000000041041b000000200450003900000001011000390000002003300039000000000623004b000009f50000413d0000012003500039000000000272004b00000a090000813d0000000302700210000000f80220018f000000010400008a000000000224022f000000000242013f0000000003030433000000000223016f000000000021041b000000010170021000000001011001bf0000000804000029000000000014041b0000000603000039000000000203041a000003fc012001970000000006000411000000000161019f000700000003001d000000000013041b000003f4010000410000000003000414000003f40430009c0000000003018019000000c001300210000003fd011001c7000003fe052001970000800d020000390000000303000039000600000003001d000003ff040000410fcb0fc10000040f000000010120019000000ee60000613d000000400500043d000004000150009c00000009030000290000000a04000029000000a80000213d000000e001500039000000400010043f000000a00150003900000007020000290000000000210435000000800150003900000005020000390000000000210435000000600150003900000000004104350000004001500039000000060200002900000000002104350000002001500039000000080200002900000000002104350000000000350435000800000005001d000000c001500039000000070200003900000000002104350000000804000039000000000304041a000600000002001d000000000024041b000000080130008c00000a590000413d000400000003001d000500000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000004012000290000000702200039000000000312004b000000050400002900000a590000813d000000000002041b0000000102200039000000000312004b00000a550000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000002000019000000080500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000a670000413d000000400400043d000004000140009c00000009020000290000000a03000029000000a80000213d000000e001400039000000400010043f000000c0014000390000000000210435000000a001400039000000070200002900000000002104350000008001400039000000000031043500000060014000390000000a02000039000000000021043500000040014000390000000f020000390000000000210435000000200140003900000020020000390000000000210435000a00000004001d000800000002001d00000000002404350000000904000039000000000204041a0000000601000029000000000014041b000700000002001d000000080120008c00000aa50000413d000600000004001d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000201043b00000007012000290000000702200039000000000312004b000000060400002900000aa50000813d000000000002041b0000000102200039000000000312004b00000aa10000413d0000000000400435000003f4010000410000000002000414000003f40320009c0000000002018019000000c001200210000003f8011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000000020000190000000a0500002900000000031200190000000054050434000000ff0440018f000000000043041b000000060320008c000000010220003900000ab30000413d0000000d010000390000000902000029000000000021041b000000080100002900000100001004430000012000000443000004010100004100000fcc0001042e0000000207000039000000000072041b0000003f026000390000043602200197000004370620009c000000a80000213d0000008002200039000000400020043f000000800050043f000000000205004b00000ad50000613d0000008002000039000000000531034f000000000505043b000000200220003900000000005204350000002003300039000000000543004b00000ace0000413d000000080100006b00000b910000c13d000000400100043d00000044021000390000045d0300004100000000003204350000002402100039000000180300003900000b2c0000013d0000042501000041000000800010043f0000002001000039000000840010043f0000001101000039000000a40010043f0000042e01000041000000c40010043f0000042f0100004100000fcd00010430000003fd011001c70000800902000039000000000405001900000000050000190fcb0fc10000040f00020000000103550000006001100270000003f40010019d000003f401100197000000000301004b00000af70000c13d000000010120019000000b260000613d000000000100001900000fcc0001042e000003fb0310009c000000a80000213d0000001f03100039000000200400008a000000000343016f0000003f03300039000000000343016f000000400400043d0000000003340019000000000543004b00000000050000190000000105004039000003fb0630009c000000a80000213d0000000105500190000000a80000c13d000000400030043f0000001f0310018f00000000041404360000000205000367000000050110027200000b160000613d000000000600001900000005076002100000000008740019000000000775034f000000000707043b00000000007804350000000106600039000000000716004b00000b0e0000413d000000000603004b00000af30000613d0000000501100210000000000515034f00000000011400190000000303300210000000000401043300000000043401cf000000000434022f000000000505043b0000010003300089000000000535022f00000000033501cf000000000343019f000000000031043500000af30000013d000000400100043d00000044021000390000045603000041000000000032043500000024021000390000001003000039000000000032043500000425020000410000000000210435000000040210003900000020030000390000000000320435000003f402000041000003f40310009c0000000001028019000000400110021000000457011001c700000fcd00010430000000400100043d00000044021000390000045403000041000000000032043500000425020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000b310000013d0000042501000041000000800010043f0000002001000039000000840010043f0000000f01000039000000a40010043f0000044801000041000000c40010043f0000042f0100004100000fcd000104300000000008000019000000000700001900000005098002100000000009690019000000000991034f000000000909043b000000000a09004b00000d790000613d0000000007790019000000000997004b00000000090000190000000109004039000000010990019000000ee00000c13d0000000108800039000000000938004b00000b4f0000413d000000640770008c000008140000c13d000003fa0730009c000000a80000213d000000000032041b00000000002004350000000002000019000000000761034f000000000707043b0000044108200041000000000078041b00000020066000390000000102200039000000000732004b00000b650000413d0000002002000039000000800020043f000000a00030043f000004490230009c00000ee60000213d0000001f0250018f000000050550027200000b800000613d0000002004400039000000000141034f00000000040000190000000506400210000000000761034f000000000707043b000000c00660003900000000007604350000000104400039000000000654004b00000b780000413d000000000102004b00000b820000613d00000065013002100000044a011000410000044b020000410000044c0330009c0000000001028019000003f4020000410000000003000414000003f40430009c0000000003028019000000c00230021000000000011200190000800d0200003900000001030000390000044d0400004100000dd60000013d00000000000004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000400200043d000600000002001d000004380220009c000000a80000213d000000000101043b0000000604000029000000a002400039000000400020043f000000000201041a00000000022404360000000103100039000000000303041a000a00000003001d00000000003204350000000202100039000000000302041a0000004002400039000900000003001d00000000003204350000000302100039000000000202041a000000ff0220018f0000006003400039000400000003001d000000000023043500000080024000390000000401100039000000000101041a000500000002001d000000000012043500000439010000410000000000100439000003f4010000410000000002000414000003f40320009c0000000002018019000000c0012002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0210006c00000d8f0000413d000000090110006c00000d8f0000213d000000400100043d000000140200003900000000022104360000000003000411000700000003001d0000006003300210000100000003001d00000000003204350000043b0310009c000000a80000213d0000004003100039000000400030043f000003f403000041000003f40420009c000000000203801900000040022002100000000001010433000003f40410009c00000000010380190000006001100210000000000121019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d00000005020000290000000002020433000500000002001d000000000101043b000000800200043d000000000202004b00000c150000613d000980100000003d0000000003000019000a00000003001d0000000502300210000000a0022000390000000002020433000000000321004b00000c040000813d0000000000100435000000200020043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c7000000090200002900000c0c0000013d0000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000a030000290000000103300039000000800200043d000000000223004b00000bf50000413d000000050110006c00000e2c0000c13d000000070100002900000000001004350000000b01000039000a00000001001d000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000101041a00000004020000290000000002020433000000ff0220018f0000000003120049000000000123004b00000000010000190000000101002039000000000101004b000000000300c019000000080130006b000500000003001d00000000010300190000000801004029000900000001001d000000000101004b00000ebe0000c13d000000090100002900000008021000690000000601000029000000000301043300000000412300a90000000504000029000000080440006b00000c4f0000a13d00000000422100d9000000000223004b00000ee00000c13d0000000002000416000000000112004b00000e6d0000c13d000600070000003d00090001000000920005800b0000003d000200000000001d0000000601000029000000000101041a000000090210006c00000ee00000613d00000001021000390000000601000029000400000002001d000000000021041b000000400100043d000a00000001001d00000020021000390000000101000029000300000002001d00000000001204350000043c0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a0200002900000034022000390000000000120435000004390100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c700000005020000290fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a02000029000000540220003900000000001204350000043d0100004100000000001004390000000001000414000003f40210009c000003f401008041000000c0011002100000043a011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000043e02000041000000000020043900000004001004430000000001000414000003f40210009c000003f401008041000000c0011002100000043f011001c70000800b020000390fcb0fc60000040f000000010220019000000d780000613d000000000101043b0000000a030000290000009402300039000000040400002900000000004204350000007402300039000000000012043500000094010000390000000000130435000004400130009c0000000002030019000000a80000213d000000c001200039000000400010043f0000000303000029000003f40130009c000003f404000041000000000304801900000040013002100000000002020433000003f40320009c00000000020480190000006002200210000000000112019f0000000002000414000003f40320009c0000000002048019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000902000039000000000202041a000000000302004b00000cd10000613d000000643110011a000000000100001900000000040000190000044105100041000000000505041a0000000004450019000000000554004b00000000050000190000000105004039000000010550019000000ee00000c13d000000000543004b00000cd70000413d0000000101100039000000000521004b00000cc40000413d0000000801000039000000000101041a000000000201004b00000ee00000613d000004430110004100000cdc0000013d0000000802000039000000000202041a000000000212004b00000e670000a13d0000044201100041000003f403000041000000000101041a000a00000001001d00000000001004350000000c01000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000001000414000003f40210009c000003f401008041000000c001100210000003fd011001c70000800d020000390000000403000039000004440400004100000007050000290000000a0600002900000000070000190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d000004450210009c000000a80000213d0000002002100039000000400020043f0000000000010435000000070100006b000003f40300004100000eea0000613d0000000a0100002900000000001004350000000301000039000000200010043f0000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000007020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b0000000a0100002900000000001004350000000501000039000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000201041a000000090320006c00000ee00000613d0000000102200039000000000021041b000000400100043d00000020021000390000000103000039000400000003001d00000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d000000400100043d0000002002100039000000040300002900000000003204350000000a0200002900000000002104350000000002000414000003f40320009c000003f4040000410000000002048019000003f40310009c00000000010480190000004001100210000000c002200210000000000112019f00000430011001c70000800d02000039000000040300003900000446040000410000000705000029000000000600001900000000070500190fcb0fc10000040f000000010120019000000ee60000613d00000002020000290000000102200039000200000002001d000000080120006c00000c560000413d00000001010000390000000d02000039000000000012041b000000000100001900000fcc0001042e000000000001042f0000042501000041000000800010043f0000002001000039000000840010043f0000001a01000039000000a40010043f0000044e01000041000000c40010043f0000042f0100004100000fcd00010430000000000402004b000000000400001900000d870000613d000000a00400043d0000000305200210000000010600008a000000000556022f000000000565013f000000000454016f0000000102200210000000000224019f00000daf0000013d000000400100043d00000044021000390000045c03000041000000000032043500000024021000390000000f0300003900000b2c0000013d000004650400004100000020070000390000000006000019000000000807001900000080078000390000000007070433000000000074041b000000200780003900000001044000390000002006600039000000000956004b00000d990000413d000000a006800039000000000525004b00000dad0000813d0000000305200210000000f80550018f000000010700008a000000000557022f000000000575013f0000000006060433000000000556016f000000000054041b000000010220021000000001022001bf000000000021041b0000002002000039000000400100043d0000000004210436000000800200043d00000000002404350000004004100039000000000502004b00000dc00000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000625004b00000db90000413d000000000442001900000000000404350000001f02200039000000000232016f000003f403000041000003f40410009c000000000103801900000040011002100000004002200039000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c70000800d02000039000000010300003900000467040000410000099e0000013d0000000602000029000000000541034f000000000505043b000000200220003900000000005204350000002004400039000000000564004b00000dd80000413d00000006010000290000000001010433000000800200043d000000000212004b00000e220000c13d000003fb0210009c000000a80000213d00000005021002100000003f042000390000045305400197000000400400043d000400000004001d0000000004450019000000000554004b00000000050000190000000105004039000003fb0640009c000000a80000213d0000000105500190000000a80000c13d000000400040043f000000040400002900000000071404360000001f0120018f000000050220027200000e020000613d000000000400001900000005054002100000000006570019000000000553034f000000000505043b00000000005604350000000104400039000000000524004b00000dfa0000413d000300000007001d000000000101004b00000e050000613d000000800100043d000000000101004b00000e300000c13d000000400100043d000000200200003900000000022104360000000403000029000000000303043300000000003204350000004002100039000000000403004b00000e180000613d00000000040000190000000306000029000000006506043400000000025204360000000104400039000000000534004b00000e130000413d0000000002120049000003f403000041000003f40420009c0000000002038019000003f40410009c000000000103801900000040011002100000006002200210000000000112019f00000fcc0001042e000000400100043d00000064021000390000045103000041000000000032043500000044021000390000045203000041000000000032043500000024021000390000002903000039000008ac0000013d000000400100043d0000004402100039000004580300004100000d920000013d000200030000003d000a80100000003d00000000030000190000000502300210000000a0012000390000000001010433000903fe0010019b00000006010000290000000001010433000000000131004b00000e670000a13d000800000003001d000700000002001d0000000501200029000000000101043300000000001004350000000201000029000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000009020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c70000000a020000290fcb0fc60000040f000000010220019000000ee60000613d000000040200002900000000020204330000000803000029000000000232004b000000070400002900000e670000a13d0000000302400029000000000101043b000000000101041a00000000001204350000000103300039000000800100043d000000000113004b00000e330000413d00000e080000013d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000400100043d0000004402100039000004590300004100000000003204350000002402100039000000120300003900000b2c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b000003020000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b00000006020000290000000000200435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee00000c13d000000000021041b0000058c0000013d000000070100002900000000001004350000000a01000029000000200010043f000003f4030000410000000001000414000003f40210009c0000000001038019000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b0000000000000435000000200010043f0000000001000414000003f40210009c000003f401008041000000c00110021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000ee60000613d000000000101043b000000000301041a0000000902300029000000000332004b00000000030000190000000103004039000000010330019000000ee80000613d000004610100004100000000001004350000001101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd00010430000000000021041b00000c440000013d000000400100043d00000064021000390000045a03000041000000000032043500000044021000390000045b03000041000008a90000013d0000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000003fb0310009c00000efe0000213d000000010220019000000efe0000c13d000000400010043f000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000403004b00000f0e0000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000534004b00000f070000413d00000000012300190000000000010435000000000001042d00000020030000390000000004310436000000003202043400000000002404350000004001100039000000000402004b00000f200000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000524004b00000f190000413d000000000312001900000000000304350000001f02200039000000200300008a000000000232016f0000000001210019000000000001042d000000030210008c00000f380000813d00000000001004350000000a01000039000000200010043f000003f4010000410000000002000414000003f40320009c0000000002018019000000c00120021000000430011001c700008010020000390fcb0fc60000040f000000010220019000000f3e0000613d000000000101043b000000000001042d000004610100004100000000001004350000002101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000001f031000390000045004000041000000000523004b0000000005000019000000000504401900000450062001970000045003300197000000000763004b000000000400a019000000000363013f000004500330009c000000000405c019000000000304004b00000f8c0000613d0000000104000367000000000314034f000000000303043b000003fa0530009c00000f860000813d0000001f05300039000000200600008a000000000565016f0000003f05500039000000000665016f000000400500043d0000000006650019000000000756004b00000000070000190000000107004039000003fb0860009c00000f860000213d000000010770019000000f860000c13d0000002007100039000000400060043f00000000013504360000000005730019000000000225004b00000f8c0000213d000000000474034f0000001f0230018f000000050530027200000f740000613d000000000600001900000005076002100000000008710019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000f6c0000413d000000000602004b00000f830000613d0000000505500210000000000454034f00000000055100190000000302200210000000000605043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f000000000025043500000000013100190000000000010435000000000001042d000004610100004100000000001004350000004101000039000000040010043f000004620100004100000fcd00010430000000000100001900000fcd000104300000000902000039000000000302041a000000000313004b00000f960000a13d000000000020043500000441011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd000104300000000802000039000000000302041a000000000313004b00000fa40000a13d000000000020043500000442011000410000000002000019000000000001042d000004610100004100000000001004350000003201000039000000040010043f000004620100004100000fcd00010430000000000001042f000003f403000041000003f40410009c00000000010380190000004001100210000003f40420009c00000000020380190000006002200210000000000112019f0000000002000414000003f40420009c0000000002038019000000c002200210000000000112019f000003fd011001c700008010020000390fcb0fc60000040f000000010220019000000fbf0000613d000000000101043b000000000001042d000000000100001900000fcd0001043000000fc4002104210000000102000039000000000001042d0000000002000019000000000001042d00000fc9002104230000000102000039000000000001042d0000000002000019000000000001042d00000fcb0000043200000fcc0001042e00000fcd000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff37372d426974204f726967696e20536b696e730000000000000000000000000037374f530000000000000000000000000000000000000000000000000000000068747470733a2f2f6170692e697066732e6d657461646174612f0000000000000200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffff1f0000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000006bd6327700000000000000000000000000000000000000000000000000000000a22cb46400000000000000000000000000000000000000000000000000000000ca4c0e0800000000000000000000000000000000000000000000000000000000f242432900000000000000000000000000000000000000000000000000000000f242432a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000ca4c0e0900000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000a22cb46500000000000000000000000000000000000000000000000000000000a79a2c2700000000000000000000000000000000000000000000000000000000bd85b039000000000000000000000000000000000000000000000000000000008ed67ea9000000000000000000000000000000000000000000000000000000008ed67eaa0000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000a1ec98d4000000000000000000000000000000000000000000000000000000006bd63278000000000000000000000000000000000000000000000000000000006ed0d208000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000001b7c85a500000000000000000000000000000000000000000000000000000000327de31e000000000000000000000000000000000000000000000000000000004e1273f3000000000000000000000000000000000000000000000000000000004e1273f4000000000000000000000000000000000000000000000000000000004f558e7900000000000000000000000000000000000000000000000000000000327de31f000000000000000000000000000000000000000000000000000000003ccfd60b000000000000000000000000000000000000000000000000000000001b7c85a6000000000000000000000000000000000000000000000000000000002ba9ddae000000000000000000000000000000000000000000000000000000002eb2c2d60000000000000000000000000000000000000000000000000000000006fdde020000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000000e89341c0000000000000000000000000000000000000000000000000000000019e275420000000000000000000000000000000000000000000000000000000000fdd58e0000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000002fe530508c379a0000000000000000000000000000000000000000000000000000000004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000006400000000000000000000000000000000000000000000000000000000000000536f756c626f756e643a205472616e7366657273206172652064697361626c65000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000020000000000000000000000000496e76616c6964206d696e742074696d650000000000000000000000000000000000000000000000000000000000000000000064000000800000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000a0000000000000000000000000b220e1ff85aeaa1ff30890ed50e6d51ac264bc0b3424d64000300a4c31cd86db17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c6600000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff5f796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbffe173b97ed9aa263236c52fa3eb334d07741add95e972d17352d76816b4aaea342cbb15ccdc3cad6266b0e7a08c0454b23bf29dc2df74b6f3c209e9336465bd180b41246c05cbb406f874e82aa2faf7db11bba9792fe09929e56ef1eee2c2da30200000200000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7aff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee2dcb23284f3935b5557998e99dcc286e29744c5000723d99eecd5d6f5694f6e11000000000000000000000000000000000000000000000000ffffffffffffffdfc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf64c656e677468206d69736d61746368000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000000000000000000000000000000000004000000080000000000000000002000000000000000000000000000000ffffffff0000008000000000000000000000000000000000000000000000000000000000000000000000000007fffffe7983ca35fe1b5295f154d37047422da650345e407122812e8873db36c3773fdf50726f626162696c6974792063616e6e6f74206265207a65726f00000000000050726f626162696c6974696573206d7573742073756d20746f203130300000008000000000000000000000000000000000000000000000000000000000000000206d69736d617463680000000000000000000000000000000000000000000000455243313135353a206163636f756e747320616e6420696473206c656e67746800000000000000000000000000000000000000000000003fffffffffffffffe04f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65729cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f395472616e73666572206661696c65642e0000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004e6f742077686974656c69737465640000000000000000000000000000000000496e636f7272656374204554482073656e7400000000000000000000000000007300000000000000000000000000000000000000000000000000000000000000455243313135353a206d696e7420746f20746865207a65726f206164647265734d696e74206e6f742061637469766500000000000000000000000000000000004d757374206d696e74206174206c656173742031204e465400000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c0000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffe4e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3000000000000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563e3afa94108b5f5e82e5f6e539d161ff4b5402a85f696c67b9768ec3ae54ce36600000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e89341c00000000000000000000000000000000000000000000000000000000d9b67a260000000000000000000000000000000000000000000000000000000015486077d7b75f7e77e0e6142f5067e9c8321f5cc4102c7d5f7150fd41dc66c1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.