Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,969 IRN
Holders
123
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 IRNLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TheIraniansOnTop
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ library MerkleProof { /** * @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. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} * * _Available since v4.7._ */ 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 leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * _Available since v4.7._ */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * _Available since v4.7._ */ 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 the sibling nodes in `proof`, * consuming from one or the other at each step according to the instructions given by * `proofFlags`. * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild 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 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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[](totalHashes); 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 for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof} * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild 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 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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[](totalHashes); 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 for the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol 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); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev See {ERC721-_burn}. This override additionally checks to see if a * token-specific URI was set for the token, and if so, it deletes the token URI from * the storage mapping. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: contracts/iran.sol pragma solidity ^0.8.2; contract TheIraniansOnTop is ERC721, ERC721URIStorage, Ownable { using Counters for Counters.Counter; Counters.Counter private _totalIranians; Counters.Counter private _dropBomb; Counters.Counter private _dropMedicalSupply; string public baseURI = "https://theiranians.net/nft/json/"; string public baseExtension = ".json"; uint256 private _maxIranians = 6969; mapping(address => bool) private recruits; mapping(address => bool) private warListFreeBombingCount; mapping(address => bool) private recruitsMaxBombingCount; mapping(address => bool) private iAmIranian; bool public recruitsWarCall = true; bool public recruitsMaxWarCallBK = false; bool public globalMaxWarCall = false; bool public totalMaxUltraBombing = false; bool public maxBombing = false; bool public recruitsHottiesHarem = false; uint256 public warCost = 0.009 ether; uint256 public publicWarCost = 0.009 ether; bytes32 public root; address private WAddress = 0xAa2ec339448aD20a2954f2bF89c5E5d4aB046127; address private CMAddress = 0x6f6842d6C91536507f1B0C42d29f1e8a65383A3a; address private TAddress = 0x68e13492BebF3C2eBB14eE3Cf8bdd914ea23c91e; address private CAddress = 0x85AcdAc050c4315406BD3206352C057d14f6F802; uint256 private percFirstAddress = 20; uint256 private percSecondAddress = 14; constructor(bytes32 _root) ERC721("The Iranians NFT", "IRN") { root = _root;} function isValid(bytes32[] memory proof, bytes32 leaf) private view returns (bool) { return MerkleProof.verify(proof, root, leaf); } function recruitsGetWarSupply(uint256 amount, bytes32[] memory proof) public payable { require(recruitsWarCall, "Chill soldier, it's not time yet."); require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not a recruit."); require(amount <= 2 && amount != 0, "Wrong amount."); require( _totalIranians.current() + amount <= totalSupply(), "Not enough Iranians left to buy." ); if (amount == 1) { if (warListFreeBombingCount[msg.sender] == false) { uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked( baseURI, Strings.toString(tokenId), baseExtension ) ); _setTokenURI(tokenId, uri); warListFreeBombingCount[msg.sender] = true; } else { require( recruitsMaxBombingCount[msg.sender] == false, "Over Iranians limit for address." ); require( msg.value >= warCost * amount, "Amount of ether sent not correct." ); if (msg.value > 0) { uint256 FPay = ((msg.value / 100) * percFirstAddress); uint256 SPay = ((msg.value / 100) * percSecondAddress); payable(WAddress).transfer(FPay); payable(CMAddress).transfer(FPay); payable(TAddress).transfer(FPay); payable(CAddress).transfer(SPay); uint256 adminPay = msg.value - FPay - FPay - FPay - SPay; payable(owner()).transfer(adminPay); } uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked( baseURI, Strings.toString(tokenId), baseExtension ) ); _setTokenURI(tokenId, uri); recruitsMaxBombingCount[msg.sender] = true; } } else if (amount == 2) { require( warListFreeBombingCount[msg.sender] == false, "Over FREE Iranians limit for address." ); require( recruitsMaxBombingCount[msg.sender] == false, "Over Iranians limit for address." ); require( msg.value >= warCost * (amount - 1), "Amount of ether sent not correct." ); if (msg.value > 0) { uint256 FPay = ((msg.value / 100) * percFirstAddress); uint256 SPay = ((msg.value / 100) * percSecondAddress); payable(WAddress).transfer(FPay); payable(CMAddress).transfer(FPay); payable(TAddress).transfer(FPay); payable(CAddress).transfer(SPay); uint256 adminPay = msg.value - FPay - FPay - FPay - SPay; payable(owner()).transfer(adminPay); } for (uint256 i = 0; i < amount; i++) { uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked( baseURI, Strings.toString(tokenId), baseExtension ) ); _setTokenURI(tokenId, uri); } warListFreeBombingCount[msg.sender] = true; recruitsMaxBombingCount[msg.sender] = true; } } function recruitsGetFreeBombBK(bytes32[] memory proof) public payable { require(recruitsMaxWarCallBK, "Chill soldier, it's not time yet."); require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not a recruit."); require( _totalIranians.current() + 1 <= totalSupply(), "Not enough Iranians left to buy." ); require( warListFreeBombingCount[msg.sender] ==false, "Over Iranians limit for address." ); uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked(baseURI, Strings.toString(tokenId), baseExtension) ); _setTokenURI(tokenId, uri); warListFreeBombingCount[msg.sender] = true; } function recruitsGetBombBK(bytes32[] memory proof) public payable { require(recruitsMaxWarCallBK, "Chill soldier, it's not time yet."); require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Not a recruit."); require( _totalIranians.current() + 1 <= totalSupply(), "Not enough Iranians left to buy." ); require( recruitsMaxBombingCount[msg.sender] ==false, "Over Iranians limit for address." ); require( msg.value >= warCost, "Amount of ether sent not correct." ); if (msg.value > 0) { uint256 FPay = ((msg.value / 100) * percFirstAddress); uint256 SPay = ((msg.value / 100) * percSecondAddress); payable(WAddress).transfer(FPay); payable(CMAddress).transfer(FPay); payable(TAddress).transfer(FPay); payable(CAddress).transfer(SPay); uint256 adminPay = msg.value - FPay - FPay - FPay - SPay; payable(owner()).transfer(adminPay); } uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked(baseURI, Strings.toString(tokenId), baseExtension) ); _setTokenURI(tokenId, uri); recruitsMaxBombingCount[msg.sender] = true; } function getWarSupply() public payable { require(globalMaxWarCall, "Chill soldier, it's not time yet."); require( _totalIranians.current() + 1 <= totalSupply(), "Not enough Iranians left to buy." ); require( iAmIranian[msg.sender] == false, "Over Iranians limit for address." ); require( msg.value >= warCost, "Amount of ether sent not correct." ); if (msg.value > 0) { uint256 FPay = ((msg.value / 100) * percFirstAddress); uint256 SPay = ((msg.value / 100) * percSecondAddress); payable(WAddress).transfer(FPay); payable(CMAddress).transfer(FPay); payable(TAddress).transfer(FPay); payable(CAddress).transfer(SPay); uint256 adminPay = msg.value - FPay - FPay - FPay - SPay; payable(owner()).transfer(adminPay); } uint256 tokenId = _totalIranians.current(); _totalIranians.increment(); _safeMint(msg.sender, tokenId); string memory uri = string( abi.encodePacked(baseURI, Strings.toString(tokenId), baseExtension) ); _setTokenURI(tokenId, uri); iAmIranian[msg.sender] = true; } function isRecruitInWarList(address addr) public view virtual returns (bool) { return recruits[addr] == true; } function setWarCost(uint256 _priceWei) public onlyOwner { warCost = _priceWei; } function updateRecruitsWarCallStatus(bool status) public onlyOwner { recruitsWarCall = status; } function updateRecruitsMaxWarCallStatus(bool status) public onlyOwner { recruitsMaxWarCallBK = status; } function updateGlobalWarCallStatus(bool status) public onlyOwner { globalMaxWarCall = status; } function soldiersCount() public view returns (uint256) { return _totalIranians.current(); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return super.supportsInterface(interfaceId); } function remainingIranians() public view returns (uint256) { return totalSupply() - _totalIranians.current(); } function totalSupply() public view returns (uint256) { return _maxIranians; } function updateMaxBombingStatus(bool status) public { maxBombing = status; } function updateRecruitsHottiesHaremStatus(bool status) public { recruitsHottiesHarem = status; } function recruitsMaxHaremStatus() public view returns (bool) { return recruitsHottiesHarem; } function dropBomb() public { _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); if (_dropBomb.current() >= 100 && _dropBomb.current() < 200) { _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); } else if (_dropBomb.current() >= 200 && _dropBomb.current() < 300) { _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); } else if (_dropBomb.current() >= 300 && _dropBomb.current() < 500) { _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); } else if (_dropBomb.current() >= 500 && _dropBomb.current() < 2000) { _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); _dropBomb.increment(); } else if (_dropBomb.current() >= 2000) { totalMaxUltraBombing = true; } } function totalMaxUltraBombingCheck() public view returns (bool) { return totalMaxUltraBombing; } function totalDropBomb() public view returns (uint256) { return _dropBomb.current(); } //wei function setPublicWarCost(uint256 _priceWei) public { publicWarCost = _priceWei; } function dropMedicalSupply() public { _dropMedicalSupply.increment(); } function totalMedicalSupply() public view returns (uint256) { return _dropMedicalSupply.current(); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dropBomb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropMedicalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWarSupply","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"globalMaxWarCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isRecruitInWarList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBombing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicWarCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"recruitsGetBombBK","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"recruitsGetFreeBombBK","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"recruitsGetWarSupply","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"recruitsHottiesHarem","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recruitsMaxHaremStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recruitsMaxWarCallBK","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recruitsWarCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingIranians","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"uint256","name":"_priceWei","type":"uint256"}],"name":"setPublicWarCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_priceWei","type":"uint256"}],"name":"setWarCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soldiersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDropBomb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMaxUltraBombing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMaxUltraBombingCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMedicalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateGlobalWarCallStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateMaxBombingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateRecruitsHottiesHaremStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateRecruitsMaxWarCallStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"updateRecruitsWarCallStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"warCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e060405260216080818152906200357d60a03980516200002991600b9160209091019062000224565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200005891600c9162000224565b50611b39600d556012805465ffffffffffff19166001179055661ff973cafa800060138190556014908155601680546001600160a01b031990811673aa2ec339448ad20a2954f2bf89c5e5d4ab04612717909155601780548216736f6842d6c91536507f1b0c42d29f1e8a65383a3a1790556018805482167368e13492bebf3c2ebb14ee3cf8bdd914ea23c91e179055601980549091167385acdac050c4315406bd3206352c057d14f6f802179055601a55600e601b553480156200011c57600080fd5b506040516200359e3803806200359e8339810160408190526200013f91620002ca565b604080518082018252601081526f151a1948125c985b9a585b9cc813919560821b60208083019182528351808501909452600384526224a92760e91b908401528151919291620001929160009162000224565b508051620001a890600190602084019062000224565b505050620001c5620001bf620001ce60201b60201c565b620001d2565b60155562000320565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200023290620002e4565b90600052602060002090601f016020900481019282620002565760008555620002a1565b82601f106200027157805160ff1916838001178555620002a1565b82800160010185558215620002a1579182015b82811115620002a157825182559160200191906001019062000284565b50620002af929150620002b3565b5090565b5b80821115620002af5760008155600101620002b4565b600060208284031215620002dd57600080fd5b5051919050565b600181811c90821680620002f957607f821691505b6020821081036200031a57634e487b7160e01b600052602260045260246000fd5b50919050565b61324d80620003306000396000f3fe6080604052600436106102935760003560e01c80638be4596e1161015a578063bf5635a2116100c1578063e57001de1161007a578063e57001de146107b0578063e985e9c5146107c5578063eb0ddc211461080e578063ebf0c71714610823578063f2fde38b14610839578063f7606c0a1461085957600080fd5b8063bf5635a2146106e0578063c66828621461071b578063c87b56dd14610730578063c95878c914610750578063ded112df1461076f578063e37f8d981461078f57600080fd5b806398d8910b1161011357806398d8910b146106165780639c3fa0e014610637578063a22cb4651461064c578063a28f997b1461066c578063b19e7c7814610682578063b88d4fde146106c057600080fd5b80638be4596e1461058e5780638cef6be2146105965780638da5cb5b146105b9578063922eb641146105d7578063941073c1146105ec57806395d89b411461060157600080fd5b806354786108116101fe5780636d180a3c116101b75780636d180a3c146104c757806370a0823114610504578063715018a6146105245780637379e77b14610539578063761a74cf1461054e5780638788cee81461056e57600080fd5b806354786108146104285780635c898c5f1461043b5780635fdd66981461045a5780636352211e1461047057806363be37e1146104905780636c0360eb146104b257600080fd5b806323b872dd1161025057806323b872dd1461038257806332f1ff37146103a25780633f835eae146103b557806342842e0e146103c85780634e71cc32146103e857806352c672bc1461040857600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063095ea7b31461032757806317047d0a1461034957806318160ddd14610363575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612a45565b610879565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e261088a565b6040516102c49190612aba565b3480156102fb57600080fd5b5061030f61030a366004612acd565b61091c565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b50610347610342366004612b02565b610943565b005b34801561035557600080fd5b506012546102b89060ff1681565b34801561036f57600080fd5b50600d545b6040519081526020016102c4565b34801561038e57600080fd5b5061034761039d366004612b2c565b610a5d565b6103476103b0366004612c2f565b610a8e565b6103476103c3366004612c2f565b610db7565b3480156103d457600080fd5b506103476103e3366004612b2c565b610efd565b3480156103f457600080fd5b50610347610403366004612acd565b601455565b34801561041457600080fd5b506012546102b89062010000900460ff1681565b610347610436366004612c64565b610f18565b34801561044757600080fd5b506012546102b890610100900460ff1681565b34801561046657600080fd5b5061037460135481565b34801561047c57600080fd5b5061030f61048b366004612acd565b611667565b34801561049c57600080fd5b506012546102b890640100000000900460ff1681565b3480156104be57600080fd5b506102e26116c7565b3480156104d357600080fd5b506103476104e2366004612cbb565b60128054911515650100000000000265ff000000000019909216919091179055565b34801561051057600080fd5b5061037461051f366004612cd6565b611755565b34801561053057600080fd5b506103476117db565b34801561054557600080fd5b506103476117ef565b34801561055a57600080fd5b50610347610569366004612cbb565b6117fd565b34801561057a57600080fd5b50610347610589366004612acd565b611818565b610347611825565b3480156105a257600080fd5b506012546102b89065010000000000900460ff1681565b3480156105c557600080fd5b506007546001600160a01b031661030f565b3480156105e357600080fd5b50610374611af7565b3480156105f857600080fd5b50610374611b07565b34801561060d57600080fd5b506102e2611b12565b34801561062257600080fd5b5060125465010000000000900460ff166102b8565b34801561064357600080fd5b50610347611b21565b34801561065857600080fd5b50610347610667366004612cf1565b611d26565b34801561067857600080fd5b5061037460145481565b34801561068e57600080fd5b506102b861069d366004612cd6565b6001600160a01b03166000908152600e602052604090205460ff16151560011490565b3480156106cc57600080fd5b506103476106db366004612d24565b611d31565b3480156106ec57600080fd5b506103476106fb366004612cbb565b601280549115156401000000000264ff0000000019909216919091179055565b34801561072757600080fd5b506102e2611d69565b34801561073c57600080fd5b506102e261074b366004612acd565b611d76565b34801561075c57600080fd5b506012546301000000900460ff166102b8565b34801561077b57600080fd5b5061034761078a366004612cbb565b611d81565b34801561079b57600080fd5b506012546102b8906301000000900460ff1681565b3480156107bc57600080fd5b50610374611da5565b3480156107d157600080fd5b506102b86107e0366004612de4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561081a57600080fd5b50610374611db0565b34801561082f57600080fd5b5061037460155481565b34801561084557600080fd5b50610347610854366004612cd6565b611dc8565b34801561086557600080fd5b50610347610874366004612cbb565b611e41565b600061088482611e63565b92915050565b60606000805461089990612e0e565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590612e0e565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b5050505050905090565b600061092782611eb3565b506000908152600460205260409020546001600160a01b031690565b600061094e82611667565b9050806001600160a01b0316836001600160a01b0316036109c05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806109dc57506109dc81336107e0565b610a4e5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016109b7565b610a588383611f12565b505050565b610a673382611f80565b610a835760405162461bcd60e51b81526004016109b790612e48565b610a58838383611fff565b601254610100900460ff16610ab55760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610af09082906034015b6040516020818303038152906040528051906020012061219b565b610b0c5760405162461bcd60e51b81526004016109b790612ed7565b600d54600854610b1d906001612f15565b1115610b3b5760405162461bcd60e51b81526004016109b790612f2d565b3360009081526010602052604090205460ff1615610b6b5760405162461bcd60e51b81526004016109b790612f62565b601354341015610b8d5760405162461bcd60e51b81526004016109b790612f97565b3415610d3757601a54600090610ba4606434612fee565b610bae9190613002565b90506000601b54606434610bc29190612fee565b610bcc9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610c07573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c42573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c7d573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610cb8573d6000803e3d6000fd5b506000818380610cc88134613021565b610cd29190613021565b610cdc9190613021565b610ce69190613021565b9050610cfa6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610d32573d6000803e3d6000fd5b505050505b6000610d4260085490565b9050610d52600880546001019055565b610d5c33826121b1565b6000600b610d69836121cb565b600c604051602001610d7d939291906130d1565b6040516020818303038152906040529050610d9882826122cc565b5050336000908152601060205260409020805460ff1916600117905550565b601254610100900460ff16610dde5760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610e02908290603401610ad5565b610e1e5760405162461bcd60e51b81526004016109b790612ed7565b600d54600854610e2f906001612f15565b1115610e4d5760405162461bcd60e51b81526004016109b790612f2d565b336000908152600f602052604090205460ff1615610e7d5760405162461bcd60e51b81526004016109b790612f62565b6000610e8860085490565b9050610e98600880546001019055565b610ea233826121b1565b6000600b610eaf836121cb565b600c604051602001610ec3939291906130d1565b6040516020818303038152906040529050610ede82826122cc565b5050336000908152600f60205260409020805460ff1916600117905550565b610a5883838360405180602001604052806000815250611d31565b60125460ff16610f3a5760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610f5e908290603401610ad5565b610f7a5760405162461bcd60e51b81526004016109b790612ed7565b60028211158015610f8a57508115155b610fc65760405162461bcd60e51b815260206004820152600d60248201526c2bb937b7339030b6b7bab73a1760991b60448201526064016109b7565b600d5482610fd360085490565b610fdd9190612f15565b1115610ffb5760405162461bcd60e51b81526004016109b790612f2d565b8160010361132757336000908152600f602052604081205460ff161515900361109f57600061102960085490565b9050611039600880546001019055565b61104333826121b1565b6000600b611050836121cb565b600c604051602001611064939291906130d1565b604051602081830303815290604052905061107f82826122cc565b5050336000908152600f60205260409020805460ff191660011790555050565b3360009081526010602052604090205460ff16156110cf5760405162461bcd60e51b81526004016109b790612f62565b816013546110dd9190613002565b3410156110fc5760405162461bcd60e51b81526004016109b790612f97565b34156112a657601a54600090611113606434612fee565b61111d9190613002565b90506000601b546064346111319190612fee565b61113b9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015611176573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156111b1573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156111ec573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611227573d6000803e3d6000fd5b5060008183806112378134613021565b6112419190613021565b61124b9190613021565b6112559190613021565b90506112696007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156112a1573d6000803e3d6000fd5b505050505b60006112b160085490565b90506112c1600880546001019055565b6112cb33826121b1565b6000600b6112d8836121cb565b600c6040516020016112ec939291906130d1565b604051602081830303815290604052905061130782826122cc565b5050336000908152601060205260409020805460ff191660011790555050565b8160020361166357336000908152600f602052604090205460ff161561139d5760405162461bcd60e51b815260206004820152602560248201527f4f7665722046524545204972616e69616e73206c696d697420666f72206164646044820152643932b9b99760d91b60648201526084016109b7565b3360009081526010602052604090205460ff16156113cd5760405162461bcd60e51b81526004016109b790612f62565b6113d8600183613021565b6013546113e59190613002565b3410156114045760405162461bcd60e51b81526004016109b790612f97565b34156115ae57601a5460009061141b606434612fee565b6114259190613002565b90506000601b546064346114399190612fee565b6114439190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f1935050505015801561147e573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156114b9573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156114f4573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561152f573d6000803e3d6000fd5b50600081838061153f8134613021565b6115499190613021565b6115539190613021565b61155d9190613021565b90506115716007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156115a9573d6000803e3d6000fd5b505050505b60005b8281101561162f5760006115c460085490565b90506115d4600880546001019055565b6115de33826121b1565b6000600b6115eb836121cb565b600c6040516020016115ff939291906130d1565b604051602081830303815290604052905061161a82826122cc565b50508080611627906130f9565b9150506115b1565b50336000908152600f602090815260408083208054600160ff19918216811790925560109093529220805490911690911790555b5050565b6000818152600260205260408120546001600160a01b0316806108845760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109b7565b600b80546116d490612e0e565b80601f016020809104026020016040519081016040528092919081815260200182805461170090612e0e565b801561174d5780601f106117225761010080835404028352916020019161174d565b820191906000526020600020905b81548152906001019060200180831161173057829003601f168201915b505050505081565b60006001600160a01b0382166117bf5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016109b7565b506001600160a01b031660009081526003602052604090205490565b6117e3612366565b6117ed60006123c0565b565b6117ed600a80546001019055565b611805612366565b6012805460ff1916911515919091179055565b611820612366565b601355565b60125462010000900460ff1661184d5760405162461bcd60e51b81526004016109b790612e96565b600d5460085461185e906001612f15565b111561187c5760405162461bcd60e51b81526004016109b790612f2d565b3360009081526011602052604090205460ff16156118ac5760405162461bcd60e51b81526004016109b790612f62565b6013543410156118ce5760405162461bcd60e51b81526004016109b790612f97565b3415611a7857601a546000906118e5606434612fee565b6118ef9190613002565b90506000601b546064346119039190612fee565b61190d9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015611948573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611983573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156119be573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119f9573d6000803e3d6000fd5b506000818380611a098134613021565b611a139190613021565b611a1d9190613021565b611a279190613021565b9050611a3b6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611a73573d6000803e3d6000fd5b505050505b6000611a8360085490565b9050611a93600880546001019055565b611a9d33826121b1565b6000600b611aaa836121cb565b600c604051602001611abe939291906130d1565b6040516020818303038152906040529050611ad982826122cc565b5050336000908152601160205260409020805460ff19166001179055565b6000611b02600a5490565b905090565b6000611b0260085490565b60606001805461089990612e0e565b611b2f600980546001019055565b611b3d600980546001019055565b611b4b600980546001019055565b611b59600980546001019055565b611b67600980546001019055565b611b75600980546001019055565b611b83600980546001019055565b6064611b8e60095490565b10158015611ba4575060c8611ba260095490565b105b15611be157611bb7600980546001019055565b611bc5600980546001019055565b611bd3600980546001019055565b6117ed600980546001019055565b60c8611bec60095490565b10158015611c03575061012c611c0160095490565b105b15611c3257611c16600980546001019055565b611c24600980546001019055565b611bb7600980546001019055565b61012c611c3e60095490565b10158015611c5557506101f4611c5360095490565b105b15611c8457611c68600980546001019055565b611c76600980546001019055565b611c16600980546001019055565b6101f4611c9060095490565b10158015611ca757506107d0611ca560095490565b105b15611d0057611cba600980546001019055565b611cc8600980546001019055565b611cd6600980546001019055565b611ce4600980546001019055565b611cf2600980546001019055565b611c68600980546001019055565b6107d0611d0c60095490565b106117ed576012805463ff00000019166301000000179055565b611663338383612412565b611d3b3383611f80565b611d575760405162461bcd60e51b81526004016109b790612e48565b611d63848484846124e0565b50505050565b600c80546116d490612e0e565b606061088482612513565b611d89612366565b60128054911515620100000262ff000019909216919091179055565b6000611b0260095490565b6000611dbb60085490565b600d54611b029190613021565b611dd0612366565b6001600160a01b038116611e355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b7565b611e3e816123c0565b50565b611e49612366565b601280549115156101000261ff0019909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480611e9457506001600160e01b03198216635b5e139f60e01b145b8061088457506301ffc9a760e01b6001600160e01b0319831614610884565b6000818152600260205260409020546001600160a01b0316611e3e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109b7565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f4782611667565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f8c83611667565b9050806001600160a01b0316846001600160a01b03161480611fd357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611ff75750836001600160a01b0316611fec8461091c565b6001600160a01b0316145b949350505050565b826001600160a01b031661201282611667565b6001600160a01b0316146120765760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016109b7565b6001600160a01b0382166120d85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b7565b6120e3600082611f12565b6001600160a01b038316600090815260036020526040812080546001929061210c908490613021565b90915550506001600160a01b038216600090815260036020526040812080546001929061213a908490612f15565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006121aa836015548461261b565b9392505050565b611663828260405180602001604052806000815250612631565b6060816000036121f25750506040805180820190915260018152600360fc1b602082015290565b8160005b811561221c5780612206816130f9565b91506122159050600a83612fee565b91506121f6565b60008167ffffffffffffffff81111561223757612237612b68565b6040519080825280601f01601f191660200182016040528015612261576020820181803683370190505b5090505b8415611ff757612276600183613021565b9150612283600a86613112565b61228e906030612f15565b60f81b8183815181106122a3576122a3613126565b60200101906001600160f81b031916908160001a9053506122c5600a86612fee565b9450612265565b6000828152600260205260409020546001600160a01b03166123475760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016109b7565b60008281526006602090815260409091208251610a5892840190612996565b6007546001600160a01b031633146117ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b7565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036124735760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6124eb848484611fff565b6124f784848484612664565b611d635760405162461bcd60e51b81526004016109b79061313c565b606061251e82611eb3565b6000828152600660205260408120805461253790612e0e565b80601f016020809104026020016040519081016040528092919081815260200182805461256390612e0e565b80156125b05780601f10612585576101008083540402835291602001916125b0565b820191906000526020600020905b81548152906001019060200180831161259357829003601f168201915b5050505050905060006125ce60408051602081019091526000815290565b905080516000036125e0575092915050565b8151156126125780826040516020016125fa92919061318e565b60405160208183030381529060405292505050919050565b611ff784612765565b60008261262885846127d8565b14949350505050565b61263b8383612825565b6126486000848484612664565b610a585760405162461bcd60e51b81526004016109b79061313c565b60006001600160a01b0384163b1561275a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126a89033908990889088906004016131bd565b6020604051808303816000875af19250505080156126e3575060408051601f3d908101601f191682019092526126e0918101906131fa565b60015b612740573d808015612711576040519150601f19603f3d011682016040523d82523d6000602084013e612716565b606091505b5080516000036127385760405162461bcd60e51b81526004016109b79061313c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ff7565b506001949350505050565b606061277082611eb3565b600061278760408051602081019091526000815290565b905060008151116127a757604051806020016040528060008152506121aa565b806127b1846121cb565b6040516020016127c292919061318e565b6040516020818303038152906040529392505050565b600081815b845181101561281d57612809828683815181106127fc576127fc613126565b6020026020010151612967565b915080612815816130f9565b9150506127dd565b509392505050565b6001600160a01b03821661287b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109b7565b6000818152600260205260409020546001600160a01b0316156128e05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109b7565b6001600160a01b0382166000908152600360205260408120805460019290612909908490612f15565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008183106129835760008281526020849052604090206121aa565b60008381526020839052604090206121aa565b8280546129a290612e0e565b90600052602060002090601f0160209004810192826129c45760008555612a0a565b82601f106129dd57805160ff1916838001178555612a0a565b82800160010185558215612a0a579182015b82811115612a0a5782518255916020019190600101906129ef565b50612a16929150612a1a565b5090565b5b80821115612a165760008155600101612a1b565b6001600160e01b031981168114611e3e57600080fd5b600060208284031215612a5757600080fd5b81356121aa81612a2f565b60005b83811015612a7d578181015183820152602001612a65565b83811115611d635750506000910152565b60008151808452612aa6816020860160208601612a62565b601f01601f19169290920160200192915050565b6020815260006121aa6020830184612a8e565b600060208284031215612adf57600080fd5b5035919050565b80356001600160a01b0381168114612afd57600080fd5b919050565b60008060408385031215612b1557600080fd5b612b1e83612ae6565b946020939093013593505050565b600080600060608486031215612b4157600080fd5b612b4a84612ae6565b9250612b5860208501612ae6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba757612ba7612b68565b604052919050565b600082601f830112612bc057600080fd5b8135602067ffffffffffffffff821115612bdc57612bdc612b68565b8160051b612beb828201612b7e565b9283528481018201928281019087851115612c0557600080fd5b83870192505b84831015612c2457823582529183019190830190612c0b565b979650505050505050565b600060208284031215612c4157600080fd5b813567ffffffffffffffff811115612c5857600080fd5b611ff784828501612baf565b60008060408385031215612c7757600080fd5b82359150602083013567ffffffffffffffff811115612c9557600080fd5b612ca185828601612baf565b9150509250929050565b80358015158114612afd57600080fd5b600060208284031215612ccd57600080fd5b6121aa82612cab565b600060208284031215612ce857600080fd5b6121aa82612ae6565b60008060408385031215612d0457600080fd5b612d0d83612ae6565b9150612d1b60208401612cab565b90509250929050565b60008060008060808587031215612d3a57600080fd5b612d4385612ae6565b93506020612d52818701612ae6565b935060408601359250606086013567ffffffffffffffff80821115612d7657600080fd5b818801915088601f830112612d8a57600080fd5b813581811115612d9c57612d9c612b68565b612dae601f8201601f19168501612b7e565b91508082528984828501011115612dc457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612df757600080fd5b612e0083612ae6565b9150612d1b60208401612ae6565b600181811c90821680612e2257607f821691505b602082108103612e4257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526021908201527f4368696c6c20736f6c646965722c2069742773206e6f742074696d65207965746040820152601760f91b606082015260800190565b6020808252600e908201526d2737ba1030903932b1b93ab4ba1760911b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f2857612f28612eff565b500190565b6020808252818101527f4e6f7420656e6f756768204972616e69616e73206c65667420746f206275792e604082015260600190565b6020808252818101527f4f766572204972616e69616e73206c696d697420666f7220616464726573732e604082015260600190565b60208082526021908201527f416d6f756e74206f662065746865722073656e74206e6f7420636f72726563746040820152601760f91b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612ffd57612ffd612fd8565b500490565b600081600019048311821515161561301c5761301c612eff565b500290565b60008282101561303357613033612eff565b500390565b8054600090600181811c908083168061305257607f831692505b6020808410820361307357634e487b7160e01b600052602260045260246000fd5b8180156130875760018114613098576130c5565b60ff198616895284890196506130c5565b60008881526020902060005b868110156130bd5781548b8201529085019083016130a4565b505084890196505b50505050505092915050565b60006130dd8286613038565b84516130ed818360208901612a62565b612c2481830186613038565b60006001820161310b5761310b612eff565b5060010190565b60008261312157613121612fd8565b500690565b634e487b7160e01b600052603260045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516131a0818460208801612a62565b8351908301906131b4818360208801612a62565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131f090830184612a8e565b9695505050505050565b60006020828403121561320c57600080fd5b81516121aa81612a2f56fea264697066735822122038c6e5b0486a5f29401b31d1b10ecc9dd27171943632f243ac07ff441f5b90d664736f6c634300080e003368747470733a2f2f7468656972616e69616e732e6e65742f6e66742f6a736f6e2fabc974dbdb1e18187a7834dd9ab35ebf518a6a0ae1cc9927dcd4eb30409b4245
Deployed Bytecode
0x6080604052600436106102935760003560e01c80638be4596e1161015a578063bf5635a2116100c1578063e57001de1161007a578063e57001de146107b0578063e985e9c5146107c5578063eb0ddc211461080e578063ebf0c71714610823578063f2fde38b14610839578063f7606c0a1461085957600080fd5b8063bf5635a2146106e0578063c66828621461071b578063c87b56dd14610730578063c95878c914610750578063ded112df1461076f578063e37f8d981461078f57600080fd5b806398d8910b1161011357806398d8910b146106165780639c3fa0e014610637578063a22cb4651461064c578063a28f997b1461066c578063b19e7c7814610682578063b88d4fde146106c057600080fd5b80638be4596e1461058e5780638cef6be2146105965780638da5cb5b146105b9578063922eb641146105d7578063941073c1146105ec57806395d89b411461060157600080fd5b806354786108116101fe5780636d180a3c116101b75780636d180a3c146104c757806370a0823114610504578063715018a6146105245780637379e77b14610539578063761a74cf1461054e5780638788cee81461056e57600080fd5b806354786108146104285780635c898c5f1461043b5780635fdd66981461045a5780636352211e1461047057806363be37e1146104905780636c0360eb146104b257600080fd5b806323b872dd1161025057806323b872dd1461038257806332f1ff37146103a25780633f835eae146103b557806342842e0e146103c85780634e71cc32146103e857806352c672bc1461040857600080fd5b806301ffc9a71461029857806306fdde03146102cd578063081812fc146102ef578063095ea7b31461032757806317047d0a1461034957806318160ddd14610363575b600080fd5b3480156102a457600080fd5b506102b86102b3366004612a45565b610879565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e261088a565b6040516102c49190612aba565b3480156102fb57600080fd5b5061030f61030a366004612acd565b61091c565b6040516001600160a01b0390911681526020016102c4565b34801561033357600080fd5b50610347610342366004612b02565b610943565b005b34801561035557600080fd5b506012546102b89060ff1681565b34801561036f57600080fd5b50600d545b6040519081526020016102c4565b34801561038e57600080fd5b5061034761039d366004612b2c565b610a5d565b6103476103b0366004612c2f565b610a8e565b6103476103c3366004612c2f565b610db7565b3480156103d457600080fd5b506103476103e3366004612b2c565b610efd565b3480156103f457600080fd5b50610347610403366004612acd565b601455565b34801561041457600080fd5b506012546102b89062010000900460ff1681565b610347610436366004612c64565b610f18565b34801561044757600080fd5b506012546102b890610100900460ff1681565b34801561046657600080fd5b5061037460135481565b34801561047c57600080fd5b5061030f61048b366004612acd565b611667565b34801561049c57600080fd5b506012546102b890640100000000900460ff1681565b3480156104be57600080fd5b506102e26116c7565b3480156104d357600080fd5b506103476104e2366004612cbb565b60128054911515650100000000000265ff000000000019909216919091179055565b34801561051057600080fd5b5061037461051f366004612cd6565b611755565b34801561053057600080fd5b506103476117db565b34801561054557600080fd5b506103476117ef565b34801561055a57600080fd5b50610347610569366004612cbb565b6117fd565b34801561057a57600080fd5b50610347610589366004612acd565b611818565b610347611825565b3480156105a257600080fd5b506012546102b89065010000000000900460ff1681565b3480156105c557600080fd5b506007546001600160a01b031661030f565b3480156105e357600080fd5b50610374611af7565b3480156105f857600080fd5b50610374611b07565b34801561060d57600080fd5b506102e2611b12565b34801561062257600080fd5b5060125465010000000000900460ff166102b8565b34801561064357600080fd5b50610347611b21565b34801561065857600080fd5b50610347610667366004612cf1565b611d26565b34801561067857600080fd5b5061037460145481565b34801561068e57600080fd5b506102b861069d366004612cd6565b6001600160a01b03166000908152600e602052604090205460ff16151560011490565b3480156106cc57600080fd5b506103476106db366004612d24565b611d31565b3480156106ec57600080fd5b506103476106fb366004612cbb565b601280549115156401000000000264ff0000000019909216919091179055565b34801561072757600080fd5b506102e2611d69565b34801561073c57600080fd5b506102e261074b366004612acd565b611d76565b34801561075c57600080fd5b506012546301000000900460ff166102b8565b34801561077b57600080fd5b5061034761078a366004612cbb565b611d81565b34801561079b57600080fd5b506012546102b8906301000000900460ff1681565b3480156107bc57600080fd5b50610374611da5565b3480156107d157600080fd5b506102b86107e0366004612de4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561081a57600080fd5b50610374611db0565b34801561082f57600080fd5b5061037460155481565b34801561084557600080fd5b50610347610854366004612cd6565b611dc8565b34801561086557600080fd5b50610347610874366004612cbb565b611e41565b600061088482611e63565b92915050565b60606000805461089990612e0e565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590612e0e565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b5050505050905090565b600061092782611eb3565b506000908152600460205260409020546001600160a01b031690565b600061094e82611667565b9050806001600160a01b0316836001600160a01b0316036109c05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806109dc57506109dc81336107e0565b610a4e5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016109b7565b610a588383611f12565b505050565b610a673382611f80565b610a835760405162461bcd60e51b81526004016109b790612e48565b610a58838383611fff565b601254610100900460ff16610ab55760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610af09082906034015b6040516020818303038152906040528051906020012061219b565b610b0c5760405162461bcd60e51b81526004016109b790612ed7565b600d54600854610b1d906001612f15565b1115610b3b5760405162461bcd60e51b81526004016109b790612f2d565b3360009081526010602052604090205460ff1615610b6b5760405162461bcd60e51b81526004016109b790612f62565b601354341015610b8d5760405162461bcd60e51b81526004016109b790612f97565b3415610d3757601a54600090610ba4606434612fee565b610bae9190613002565b90506000601b54606434610bc29190612fee565b610bcc9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015610c07573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c42573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610c7d573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610cb8573d6000803e3d6000fd5b506000818380610cc88134613021565b610cd29190613021565b610cdc9190613021565b610ce69190613021565b9050610cfa6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015610d32573d6000803e3d6000fd5b505050505b6000610d4260085490565b9050610d52600880546001019055565b610d5c33826121b1565b6000600b610d69836121cb565b600c604051602001610d7d939291906130d1565b6040516020818303038152906040529050610d9882826122cc565b5050336000908152601060205260409020805460ff1916600117905550565b601254610100900460ff16610dde5760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610e02908290603401610ad5565b610e1e5760405162461bcd60e51b81526004016109b790612ed7565b600d54600854610e2f906001612f15565b1115610e4d5760405162461bcd60e51b81526004016109b790612f2d565b336000908152600f602052604090205460ff1615610e7d5760405162461bcd60e51b81526004016109b790612f62565b6000610e8860085490565b9050610e98600880546001019055565b610ea233826121b1565b6000600b610eaf836121cb565b600c604051602001610ec3939291906130d1565b6040516020818303038152906040529050610ede82826122cc565b5050336000908152600f60205260409020805460ff1916600117905550565b610a5883838360405180602001604052806000815250611d31565b60125460ff16610f3a5760405162461bcd60e51b81526004016109b790612e96565b6040516001600160601b03193360601b166020820152610f5e908290603401610ad5565b610f7a5760405162461bcd60e51b81526004016109b790612ed7565b60028211158015610f8a57508115155b610fc65760405162461bcd60e51b815260206004820152600d60248201526c2bb937b7339030b6b7bab73a1760991b60448201526064016109b7565b600d5482610fd360085490565b610fdd9190612f15565b1115610ffb5760405162461bcd60e51b81526004016109b790612f2d565b8160010361132757336000908152600f602052604081205460ff161515900361109f57600061102960085490565b9050611039600880546001019055565b61104333826121b1565b6000600b611050836121cb565b600c604051602001611064939291906130d1565b604051602081830303815290604052905061107f82826122cc565b5050336000908152600f60205260409020805460ff191660011790555050565b3360009081526010602052604090205460ff16156110cf5760405162461bcd60e51b81526004016109b790612f62565b816013546110dd9190613002565b3410156110fc5760405162461bcd60e51b81526004016109b790612f97565b34156112a657601a54600090611113606434612fee565b61111d9190613002565b90506000601b546064346111319190612fee565b61113b9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015611176573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156111b1573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156111ec573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611227573d6000803e3d6000fd5b5060008183806112378134613021565b6112419190613021565b61124b9190613021565b6112559190613021565b90506112696007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156112a1573d6000803e3d6000fd5b505050505b60006112b160085490565b90506112c1600880546001019055565b6112cb33826121b1565b6000600b6112d8836121cb565b600c6040516020016112ec939291906130d1565b604051602081830303815290604052905061130782826122cc565b5050336000908152601060205260409020805460ff191660011790555050565b8160020361166357336000908152600f602052604090205460ff161561139d5760405162461bcd60e51b815260206004820152602560248201527f4f7665722046524545204972616e69616e73206c696d697420666f72206164646044820152643932b9b99760d91b60648201526084016109b7565b3360009081526010602052604090205460ff16156113cd5760405162461bcd60e51b81526004016109b790612f62565b6113d8600183613021565b6013546113e59190613002565b3410156114045760405162461bcd60e51b81526004016109b790612f97565b34156115ae57601a5460009061141b606434612fee565b6114259190613002565b90506000601b546064346114399190612fee565b6114439190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f1935050505015801561147e573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156114b9573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156114f4573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561152f573d6000803e3d6000fd5b50600081838061153f8134613021565b6115499190613021565b6115539190613021565b61155d9190613021565b90506115716007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156115a9573d6000803e3d6000fd5b505050505b60005b8281101561162f5760006115c460085490565b90506115d4600880546001019055565b6115de33826121b1565b6000600b6115eb836121cb565b600c6040516020016115ff939291906130d1565b604051602081830303815290604052905061161a82826122cc565b50508080611627906130f9565b9150506115b1565b50336000908152600f602090815260408083208054600160ff19918216811790925560109093529220805490911690911790555b5050565b6000818152600260205260408120546001600160a01b0316806108845760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109b7565b600b80546116d490612e0e565b80601f016020809104026020016040519081016040528092919081815260200182805461170090612e0e565b801561174d5780601f106117225761010080835404028352916020019161174d565b820191906000526020600020905b81548152906001019060200180831161173057829003601f168201915b505050505081565b60006001600160a01b0382166117bf5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016109b7565b506001600160a01b031660009081526003602052604090205490565b6117e3612366565b6117ed60006123c0565b565b6117ed600a80546001019055565b611805612366565b6012805460ff1916911515919091179055565b611820612366565b601355565b60125462010000900460ff1661184d5760405162461bcd60e51b81526004016109b790612e96565b600d5460085461185e906001612f15565b111561187c5760405162461bcd60e51b81526004016109b790612f2d565b3360009081526011602052604090205460ff16156118ac5760405162461bcd60e51b81526004016109b790612f62565b6013543410156118ce5760405162461bcd60e51b81526004016109b790612f97565b3415611a7857601a546000906118e5606434612fee565b6118ef9190613002565b90506000601b546064346119039190612fee565b61190d9190613002565b6016546040519192506001600160a01b03169083156108fc029084906000818181858888f19350505050158015611948573d6000803e3d6000fd5b506017546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611983573d6000803e3d6000fd5b506018546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156119be573d6000803e3d6000fd5b506019546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156119f9573d6000803e3d6000fd5b506000818380611a098134613021565b611a139190613021565b611a1d9190613021565b611a279190613021565b9050611a3b6007546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015611a73573d6000803e3d6000fd5b505050505b6000611a8360085490565b9050611a93600880546001019055565b611a9d33826121b1565b6000600b611aaa836121cb565b600c604051602001611abe939291906130d1565b6040516020818303038152906040529050611ad982826122cc565b5050336000908152601160205260409020805460ff19166001179055565b6000611b02600a5490565b905090565b6000611b0260085490565b60606001805461089990612e0e565b611b2f600980546001019055565b611b3d600980546001019055565b611b4b600980546001019055565b611b59600980546001019055565b611b67600980546001019055565b611b75600980546001019055565b611b83600980546001019055565b6064611b8e60095490565b10158015611ba4575060c8611ba260095490565b105b15611be157611bb7600980546001019055565b611bc5600980546001019055565b611bd3600980546001019055565b6117ed600980546001019055565b60c8611bec60095490565b10158015611c03575061012c611c0160095490565b105b15611c3257611c16600980546001019055565b611c24600980546001019055565b611bb7600980546001019055565b61012c611c3e60095490565b10158015611c5557506101f4611c5360095490565b105b15611c8457611c68600980546001019055565b611c76600980546001019055565b611c16600980546001019055565b6101f4611c9060095490565b10158015611ca757506107d0611ca560095490565b105b15611d0057611cba600980546001019055565b611cc8600980546001019055565b611cd6600980546001019055565b611ce4600980546001019055565b611cf2600980546001019055565b611c68600980546001019055565b6107d0611d0c60095490565b106117ed576012805463ff00000019166301000000179055565b611663338383612412565b611d3b3383611f80565b611d575760405162461bcd60e51b81526004016109b790612e48565b611d63848484846124e0565b50505050565b600c80546116d490612e0e565b606061088482612513565b611d89612366565b60128054911515620100000262ff000019909216919091179055565b6000611b0260095490565b6000611dbb60085490565b600d54611b029190613021565b611dd0612366565b6001600160a01b038116611e355760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109b7565b611e3e816123c0565b50565b611e49612366565b601280549115156101000261ff0019909216919091179055565b60006001600160e01b031982166380ac58cd60e01b1480611e9457506001600160e01b03198216635b5e139f60e01b145b8061088457506301ffc9a760e01b6001600160e01b0319831614610884565b6000818152600260205260409020546001600160a01b0316611e3e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016109b7565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f4782611667565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611f8c83611667565b9050806001600160a01b0316846001600160a01b03161480611fd357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80611ff75750836001600160a01b0316611fec8461091c565b6001600160a01b0316145b949350505050565b826001600160a01b031661201282611667565b6001600160a01b0316146120765760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016109b7565b6001600160a01b0382166120d85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016109b7565b6120e3600082611f12565b6001600160a01b038316600090815260036020526040812080546001929061210c908490613021565b90915550506001600160a01b038216600090815260036020526040812080546001929061213a908490612f15565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006121aa836015548461261b565b9392505050565b611663828260405180602001604052806000815250612631565b6060816000036121f25750506040805180820190915260018152600360fc1b602082015290565b8160005b811561221c5780612206816130f9565b91506122159050600a83612fee565b91506121f6565b60008167ffffffffffffffff81111561223757612237612b68565b6040519080825280601f01601f191660200182016040528015612261576020820181803683370190505b5090505b8415611ff757612276600183613021565b9150612283600a86613112565b61228e906030612f15565b60f81b8183815181106122a3576122a3613126565b60200101906001600160f81b031916908160001a9053506122c5600a86612fee565b9450612265565b6000828152600260205260409020546001600160a01b03166123475760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016109b7565b60008281526006602090815260409091208251610a5892840190612996565b6007546001600160a01b031633146117ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109b7565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036124735760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016109b7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6124eb848484611fff565b6124f784848484612664565b611d635760405162461bcd60e51b81526004016109b79061313c565b606061251e82611eb3565b6000828152600660205260408120805461253790612e0e565b80601f016020809104026020016040519081016040528092919081815260200182805461256390612e0e565b80156125b05780601f10612585576101008083540402835291602001916125b0565b820191906000526020600020905b81548152906001019060200180831161259357829003601f168201915b5050505050905060006125ce60408051602081019091526000815290565b905080516000036125e0575092915050565b8151156126125780826040516020016125fa92919061318e565b60405160208183030381529060405292505050919050565b611ff784612765565b60008261262885846127d8565b14949350505050565b61263b8383612825565b6126486000848484612664565b610a585760405162461bcd60e51b81526004016109b79061313c565b60006001600160a01b0384163b1561275a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906126a89033908990889088906004016131bd565b6020604051808303816000875af19250505080156126e3575060408051601f3d908101601f191682019092526126e0918101906131fa565b60015b612740573d808015612711576040519150601f19603f3d011682016040523d82523d6000602084013e612716565b606091505b5080516000036127385760405162461bcd60e51b81526004016109b79061313c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ff7565b506001949350505050565b606061277082611eb3565b600061278760408051602081019091526000815290565b905060008151116127a757604051806020016040528060008152506121aa565b806127b1846121cb565b6040516020016127c292919061318e565b6040516020818303038152906040529392505050565b600081815b845181101561281d57612809828683815181106127fc576127fc613126565b6020026020010151612967565b915080612815816130f9565b9150506127dd565b509392505050565b6001600160a01b03821661287b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016109b7565b6000818152600260205260409020546001600160a01b0316156128e05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016109b7565b6001600160a01b0382166000908152600360205260408120805460019290612909908490612f15565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008183106129835760008281526020849052604090206121aa565b60008381526020839052604090206121aa565b8280546129a290612e0e565b90600052602060002090601f0160209004810192826129c45760008555612a0a565b82601f106129dd57805160ff1916838001178555612a0a565b82800160010185558215612a0a579182015b82811115612a0a5782518255916020019190600101906129ef565b50612a16929150612a1a565b5090565b5b80821115612a165760008155600101612a1b565b6001600160e01b031981168114611e3e57600080fd5b600060208284031215612a5757600080fd5b81356121aa81612a2f565b60005b83811015612a7d578181015183820152602001612a65565b83811115611d635750506000910152565b60008151808452612aa6816020860160208601612a62565b601f01601f19169290920160200192915050565b6020815260006121aa6020830184612a8e565b600060208284031215612adf57600080fd5b5035919050565b80356001600160a01b0381168114612afd57600080fd5b919050565b60008060408385031215612b1557600080fd5b612b1e83612ae6565b946020939093013593505050565b600080600060608486031215612b4157600080fd5b612b4a84612ae6565b9250612b5860208501612ae6565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612ba757612ba7612b68565b604052919050565b600082601f830112612bc057600080fd5b8135602067ffffffffffffffff821115612bdc57612bdc612b68565b8160051b612beb828201612b7e565b9283528481018201928281019087851115612c0557600080fd5b83870192505b84831015612c2457823582529183019190830190612c0b565b979650505050505050565b600060208284031215612c4157600080fd5b813567ffffffffffffffff811115612c5857600080fd5b611ff784828501612baf565b60008060408385031215612c7757600080fd5b82359150602083013567ffffffffffffffff811115612c9557600080fd5b612ca185828601612baf565b9150509250929050565b80358015158114612afd57600080fd5b600060208284031215612ccd57600080fd5b6121aa82612cab565b600060208284031215612ce857600080fd5b6121aa82612ae6565b60008060408385031215612d0457600080fd5b612d0d83612ae6565b9150612d1b60208401612cab565b90509250929050565b60008060008060808587031215612d3a57600080fd5b612d4385612ae6565b93506020612d52818701612ae6565b935060408601359250606086013567ffffffffffffffff80821115612d7657600080fd5b818801915088601f830112612d8a57600080fd5b813581811115612d9c57612d9c612b68565b612dae601f8201601f19168501612b7e565b91508082528984828501011115612dc457600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612df757600080fd5b612e0083612ae6565b9150612d1b60208401612ae6565b600181811c90821680612e2257607f821691505b602082108103612e4257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526021908201527f4368696c6c20736f6c646965722c2069742773206e6f742074696d65207965746040820152601760f91b606082015260800190565b6020808252600e908201526d2737ba1030903932b1b93ab4ba1760911b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612f2857612f28612eff565b500190565b6020808252818101527f4e6f7420656e6f756768204972616e69616e73206c65667420746f206275792e604082015260600190565b6020808252818101527f4f766572204972616e69616e73206c696d697420666f7220616464726573732e604082015260600190565b60208082526021908201527f416d6f756e74206f662065746865722073656e74206e6f7420636f72726563746040820152601760f91b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082612ffd57612ffd612fd8565b500490565b600081600019048311821515161561301c5761301c612eff565b500290565b60008282101561303357613033612eff565b500390565b8054600090600181811c908083168061305257607f831692505b6020808410820361307357634e487b7160e01b600052602260045260246000fd5b8180156130875760018114613098576130c5565b60ff198616895284890196506130c5565b60008881526020902060005b868110156130bd5781548b8201529085019083016130a4565b505084890196505b50505050505092915050565b60006130dd8286613038565b84516130ed818360208901612a62565b612c2481830186613038565b60006001820161310b5761310b612eff565b5060010190565b60008261312157613121612fd8565b500690565b634e487b7160e01b600052603260045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516131a0818460208801612a62565b8351908301906131b4818360208801612a62565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906131f090830184612a8e565b9695505050505050565b60006020828403121561320c57600080fd5b81516121aa81612a2f56fea264697066735822122038c6e5b0486a5f29401b31d1b10ecc9dd27171943632f243ac07ff441f5b90d664736f6c634300080e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
abc974dbdb1e18187a7834dd9ab35ebf518a6a0ae1cc9927dcd4eb30409b4245
-----Decoded View---------------
Arg [0] : _root (bytes32): 0xabc974dbdb1e18187a7834dd9ab35ebf518a6a0ae1cc9927dcd4eb30409b4245
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : abc974dbdb1e18187a7834dd9ab35ebf518a6a0ae1cc9927dcd4eb30409b4245
Deployed Bytecode Sourcemap
50175:14065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60964:211;;;;;;;;;;-1:-1:-1;60964:211:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;60964:211:0;;;;;;;;35887:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37400:171::-;;;;;;;;;;-1:-1:-1;37400:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;37400:171:0;1528:203:1;36917:417:0;;;;;;;;;;-1:-1:-1;36917:417:0;;;;;:::i;:::-;;:::i;:::-;;50802:34;;;;;;;;;;-1:-1:-1;50802:34:0;;;;;;;;61316:91;;;;;;;;;;-1:-1:-1;61387:12:0;;61316:91;;;2319:25:1;;;2307:2;2292:18;61316:91:0;2173:177:1;38100:336:0;;;;;;;;;;-1:-1:-1;38100:336:0;;;;;:::i;:::-;;:::i;56971:1485::-;;;;;;:::i;:::-;;:::i;56073:890::-;;;;;;:::i;:::-;;:::i;38507:185::-;;;;;;;;;;-1:-1:-1;38507:185:0;;;;;:::i;:::-;;:::i;63780:96::-;;;;;;;;;;-1:-1:-1;63780:96:0;;;;;:::i;:::-;63843:13;:25;63780:96;50890:36;;;;;;;;;;-1:-1:-1;50890:36:0;;;;;;;;;;;51815:4250;;;;;;:::i;:::-;;:::i;50843:40::-;;;;;;;;;;-1:-1:-1;50843:40:0;;;;;;;;;;;51064:36;;;;;;;;;;;;;;;;35598:222;;;;;;;;;;-1:-1:-1;35598:222:0;;;;;:::i;:::-;;:::i;50980:30::-;;;;;;;;;;-1:-1:-1;50980:30:0;;;;;;;;;;;50424:59;;;;;;;;;;;;;:::i;61513:110::-;;;;;;;;;;-1:-1:-1;61513:110:0;;;;;:::i;:::-;61586:20;:29;;;;;;;-1:-1:-1;;61586:29:0;;;;;;;;;61513:110;35329:207;;;;;;;;;;-1:-1:-1;35329:207:0;;;;;:::i;:::-;;:::i;15496:103::-;;;;;;;;;;;;;:::i;63884:85::-;;;;;;;;;;;;;:::i;60081:110::-;;;;;;;;;;-1:-1:-1;60081:110:0;;;;;:::i;:::-;;:::i;59979:94::-;;;;;;;;;;-1:-1:-1;59979:94:0;;;;;:::i;:::-;;:::i;58464:1326::-;;;:::i;51017:40::-;;;;;;;;;;-1:-1:-1;51017:40:0;;;;;;;;;;;14848:87;;;;;;;;;;-1:-1:-1;14921:6:0;;-1:-1:-1;;;;;14921:6:0;14848:87;;63977:114;;;;;;;;;;;;;:::i;60442:105::-;;;;;;;;;;;;;:::i;36056:104::-;;;;;;;;;;;;;:::i;61631:107::-;;;;;;;;;;-1:-1:-1;61710:20:0;;;;;;;61631:107;;61746:1789;;;;;;;;;;;;;:::i;37643:155::-;;;;;;;;;;-1:-1:-1;37643:155:0;;;;;:::i;:::-;;:::i;51107:42::-;;;;;;;;;;;;;;;;59805:166;;;;;;;;;;-1:-1:-1;59805:166:0;;;;;:::i;:::-;-1:-1:-1;;;;;59941:14:0;59912:4;59941:14;;;:8;:14;;;;;;;;:22;;:14;:22;;59805:166;38763:323;;;;;;;;;;-1:-1:-1;38763:323:0;;;;;:::i;:::-;;:::i;61415:90::-;;;;;;;;;;-1:-1:-1;61415:90:0;;;;;:::i;:::-;61478:10;:19;;;;;;;-1:-1:-1;;61478:19:0;;;;;;;;;61415:90;50490:37;;;;;;;;;;;;;:::i;60555:196::-;;;;;;;;;;-1:-1:-1;60555:196:0;;;;;:::i;:::-;;:::i;63543:110::-;;;;;;;;;;-1:-1:-1;63625:20:0;;;;;;;63543:110;;60325:109;;;;;;;;;;-1:-1:-1;60325:109:0;;;;;:::i;:::-;;:::i;50933:40::-;;;;;;;;;;-1:-1:-1;50933:40:0;;;;;;;;;;;63661:100;;;;;;;;;;;;;:::i;37869:164::-;;;;;;;;;;-1:-1:-1;37869:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;37990:25:0;;;37966:4;37990:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;37869:164;61183:125;;;;;;;;;;;;;:::i;51156:19::-;;;;;;;;;;;;;;;;15754:201;;;;;;;;;;-1:-1:-1;15754:201:0;;;;;:::i;:::-;;:::i;60199:118::-;;;;;;;;;;-1:-1:-1;60199:118:0;;;;;:::i;:::-;;:::i;60964:211::-;61102:4;61131:36;61155:11;61131:23;:36::i;:::-;61124:43;60964:211;-1:-1:-1;;60964:211:0:o;35887:100::-;35941:13;35974:5;35967:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35887:100;:::o;37400:171::-;37476:7;37496:23;37511:7;37496:14;:23::i;:::-;-1:-1:-1;37539:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;37539:24:0;;37400:171::o;36917:417::-;36998:13;37014:23;37029:7;37014:14;:23::i;:::-;36998:39;;37062:5;-1:-1:-1;;;;;37056:11:0;:2;-1:-1:-1;;;;;37056:11:0;;37048:57;;;;-1:-1:-1;;;37048:57:0;;7410:2:1;37048:57:0;;;7392:21:1;7449:2;7429:18;;;7422:30;7488:34;7468:18;;;7461:62;-1:-1:-1;;;7539:18:1;;;7532:31;7580:19;;37048:57:0;;;;;;;;;13479:10;-1:-1:-1;;;;;37140:21:0;;;;:62;;-1:-1:-1;37165:37:0;37182:5;13479:10;37869:164;:::i;37165:37::-;37118:174;;;;-1:-1:-1;;;37118:174:0;;7812:2:1;37118:174:0;;;7794:21:1;7851:2;7831:18;;;7824:30;7890:34;7870:18;;;7863:62;7961:32;7941:18;;;7934:60;8011:19;;37118:174:0;7610:426:1;37118:174:0;37305:21;37314:2;37318:7;37305:8;:21::i;:::-;36987:347;36917:417;;:::o;38100:336::-;38295:41;13479:10;38328:7;38295:18;:41::i;:::-;38287:100;;;;-1:-1:-1;;;38287:100:0;;;;;;;:::i;:::-;38400:28;38410:4;38416:2;38420:7;38400:9;:28::i;56971:1485::-;57056:20;;;;;;;57048:66;;;;-1:-1:-1;;;57048:66:0;;;;;;;:::i;:::-;57158:28;;-1:-1:-1;;;;;;57175:10:0;9007:2:1;9003:15;8999:53;57158:28:0;;;8987:66:1;57133:55:0;;57141:5;;9069:12:1;;57158:28:0;;;;;;;;;;;;;57148:39;;;;;;57133:7;:55::i;:::-;57125:82;;;;-1:-1:-1;;;57125:82:0;;;;;;;:::i;:::-;61387:12;;57240:14;9722;57240:28;;57267:1;57240:28;:::i;:::-;:45;;57218:127;;;;-1:-1:-1;;;57218:127:0;;;;;;;:::i;:::-;57402:10;57378:35;;;;:23;:35;;;;;;;;:43;57356:125;;;;-1:-1:-1;;;57356:125:0;;;;;;;:::i;:::-;57527:7;;57514:9;:20;;57492:103;;;;-1:-1:-1;;;57492:103:0;;;;;;;:::i;:::-;57610:9;:13;57606:478;;57676:16;;57640:12;;57657:15;57669:3;57657:9;:15;:::i;:::-;57656:36;;;;:::i;:::-;57640:53;;57708:12;57744:17;;57737:3;57725:9;:15;;;;:::i;:::-;57724:37;;;;:::i;:::-;57785:8;;57777:32;;57708:54;;-1:-1:-1;;;;;;57785:8:0;;57777:32;;;;;57804:4;;57785:8;57777:32;57785:8;57777:32;57804:4;57785:8;57777:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57832:9:0;;57824:33;;-1:-1:-1;;;;;57832:9:0;;;;57824:33;;;;;57852:4;;57832:9;57824:33;57832:9;57824:33;57852:4;57832:9;57824:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57880:8:0;;57872:32;;-1:-1:-1;;;;;57880:8:0;;;;57872:32;;;;;57899:4;;57880:8;57872:32;57880:8;57872:32;57899:4;57880:8;57872:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57927:8:0;;57919:32;;-1:-1:-1;;;;;57927:8:0;;;;57919:32;;;;;57946:4;;57927:8;57919:32;57927:8;57919:32;57946:4;57927:8;57919:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57966:16:0;58018:4;58011;;57985:16;58011:4;57985:9;:16;:::i;:::-;:23;;;;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;57966:56;;58045:7;14921:6;;-1:-1:-1;;;;;14921:6:0;;14848:87;58045:7;-1:-1:-1;;;;;58037:25:0;:35;58063:8;58037:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57625:459;;;57606:478;58094:15;58112:24;:14;9722;;9630:114;58112:24;58094:42;;58149:26;:14;9841:19;;9859:1;9841:19;;;9752:127;58149:26;58186:30;58196:10;58208:7;58186:9;:30::i;:::-;58227:17;58285:7;58294:25;58311:7;58294:16;:25::i;:::-;58321:13;58268:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;58227:119;;58357:26;58370:7;58379:3;58357:12;:26::i;:::-;-1:-1:-1;;58418:10:0;58394:35;;;;:23;:35;;;;;:54;;-1:-1:-1;;58394:54:0;58444:4;58394:54;;;-1:-1:-1;56971:1485:0:o;56073:890::-;56162:20;;;;;;;56154:66;;;;-1:-1:-1;;;56154:66:0;;;;;;;:::i;:::-;56265:28;;-1:-1:-1;;;;;;56282:10:0;9007:2:1;9003:15;8999:53;56265:28:0;;;8987:66:1;56240:55:0;;56248:5;;9069:12:1;;56265:28:0;8858:229:1;56240:55:0;56232:82;;;;-1:-1:-1;;;56232:82:0;;;;;;;:::i;:::-;61387:12;;56347:14;9722;56347:28;;56374:1;56347:28;:::i;:::-;:45;;56325:127;;;;-1:-1:-1;;;56325:127:0;;;;;;;:::i;:::-;56509:10;56485:35;;;;:23;:35;;;;;;;;:43;56463:125;;;;-1:-1:-1;;;56463:125:0;;;;;;;:::i;:::-;56601:15;56619:24;:14;9722;;9630:114;56619:24;56601:42;;56656:26;:14;9841:19;;9859:1;9841:19;;;9752:127;56656:26;56693:30;56703:10;56715:7;56693:9;:30::i;:::-;56734:17;56792:7;56801:25;56818:7;56801:16;:25::i;:::-;56828:13;56775:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56734:119;;56864:26;56877:7;56886:3;56864:12;:26::i;:::-;-1:-1:-1;;56925:10:0;56901:35;;;;:23;:35;;;;;:54;;-1:-1:-1;;56901:54:0;56951:4;56901:54;;;-1:-1:-1;56073:890:0:o;38507:185::-;38645:39;38662:4;38668:2;38672:7;38645:39;;;;;;;;;;;;:16;:39::i;51815:4250::-;51919:15;;;;51911:61;;;;-1:-1:-1;;;51911:61:0;;;;;;;:::i;:::-;52016:28;;-1:-1:-1;;;;;;52033:10:0;9007:2:1;9003:15;8999:53;52016:28:0;;;8987:66:1;51991:55:0;;51999:5;;9069:12:1;;52016:28:0;8858:229:1;51991:55:0;51983:82;;;;-1:-1:-1;;;51983:82:0;;;;;;;:::i;:::-;52094:1;52084:6;:11;;:26;;;;-1:-1:-1;52099:11:0;;;52084:26;52076:52;;;;-1:-1:-1;;;52076:52:0;;13151:2:1;52076:52:0;;;13133:21:1;13190:2;13170:18;;;13163:30;-1:-1:-1;;;13209:18:1;;;13202:43;13262:18;;52076:52:0;12949:337:1;52076:52:0;61387:12;;52188:6;52161:24;:14;9722;;9630:114;52161:24;:33;;;;:::i;:::-;:50;;52139:132;;;;-1:-1:-1;;;52139:132:0;;;;;;;:::i;:::-;52288:6;52298:1;52288:11;52284:3774;;52344:10;52320:35;;;;:23;:35;;;;;;;;:44;;;;52316:2046;;52385:15;52403:24;:14;9722;;9630:114;52403:24;52385:42;;52446:26;:14;9841:19;;9859:1;9841:19;;;9752:127;52446:26;52491:30;52501:10;52513:7;52491:9;:30::i;:::-;52540:17;52632:7;52666:25;52683:7;52666:16;:25::i;:::-;52718:13;52589:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52540:233;;52792:26;52805:7;52814:3;52792:12;:26::i;:::-;-1:-1:-1;;52861:10:0;52837:35;;;;:23;:35;;;;;:61;;-1:-1:-1;;52837:61:0;52894:4;52837:61;;;51815:4250;;:::o;52316:2046::-;52993:10;52969:35;;;;:23;:35;;;;;;;;:44;52939:150;;;;-1:-1:-1;;;52939:150:0;;;;;;;:::i;:::-;53161:6;53151:7;;:16;;;;:::i;:::-;53138:9;:29;;53108:136;;;;-1:-1:-1;;;53108:136:0;;;;;;;:::i;:::-;53267:9;:13;53263:550;;53341:16;;53305:12;;53322:15;53334:3;53322:9;:15;:::i;:::-;53321:36;;;;:::i;:::-;53305:53;;53381:12;53417:17;;53410:3;53398:9;:15;;;;:::i;:::-;53397:37;;;;:::i;:::-;53466:8;;53458:32;;53381:54;;-1:-1:-1;;;;;;53466:8:0;;53458:32;;;;;53485:4;;53466:8;53458:32;53466:8;53458:32;53485:4;53466:8;53458:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53521:9:0;;53513:33;;-1:-1:-1;;;;;53521:9:0;;;;53513:33;;;;;53541:4;;53521:9;53513:33;53521:9;53513:33;53541:4;53521:9;53513:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53577:8:0;;53569:32;;-1:-1:-1;;;;;53577:8:0;;;;53569:32;;;;;53596:4;;53577:8;53569:32;53577:8;53569:32;53596:4;53577:8;53569:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53632:8:0;;53624:32;;-1:-1:-1;;;;;53632:8:0;;;;53624:32;;;;;53651:4;;53632:8;53624:32;53632:8;53624:32;53651:4;53632:8;53624:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53679:16:0;53731:4;53724;;53698:16;53724:4;53698:9;:16;:::i;:::-;:23;;;;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;53679:56;;53766:7;14921:6;;-1:-1:-1;;;;;14921:6:0;;14848:87;53766:7;-1:-1:-1;;;;;53758:25:0;:35;53784:8;53758:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53282:531;;;53263:550;53831:15;53849:24;:14;9722;;9630:114;53849:24;53831:42;;53892:26;:14;9841:19;;9859:1;9841:19;;;9752:127;53892:26;53937:30;53947:10;53959:7;53937:9;:30::i;:::-;53986:17;54078:7;54112:25;54129:7;54112:16;:25::i;:::-;54164:13;54035:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53986:233;;54238:26;54251:7;54260:3;54238:12;:26::i;:::-;-1:-1:-1;;54307:10:0;54283:35;;;;:23;:35;;;;;:63;;-1:-1:-1;;54283:63:0;54342:4;54283:63;;;51815:4250;;:::o;52284:3774::-;54383:6;54393:1;54383:11;54379:1679;;54461:10;54437:35;;;;:23;:35;;;;;;;;:44;54411:143;;;;-1:-1:-1;;;54411:143:0;;13493:2:1;54411:143:0;;;13475:21:1;13532:2;13512:18;;;13505:30;13571:34;13551:18;;;13544:62;-1:-1:-1;;;13622:18:1;;;13615:35;13667:19;;54411:143:0;13291:401:1;54411:143:0;54619:10;54595:35;;;;:23;:35;;;;;;;;:44;54569:138;;;;-1:-1:-1;;;54569:138:0;;;;;;;:::i;:::-;54772:10;54781:1;54772:6;:10;:::i;:::-;54761:7;;:22;;;;:::i;:::-;54748:9;:35;;54722:130;;;;-1:-1:-1;;;54722:130:0;;;;;;;:::i;:::-;54871:9;:13;54867:514;;54941:16;;54905:12;;54922:15;54934:3;54922:9;:15;:::i;:::-;54921:36;;;;:::i;:::-;54905:53;;54977:12;55013:17;;55006:3;54994:9;:15;;;;:::i;:::-;54993:37;;;;:::i;:::-;55058:8;;55050:32;;54977:54;;-1:-1:-1;;;;;;55058:8:0;;55050:32;;;;;55077:4;;55058:8;55050:32;55058:8;55050:32;55077:4;55058:8;55050:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55109:9:0;;55101:33;;-1:-1:-1;;;;;55109:9:0;;;;55101:33;;;;;55129:4;;55109:9;55101:33;55109:9;55101:33;55129:4;55109:9;55101:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55161:8:0;;55153:32;;-1:-1:-1;;;;;55161:8:0;;;;55153:32;;;;;55180:4;;55161:8;55153:32;55161:8;55153:32;55180:4;55161:8;55153:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55212:8:0;;55204:32;;-1:-1:-1;;;;;55212:8:0;;;;55204:32;;;;;55231:4;;55212:8;55204:32;55212:8;55204:32;55231:4;55212:8;55204:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55255:16:0;55307:4;55300;;55274:16;55300:4;55274:9;:16;:::i;:::-;:23;;;;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;55255:56;;55338:7;14921:6;;-1:-1:-1;;;;;14921:6:0;;14848:87;55338:7;-1:-1:-1;;;;;55330:25:0;:35;55356:8;55330:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54886:495;;;54867:514;55400:9;55395:507;55419:6;55415:1;:10;55395:507;;;55451:15;55469:24;:14;9722;;9630:114;55469:24;55451:42;;55514:26;:14;9841:19;;9859:1;9841:19;;;9752:127;55514:26;55559:30;55569:10;55581:7;55559:9;:30::i;:::-;55608:17;55700:7;55734:25;55751:7;55734:16;:25::i;:::-;55786:13;55657:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55608:233;;55860:26;55873:7;55882:3;55860:12;:26::i;:::-;55432:470;;55427:3;;;;;:::i;:::-;;;;55395:507;;;-1:-1:-1;55940:10:0;55916:35;;;;:23;:35;;;;;;;;:57;;55969:4;-1:-1:-1;;55916:57:0;;;;;;;;55988:23;:35;;;;;:58;;;;;;;;;;54379:1679;51815:4250;;:::o;35598:222::-;35670:7;35706:16;;;:7;:16;;;;;;-1:-1:-1;;;;;35706:16:0;;35733:56;;;;-1:-1:-1;;;35733:56:0;;14039:2:1;35733:56:0;;;14021:21:1;14078:2;14058:18;;;14051:30;-1:-1:-1;;;14097:18:1;;;14090:54;14161:18;;35733:56:0;13837:348:1;50424:59:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35329:207::-;35401:7;-1:-1:-1;;;;;35429:19:0;;35421:73;;;;-1:-1:-1;;;35421:73:0;;14392:2:1;35421:73:0;;;14374:21:1;14431:2;14411:18;;;14404:30;14470:34;14450:18;;;14443:62;-1:-1:-1;;;14521:18:1;;;14514:39;14570:19;;35421:73:0;14190:405:1;35421:73:0;-1:-1:-1;;;;;;35512:16:0;;;;;:9;:16;;;;;;;35329:207::o;15496:103::-;14734:13;:11;:13::i;:::-;15561:30:::1;15588:1;15561:18;:30::i;:::-;15496:103::o:0;63884:85::-;63931:30;:18;9841:19;;9859:1;9841:19;;;9752:127;60081:110;14734:13;:11;:13::i;:::-;60159:15:::1;:24:::0;;-1:-1:-1;;60159:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;60081:110::o;59979:94::-;14734:13;:11;:13::i;:::-;60046:7:::1;:19:::0;59979:94::o;58464:1326::-;58522:16;;;;;;;58514:62;;;;-1:-1:-1;;;58514:62:0;;;;;;;:::i;:::-;61387:12;;58609:14;9722;58609:28;;58636:1;58609:28;:::i;:::-;:45;;58587:127;;;;-1:-1:-1;;;58587:127:0;;;;;;;:::i;:::-;58758:10;58747:22;;;;:10;:22;;;;;;;;:31;58725:113;;;;-1:-1:-1;;;58725:113:0;;;;;;;:::i;:::-;58884:7;;58871:9;:20;;58849:103;;;;-1:-1:-1;;;58849:103:0;;;;;;;:::i;:::-;58967:9;:13;58963:478;;59033:16;;58997:12;;59014:15;59026:3;59014:9;:15;:::i;:::-;59013:36;;;;:::i;:::-;58997:53;;59065:12;59101:17;;59094:3;59082:9;:15;;;;:::i;:::-;59081:37;;;;:::i;:::-;59142:8;;59134:32;;59065:54;;-1:-1:-1;;;;;;59142:8:0;;59134:32;;;;;59161:4;;59142:8;59134:32;59142:8;59134:32;59161:4;59142:8;59134:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59189:9:0;;59181:33;;-1:-1:-1;;;;;59189:9:0;;;;59181:33;;;;;59209:4;;59189:9;59181:33;59189:9;59181:33;59209:4;59189:9;59181:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59237:8:0;;59229:32;;-1:-1:-1;;;;;59237:8:0;;;;59229:32;;;;;59256:4;;59237:8;59229:32;59237:8;59229:32;59256:4;59237:8;59229:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59284:8:0;;59276:32;;-1:-1:-1;;;;;59284:8:0;;;;59276:32;;;;;59303:4;;59284:8;59276:32;59284:8;59276:32;59303:4;59284:8;59276:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59323:16:0;59375:4;59368;;59342:16;59368:4;59342:9;:16;:::i;:::-;:23;;;;:::i;:::-;:30;;;;:::i;:::-;:37;;;;:::i;:::-;59323:56;;59402:7;14921:6;;-1:-1:-1;;;;;14921:6:0;;14848:87;59402:7;-1:-1:-1;;;;;59394:25:0;:35;59420:8;59394:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58982:459;;;58963:478;59453:15;59471:24;:14;9722;;9630:114;59471:24;59453:42;;59508:26;:14;9841:19;;9859:1;9841:19;;;9752:127;59508:26;59545:30;59555:10;59567:7;59545:9;:30::i;:::-;59586:17;59644:7;59653:25;59670:7;59653:16;:25::i;:::-;59680:13;59627:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;59586:119;;59716:26;59729:7;59738:3;59716:12;:26::i;:::-;-1:-1:-1;;59764:10:0;59753:22;;;;:10;:22;;;;;:29;;-1:-1:-1;;59753:29:0;59778:4;59753:29;;;58464:1326::o;63977:114::-;64028:7;64055:28;:18;9722:14;;9630:114;64055:28;64048:35;;63977:114;:::o;60442:105::-;60488:7;60515:24;:14;9722;;9630:114;36056:104;36112:13;36145:7;36138:14;;;;;:::i;61746:1789::-;61784:21;:9;9841:19;;9859:1;9841:19;;;9752:127;61784:21;61816;:9;9841:19;;9859:1;9841:19;;;9752:127;61816:21;61848;:9;9841:19;;9859:1;9841:19;;;9752:127;61848:21;61880;:9;9841:19;;9859:1;9841:19;;;9752:127;61880:21;61912;:9;9841:19;;9859:1;9841:19;;;9752:127;61912:21;61944;:9;9841:19;;9859:1;9841:19;;;9752:127;61944:21;61976;:9;9841:19;;9859:1;9841:19;;;9752:127;61976:21;62035:3;62012:19;:9;9722:14;;9630:114;62012:19;:26;;:55;;;;;62064:3;62042:19;:9;9722:14;;9630:114;62042:19;:25;62012:55;62008:1520;;;62084:21;:9;9841:19;;9859:1;9841:19;;;9752:127;62084:21;62120;:9;9841:19;;9859:1;9841:19;;;9752:127;62120:21;62156;:9;9841:19;;9859:1;9841:19;;;9752:127;62156:21;62192;:9;9841:19;;9859:1;9841:19;;;9752:127;62008:1520;62258:3;62235:19;:9;9722:14;;9630:114;62235:19;:26;;:55;;;;;62287:3;62265:19;:9;9722:14;;9630:114;62265:19;:25;62235:55;62231:1297;;;62307:21;:9;9841:19;;9859:1;9841:19;;;9752:127;62307:21;62343;:9;9841:19;;9859:1;9841:19;;;9752:127;62343:21;62379;:9;9841:19;;9859:1;9841:19;;;9752:127;62231:1297;62553:3;62530:19;:9;9722:14;;9630:114;62530:19;:26;;:55;;;;;62582:3;62560:19;:9;9722:14;;9630:114;62560:19;:25;62530:55;62526:1002;;;62602:21;:9;9841:19;;9859:1;9841:19;;;9752:127;62602:21;62638;:9;9841:19;;9859:1;9841:19;;;9752:127;62638:21;62674;:9;9841:19;;9859:1;9841:19;;;9752:127;62526:1002;62920:3;62897:19;:9;9722:14;;9630:114;62897:19;:26;;:56;;;;;62949:4;62927:19;:9;9722:14;;9630:114;62927:19;:26;62897:56;62893:635;;;62970:21;:9;9841:19;;9859:1;9841:19;;;9752:127;62970:21;63006;:9;9841:19;;9859:1;9841:19;;;9752:127;63006:21;63042;:9;9841:19;;9859:1;9841:19;;;9752:127;63042:21;63078;:9;9841:19;;9859:1;9841:19;;;9752:127;63078:21;63114;:9;9841:19;;9859:1;9841:19;;;9752:127;63114:21;63150;:9;9841:19;;9859:1;9841:19;;;9752:127;62893:635;63468:4;63445:19;:9;9722:14;;9630:114;63445:19;:27;63441:87;;63489:20;:27;;-1:-1:-1;;63489:27:0;;;;;61746:1789::o;37643:155::-;37738:52;13479:10;37771:8;37781;37738:18;:52::i;38763:323::-;38937:41;13479:10;38970:7;38937:18;:41::i;:::-;38929:100;;;;-1:-1:-1;;;38929:100:0;;;;;;;:::i;:::-;39040:38;39054:4;39060:2;39064:7;39073:4;39040:13;:38::i;:::-;38763:323;;;;:::o;50490:37::-;;;;;;;:::i;60555:196::-;60682:13;60720:23;60735:7;60720:14;:23::i;60325:109::-;14734:13;:11;:13::i;:::-;60401:16:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;60401:25:0;;::::1;::::0;;;::::1;::::0;;60325:109::o;63661:100::-;63707:7;63734:19;:9;9722:14;;9630:114;61183:125;61233:7;61276:24;:14;9722;;9630:114;61276:24;61387:12;;61260:40;;;;:::i;15754:201::-;14734:13;:11;:13::i;:::-;-1:-1:-1;;;;;15843:22:0;::::1;15835:73;;;::::0;-1:-1:-1;;;15835:73:0;;14802:2:1;15835:73:0::1;::::0;::::1;14784:21:1::0;14841:2;14821:18;;;14814:30;14880:34;14860:18;;;14853:62;-1:-1:-1;;;14931:18:1;;;14924:36;14977:19;;15835:73:0::1;14600:402:1::0;15835:73:0::1;15919:28;15938:8;15919:18;:28::i;:::-;15754:201:::0;:::o;60199:118::-;14734:13;:11;:13::i;:::-;60280:20:::1;:29:::0;;;::::1;;;;-1:-1:-1::0;;60280:29:0;;::::1;::::0;;;::::1;::::0;;60199:118::o;34960:305::-;35062:4;-1:-1:-1;;;;;;35099:40:0;;-1:-1:-1;;;35099:40:0;;:105;;-1:-1:-1;;;;;;;35156:48:0;;-1:-1:-1;;;35156:48:0;35099:105;:158;;;-1:-1:-1;;;;;;;;;;27811:40:0;;;35221:36;27702:157;45375:135;40658:4;40682:16;;;:7;:16;;;;;;-1:-1:-1;;;;;40682:16:0;45449:53;;;;-1:-1:-1;;;45449:53:0;;14039:2:1;45449:53:0;;;14021:21:1;14078:2;14058:18;;;14051:30;-1:-1:-1;;;14097:18:1;;;14090:54;14161:18;;45449:53:0;13837:348:1;44654:174:0;44729:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;44729:29:0;-1:-1:-1;;;;;44729:29:0;;;;;;;;:24;;44783:23;44729:24;44783:14;:23::i;:::-;-1:-1:-1;;;;;44774:46:0;;;;;;;;;;;44654:174;;:::o;40887:264::-;40980:4;40997:13;41013:23;41028:7;41013:14;:23::i;:::-;40997:39;;41066:5;-1:-1:-1;;;;;41055:16:0;:7;-1:-1:-1;;;;;41055:16:0;;:52;;;-1:-1:-1;;;;;;37990:25:0;;;37966:4;37990:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;41075:32;41055:87;;;;41135:7;-1:-1:-1;;;;;41111:31:0;:20;41123:7;41111:11;:20::i;:::-;-1:-1:-1;;;;;41111:31:0;;41055:87;41047:96;40887:264;-1:-1:-1;;;;40887:264:0:o;43910:625::-;44069:4;-1:-1:-1;;;;;44042:31:0;:23;44057:7;44042:14;:23::i;:::-;-1:-1:-1;;;;;44042:31:0;;44034:81;;;;-1:-1:-1;;;44034:81:0;;15209:2:1;44034:81:0;;;15191:21:1;15248:2;15228:18;;;15221:30;15287:34;15267:18;;;15260:62;-1:-1:-1;;;15338:18:1;;;15331:35;15383:19;;44034:81:0;15007:401:1;44034:81:0;-1:-1:-1;;;;;44134:16:0;;44126:65;;;;-1:-1:-1;;;44126:65:0;;15615:2:1;44126:65:0;;;15597:21:1;15654:2;15634:18;;;15627:30;15693:34;15673:18;;;15666:62;-1:-1:-1;;;15744:18:1;;;15737:34;15788:19;;44126:65:0;15413:400:1;44126:65:0;44308:29;44325:1;44329:7;44308:8;:29::i;:::-;-1:-1:-1;;;;;44350:15:0;;;;;;:9;:15;;;;;:20;;44369:1;;44350:15;:20;;44369:1;;44350:20;:::i;:::-;;;;-1:-1:-1;;;;;;;44381:13:0;;;;;;:9;:13;;;;;:18;;44398:1;;44381:13;:18;;44398:1;;44381:18;:::i;:::-;;;;-1:-1:-1;;44410:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;44410:21:0;-1:-1:-1;;;;;44410:21:0;;;;;;;;;44449:27;;44410:16;;44449:27;;;;;;;36987:347;36917:417;;:::o;51663:146::-;51740:4;51764:37;51783:5;51790:4;;51796;51764:18;:37::i;:::-;51757:44;51663:146;-1:-1:-1;;;51663:146:0:o;41493:110::-;41569:26;41579:2;41583:7;41569:26;;;;;;;;;;;;:9;:26::i;10653:723::-;10709:13;10930:5;10939:1;10930:10;10926:53;;-1:-1:-1;;10957:10:0;;;;;;;;;;;;-1:-1:-1;;;10957:10:0;;;;;10653:723::o;10926:53::-;11004:5;10989:12;11045:78;11052:9;;11045:78;;11078:8;;;;:::i;:::-;;-1:-1:-1;11101:10:0;;-1:-1:-1;11109:2:0;11101:10;;:::i;:::-;;;11045:78;;;11133:19;11165:6;11155:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11155:17:0;;11133:39;;11183:154;11190:10;;11183:154;;11217:11;11227:1;11217:11;;:::i;:::-;;-1:-1:-1;11286:10:0;11294:2;11286:5;:10;:::i;:::-;11273:24;;:2;:24;:::i;:::-;11260:39;;11243:6;11250;11243:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;11243:56:0;;;;;;;;-1:-1:-1;11314:11:0;11323:2;11314:11;;:::i;:::-;;;11183:154;;49448:217;40658:4;40682:16;;;:7;:16;;;;;;-1:-1:-1;;;;;40682:16:0;49540:75;;;;-1:-1:-1;;;49540:75:0;;16269:2:1;49540:75:0;;;16251:21:1;16308:2;16288:18;;;16281:30;16347:34;16327:18;;;16320:62;-1:-1:-1;;;16398:18:1;;;16391:44;16452:19;;49540:75:0;16067:410:1;49540:75:0;49626:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;15013:132::-;14921:6;;-1:-1:-1;;;;;14921:6:0;13479:10;15077:23;15069:68;;;;-1:-1:-1;;;15069:68:0;;16684:2:1;15069:68:0;;;16666:21:1;;;16703:18;;;16696:30;16762:34;16742:18;;;16735:62;16814:18;;15069:68:0;16482:356:1;16115:191:0;16208:6;;;-1:-1:-1;;;;;16225:17:0;;;-1:-1:-1;;;;;;16225:17:0;;;;;;;16258:40;;16208:6;;;16225:17;16208:6;;16258:40;;16189:16;;16258:40;16178:128;16115:191;:::o;44971:315::-;45126:8;-1:-1:-1;;;;;45117:17:0;:5;-1:-1:-1;;;;;45117:17:0;;45109:55;;;;-1:-1:-1;;;45109:55:0;;17045:2:1;45109:55:0;;;17027:21:1;17084:2;17064:18;;;17057:30;17123:27;17103:18;;;17096:55;17168:18;;45109:55:0;16843:349:1;45109:55:0;-1:-1:-1;;;;;45175:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;45175:46:0;;;;;;;;;;45237:41;;540::1;;;45237::0;;513:18:1;45237:41:0;;;;;;;44971:315;;;:::o;39967:313::-;40123:28;40133:4;40139:2;40143:7;40123:9;:28::i;:::-;40170:47;40193:4;40199:2;40203:7;40212:4;40170:22;:47::i;:::-;40162:110;;;;-1:-1:-1;;;40162:110:0;;;;;;;:::i;48668:624::-;48741:13;48767:23;48782:7;48767:14;:23::i;:::-;48803;48829:19;;;:10;:19;;;;;48803:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48859:18;48880:10;36838:9;;;;;;;;;-1:-1:-1;36838:9:0;;;36761:94;48880:10;48859:31;;48972:4;48966:18;48988:1;48966:23;48962:72;;-1:-1:-1;49013:9:0;48668:624;-1:-1:-1;;48668:624:0:o;48962:72::-;49138:23;;:27;49134:108;;49213:4;49219:9;49196:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49182:48;;;;48668:624;;;:::o;49134:108::-;49261:23;49276:7;49261:14;:23::i;1252:190::-;1377:4;1430;1401:25;1414:5;1421:4;1401:12;:25::i;:::-;:33;;1252:190;-1:-1:-1;;;;1252:190:0:o;41830:319::-;41959:18;41965:2;41969:7;41959:5;:18::i;:::-;42010:53;42041:1;42045:2;42049:7;42058:4;42010:22;:53::i;:::-;41988:153;;;;-1:-1:-1;;;41988:153:0;;;;;;;:::i;46074:853::-;46228:4;-1:-1:-1;;;;;46249:13:0;;17841:19;:23;46245:675;;46285:71;;-1:-1:-1;;;46285:71:0;;-1:-1:-1;;;;;46285:36:0;;;;;:71;;13479:10;;46336:4;;46342:7;;46351:4;;46285:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46285:71:0;;;;;;;;-1:-1:-1;;46285:71:0;;;;;;;;;;;;:::i;:::-;;;46281:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46526:6;:13;46543:1;46526:18;46522:328;;46569:60;;-1:-1:-1;;;46569:60:0;;;;;;;:::i;46522:328::-;46800:6;46794:13;46785:6;46781:2;46777:15;46770:38;46281:584;-1:-1:-1;;;;;;46407:51:0;-1:-1:-1;;;46407:51:0;;-1:-1:-1;46400:58:0;;46245:675;-1:-1:-1;46904:4:0;46074:853;;;;;;:::o;36231:281::-;36304:13;36330:23;36345:7;36330:14;:23::i;:::-;36366:21;36390:10;36838:9;;;;;;;;;-1:-1:-1;36838:9:0;;;36761:94;36390:10;36366:34;;36442:1;36424:7;36418:21;:25;:86;;;;;;;;;;;;;;;;;36470:7;36479:18;:7;:16;:18::i;:::-;36453:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36411:93;36231:281;-1:-1:-1;;;36231:281:0:o;2119:296::-;2202:7;2245:4;2202:7;2260:118;2284:5;:12;2280:1;:16;2260:118;;;2333:33;2343:12;2357:5;2363:1;2357:8;;;;;;;;:::i;:::-;;;;;;;2333:9;:33::i;:::-;2318:48;-1:-1:-1;2298:3:0;;;;:::i;:::-;;;;2260:118;;;-1:-1:-1;2395:12:0;2119:296;-1:-1:-1;;;2119:296:0:o;42485:439::-;-1:-1:-1;;;;;42565:16:0;;42557:61;;;;-1:-1:-1;;;42557:61:0;;19041:2:1;42557:61:0;;;19023:21:1;;;19060:18;;;19053:30;19119:34;19099:18;;;19092:62;19171:18;;42557:61:0;18839:356:1;42557:61:0;40658:4;40682:16;;;:7;:16;;;;;;-1:-1:-1;;;;;40682:16:0;:30;42629:58;;;;-1:-1:-1;;;42629:58:0;;19402:2:1;42629:58:0;;;19384:21:1;19441:2;19421:18;;;19414:30;19480;19460:18;;;19453:58;19528:18;;42629:58:0;19200:352:1;42629:58:0;-1:-1:-1;;;;;42758:13:0;;;;;;:9;:13;;;;;:18;;42775:1;;42758:13;:18;;42775:1;;42758:18;:::i;:::-;;;;-1:-1:-1;;42787:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;42787:21:0;-1:-1:-1;;;;;42787:21:0;;;;;;;;42826:33;;42787:16;;;42826:33;;42787:16;;42826:33;51815:4250;;:::o;8326:149::-;8389:7;8420:1;8416;:5;:51;;8551:13;8645:15;;;8681:4;8674:15;;;8728:4;8712:21;;8416:51;;;8551:13;8645:15;;;8681:4;8674:15;;;8728:4;8712:21;;8424:20;8483:268;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:127::-;2749:10;2744:3;2740:20;2737:1;2730:31;2780:4;2777:1;2770:15;2804:4;2801:1;2794:15;2820:275;2891:2;2885:9;2956:2;2937:13;;-1:-1:-1;;2933:27:1;2921:40;;2991:18;2976:34;;3012:22;;;2973:62;2970:88;;;3038:18;;:::i;:::-;3074:2;3067:22;2820:275;;-1:-1:-1;2820:275:1:o;3100:712::-;3154:5;3207:3;3200:4;3192:6;3188:17;3184:27;3174:55;;3225:1;3222;3215:12;3174:55;3261:6;3248:20;3287:4;3310:18;3306:2;3303:26;3300:52;;;3332:18;;:::i;:::-;3378:2;3375:1;3371:10;3401:28;3425:2;3421;3417:11;3401:28;:::i;:::-;3463:15;;;3533;;;3529:24;;;3494:12;;;;3565:15;;;3562:35;;;3593:1;3590;3583:12;3562:35;3629:2;3621:6;3617:15;3606:26;;3641:142;3657:6;3652:3;3649:15;3641:142;;;3723:17;;3711:30;;3674:12;;;;3761;;;;3641:142;;;3801:5;3100:712;-1:-1:-1;;;;;;;3100:712:1:o;3817:348::-;3901:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:52;;;3970:1;3967;3960:12;3922:52;4010:9;3997:23;4043:18;4035:6;4032:30;4029:50;;;4075:1;4072;4065:12;4029:50;4098:61;4151:7;4142:6;4131:9;4127:22;4098:61;:::i;4170:416::-;4263:6;4271;4324:2;4312:9;4303:7;4299:23;4295:32;4292:52;;;4340:1;4337;4330:12;4292:52;4376:9;4363:23;4353:33;;4437:2;4426:9;4422:18;4409:32;4464:18;4456:6;4453:30;4450:50;;;4496:1;4493;4486:12;4450:50;4519:61;4572:7;4563:6;4552:9;4548:22;4519:61;:::i;:::-;4509:71;;;4170:416;;;;;:::o;4591:160::-;4656:20;;4712:13;;4705:21;4695:32;;4685:60;;4741:1;4738;4731:12;4756:180;4812:6;4865:2;4853:9;4844:7;4840:23;4836:32;4833:52;;;4881:1;4878;4871:12;4833:52;4904:26;4920:9;4904:26;:::i;4941:186::-;5000:6;5053:2;5041:9;5032:7;5028:23;5024:32;5021:52;;;5069:1;5066;5059:12;5021:52;5092:29;5111:9;5092:29;:::i;5132:254::-;5197:6;5205;5258:2;5246:9;5237:7;5233:23;5229:32;5226:52;;;5274:1;5271;5264:12;5226:52;5297:29;5316:9;5297:29;:::i;:::-;5287:39;;5345:35;5376:2;5365:9;5361:18;5345:35;:::i;:::-;5335:45;;5132:254;;;;;:::o;5391:980::-;5486:6;5494;5502;5510;5563:3;5551:9;5542:7;5538:23;5534:33;5531:53;;;5580:1;5577;5570:12;5531:53;5603:29;5622:9;5603:29;:::i;:::-;5593:39;;5651:2;5672:38;5706:2;5695:9;5691:18;5672:38;:::i;:::-;5662:48;;5757:2;5746:9;5742:18;5729:32;5719:42;;5812:2;5801:9;5797:18;5784:32;5835:18;5876:2;5868:6;5865:14;5862:34;;;5892:1;5889;5882:12;5862:34;5930:6;5919:9;5915:22;5905:32;;5975:7;5968:4;5964:2;5960:13;5956:27;5946:55;;5997:1;5994;5987:12;5946:55;6033:2;6020:16;6055:2;6051;6048:10;6045:36;;;6061:18;;:::i;:::-;6103:53;6146:2;6127:13;;-1:-1:-1;;6123:27:1;6119:36;;6103:53;:::i;:::-;6090:66;;6179:2;6172:5;6165:17;6219:7;6214:2;6209;6205;6201:11;6197:20;6194:33;6191:53;;;6240:1;6237;6230:12;6191:53;6295:2;6290;6286;6282:11;6277:2;6270:5;6266:14;6253:45;6339:1;6334:2;6329;6322:5;6318:14;6314:23;6307:34;;6360:5;6350:15;;;;;5391:980;;;;;;;:::o;6376:260::-;6444:6;6452;6505:2;6493:9;6484:7;6480:23;6476:32;6473:52;;;6521:1;6518;6511:12;6473:52;6544:29;6563:9;6544:29;:::i;:::-;6534:39;;6592:38;6626:2;6615:9;6611:18;6592:38;:::i;6823:380::-;6902:1;6898:12;;;;6945;;;6966:61;;7020:4;7012:6;7008:17;6998:27;;6966:61;7073:2;7065:6;7062:14;7042:18;7039:38;7036:161;;7119:10;7114:3;7110:20;7107:1;7100:31;7154:4;7151:1;7144:15;7182:4;7179:1;7172:15;7036:161;;6823:380;;;:::o;8041:410::-;8243:2;8225:21;;;8282:2;8262:18;;;8255:30;8321:34;8316:2;8301:18;;8294:62;-1:-1:-1;;;8387:2:1;8372:18;;8365:44;8441:3;8426:19;;8041:410::o;8456:397::-;8658:2;8640:21;;;8697:2;8677:18;;;8670:30;8736:34;8731:2;8716:18;;8709:62;-1:-1:-1;;;8802:2:1;8787:18;;8780:31;8843:3;8828:19;;8456:397::o;9092:338::-;9294:2;9276:21;;;9333:2;9313:18;;;9306:30;-1:-1:-1;;;9367:2:1;9352:18;;9345:44;9421:2;9406:18;;9092:338::o;9435:127::-;9496:10;9491:3;9487:20;9484:1;9477:31;9527:4;9524:1;9517:15;9551:4;9548:1;9541:15;9567:128;9607:3;9638:1;9634:6;9631:1;9628:13;9625:39;;;9644:18;;:::i;:::-;-1:-1:-1;9680:9:1;;9567:128::o;9700:356::-;9902:2;9884:21;;;9921:18;;;9914:30;9980:34;9975:2;9960:18;;9953:62;10047:2;10032:18;;9700:356::o;10061:::-;10263:2;10245:21;;;10282:18;;;10275:30;10341:34;10336:2;10321:18;;10314:62;10408:2;10393:18;;10061:356::o;10422:397::-;10624:2;10606:21;;;10663:2;10643:18;;;10636:30;10702:34;10697:2;10682:18;;10675:62;-1:-1:-1;;;10768:2:1;10753:18;;10746:31;10809:3;10794:19;;10422:397::o;10824:127::-;10885:10;10880:3;10876:20;10873:1;10866:31;10916:4;10913:1;10906:15;10940:4;10937:1;10930:15;10956:120;10996:1;11022;11012:35;;11027:18;;:::i;:::-;-1:-1:-1;11061:9:1;;10956:120::o;11081:168::-;11121:7;11187:1;11183;11179:6;11175:14;11172:1;11169:21;11164:1;11157:9;11150:17;11146:45;11143:71;;;11194:18;;:::i;:::-;-1:-1:-1;11234:9:1;;11081:168::o;11254:125::-;11294:4;11322:1;11319;11316:8;11313:34;;;11327:18;;:::i;:::-;-1:-1:-1;11364:9:1;;11254:125::o;11510:973::-;11595:12;;11560:3;;11650:1;11670:18;;;;11723;;;;11750:61;;11804:4;11796:6;11792:17;11782:27;;11750:61;11830:2;11878;11870:6;11867:14;11847:18;11844:38;11841:161;;11924:10;11919:3;11915:20;11912:1;11905:31;11959:4;11956:1;11949:15;11987:4;11984:1;11977:15;11841:161;12018:18;12045:104;;;;12163:1;12158:319;;;;12011:466;;12045:104;-1:-1:-1;;12078:24:1;;12066:37;;12123:16;;;;-1:-1:-1;12045:104:1;;12158:319;11457:1;11450:14;;;11494:4;11481:18;;12252:1;12266:165;12280:6;12277:1;12274:13;12266:165;;;12358:14;;12345:11;;;12338:35;12401:16;;;;12295:10;;12266:165;;;12270:3;;12460:6;12455:3;12451:16;12444:23;;12011:466;;;;;;;11510:973;;;;:::o;12488:456::-;12709:3;12737:38;12771:3;12763:6;12737:38;:::i;:::-;12804:6;12798:13;12820:52;12865:6;12861:2;12854:4;12846:6;12842:17;12820:52;:::i;:::-;12888:50;12930:6;12926:2;12922:15;12914:6;12888:50;:::i;13697:135::-;13736:3;13757:17;;;13754:43;;13777:18;;:::i;:::-;-1:-1:-1;13824:1:1;13813:13;;13697:135::o;15818:112::-;15850:1;15876;15866:35;;15881:18;;:::i;:::-;-1:-1:-1;15915:9:1;;15818:112::o;15935:127::-;15996:10;15991:3;15987:20;15984:1;15977:31;16027:4;16024:1;16017:15;16051:4;16048:1;16041:15;17197:414;17399:2;17381:21;;;17438:2;17418:18;;;17411:30;17477:34;17472:2;17457:18;;17450:62;-1:-1:-1;;;17543:2:1;17528:18;;17521:48;17601:3;17586:19;;17197:414::o;17616:470::-;17795:3;17833:6;17827:13;17849:53;17895:6;17890:3;17883:4;17875:6;17871:17;17849:53;:::i;:::-;17965:13;;17924:16;;;;17987:57;17965:13;17924:16;18021:4;18009:17;;17987:57;:::i;:::-;18060:20;;17616:470;-1:-1:-1;;;;17616:470:1:o;18091:489::-;-1:-1:-1;;;;;18360:15:1;;;18342:34;;18412:15;;18407:2;18392:18;;18385:43;18459:2;18444:18;;18437:34;;;18507:3;18502:2;18487:18;;18480:31;;;18285:4;;18528:46;;18554:19;;18546:6;18528:46;:::i;:::-;18520:54;18091:489;-1:-1:-1;;;;;;18091:489:1:o;18585:249::-;18654:6;18707:2;18695:9;18686:7;18682:23;18678:32;18675:52;;;18723:1;18720;18713:12;18675:52;18755:9;18749:16;18774:30;18798:5;18774:30;:::i
Swarm Source
ipfs://38c6e5b0486a5f29401b31d1b10ecc9dd27171943632f243ac07ff441f5b90d6
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.