Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,000 C.U.B.
Holders
702
Total Transfers
-
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CubKingdom
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-25 */ // SPDX-License-Identifier: MIT /* ██████ ██ ██ ██████ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██████ ██ ███ ██ ██ ██ ██ ██████ ██ ██████ ██ ██████ ██ */ pragma solidity ^0.8.0; // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) /** * @dev These functions deal with verification of Merkle Trees 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 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++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: contracts/Tiny_Frens.sol // 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 v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @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); } } // 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 v4.4.1 (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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (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 `IERC721.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 v4.4.1 (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`, 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 be 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // 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 v4.4.1 (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: balance query for the zero address"); 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: owner query for nonexistent token"); 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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); 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 overriden 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 owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); 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: transfer caller is not 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: transfer caller is not 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) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, 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); } /** * @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); } /** * @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 of token that is not own"); 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); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {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 a {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 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 { 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 {} } // File: contracts/contract.sol pragma solidity >=0.7.0 <0.9.0; contract CubKingdom is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = ""; uint256 public OGSaleCost = 0.1 ether; uint256 public WLSaleCost = 0.15 ether; uint256 public publicSaleCost = 0.2 ether; uint256 public maxSupply = 8888; uint256 public maxMintAmountPerTransaction = 20; uint256 public maxMintAmountPerWLAccount = 10; uint256 public maxMintAmountPerOGAccount = 5; bool public paused = true; bool public OGSaleActive=true; bool public WLSaleActive=false; bytes32 public merkleRoot= 0x0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c; constructor() ERC721("Cub Kingdom", "C.U.B.") { _mintLoop(msg.sender, 100); } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(bytes32[] calldata _merkleProof, uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); if(OGSaleActive==true){ require(msg.value >= OGSaleCost * _mintAmount, "Insufficient funds!"); require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerOGAccount, "Mint limit exceeded." ); //verify the provided _merkleProof bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the VIP whitelist."); } else if(WLSaleActive==true){ require(msg.value >= WLSaleCost * _mintAmount, "Insufficient funds!"); require(balanceOf(msg.sender) + _mintAmount <= maxMintAmountPerWLAccount, "Mint limit exceeded." ); //verify the provided _merkleProof bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not part of the Presale whitelist."); } else{ require(msg.value >= publicSaleCost * _mintAmount, "Insufficient funds!"); require(_mintAmount <= maxMintAmountPerTransaction, "Mint limit exceeded." ); } _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : ""; } function setPublicSaleCost(uint256 _publicSaleCost) public onlyOwner { publicSaleCost = _publicSaleCost; } function setWLSaleCost(uint256 _WLSaleCost) public onlyOwner { WLSaleCost = _WLSaleCost; } function setOGSaleCost(uint256 _OGSaleCost) public onlyOwner { OGSaleCost = _OGSaleCost; } function setMaxMintPerOGAccount(uint256 _maxMintPerOGAccount) public onlyOwner { maxMintAmountPerOGAccount = _maxMintPerOGAccount; } function setMaxMintPerWLAccount(uint256 _maxMintPerWLAccount) public onlyOwner { maxMintAmountPerWLAccount = _maxMintPerWLAccount; } function setMaxMintPerTransaction(uint256 _maxMintPerTransaction) public onlyOwner { maxMintAmountPerTransaction = _maxMintPerTransaction; } function endOGSale() public onlyOwner { OGSaleActive = false; WLSaleActive = true; paused=true; } function endWLSale() public onlyOwner { require(OGSaleActive==false); WLSaleActive=false; paused=true; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } function withdraw() public onlyOwner { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":[],"name":"OGSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OGSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"endOGSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endWLSale","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":[{"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":[],"name":"maxMintAmountPerOGAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWLAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"_maxMintPerOGAccount","type":"uint256"}],"name":"setMaxMintPerOGAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTransaction","type":"uint256"}],"name":"setMaxMintPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerWLAccount","type":"uint256"}],"name":"setMaxMintPerWLAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_OGSaleCost","type":"uint256"}],"name":"setOGSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_WLSaleCost","type":"uint256"}],"name":"setWLSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600890805190602001906200002b929190620007d4565b5067016345785d8a0000600955670214e8348c4f0000600a556702c68af0bb140000600b556122b8600c556014600d55600a600e556005600f556001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055507f0de6c9f4b501d88b442db96c4f3653e394ef2ce0c67fc9d33527d625663f633c60001b601155348015620000ea57600080fd5b506040518060400160405280600b81526020017f437562204b696e67646f6d0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f432e552e422e000000000000000000000000000000000000000000000000000081525081600090805190602001906200016f929190620007d4565b50806001908051906020019062000188929190620007d4565b505050620001ab6200019f620001c460201b60201c565b620001cc60201b60201c565b620001be3360646200029260201b60201c565b62000d3c565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015620002f357620002b56007620002f860201b620022031760201c565b620002dd83620002d160076200030e60201b620022191760201c565b6200031c60201b60201c565b8080620002ea9062000bbf565b91505062000295565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6200033e8282604051806020016040528060008152506200034260201b60201c565b5050565b620003548383620003b060201b60201c565b6200036960008484846200059660201b60201c565b620003ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a290620009f9565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000423576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041a9062000a3d565b60405180910390fd5b62000434816200075060201b60201c565b1562000477576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046e9062000a1b565b60405180910390fd5b6200048b60008383620007bc60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004dd919062000a8c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005c48473ffffffffffffffffffffffffffffffffffffffff16620007c160201b620022271760201c565b1562000743578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005f6620001c460201b60201c565b8786866040518563ffffffff1660e01b81526004016200061a9493929190620009a5565b602060405180830381600087803b1580156200063557600080fd5b505af19250505080156200066957506040513d601f19601f820116820180604052508101906200066691906200089b565b60015b620006f2573d80600081146200069c576040519150601f19603f3d011682016040523d82523d6000602084013e620006a1565b606091505b50600081511415620006ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e190620009f9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000748565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620007e29062000b89565b90600052602060002090601f01602090048101928262000806576000855562000852565b82601f106200082157805160ff191683800117855562000852565b8280016001018555821562000852579182015b828111156200085157825182559160200191906001019062000834565b5b50905062000861919062000865565b5090565b5b808211156200088057600081600090555060010162000866565b5090565b600081519050620008958162000d22565b92915050565b600060208284031215620008b457620008b362000c6b565b5b6000620008c48482850162000884565b91505092915050565b620008d88162000ae9565b82525050565b6000620008eb8262000a5f565b620008f7818562000a6a565b93506200090981856020860162000b53565b620009148162000c70565b840191505092915050565b60006200092e60328362000a7b565b91506200093b8262000c81565b604082019050919050565b600062000955601c8362000a7b565b9150620009628262000cd0565b602082019050919050565b60006200097c60208362000a7b565b9150620009898262000cf9565b602082019050919050565b6200099f8162000b49565b82525050565b6000608082019050620009bc6000830187620008cd565b620009cb6020830186620008cd565b620009da604083018562000994565b8181036060830152620009ee8184620008de565b905095945050505050565b6000602082019050818103600083015262000a14816200091f565b9050919050565b6000602082019050818103600083015262000a368162000946565b9050919050565b6000602082019050818103600083015262000a58816200096d565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000a998262000b49565b915062000aa68362000b49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ade5762000add62000c0d565b5b828201905092915050565b600062000af68262000b29565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b7357808201518184015260208101905062000b56565b8381111562000b83576000848401525b50505050565b6000600282049050600182168062000ba257607f821691505b6020821081141562000bb95762000bb862000c3c565b5b50919050565b600062000bcc8262000b49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000c025762000c0162000c0d565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000d2d8162000afd565b811462000d3957600080fd5b50565b614ad58062000d4c6000396000f3fe6080604052600436106102665760003560e01c806362b99ad4116101445780638dbb7c06116100b6578063c87b56dd1161007a578063c87b56dd146108ac578063d5abeb01146108e9578063e985e9c514610914578063efbd73f414610951578063f2fde38b1461097a578063fc35206d146109a357610266565b80638dbb7c06146107db57806395d89b4114610804578063a22cb4651461082f578063b88d4fde14610858578063bbb897441461088157610266565b8063763f4e6411610108578063763f4e64146106df57806378db32e9146107085780637bf65c12146107335780637cb647591461075e5780637ec4a659146107875780638da5cb5b146107b057610266565b806362b99ad4146105f85780636352211e1461062357806370a0823114610660578063715018a61461069d578063727a42f6146106b457610266565b80632db7b895116101dd5780633ccfd60b116101a15780633ccfd60b1461050957806342842e0e14610520578063438b630014610549578063453afb0f1461058657806345de0d9b146105b15780635c975abb146105cd57610266565b80632db7b8951461044c5780632e6cebe5146104635780632eb4a7ab1461048c57806331347c18146104b757806337481dfd146104e057610266565b8063095ea7b31161022f578063095ea7b3146103645780630e2ab0851461038d57806316c38b3c146103a457806318160ddd146103cd5780631ea516a7146103f857806323b872dd1461042357610266565b80625c66c21461026b57806301ffc9a71461029657806304e6d4b2146102d357806306fdde03146102fc578063081812fc14610327575b600080fd5b34801561027757600080fd5b506102806109ce565b60405161028d9190613f3d565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613527565b6109d4565b6040516102ca9190613c05565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906135ca565b610ab6565b005b34801561030857600080fd5b50610311610b3c565b60405161031e9190613c3b565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906135ca565b610bce565b60405161035b9190613b7c565b60405180910390f35b34801561037057600080fd5b5061038b6004803603810190610386919061342d565b610c53565b005b34801561039957600080fd5b506103a2610d6b565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906134cd565b610e3a565b005b3480156103d957600080fd5b506103e2610ed3565b6040516103ef9190613f3d565b60405180910390f35b34801561040457600080fd5b5061040d610ee4565b60405161041a9190613f3d565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613317565b610eea565b005b34801561045857600080fd5b50610461610f4a565b005b34801561046f57600080fd5b5061048a600480360381019061048591906135ca565b61101e565b005b34801561049857600080fd5b506104a16110a4565b6040516104ae9190613c20565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906135ca565b6110aa565b005b3480156104ec57600080fd5b50610507600480360381019061050291906135ca565b611130565b005b34801561051557600080fd5b5061051e6111b6565b005b34801561052c57600080fd5b5061054760048036038101906105429190613317565b6112b2565b005b34801561055557600080fd5b50610570600480360381019061056b91906132aa565b6112d2565b60405161057d9190613be3565b60405180910390f35b34801561059257600080fd5b5061059b6113dd565b6040516105a89190613f3d565b60405180910390f35b6105cb60048036038101906105c6919061346d565b6113e3565b005b3480156105d957600080fd5b506105e261187b565b6040516105ef9190613c05565b60405180910390f35b34801561060457600080fd5b5061060d61188e565b60405161061a9190613c3b565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906135ca565b61191c565b6040516106579190613b7c565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906132aa565b6119ce565b6040516106949190613f3d565b60405180910390f35b3480156106a957600080fd5b506106b2611a86565b005b3480156106c057600080fd5b506106c9611b0e565b6040516106d69190613c05565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906135ca565b611b21565b005b34801561071457600080fd5b5061071d611ba7565b60405161072a9190613f3d565b60405180910390f35b34801561073f57600080fd5b50610748611bad565b6040516107559190613c05565b60405180910390f35b34801561076a57600080fd5b50610785600480360381019061078091906134fa565b611bc0565b005b34801561079357600080fd5b506107ae60048036038101906107a99190613581565b611c46565b005b3480156107bc57600080fd5b506107c5611cdc565b6040516107d29190613b7c565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906135ca565b611d06565b005b34801561081057600080fd5b50610819611d8c565b6040516108269190613c3b565b60405180910390f35b34801561083b57600080fd5b50610856600480360381019061085191906133ed565b611e1e565b005b34801561086457600080fd5b5061087f600480360381019061087a919061336a565b611e34565b005b34801561088d57600080fd5b50610896611e96565b6040516108a39190613f3d565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce91906135ca565b611e9c565b6040516108e09190613c3b565b60405180910390f35b3480156108f557600080fd5b506108fe611f43565b60405161090b9190613f3d565b60405180910390f35b34801561092057600080fd5b5061093b600480360381019061093691906132d7565b611f49565b6040516109489190613c05565b60405180910390f35b34801561095d57600080fd5b50610978600480360381019061097391906135f7565b611fdd565b005b34801561098657600080fd5b506109a1600480360381019061099c91906132aa565b612105565b005b3480156109af57600080fd5b506109b86121fd565b6040516109c59190613f3d565b60405180910390f35b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aaf5750610aae8261223a565b5b9050919050565b610abe6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610adc611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613e1d565b60405180910390fd5b80600f8190555050565b606060008054610b4b9061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b779061423b565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b6000610bd9826122ac565b610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613dfd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5e8261191c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613ebd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cee6122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610d1d5750610d1c81610d176122a4565b611f49565b5b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613d7d565b60405180910390fd5b610d668383612318565b505050565b610d736122a4565b73ffffffffffffffffffffffffffffffffffffffff16610d91611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613e1d565b60405180910390fd5b6000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b610e426122a4565b73ffffffffffffffffffffffffffffffffffffffff16610e60611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90613e1d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610edf6007612219565b905090565b600f5481565b610efb610ef56122a4565b826123d1565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613efd565b60405180910390fd5b610f458383836124af565b505050565b610f526122a4565b73ffffffffffffffffffffffffffffffffffffffff16610f70611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613e1d565b60405180910390fd5b60001515601060019054906101000a900460ff16151514610fe657600080fd5b6000601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b6110266122a4565b73ffffffffffffffffffffffffffffffffffffffff16611044611cdc565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613e1d565b60405180910390fd5b80600d8190555050565b60115481565b6110b26122a4565b73ffffffffffffffffffffffffffffffffffffffff166110d0611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613e1d565b60405180910390fd5b80600a8190555050565b6111386122a4565b73ffffffffffffffffffffffffffffffffffffffff16611156611cdc565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390613e1d565b60405180910390fd5b8060098190555050565b6111be6122a4565b73ffffffffffffffffffffffffffffffffffffffff166111dc611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613e1d565b60405180910390fd5b600061123c611cdc565b73ffffffffffffffffffffffffffffffffffffffff164760405161125f90613b67565b60006040518083038185875af1925050503d806000811461129c576040519150601f19603f3d011682016040523d82523d6000602084013e6112a1565b606091505b50509050806112af57600080fd5b50565b6112cd83838360405180602001604052806000815250611e34565b505050565b606060006112df836119ce565b905060008167ffffffffffffffff8111156112fd576112fc6143f8565b5b60405190808252806020026020018201604052801561132b5781602001602082028036833780820191505090505b50905060006001905060005b83811080156113485750600c548211155b156113d15760006113588361191c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113bd57828483815181106113a2576113a16143c9565b5b60200260200101818152505081806113b99061429e565b9250505b82806113c89061429e565b93505050611337565b82945050505050919050565b600b5481565b8060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613cdd565b60405180910390fd5b600c54816114356007612219565b61143f9190614066565b1115611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790613edd565b60405180910390fd5b601060009054906101000a900460ff16156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613e3d565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561165257816009546114fa91906140ed565b34101561153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613f1d565b60405180910390fd5b600f5482611549336119ce565b6115539190614066565b1115611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613c5d565b60405180910390fd5b6000336040516020016115a79190613b1d565b60405160208183030381529060405280519060200120905061160d858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361270b565b61164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613e5d565b60405180910390fd5b5061186b565b60011515601060029054906101000a900460ff16151514156117d45781600a5461167c91906140ed565b3410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613f1d565b60405180910390fd5b600e54826116cb336119ce565b6116d59190614066565b1115611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613c5d565b60405180910390fd5b6000336040516020016117299190613b1d565b60405160208183030381529060405280519060200120905061178f858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361270b565b6117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590613d5d565b60405180910390fd5b5061186a565b81600b546117e291906140ed565b341015611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613f1d565b60405180910390fd5b600d54821115611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090613c5d565b60405180910390fd5b5b5b6118753383612722565b50505050565b601060009054906101000a900460ff1681565b6008805461189b9061423b565b80601f01602080910402602001604051908101604052809291908181526020018280546118c79061423b565b80156119145780601f106118e957610100808354040283529160200191611914565b820191906000526020600020905b8154815290600101906020018083116118f757829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90613dbd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613d9d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a8e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611aac611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af990613e1d565b60405180910390fd5b611b0c6000612762565b565b601060019054906101000a900460ff1681565b611b296122a4565b73ffffffffffffffffffffffffffffffffffffffff16611b47611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613e1d565b60405180910390fd5b80600e8190555050565b600e5481565b601060029054906101000a900460ff1681565b611bc86122a4565b73ffffffffffffffffffffffffffffffffffffffff16611be6611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3390613e1d565b60405180910390fd5b8060118190555050565b611c4e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990613e1d565b60405180910390fd5b8060089080519060200190611cd8929190613053565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d0e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990613e1d565b60405180910390fd5b80600b8190555050565b606060018054611d9b9061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc79061423b565b8015611e145780601f10611de957610100808354040283529160200191611e14565b820191906000526020600020905b815481529060010190602001808311611df757829003601f168201915b5050505050905090565b611e30611e296122a4565b8383612828565b5050565b611e45611e3f6122a4565b836123d1565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613efd565b60405180910390fd5b611e9084848484612995565b50505050565b600d5481565b6060611ea7826122ac565b611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613e9d565b60405180910390fd5b6000611ef06129f1565b90506000815111611f105760405180602001604052806000815250611f3b565b80611f1a84612a83565b604051602001611f2b929190613b38565b6040516020818303038152906040525b915050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613cdd565b60405180910390fd5b600c548161202f6007612219565b6120399190614066565b111561207a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207190613edd565b60405180910390fd5b6120826122a4565b73ffffffffffffffffffffffffffffffffffffffff166120a0611cdc565b73ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90613e1d565b60405180910390fd5b6121008284612722565b505050565b61210d6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661212b611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613e1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613c9d565b60405180910390fd5b6121fa81612762565b50565b60095481565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661238b8361191c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123dc826122ac565b61241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290613d3d565b60405180910390fd5b60006124268361191c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249557508373ffffffffffffffffffffffffffffffffffffffff1661247d84610bce565b73ffffffffffffffffffffffffffffffffffffffff16145b806124a657506124a58185611f49565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124cf8261191c565b73ffffffffffffffffffffffffffffffffffffffff1614612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90613e7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c90613cfd565b60405180910390fd5b6125a0838383612be4565b6125ab600082612318565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb9190614147565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126529190614066565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826127188584612be9565b1490509392505050565b60005b8181101561275d576127376007612203565b61274a836127456007612219565b612c5e565b80806127559061429e565b915050612725565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90613d1d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129889190613c05565b60405180910390a3505050565b6129a08484846124af565b6129ac84848484612c7c565b6129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e290613c7d565b60405180910390fd5b50505050565b606060088054612a009061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054612a2c9061423b565b8015612a795780601f10612a4e57610100808354040283529160200191612a79565b820191906000526020600020905b815481529060010190602001808311612a5c57829003601f168201915b5050505050905090565b60606000821415612acb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bdf565b600082905060005b60008214612afd578080612ae69061429e565b915050600a82612af691906140bc565b9150612ad3565b60008167ffffffffffffffff811115612b1957612b186143f8565b5b6040519080825280601f01601f191660200182016040528015612b4b5781602001600182028036833780820191505090505b5090505b60008514612bd857600182612b649190614147565b9150600a85612b73919061430b565b6030612b7f9190614066565b60f81b818381518110612b9557612b946143c9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bd191906140bc565b9450612b4f565b8093505050505b919050565b505050565b60008082905060005b8451811015612c53576000858281518110612c1057612c0f6143c9565b5b60200260200101519050808311612c3257612c2b8382612e13565b9250612c3f565b612c3c8184612e13565b92505b508080612c4b9061429e565b915050612bf2565b508091505092915050565b612c78828260405180602001604052806000815250612e2a565b5050565b6000612c9d8473ffffffffffffffffffffffffffffffffffffffff16612227565b15612e06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cc66122a4565b8786866040518563ffffffff1660e01b8152600401612ce89493929190613b97565b602060405180830381600087803b158015612d0257600080fd5b505af1925050508015612d3357506040513d601f19601f82011682018060405250810190612d309190613554565b60015b612db6573d8060008114612d63576040519150601f19603f3d011682016040523d82523d6000602084013e612d68565b606091505b50600081511415612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da590613c7d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e0b565b600190505b949350505050565b600082600052816020526040600020905092915050565b612e348383612e85565b612e416000848484612c7c565b612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790613c7d565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eec90613ddd565b60405180910390fd5b612efe816122ac565b15612f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3590613cbd565b60405180910390fd5b612f4a60008383612be4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9a9190614066565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461305f9061423b565b90600052602060002090601f01602090048101928261308157600085556130c8565b82601f1061309a57805160ff19168380011785556130c8565b828001600101855582156130c8579182015b828111156130c75782518255916020019190600101906130ac565b5b5090506130d591906130d9565b5090565b5b808211156130f25760008160009055506001016130da565b5090565b600061310961310484613f7d565b613f58565b90508281526020810184848401111561312557613124614436565b5b6131308482856141f9565b509392505050565b600061314b61314684613fae565b613f58565b90508281526020810184848401111561316757613166614436565b5b6131728482856141f9565b509392505050565b60008135905061318981614a2c565b92915050565b60008083601f8401126131a5576131a461442c565b5b8235905067ffffffffffffffff8111156131c2576131c1614427565b5b6020830191508360208202830111156131de576131dd614431565b5b9250929050565b6000813590506131f481614a43565b92915050565b60008135905061320981614a5a565b92915050565b60008135905061321e81614a71565b92915050565b60008151905061323381614a71565b92915050565b600082601f83011261324e5761324d61442c565b5b813561325e8482602086016130f6565b91505092915050565b600082601f83011261327c5761327b61442c565b5b813561328c848260208601613138565b91505092915050565b6000813590506132a481614a88565b92915050565b6000602082840312156132c0576132bf614440565b5b60006132ce8482850161317a565b91505092915050565b600080604083850312156132ee576132ed614440565b5b60006132fc8582860161317a565b925050602061330d8582860161317a565b9150509250929050565b6000806000606084860312156133305761332f614440565b5b600061333e8682870161317a565b935050602061334f8682870161317a565b925050604061336086828701613295565b9150509250925092565b6000806000806080858703121561338457613383614440565b5b60006133928782880161317a565b94505060206133a38782880161317a565b93505060406133b487828801613295565b925050606085013567ffffffffffffffff8111156133d5576133d461443b565b5b6133e187828801613239565b91505092959194509250565b6000806040838503121561340457613403614440565b5b60006134128582860161317a565b9250506020613423858286016131e5565b9150509250929050565b6000806040838503121561344457613443614440565b5b60006134528582860161317a565b925050602061346385828601613295565b9150509250929050565b60008060006040848603121561348657613485614440565b5b600084013567ffffffffffffffff8111156134a4576134a361443b565b5b6134b08682870161318f565b935093505060206134c386828701613295565b9150509250925092565b6000602082840312156134e3576134e2614440565b5b60006134f1848285016131e5565b91505092915050565b6000602082840312156135105761350f614440565b5b600061351e848285016131fa565b91505092915050565b60006020828403121561353d5761353c614440565b5b600061354b8482850161320f565b91505092915050565b60006020828403121561356a57613569614440565b5b600061357884828501613224565b91505092915050565b60006020828403121561359757613596614440565b5b600082013567ffffffffffffffff8111156135b5576135b461443b565b5b6135c184828501613267565b91505092915050565b6000602082840312156135e0576135df614440565b5b60006135ee84828501613295565b91505092915050565b6000806040838503121561360e5761360d614440565b5b600061361c85828601613295565b925050602061362d8582860161317a565b9150509250929050565b60006136438383613aff565b60208301905092915050565b6136588161417b565b82525050565b61366f61366a8261417b565b6142e7565b82525050565b600061368082613fef565b61368a818561401d565b935061369583613fdf565b8060005b838110156136c65781516136ad8882613637565b97506136b883614010565b925050600181019050613699565b5085935050505092915050565b6136dc8161418d565b82525050565b6136eb81614199565b82525050565b60006136fc82613ffa565b613706818561402e565b9350613716818560208601614208565b61371f81614445565b840191505092915050565b600061373582614005565b61373f818561404a565b935061374f818560208601614208565b61375881614445565b840191505092915050565b600061376e82614005565b613778818561405b565b9350613788818560208601614208565b80840191505092915050565b60006137a160148361404a565b91506137ac82614463565b602082019050919050565b60006137c460328361404a565b91506137cf8261448c565b604082019050919050565b60006137e760268361404a565b91506137f2826144db565b604082019050919050565b600061380a601c8361404a565b91506138158261452a565b602082019050919050565b600061382d60148361404a565b915061383882614553565b602082019050919050565b600061385060248361404a565b915061385b8261457c565b604082019050919050565b600061387360198361404a565b915061387e826145cb565b602082019050919050565b6000613896602c8361404a565b91506138a1826145f4565b604082019050919050565b60006138b960228361404a565b91506138c482614643565b604082019050919050565b60006138dc60388361404a565b91506138e782614692565b604082019050919050565b60006138ff602a8361404a565b915061390a826146e1565b604082019050919050565b600061392260298361404a565b915061392d82614730565b604082019050919050565b600061394560208361404a565b91506139508261477f565b602082019050919050565b6000613968602c8361404a565b9150613973826147a8565b604082019050919050565b600061398b60058361405b565b9150613996826147f7565b600582019050919050565b60006139ae60208361404a565b91506139b982614820565b602082019050919050565b60006139d160178361404a565b91506139dc82614849565b602082019050919050565b60006139f4601e8361404a565b91506139ff82614872565b602082019050919050565b6000613a1760298361404a565b9150613a228261489b565b604082019050919050565b6000613a3a602f8361404a565b9150613a45826148ea565b604082019050919050565b6000613a5d60218361404a565b9150613a6882614939565b604082019050919050565b6000613a8060008361403f565b9150613a8b82614988565b600082019050919050565b6000613aa360148361404a565b9150613aae8261498b565b602082019050919050565b6000613ac660318361404a565b9150613ad1826149b4565b604082019050919050565b6000613ae960138361404a565b9150613af482614a03565b602082019050919050565b613b08816141ef565b82525050565b613b17816141ef565b82525050565b6000613b29828461365e565b60148201915081905092915050565b6000613b448285613763565b9150613b508284613763565b9150613b5b8261397e565b91508190509392505050565b6000613b7282613a73565b9150819050919050565b6000602082019050613b91600083018461364f565b92915050565b6000608082019050613bac600083018761364f565b613bb9602083018661364f565b613bc66040830185613b0e565b8181036060830152613bd881846136f1565b905095945050505050565b60006020820190508181036000830152613bfd8184613675565b905092915050565b6000602082019050613c1a60008301846136d3565b92915050565b6000602082019050613c3560008301846136e2565b92915050565b60006020820190508181036000830152613c55818461372a565b905092915050565b60006020820190508181036000830152613c7681613794565b9050919050565b60006020820190508181036000830152613c96816137b7565b9050919050565b60006020820190508181036000830152613cb6816137da565b9050919050565b60006020820190508181036000830152613cd6816137fd565b9050919050565b60006020820190508181036000830152613cf681613820565b9050919050565b60006020820190508181036000830152613d1681613843565b9050919050565b60006020820190508181036000830152613d3681613866565b9050919050565b60006020820190508181036000830152613d5681613889565b9050919050565b60006020820190508181036000830152613d76816138ac565b9050919050565b60006020820190508181036000830152613d96816138cf565b9050919050565b60006020820190508181036000830152613db6816138f2565b9050919050565b60006020820190508181036000830152613dd681613915565b9050919050565b60006020820190508181036000830152613df681613938565b9050919050565b60006020820190508181036000830152613e168161395b565b9050919050565b60006020820190508181036000830152613e36816139a1565b9050919050565b60006020820190508181036000830152613e56816139c4565b9050919050565b60006020820190508181036000830152613e76816139e7565b9050919050565b60006020820190508181036000830152613e9681613a0a565b9050919050565b60006020820190508181036000830152613eb681613a2d565b9050919050565b60006020820190508181036000830152613ed681613a50565b9050919050565b60006020820190508181036000830152613ef681613a96565b9050919050565b60006020820190508181036000830152613f1681613ab9565b9050919050565b60006020820190508181036000830152613f3681613adc565b9050919050565b6000602082019050613f526000830184613b0e565b92915050565b6000613f62613f73565b9050613f6e828261426d565b919050565b6000604051905090565b600067ffffffffffffffff821115613f9857613f976143f8565b5b613fa182614445565b9050602081019050919050565b600067ffffffffffffffff821115613fc957613fc86143f8565b5b613fd282614445565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614071826141ef565b915061407c836141ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140b1576140b061433c565b5b828201905092915050565b60006140c7826141ef565b91506140d2836141ef565b9250826140e2576140e161436b565b5b828204905092915050565b60006140f8826141ef565b9150614103836141ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561413c5761413b61433c565b5b828202905092915050565b6000614152826141ef565b915061415d836141ef565b9250828210156141705761416f61433c565b5b828203905092915050565b6000614186826141cf565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422657808201518184015260208101905061420b565b83811115614235576000848401525b50505050565b6000600282049050600182168061425357607f821691505b602082108114156142675761426661439a565b5b50919050565b61427682614445565b810181811067ffffffffffffffff82111715614295576142946143f8565b5b80604052505050565b60006142a9826141ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142dc576142db61433c565b5b600182019050919050565b60006142f2826142f9565b9050919050565b600061430482614456565b9050919050565b6000614316826141ef565b9150614321836141ef565b9250826143315761433061436b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e6f742070617274206f6620746865205649502077686974656c6973742e0000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614a358161417b565b8114614a4057600080fd5b50565b614a4c8161418d565b8114614a5757600080fd5b50565b614a6381614199565b8114614a6e57600080fd5b50565b614a7a816141a3565b8114614a8557600080fd5b50565b614a91816141ef565b8114614a9c57600080fd5b5056fea2646970667358221220141969efe8fca3870ab27d8b4dbfad9189f187935fe6f74d46ce6e68ce02a92964736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102665760003560e01c806362b99ad4116101445780638dbb7c06116100b6578063c87b56dd1161007a578063c87b56dd146108ac578063d5abeb01146108e9578063e985e9c514610914578063efbd73f414610951578063f2fde38b1461097a578063fc35206d146109a357610266565b80638dbb7c06146107db57806395d89b4114610804578063a22cb4651461082f578063b88d4fde14610858578063bbb897441461088157610266565b8063763f4e6411610108578063763f4e64146106df57806378db32e9146107085780637bf65c12146107335780637cb647591461075e5780637ec4a659146107875780638da5cb5b146107b057610266565b806362b99ad4146105f85780636352211e1461062357806370a0823114610660578063715018a61461069d578063727a42f6146106b457610266565b80632db7b895116101dd5780633ccfd60b116101a15780633ccfd60b1461050957806342842e0e14610520578063438b630014610549578063453afb0f1461058657806345de0d9b146105b15780635c975abb146105cd57610266565b80632db7b8951461044c5780632e6cebe5146104635780632eb4a7ab1461048c57806331347c18146104b757806337481dfd146104e057610266565b8063095ea7b31161022f578063095ea7b3146103645780630e2ab0851461038d57806316c38b3c146103a457806318160ddd146103cd5780631ea516a7146103f857806323b872dd1461042357610266565b80625c66c21461026b57806301ffc9a71461029657806304e6d4b2146102d357806306fdde03146102fc578063081812fc14610327575b600080fd5b34801561027757600080fd5b506102806109ce565b60405161028d9190613f3d565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190613527565b6109d4565b6040516102ca9190613c05565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f591906135ca565b610ab6565b005b34801561030857600080fd5b50610311610b3c565b60405161031e9190613c3b565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906135ca565b610bce565b60405161035b9190613b7c565b60405180910390f35b34801561037057600080fd5b5061038b6004803603810190610386919061342d565b610c53565b005b34801561039957600080fd5b506103a2610d6b565b005b3480156103b057600080fd5b506103cb60048036038101906103c691906134cd565b610e3a565b005b3480156103d957600080fd5b506103e2610ed3565b6040516103ef9190613f3d565b60405180910390f35b34801561040457600080fd5b5061040d610ee4565b60405161041a9190613f3d565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190613317565b610eea565b005b34801561045857600080fd5b50610461610f4a565b005b34801561046f57600080fd5b5061048a600480360381019061048591906135ca565b61101e565b005b34801561049857600080fd5b506104a16110a4565b6040516104ae9190613c20565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906135ca565b6110aa565b005b3480156104ec57600080fd5b50610507600480360381019061050291906135ca565b611130565b005b34801561051557600080fd5b5061051e6111b6565b005b34801561052c57600080fd5b5061054760048036038101906105429190613317565b6112b2565b005b34801561055557600080fd5b50610570600480360381019061056b91906132aa565b6112d2565b60405161057d9190613be3565b60405180910390f35b34801561059257600080fd5b5061059b6113dd565b6040516105a89190613f3d565b60405180910390f35b6105cb60048036038101906105c6919061346d565b6113e3565b005b3480156105d957600080fd5b506105e261187b565b6040516105ef9190613c05565b60405180910390f35b34801561060457600080fd5b5061060d61188e565b60405161061a9190613c3b565b60405180910390f35b34801561062f57600080fd5b5061064a600480360381019061064591906135ca565b61191c565b6040516106579190613b7c565b60405180910390f35b34801561066c57600080fd5b50610687600480360381019061068291906132aa565b6119ce565b6040516106949190613f3d565b60405180910390f35b3480156106a957600080fd5b506106b2611a86565b005b3480156106c057600080fd5b506106c9611b0e565b6040516106d69190613c05565b60405180910390f35b3480156106eb57600080fd5b50610706600480360381019061070191906135ca565b611b21565b005b34801561071457600080fd5b5061071d611ba7565b60405161072a9190613f3d565b60405180910390f35b34801561073f57600080fd5b50610748611bad565b6040516107559190613c05565b60405180910390f35b34801561076a57600080fd5b50610785600480360381019061078091906134fa565b611bc0565b005b34801561079357600080fd5b506107ae60048036038101906107a99190613581565b611c46565b005b3480156107bc57600080fd5b506107c5611cdc565b6040516107d29190613b7c565b60405180910390f35b3480156107e757600080fd5b5061080260048036038101906107fd91906135ca565b611d06565b005b34801561081057600080fd5b50610819611d8c565b6040516108269190613c3b565b60405180910390f35b34801561083b57600080fd5b50610856600480360381019061085191906133ed565b611e1e565b005b34801561086457600080fd5b5061087f600480360381019061087a919061336a565b611e34565b005b34801561088d57600080fd5b50610896611e96565b6040516108a39190613f3d565b60405180910390f35b3480156108b857600080fd5b506108d360048036038101906108ce91906135ca565b611e9c565b6040516108e09190613c3b565b60405180910390f35b3480156108f557600080fd5b506108fe611f43565b60405161090b9190613f3d565b60405180910390f35b34801561092057600080fd5b5061093b600480360381019061093691906132d7565b611f49565b6040516109489190613c05565b60405180910390f35b34801561095d57600080fd5b50610978600480360381019061097391906135f7565b611fdd565b005b34801561098657600080fd5b506109a1600480360381019061099c91906132aa565b612105565b005b3480156109af57600080fd5b506109b86121fd565b6040516109c59190613f3d565b60405180910390f35b600a5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aaf5750610aae8261223a565b5b9050919050565b610abe6122a4565b73ffffffffffffffffffffffffffffffffffffffff16610adc611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613e1d565b60405180910390fd5b80600f8190555050565b606060008054610b4b9061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b779061423b565b8015610bc45780601f10610b9957610100808354040283529160200191610bc4565b820191906000526020600020905b815481529060010190602001808311610ba757829003601f168201915b5050505050905090565b6000610bd9826122ac565b610c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0f90613dfd565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c5e8261191c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613ebd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cee6122a4565b73ffffffffffffffffffffffffffffffffffffffff161480610d1d5750610d1c81610d176122a4565b611f49565b5b610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390613d7d565b60405180910390fd5b610d668383612318565b505050565b610d736122a4565b73ffffffffffffffffffffffffffffffffffffffff16610d91611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613e1d565b60405180910390fd5b6000601060016101000a81548160ff0219169083151502179055506001601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b610e426122a4565b73ffffffffffffffffffffffffffffffffffffffff16610e60611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90613e1d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610edf6007612219565b905090565b600f5481565b610efb610ef56122a4565b826123d1565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613efd565b60405180910390fd5b610f458383836124af565b505050565b610f526122a4565b73ffffffffffffffffffffffffffffffffffffffff16610f70611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613e1d565b60405180910390fd5b60001515601060019054906101000a900460ff16151514610fe657600080fd5b6000601060026101000a81548160ff0219169083151502179055506001601060006101000a81548160ff021916908315150217905550565b6110266122a4565b73ffffffffffffffffffffffffffffffffffffffff16611044611cdc565b73ffffffffffffffffffffffffffffffffffffffff161461109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190613e1d565b60405180910390fd5b80600d8190555050565b60115481565b6110b26122a4565b73ffffffffffffffffffffffffffffffffffffffff166110d0611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90613e1d565b60405180910390fd5b80600a8190555050565b6111386122a4565b73ffffffffffffffffffffffffffffffffffffffff16611156611cdc565b73ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a390613e1d565b60405180910390fd5b8060098190555050565b6111be6122a4565b73ffffffffffffffffffffffffffffffffffffffff166111dc611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613e1d565b60405180910390fd5b600061123c611cdc565b73ffffffffffffffffffffffffffffffffffffffff164760405161125f90613b67565b60006040518083038185875af1925050503d806000811461129c576040519150601f19603f3d011682016040523d82523d6000602084013e6112a1565b606091505b50509050806112af57600080fd5b50565b6112cd83838360405180602001604052806000815250611e34565b505050565b606060006112df836119ce565b905060008167ffffffffffffffff8111156112fd576112fc6143f8565b5b60405190808252806020026020018201604052801561132b5781602001602082028036833780820191505090505b50905060006001905060005b83811080156113485750600c548211155b156113d15760006113588361191c565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113bd57828483815181106113a2576113a16143c9565b5b60200260200101818152505081806113b99061429e565b9250505b82806113c89061429e565b93505050611337565b82945050505050919050565b600b5481565b8060008111611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e90613cdd565b60405180910390fd5b600c54816114356007612219565b61143f9190614066565b1115611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790613edd565b60405180910390fd5b601060009054906101000a900460ff16156114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613e3d565b60405180910390fd5b60011515601060019054906101000a900460ff161515141561165257816009546114fa91906140ed565b34101561153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390613f1d565b60405180910390fd5b600f5482611549336119ce565b6115539190614066565b1115611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613c5d565b60405180910390fd5b6000336040516020016115a79190613b1d565b60405160208183030381529060405280519060200120905061160d858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361270b565b61164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613e5d565b60405180910390fd5b5061186b565b60011515601060029054906101000a900460ff16151514156117d45781600a5461167c91906140ed565b3410156116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613f1d565b60405180910390fd5b600e54826116cb336119ce565b6116d59190614066565b1115611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90613c5d565b60405180910390fd5b6000336040516020016117299190613b1d565b60405160208183030381529060405280519060200120905061178f858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506011548361270b565b6117ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c590613d5d565b60405180910390fd5b5061186a565b81600b546117e291906140ed565b341015611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613f1d565b60405180910390fd5b600d54821115611869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186090613c5d565b60405180910390fd5b5b5b6118753383612722565b50505050565b601060009054906101000a900460ff1681565b6008805461189b9061423b565b80601f01602080910402602001604051908101604052809291908181526020018280546118c79061423b565b80156119145780601f106118e957610100808354040283529160200191611914565b820191906000526020600020905b8154815290600101906020018083116118f757829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90613dbd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3690613d9d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a8e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611aac611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af990613e1d565b60405180910390fd5b611b0c6000612762565b565b601060019054906101000a900460ff1681565b611b296122a4565b73ffffffffffffffffffffffffffffffffffffffff16611b47611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613e1d565b60405180910390fd5b80600e8190555050565b600e5481565b601060029054906101000a900460ff1681565b611bc86122a4565b73ffffffffffffffffffffffffffffffffffffffff16611be6611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3390613e1d565b60405180910390fd5b8060118190555050565b611c4e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990613e1d565b60405180910390fd5b8060089080519060200190611cd8929190613053565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611d0e6122a4565b73ffffffffffffffffffffffffffffffffffffffff16611d2c611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614611d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7990613e1d565b60405180910390fd5b80600b8190555050565b606060018054611d9b9061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc79061423b565b8015611e145780601f10611de957610100808354040283529160200191611e14565b820191906000526020600020905b815481529060010190602001808311611df757829003601f168201915b5050505050905090565b611e30611e296122a4565b8383612828565b5050565b611e45611e3f6122a4565b836123d1565b611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613efd565b60405180910390fd5b611e9084848484612995565b50505050565b600d5481565b6060611ea7826122ac565b611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613e9d565b60405180910390fd5b6000611ef06129f1565b90506000815111611f105760405180602001604052806000815250611f3b565b80611f1a84612a83565b604051602001611f2b929190613b38565b6040516020818303038152906040525b915050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8160008111612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613cdd565b60405180910390fd5b600c548161202f6007612219565b6120399190614066565b111561207a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207190613edd565b60405180910390fd5b6120826122a4565b73ffffffffffffffffffffffffffffffffffffffff166120a0611cdc565b73ffffffffffffffffffffffffffffffffffffffff16146120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90613e1d565b60405180910390fd5b6121008284612722565b505050565b61210d6122a4565b73ffffffffffffffffffffffffffffffffffffffff1661212b611cdc565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613e1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613c9d565b60405180910390fd5b6121fa81612762565b50565b60095481565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661238b8361191c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123dc826122ac565b61241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241290613d3d565b60405180910390fd5b60006124268361191c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249557508373ffffffffffffffffffffffffffffffffffffffff1661247d84610bce565b73ffffffffffffffffffffffffffffffffffffffff16145b806124a657506124a58185611f49565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124cf8261191c565b73ffffffffffffffffffffffffffffffffffffffff1614612525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251c90613e7d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258c90613cfd565b60405180910390fd5b6125a0838383612be4565b6125ab600082612318565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fb9190614147565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126529190614066565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000826127188584612be9565b1490509392505050565b60005b8181101561275d576127376007612203565b61274a836127456007612219565b612c5e565b80806127559061429e565b915050612725565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e90613d1d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129889190613c05565b60405180910390a3505050565b6129a08484846124af565b6129ac84848484612c7c565b6129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e290613c7d565b60405180910390fd5b50505050565b606060088054612a009061423b565b80601f0160208091040260200160405190810160405280929190818152602001828054612a2c9061423b565b8015612a795780601f10612a4e57610100808354040283529160200191612a79565b820191906000526020600020905b815481529060010190602001808311612a5c57829003601f168201915b5050505050905090565b60606000821415612acb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bdf565b600082905060005b60008214612afd578080612ae69061429e565b915050600a82612af691906140bc565b9150612ad3565b60008167ffffffffffffffff811115612b1957612b186143f8565b5b6040519080825280601f01601f191660200182016040528015612b4b5781602001600182028036833780820191505090505b5090505b60008514612bd857600182612b649190614147565b9150600a85612b73919061430b565b6030612b7f9190614066565b60f81b818381518110612b9557612b946143c9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bd191906140bc565b9450612b4f565b8093505050505b919050565b505050565b60008082905060005b8451811015612c53576000858281518110612c1057612c0f6143c9565b5b60200260200101519050808311612c3257612c2b8382612e13565b9250612c3f565b612c3c8184612e13565b92505b508080612c4b9061429e565b915050612bf2565b508091505092915050565b612c78828260405180602001604052806000815250612e2a565b5050565b6000612c9d8473ffffffffffffffffffffffffffffffffffffffff16612227565b15612e06578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cc66122a4565b8786866040518563ffffffff1660e01b8152600401612ce89493929190613b97565b602060405180830381600087803b158015612d0257600080fd5b505af1925050508015612d3357506040513d601f19601f82011682018060405250810190612d309190613554565b60015b612db6573d8060008114612d63576040519150601f19603f3d011682016040523d82523d6000602084013e612d68565b606091505b50600081511415612dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da590613c7d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e0b565b600190505b949350505050565b600082600052816020526040600020905092915050565b612e348383612e85565b612e416000848484612c7c565b612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790613c7d565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eec90613ddd565b60405180910390fd5b612efe816122ac565b15612f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3590613cbd565b60405180910390fd5b612f4a60008383612be4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f9a9190614066565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461305f9061423b565b90600052602060002090601f01602090048101928261308157600085556130c8565b82601f1061309a57805160ff19168380011785556130c8565b828001600101855582156130c8579182015b828111156130c75782518255916020019190600101906130ac565b5b5090506130d591906130d9565b5090565b5b808211156130f25760008160009055506001016130da565b5090565b600061310961310484613f7d565b613f58565b90508281526020810184848401111561312557613124614436565b5b6131308482856141f9565b509392505050565b600061314b61314684613fae565b613f58565b90508281526020810184848401111561316757613166614436565b5b6131728482856141f9565b509392505050565b60008135905061318981614a2c565b92915050565b60008083601f8401126131a5576131a461442c565b5b8235905067ffffffffffffffff8111156131c2576131c1614427565b5b6020830191508360208202830111156131de576131dd614431565b5b9250929050565b6000813590506131f481614a43565b92915050565b60008135905061320981614a5a565b92915050565b60008135905061321e81614a71565b92915050565b60008151905061323381614a71565b92915050565b600082601f83011261324e5761324d61442c565b5b813561325e8482602086016130f6565b91505092915050565b600082601f83011261327c5761327b61442c565b5b813561328c848260208601613138565b91505092915050565b6000813590506132a481614a88565b92915050565b6000602082840312156132c0576132bf614440565b5b60006132ce8482850161317a565b91505092915050565b600080604083850312156132ee576132ed614440565b5b60006132fc8582860161317a565b925050602061330d8582860161317a565b9150509250929050565b6000806000606084860312156133305761332f614440565b5b600061333e8682870161317a565b935050602061334f8682870161317a565b925050604061336086828701613295565b9150509250925092565b6000806000806080858703121561338457613383614440565b5b60006133928782880161317a565b94505060206133a38782880161317a565b93505060406133b487828801613295565b925050606085013567ffffffffffffffff8111156133d5576133d461443b565b5b6133e187828801613239565b91505092959194509250565b6000806040838503121561340457613403614440565b5b60006134128582860161317a565b9250506020613423858286016131e5565b9150509250929050565b6000806040838503121561344457613443614440565b5b60006134528582860161317a565b925050602061346385828601613295565b9150509250929050565b60008060006040848603121561348657613485614440565b5b600084013567ffffffffffffffff8111156134a4576134a361443b565b5b6134b08682870161318f565b935093505060206134c386828701613295565b9150509250925092565b6000602082840312156134e3576134e2614440565b5b60006134f1848285016131e5565b91505092915050565b6000602082840312156135105761350f614440565b5b600061351e848285016131fa565b91505092915050565b60006020828403121561353d5761353c614440565b5b600061354b8482850161320f565b91505092915050565b60006020828403121561356a57613569614440565b5b600061357884828501613224565b91505092915050565b60006020828403121561359757613596614440565b5b600082013567ffffffffffffffff8111156135b5576135b461443b565b5b6135c184828501613267565b91505092915050565b6000602082840312156135e0576135df614440565b5b60006135ee84828501613295565b91505092915050565b6000806040838503121561360e5761360d614440565b5b600061361c85828601613295565b925050602061362d8582860161317a565b9150509250929050565b60006136438383613aff565b60208301905092915050565b6136588161417b565b82525050565b61366f61366a8261417b565b6142e7565b82525050565b600061368082613fef565b61368a818561401d565b935061369583613fdf565b8060005b838110156136c65781516136ad8882613637565b97506136b883614010565b925050600181019050613699565b5085935050505092915050565b6136dc8161418d565b82525050565b6136eb81614199565b82525050565b60006136fc82613ffa565b613706818561402e565b9350613716818560208601614208565b61371f81614445565b840191505092915050565b600061373582614005565b61373f818561404a565b935061374f818560208601614208565b61375881614445565b840191505092915050565b600061376e82614005565b613778818561405b565b9350613788818560208601614208565b80840191505092915050565b60006137a160148361404a565b91506137ac82614463565b602082019050919050565b60006137c460328361404a565b91506137cf8261448c565b604082019050919050565b60006137e760268361404a565b91506137f2826144db565b604082019050919050565b600061380a601c8361404a565b91506138158261452a565b602082019050919050565b600061382d60148361404a565b915061383882614553565b602082019050919050565b600061385060248361404a565b915061385b8261457c565b604082019050919050565b600061387360198361404a565b915061387e826145cb565b602082019050919050565b6000613896602c8361404a565b91506138a1826145f4565b604082019050919050565b60006138b960228361404a565b91506138c482614643565b604082019050919050565b60006138dc60388361404a565b91506138e782614692565b604082019050919050565b60006138ff602a8361404a565b915061390a826146e1565b604082019050919050565b600061392260298361404a565b915061392d82614730565b604082019050919050565b600061394560208361404a565b91506139508261477f565b602082019050919050565b6000613968602c8361404a565b9150613973826147a8565b604082019050919050565b600061398b60058361405b565b9150613996826147f7565b600582019050919050565b60006139ae60208361404a565b91506139b982614820565b602082019050919050565b60006139d160178361404a565b91506139dc82614849565b602082019050919050565b60006139f4601e8361404a565b91506139ff82614872565b602082019050919050565b6000613a1760298361404a565b9150613a228261489b565b604082019050919050565b6000613a3a602f8361404a565b9150613a45826148ea565b604082019050919050565b6000613a5d60218361404a565b9150613a6882614939565b604082019050919050565b6000613a8060008361403f565b9150613a8b82614988565b600082019050919050565b6000613aa360148361404a565b9150613aae8261498b565b602082019050919050565b6000613ac660318361404a565b9150613ad1826149b4565b604082019050919050565b6000613ae960138361404a565b9150613af482614a03565b602082019050919050565b613b08816141ef565b82525050565b613b17816141ef565b82525050565b6000613b29828461365e565b60148201915081905092915050565b6000613b448285613763565b9150613b508284613763565b9150613b5b8261397e565b91508190509392505050565b6000613b7282613a73565b9150819050919050565b6000602082019050613b91600083018461364f565b92915050565b6000608082019050613bac600083018761364f565b613bb9602083018661364f565b613bc66040830185613b0e565b8181036060830152613bd881846136f1565b905095945050505050565b60006020820190508181036000830152613bfd8184613675565b905092915050565b6000602082019050613c1a60008301846136d3565b92915050565b6000602082019050613c3560008301846136e2565b92915050565b60006020820190508181036000830152613c55818461372a565b905092915050565b60006020820190508181036000830152613c7681613794565b9050919050565b60006020820190508181036000830152613c96816137b7565b9050919050565b60006020820190508181036000830152613cb6816137da565b9050919050565b60006020820190508181036000830152613cd6816137fd565b9050919050565b60006020820190508181036000830152613cf681613820565b9050919050565b60006020820190508181036000830152613d1681613843565b9050919050565b60006020820190508181036000830152613d3681613866565b9050919050565b60006020820190508181036000830152613d5681613889565b9050919050565b60006020820190508181036000830152613d76816138ac565b9050919050565b60006020820190508181036000830152613d96816138cf565b9050919050565b60006020820190508181036000830152613db6816138f2565b9050919050565b60006020820190508181036000830152613dd681613915565b9050919050565b60006020820190508181036000830152613df681613938565b9050919050565b60006020820190508181036000830152613e168161395b565b9050919050565b60006020820190508181036000830152613e36816139a1565b9050919050565b60006020820190508181036000830152613e56816139c4565b9050919050565b60006020820190508181036000830152613e76816139e7565b9050919050565b60006020820190508181036000830152613e9681613a0a565b9050919050565b60006020820190508181036000830152613eb681613a2d565b9050919050565b60006020820190508181036000830152613ed681613a50565b9050919050565b60006020820190508181036000830152613ef681613a96565b9050919050565b60006020820190508181036000830152613f1681613ab9565b9050919050565b60006020820190508181036000830152613f3681613adc565b9050919050565b6000602082019050613f526000830184613b0e565b92915050565b6000613f62613f73565b9050613f6e828261426d565b919050565b6000604051905090565b600067ffffffffffffffff821115613f9857613f976143f8565b5b613fa182614445565b9050602081019050919050565b600067ffffffffffffffff821115613fc957613fc86143f8565b5b613fd282614445565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614071826141ef565b915061407c836141ef565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140b1576140b061433c565b5b828201905092915050565b60006140c7826141ef565b91506140d2836141ef565b9250826140e2576140e161436b565b5b828204905092915050565b60006140f8826141ef565b9150614103836141ef565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561413c5761413b61433c565b5b828202905092915050565b6000614152826141ef565b915061415d836141ef565b9250828210156141705761416f61433c565b5b828203905092915050565b6000614186826141cf565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561422657808201518184015260208101905061420b565b83811115614235576000848401525b50505050565b6000600282049050600182168061425357607f821691505b602082108114156142675761426661439a565b5b50919050565b61427682614445565b810181811067ffffffffffffffff82111715614295576142946143f8565b5b80604052505050565b60006142a9826141ef565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142dc576142db61433c565b5b600182019050919050565b60006142f2826142f9565b9050919050565b600061430482614456565b9050919050565b6000614316826141ef565b9150614321836141ef565b9250826143315761433061436b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f742070617274206f66207468652050726573616c652077686974656c697360008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4e6f742070617274206f6620746865205649502077686974656c6973742e0000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b614a358161417b565b8114614a4057600080fd5b50565b614a4c8161418d565b8114614a5757600080fd5b50565b614a6381614199565b8114614a6e57600080fd5b50565b614a7a816141a3565b8114614a8557600080fd5b50565b614a91816141ef565b8114614a9c57600080fd5b5056fea2646970667358221220141969efe8fca3870ab27d8b4dbfad9189f187935fe6f74d46ce6e68ce02a92964736f6c63430008070033
Deployed Bytecode Sourcemap
40916:5718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41149:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28396:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44853:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29341:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30900:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30423:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45302:115;;;;;;;;;;;;;:::i;:::-;;45657:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41932:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41378:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31650:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45423:122;;;;;;;;;;;;;:::i;:::-;;45148:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41530:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44643:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44747;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45844:467;;;;;;;;;;;;;:::i;:::-;;32060:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43456:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41192:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42027:1262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41429:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41070:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29035:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28765:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9384:103;;;;;;;;;;;;;:::i;:::-;;41459:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44999:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41328:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41493:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45740:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45551:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8733:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44523:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29510:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31193:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32316:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41276:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44097:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41240:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31419:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43295:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9642:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41107:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41149:38;;;;:::o;28396:305::-;28498:4;28550:25;28535:40;;;:11;:40;;;;:105;;;;28607:33;28592:48;;;:11;:48;;;;28535:105;:158;;;;28657:36;28681:11;28657:23;:36::i;:::-;28535:158;28515:178;;28396:305;;;:::o;44853:140::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44967:20:::1;44939:25;:48;;;;44853:140:::0;:::o;29341:100::-;29395:13;29428:5;29421:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29341:100;:::o;30900:221::-;30976:7;31004:16;31012:7;31004;:16::i;:::-;30996:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31089:15;:24;31105:7;31089:24;;;;;;;;;;;;;;;;;;;;;31082:31;;30900:221;;;:::o;30423:411::-;30504:13;30520:23;30535:7;30520:14;:23::i;:::-;30504:39;;30568:5;30562:11;;:2;:11;;;;30554:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30662:5;30646:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30671:37;30688:5;30695:12;:10;:12::i;:::-;30671:16;:37::i;:::-;30646:62;30624:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30805:21;30814:2;30818:7;30805:8;:21::i;:::-;30493:341;30423:411;;:::o;45302:115::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45362:5:::1;45347:12;;:20;;;;;;;;;;;;;;;;;;45389:4;45374:12;;:19;;;;;;;;;;;;;;;;;;45407:4;45400:6;;:11;;;;;;;;;;;;;;;;;;45302:115::o:0;45657:77::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45722:6:::1;45713;;:15;;;;;;;;;;;;;;;;;;45657:77:::0;:::o;41932:89::-;41976:7;41999:16;:6;:14;:16::i;:::-;41992:23;;41932:89;:::o;41378:44::-;;;;:::o;31650:339::-;31845:41;31864:12;:10;:12::i;:::-;31878:7;31845:18;:41::i;:::-;31837:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31953:28;31963:4;31969:2;31973:7;31953:9;:28::i;:::-;31650:339;;;:::o;45423:122::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45490:5:::1;45476:19;;:12;;;;;;;;;;;:19;;;45468:28;;;::::0;::::1;;45516:5;45503:12;;:18;;;;;;;;;;;;;;;;;;45535:4;45528:6;;:11;;;;;;;;;;;;;;;;;;45423:122::o:0;45148:148::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45268:22:::1;45238:27;:52;;;;45148:148:::0;:::o;41530:93::-;;;;:::o;44643:98::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44724:11:::1;44711:10;:24;;;;44643:98:::0;:::o;44747:::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44828:11:::1;44815:10;:24;;;;44747:98:::0;:::o;45844:467::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46133:7:::1;46154;:5;:7::i;:::-;46146:21;;46175;46146:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46132:69;;;46216:2;46208:11;;;::::0;::::1;;45881:430;45844:467::o:0;32060:185::-;32198:39;32215:4;32221:2;32225:7;32198:39;;;;;;;;;;;;:16;:39::i;:::-;32060:185;;;:::o;43456:635::-;43531:16;43559:23;43585:17;43595:6;43585:9;:17::i;:::-;43559:43;;43609:30;43656:15;43642:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43609:63;;43679:22;43704:1;43679:26;;43712:23;43748:309;43773:15;43755;:33;:64;;;;;43810:9;;43792:14;:27;;43755:64;43748:309;;;43830:25;43858:23;43866:14;43858:7;:23::i;:::-;43830:51;;43917:6;43896:27;;:17;:27;;;43892:131;;;43969:14;43936:13;43950:15;43936:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;43996:17;;;;;:::i;:::-;;;;43892:131;44033:16;;;;;:::i;:::-;;;;43821:236;43748:309;;;44072:13;44065:20;;;;;;43456:635;;;:::o;41192:41::-;;;;:::o;42027:1262::-;42125:11;41803:1;41789:11;:15;41781:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41878:9;;41863:11;41844:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42154:6:::1;;;;;;;;;;;42153:7;42145:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;42212:4;42198:18;;:12;;;;;;;;;;;:18;;;42195:1048;;;42260:11;42247:10;;:24;;;;:::i;:::-;42234:9;:37;;42226:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42351:25;;42336:11;42312:21;42322:10;42312:9;:21::i;:::-;:35;;;;:::i;:::-;:64;;42304:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42455:12;42497:10;42480:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42470:39;;;;;;42455:54;;42526:50;42545:12;;42526:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42559:10;;42571:4;42526:18;:50::i;:::-;42518:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;42217:402;42195:1048;;;42647:4;42633:18;;:12;;;;;;;;;;;:18;;;42630:613;;;42695:11;42682:10;;:24;;;;:::i;:::-;42669:9;:37;;42661:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42786:25;;42771:11;42747:21;42757:10;42747:9;:21::i;:::-;:35;;;;:::i;:::-;:64;;42739:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42890:12;42932:10;42915:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;42905:39;;;;;;42890:54;;42961:50;42980:12;;42961:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42994:10;;43006:4;42961:18;:50::i;:::-;42953:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;42652:406;42630:613;;;43115:11;43098:14;;:28;;;;:::i;:::-;43085:9;:41;;43077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43182:27;;43167:11;:42;;43159:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42630:613;42195:1048;43249:34;43259:10;43271:11;43249:9;:34::i;:::-;42027:1262:::0;;;;:::o;41429:25::-;;;;;;;;;;;;;:::o;41070:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29035:239::-;29107:7;29127:13;29143:7;:16;29151:7;29143:16;;;;;;;;;;;;;;;;;;;;;29127:32;;29195:1;29178:19;;:5;:19;;;;29170:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29261:5;29254:12;;;29035:239;;;:::o;28765:208::-;28837:7;28882:1;28865:19;;:5;:19;;;;28857:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28949:9;:16;28959:5;28949:16;;;;;;;;;;;;;;;;28942:23;;28765:208;;;:::o;9384:103::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9449:30:::1;9476:1;9449:18;:30::i;:::-;9384:103::o:0;41459:29::-;;;;;;;;;;;;;:::o;44999:140::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45113:20:::1;45085:25;:48;;;;44999:140:::0;:::o;41328:45::-;;;;:::o;41493:30::-;;;;;;;;;;;;;:::o;45740:98::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45821:11:::1;45808:10;:24;;;;45740:98:::0;:::o;45551:100::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45635:10:::1;45623:9;:22;;;;;;;;;;;;:::i;:::-;;45551:100:::0;:::o;8733:87::-;8779:7;8806:6;;;;;;;;;;;8799:13;;8733:87;:::o;44523:114::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44616:15:::1;44599:14;:32;;;;44523:114:::0;:::o;29510:104::-;29566:13;29599:7;29592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29510:104;:::o;31193:155::-;31288:52;31307:12;:10;:12::i;:::-;31321:8;31331;31288:18;:52::i;:::-;31193:155;;:::o;32316:328::-;32491:41;32510:12;:10;:12::i;:::-;32524:7;32491:18;:41::i;:::-;32483:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32597:39;32611:4;32617:2;32621:7;32630:5;32597:13;:39::i;:::-;32316:328;;;;:::o;41276:47::-;;;;:::o;44097:420::-;44196:13;44237:17;44245:8;44237:7;:17::i;:::-;44221:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;44328:28;44359:10;:8;:10::i;:::-;44328:41;;44414:1;44389:14;44383:28;:32;:128;;;;;;;;;;;;;;;;;44451:14;44467:19;:8;:17;:19::i;:::-;44434:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44383:128;44376:135;;;44097:420;;;:::o;41240:31::-;;;;:::o;31419:164::-;31516:4;31540:18;:25;31559:5;31540:25;;;;;;;;;;;;;;;:35;31566:8;31540:35;;;;;;;;;;;;;;;;;;;;;;;;;31533:42;;31419:164;;;;:::o;43295:155::-;43381:11;41803:1;41789:11;:15;41781:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41878:9;;41863:11;41844:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;41836:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;8964:12:::1;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43411:33:::2;43421:9;43432:11;43411:9;:33::i;:::-;43295:155:::0;;;:::o;9642:201::-;8964:12;:10;:12::i;:::-;8953:23;;:7;:5;:7::i;:::-;:23;;;8945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9751:1:::1;9731:22;;:8;:22;;;;9723:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9807:28;9826:8;9807:18;:28::i;:::-;9642:201:::0;:::o;41107:37::-;;;;:::o;4183:127::-;4290:1;4272:7;:14;;;:19;;;;;;;;;;;4183:127;:::o;4061:114::-;4126:7;4153;:14;;;4146:21;;4061:114;;;:::o;11021:387::-;11081:4;11289:12;11356:7;11344:20;11336:28;;11399:1;11392:4;:8;11385:15;;;11021:387;;;:::o;21165:157::-;21250:4;21289:25;21274:40;;;:11;:40;;;;21267:47;;21165:157;;;:::o;7457:98::-;7510:7;7537:10;7530:17;;7457:98;:::o;34154:127::-;34219:4;34271:1;34243:30;;:7;:16;34251:7;34243:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34236:37;;34154:127;;;:::o;38136:174::-;38238:2;38211:15;:24;38227:7;38211:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38294:7;38290:2;38256:46;;38265:23;38280:7;38265:14;:23::i;:::-;38256:46;;;;;;;;;;;;38136:174;;:::o;34448:348::-;34541:4;34566:16;34574:7;34566;:16::i;:::-;34558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34642:13;34658:23;34673:7;34658:14;:23::i;:::-;34642:39;;34711:5;34700:16;;:7;:16;;;:51;;;;34744:7;34720:31;;:20;34732:7;34720:11;:20::i;:::-;:31;;;34700:51;:87;;;;34755:32;34772:5;34779:7;34755:16;:32::i;:::-;34700:87;34692:96;;;34448:348;;;;:::o;37440:578::-;37599:4;37572:31;;:23;37587:7;37572:14;:23::i;:::-;:31;;;37564:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37682:1;37668:16;;:2;:16;;;;37660:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37738:39;37759:4;37765:2;37769:7;37738:20;:39::i;:::-;37842:29;37859:1;37863:7;37842:8;:29::i;:::-;37903:1;37884:9;:15;37894:4;37884:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37932:1;37915:9;:13;37925:2;37915:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37963:2;37944:7;:16;37952:7;37944:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38002:7;37998:2;37983:27;;37992:4;37983:27;;;;;;;;;;;;37440:578;;;:::o;1685:190::-;1810:4;1863;1834:25;1847:5;1854:4;1834:12;:25::i;:::-;:33;1827:40;;1685:190;;;;;:::o;46317:204::-;46397:9;46392:124;46416:11;46412:1;:15;46392:124;;;46443:18;:6;:16;:18::i;:::-;46470:38;46480:9;46491:16;:6;:14;:16::i;:::-;46470:9;:38::i;:::-;46429:3;;;;;:::i;:::-;;;;46392:124;;;;46317:204;;:::o;10003:191::-;10077:16;10096:6;;;;;;;;;;;10077:25;;10122:8;10113:6;;:17;;;;;;;;;;;;;;;;;;10177:8;10146:40;;10167:8;10146:40;;;;;;;;;;;;10066:128;10003:191;:::o;38452:315::-;38607:8;38598:17;;:5;:17;;;;38590:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38694:8;38656:18;:25;38675:5;38656:25;;;;;;;;;;;;;;;:35;38682:8;38656:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38740:8;38718:41;;38733:5;38718:41;;;38750:8;38718:41;;;;;;:::i;:::-;;;;;;;;38452:315;;;:::o;33526:::-;33683:28;33693:4;33699:2;33703:7;33683:9;:28::i;:::-;33730:48;33753:4;33759:2;33763:7;33772:5;33730:22;:48::i;:::-;33722:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33526:315;;;;:::o;46527:104::-;46587:13;46616:9;46609:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46527:104;:::o;5019:723::-;5075:13;5305:1;5296:5;:10;5292:53;;;5323:10;;;;;;;;;;;;;;;;;;;;;5292:53;5355:12;5370:5;5355:20;;5386:14;5411:78;5426:1;5418:4;:9;5411:78;;5444:8;;;;;:::i;:::-;;;;5475:2;5467:10;;;;;:::i;:::-;;;5411:78;;;5499:19;5531:6;5521:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5499:39;;5549:154;5565:1;5556:5;:10;5549:154;;5593:1;5583:11;;;;;:::i;:::-;;;5660:2;5652:5;:10;;;;:::i;:::-;5639:2;:24;;;;:::i;:::-;5626:39;;5609:6;5616;5609:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5689:2;5680:11;;;;;:::i;:::-;;;5549:154;;;5727:6;5713:21;;;;;5019:723;;;;:::o;40703:126::-;;;;:::o;2236:675::-;2319:7;2339:20;2362:4;2339:27;;2382:9;2377:497;2401:5;:12;2397:1;:16;2377:497;;;2435:20;2458:5;2464:1;2458:8;;;;;;;;:::i;:::-;;;;;;;;2435:31;;2501:12;2485;:28;2481:382;;2628:42;2643:12;2657;2628:14;:42::i;:::-;2613:57;;2481:382;;;2805:42;2820:12;2834;2805:14;:42::i;:::-;2790:57;;2481:382;2420:454;2415:3;;;;;:::i;:::-;;;;2377:497;;;;2891:12;2884:19;;;2236:675;;;;:::o;35138:110::-;35214:26;35224:2;35228:7;35214:26;;;;;;;;;;;;:9;:26::i;:::-;35138:110;;:::o;39332:799::-;39487:4;39508:15;:2;:13;;;:15::i;:::-;39504:620;;;39560:2;39544:36;;;39581:12;:10;:12::i;:::-;39595:4;39601:7;39610:5;39544:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39540:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39803:1;39786:6;:13;:18;39782:272;;;39829:60;;;;;;;;;;:::i;:::-;;;;;;;;39782:272;40004:6;39998:13;39989:6;39985:2;39981:15;39974:38;39540:529;39677:41;;;39667:51;;;:6;:51;;;;39660:58;;;;;39504:620;40108:4;40101:11;;39332:799;;;;;;;:::o;2919:224::-;2987:13;3050:1;3044:4;3037:15;3079:1;3073:4;3066:15;3120:4;3114;3104:21;3095:30;;2919:224;;;;:::o;35475:321::-;35605:18;35611:2;35615:7;35605:5;:18::i;:::-;35656:54;35687:1;35691:2;35695:7;35704:5;35656:22;:54::i;:::-;35634:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35475:321;;;:::o;36132:382::-;36226:1;36212:16;;:2;:16;;;;36204:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36285:16;36293:7;36285;:16::i;:::-;36284:17;36276:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36347:45;36376:1;36380:2;36384:7;36347:20;:45::i;:::-;36422:1;36405:9;:13;36415:2;36405:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36453:2;36434:7;:16;36442:7;36434:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36498:7;36494:2;36473:33;;36490:1;36473:33;;;;;;;;;;;;36132:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:704::-;6451:6;6459;6467;6516:2;6504:9;6495:7;6491:23;6487:32;6484:119;;;6522:79;;:::i;:::-;6484:119;6670:1;6659:9;6655:17;6642:31;6700:18;6692:6;6689:30;6686:117;;;6722:79;;:::i;:::-;6686:117;6835:80;6907:7;6898:6;6887:9;6883:22;6835:80;:::i;:::-;6817:98;;;;6613:312;6964:2;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6935:118;6356:704;;;;;:::o;7066:323::-;7122:6;7171:2;7159:9;7150:7;7146:23;7142:32;7139:119;;;7177:79;;:::i;:::-;7139:119;7297:1;7322:50;7364:7;7355:6;7344:9;7340:22;7322:50;:::i;:::-;7312:60;;7268:114;7066:323;;;;:::o;7395:329::-;7454:6;7503:2;7491:9;7482:7;7478:23;7474:32;7471:119;;;7509:79;;:::i;:::-;7471:119;7629:1;7654:53;7699:7;7690:6;7679:9;7675:22;7654:53;:::i;:::-;7644:63;;7600:117;7395:329;;;;:::o;7730:327::-;7788:6;7837:2;7825:9;7816:7;7812:23;7808:32;7805:119;;;7843:79;;:::i;:::-;7805:119;7963:1;7988:52;8032:7;8023:6;8012:9;8008:22;7988:52;:::i;:::-;7978:62;;7934:116;7730:327;;;;:::o;8063:349::-;8132:6;8181:2;8169:9;8160:7;8156:23;8152:32;8149:119;;;8187:79;;:::i;:::-;8149:119;8307:1;8332:63;8387:7;8378:6;8367:9;8363:22;8332:63;:::i;:::-;8322:73;;8278:127;8063:349;;;;:::o;8418:509::-;8487:6;8536:2;8524:9;8515:7;8511:23;8507:32;8504:119;;;8542:79;;:::i;:::-;8504:119;8690:1;8679:9;8675:17;8662:31;8720:18;8712:6;8709:30;8706:117;;;8742:79;;:::i;:::-;8706:117;8847:63;8902:7;8893:6;8882:9;8878:22;8847:63;:::i;:::-;8837:73;;8633:287;8418:509;;;;:::o;8933:329::-;8992:6;9041:2;9029:9;9020:7;9016:23;9012:32;9009:119;;;9047:79;;:::i;:::-;9009:119;9167:1;9192:53;9237:7;9228:6;9217:9;9213:22;9192:53;:::i;:::-;9182:63;;9138:117;8933:329;;;;:::o;9268:474::-;9336:6;9344;9393:2;9381:9;9372:7;9368:23;9364:32;9361:119;;;9399:79;;:::i;:::-;9361:119;9519:1;9544:53;9589:7;9580:6;9569:9;9565:22;9544:53;:::i;:::-;9534:63;;9490:117;9646:2;9672:53;9717:7;9708:6;9697:9;9693:22;9672:53;:::i;:::-;9662:63;;9617:118;9268:474;;;;;:::o;9748:179::-;9817:10;9838:46;9880:3;9872:6;9838:46;:::i;:::-;9916:4;9911:3;9907:14;9893:28;;9748:179;;;;:::o;9933:118::-;10020:24;10038:5;10020:24;:::i;:::-;10015:3;10008:37;9933:118;;:::o;10057:157::-;10162:45;10182:24;10200:5;10182:24;:::i;:::-;10162:45;:::i;:::-;10157:3;10150:58;10057:157;;:::o;10250:732::-;10369:3;10398:54;10446:5;10398:54;:::i;:::-;10468:86;10547:6;10542:3;10468:86;:::i;:::-;10461:93;;10578:56;10628:5;10578:56;:::i;:::-;10657:7;10688:1;10673:284;10698:6;10695:1;10692:13;10673:284;;;10774:6;10768:13;10801:63;10860:3;10845:13;10801:63;:::i;:::-;10794:70;;10887:60;10940:6;10887:60;:::i;:::-;10877:70;;10733:224;10720:1;10717;10713:9;10708:14;;10673:284;;;10677:14;10973:3;10966:10;;10374:608;;;10250:732;;;;:::o;10988:109::-;11069:21;11084:5;11069:21;:::i;:::-;11064:3;11057:34;10988:109;;:::o;11103:118::-;11190:24;11208:5;11190:24;:::i;:::-;11185:3;11178:37;11103:118;;:::o;11227:360::-;11313:3;11341:38;11373:5;11341:38;:::i;:::-;11395:70;11458:6;11453:3;11395:70;:::i;:::-;11388:77;;11474:52;11519:6;11514:3;11507:4;11500:5;11496:16;11474:52;:::i;:::-;11551:29;11573:6;11551:29;:::i;:::-;11546:3;11542:39;11535:46;;11317:270;11227:360;;;;:::o;11593:364::-;11681:3;11709:39;11742:5;11709:39;:::i;:::-;11764:71;11828:6;11823:3;11764:71;:::i;:::-;11757:78;;11844:52;11889:6;11884:3;11877:4;11870:5;11866:16;11844:52;:::i;:::-;11921:29;11943:6;11921:29;:::i;:::-;11916:3;11912:39;11905:46;;11685:272;11593:364;;;;:::o;11963:377::-;12069:3;12097:39;12130:5;12097:39;:::i;:::-;12152:89;12234:6;12229:3;12152:89;:::i;:::-;12145:96;;12250:52;12295:6;12290:3;12283:4;12276:5;12272:16;12250:52;:::i;:::-;12327:6;12322:3;12318:16;12311:23;;12073:267;11963:377;;;;:::o;12346:366::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:::-;12860:3;12881:67;12945:2;12940:3;12881:67;:::i;:::-;12874:74;;12957:93;13046:3;12957:93;:::i;:::-;13075:2;13070:3;13066:12;13059:19;;12718:366;;;:::o;13090:::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:::-;13604:3;13625:67;13689:2;13684:3;13625:67;:::i;:::-;13618:74;;13701:93;13790:3;13701:93;:::i;:::-;13819:2;13814:3;13810:12;13803:19;;13462:366;;;:::o;13834:::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:::-;14348:3;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14445:93;14534:3;14445:93;:::i;:::-;14563:2;14558:3;14554:12;14547:19;;14206:366;;;:::o;14578:::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14578:366;;;:::o;14950:::-;15092:3;15113:67;15177:2;15172:3;15113:67;:::i;:::-;15106:74;;15189:93;15278:3;15189:93;:::i;:::-;15307:2;15302:3;15298:12;15291:19;;14950:366;;;:::o;15322:::-;15464:3;15485:67;15549:2;15544:3;15485:67;:::i;:::-;15478:74;;15561:93;15650:3;15561:93;:::i;:::-;15679:2;15674:3;15670:12;15663:19;;15322:366;;;:::o;15694:::-;15836:3;15857:67;15921:2;15916:3;15857:67;:::i;:::-;15850:74;;15933:93;16022:3;15933:93;:::i;:::-;16051:2;16046:3;16042:12;16035:19;;15694:366;;;:::o;16066:::-;16208:3;16229:67;16293:2;16288:3;16229:67;:::i;:::-;16222:74;;16305:93;16394:3;16305:93;:::i;:::-;16423:2;16418:3;16414:12;16407:19;;16066:366;;;:::o;16438:::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16438:366;;;:::o;16810:::-;16952:3;16973:67;17037:2;17032:3;16973:67;:::i;:::-;16966:74;;17049:93;17138:3;17049:93;:::i;:::-;17167:2;17162:3;17158:12;17151:19;;16810:366;;;:::o;17182:::-;17324:3;17345:67;17409:2;17404:3;17345:67;:::i;:::-;17338:74;;17421:93;17510:3;17421:93;:::i;:::-;17539:2;17534:3;17530:12;17523:19;;17182:366;;;:::o;17554:400::-;17714:3;17735:84;17817:1;17812:3;17735:84;:::i;:::-;17728:91;;17828:93;17917:3;17828:93;:::i;:::-;17946:1;17941:3;17937:11;17930:18;;17554:400;;;:::o;17960:366::-;18102:3;18123:67;18187:2;18182:3;18123:67;:::i;:::-;18116:74;;18199:93;18288:3;18199:93;:::i;:::-;18317:2;18312:3;18308:12;18301:19;;17960:366;;;:::o;18332:::-;18474:3;18495:67;18559:2;18554:3;18495:67;:::i;:::-;18488:74;;18571:93;18660:3;18571:93;:::i;:::-;18689:2;18684:3;18680:12;18673:19;;18332:366;;;:::o;18704:::-;18846:3;18867:67;18931:2;18926:3;18867:67;:::i;:::-;18860:74;;18943:93;19032:3;18943:93;:::i;:::-;19061:2;19056:3;19052:12;19045:19;;18704:366;;;:::o;19076:::-;19218:3;19239:67;19303:2;19298:3;19239:67;:::i;:::-;19232:74;;19315:93;19404:3;19315:93;:::i;:::-;19433:2;19428:3;19424:12;19417:19;;19076:366;;;:::o;19448:::-;19590:3;19611:67;19675:2;19670:3;19611:67;:::i;:::-;19604:74;;19687:93;19776:3;19687:93;:::i;:::-;19805:2;19800:3;19796:12;19789:19;;19448:366;;;:::o;19820:::-;19962:3;19983:67;20047:2;20042:3;19983:67;:::i;:::-;19976:74;;20059:93;20148:3;20059:93;:::i;:::-;20177:2;20172:3;20168:12;20161:19;;19820:366;;;:::o;20192:398::-;20351:3;20372:83;20453:1;20448:3;20372:83;:::i;:::-;20365:90;;20464:93;20553:3;20464:93;:::i;:::-;20582:1;20577:3;20573:11;20566:18;;20192:398;;;:::o;20596:366::-;20738:3;20759:67;20823:2;20818:3;20759:67;:::i;:::-;20752:74;;20835:93;20924:3;20835:93;:::i;:::-;20953:2;20948:3;20944:12;20937:19;;20596:366;;;:::o;20968:::-;21110:3;21131:67;21195:2;21190:3;21131:67;:::i;:::-;21124:74;;21207:93;21296:3;21207:93;:::i;:::-;21325:2;21320:3;21316:12;21309:19;;20968:366;;;:::o;21340:::-;21482:3;21503:67;21567:2;21562:3;21503:67;:::i;:::-;21496:74;;21579:93;21668:3;21579:93;:::i;:::-;21697:2;21692:3;21688:12;21681:19;;21340:366;;;:::o;21712:108::-;21789:24;21807:5;21789:24;:::i;:::-;21784:3;21777:37;21712:108;;:::o;21826:118::-;21913:24;21931:5;21913:24;:::i;:::-;21908:3;21901:37;21826:118;;:::o;21950:256::-;22062:3;22077:75;22148:3;22139:6;22077:75;:::i;:::-;22177:2;22172:3;22168:12;22161:19;;22197:3;22190:10;;21950:256;;;;:::o;22212:701::-;22493:3;22515:95;22606:3;22597:6;22515:95;:::i;:::-;22508:102;;22627:95;22718:3;22709:6;22627:95;:::i;:::-;22620:102;;22739:148;22883:3;22739:148;:::i;:::-;22732:155;;22904:3;22897:10;;22212:701;;;;;:::o;22919:379::-;23103:3;23125:147;23268:3;23125:147;:::i;:::-;23118:154;;23289:3;23282:10;;22919:379;;;:::o;23304:222::-;23397:4;23435:2;23424:9;23420:18;23412:26;;23448:71;23516:1;23505:9;23501:17;23492:6;23448:71;:::i;:::-;23304:222;;;;:::o;23532:640::-;23727:4;23765:3;23754:9;23750:19;23742:27;;23779:71;23847:1;23836:9;23832:17;23823:6;23779:71;:::i;:::-;23860:72;23928:2;23917:9;23913:18;23904:6;23860:72;:::i;:::-;23942;24010:2;23999:9;23995:18;23986:6;23942:72;:::i;:::-;24061:9;24055:4;24051:20;24046:2;24035:9;24031:18;24024:48;24089:76;24160:4;24151:6;24089:76;:::i;:::-;24081:84;;23532:640;;;;;;;:::o;24178:373::-;24321:4;24359:2;24348:9;24344:18;24336:26;;24408:9;24402:4;24398:20;24394:1;24383:9;24379:17;24372:47;24436:108;24539:4;24530:6;24436:108;:::i;:::-;24428:116;;24178:373;;;;:::o;24557:210::-;24644:4;24682:2;24671:9;24667:18;24659:26;;24695:65;24757:1;24746:9;24742:17;24733:6;24695:65;:::i;:::-;24557:210;;;;:::o;24773:222::-;24866:4;24904:2;24893:9;24889:18;24881:26;;24917:71;24985:1;24974:9;24970:17;24961:6;24917:71;:::i;:::-;24773:222;;;;:::o;25001:313::-;25114:4;25152:2;25141:9;25137:18;25129:26;;25201:9;25195:4;25191:20;25187:1;25176:9;25172:17;25165:47;25229:78;25302:4;25293:6;25229:78;:::i;:::-;25221:86;;25001:313;;;;:::o;25320:419::-;25486:4;25524:2;25513:9;25509:18;25501:26;;25573:9;25567:4;25563:20;25559:1;25548:9;25544:17;25537:47;25601:131;25727:4;25601:131;:::i;:::-;25593:139;;25320:419;;;:::o;25745:::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:::-;26336:4;26374:2;26363:9;26359:18;26351:26;;26423:9;26417:4;26413:20;26409:1;26398:9;26394:17;26387:47;26451:131;26577:4;26451:131;:::i;:::-;26443:139;;26170:419;;;:::o;26595:::-;26761:4;26799:2;26788:9;26784:18;26776:26;;26848:9;26842:4;26838:20;26834:1;26823:9;26819:17;26812:47;26876:131;27002:4;26876:131;:::i;:::-;26868:139;;26595:419;;;:::o;27020:::-;27186:4;27224:2;27213:9;27209:18;27201:26;;27273:9;27267:4;27263:20;27259:1;27248:9;27244:17;27237:47;27301:131;27427:4;27301:131;:::i;:::-;27293:139;;27020:419;;;:::o;27445:::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:::-;28036:4;28074:2;28063:9;28059:18;28051:26;;28123:9;28117:4;28113:20;28109:1;28098:9;28094:17;28087:47;28151:131;28277:4;28151:131;:::i;:::-;28143:139;;27870:419;;;:::o;28295:::-;28461:4;28499:2;28488:9;28484:18;28476:26;;28548:9;28542:4;28538:20;28534:1;28523:9;28519:17;28512:47;28576:131;28702:4;28576:131;:::i;:::-;28568:139;;28295:419;;;:::o;28720:::-;28886:4;28924:2;28913:9;28909:18;28901:26;;28973:9;28967:4;28963:20;28959:1;28948:9;28944:17;28937:47;29001:131;29127:4;29001:131;:::i;:::-;28993:139;;28720:419;;;:::o;29145:::-;29311:4;29349:2;29338:9;29334:18;29326:26;;29398:9;29392:4;29388:20;29384:1;29373:9;29369:17;29362:47;29426:131;29552:4;29426:131;:::i;:::-;29418:139;;29145:419;;;:::o;29570:::-;29736:4;29774:2;29763:9;29759:18;29751:26;;29823:9;29817:4;29813:20;29809:1;29798:9;29794:17;29787:47;29851:131;29977:4;29851:131;:::i;:::-;29843:139;;29570:419;;;:::o;29995:::-;30161:4;30199:2;30188:9;30184:18;30176:26;;30248:9;30242:4;30238:20;30234:1;30223:9;30219:17;30212:47;30276:131;30402:4;30276:131;:::i;:::-;30268:139;;29995:419;;;:::o;30420:::-;30586:4;30624:2;30613:9;30609:18;30601:26;;30673:9;30667:4;30663:20;30659:1;30648:9;30644:17;30637:47;30701:131;30827:4;30701:131;:::i;:::-;30693:139;;30420:419;;;:::o;30845:::-;31011:4;31049:2;31038:9;31034:18;31026:26;;31098:9;31092:4;31088:20;31084:1;31073:9;31069:17;31062:47;31126:131;31252:4;31126:131;:::i;:::-;31118:139;;30845:419;;;:::o;31270:::-;31436:4;31474:2;31463:9;31459:18;31451:26;;31523:9;31517:4;31513:20;31509:1;31498:9;31494:17;31487:47;31551:131;31677:4;31551:131;:::i;:::-;31543:139;;31270:419;;;:::o;31695:::-;31861:4;31899:2;31888:9;31884:18;31876:26;;31948:9;31942:4;31938:20;31934:1;31923:9;31919:17;31912:47;31976:131;32102:4;31976:131;:::i;:::-;31968:139;;31695:419;;;:::o;32120:::-;32286:4;32324:2;32313:9;32309:18;32301:26;;32373:9;32367:4;32363:20;32359:1;32348:9;32344:17;32337:47;32401:131;32527:4;32401:131;:::i;:::-;32393:139;;32120:419;;;:::o;32545:::-;32711:4;32749:2;32738:9;32734:18;32726:26;;32798:9;32792:4;32788:20;32784:1;32773:9;32769:17;32762:47;32826:131;32952:4;32826:131;:::i;:::-;32818:139;;32545:419;;;:::o;32970:::-;33136:4;33174:2;33163:9;33159:18;33151:26;;33223:9;33217:4;33213:20;33209:1;33198:9;33194:17;33187:47;33251:131;33377:4;33251:131;:::i;:::-;33243:139;;32970:419;;;:::o;33395:::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:::-;33986:4;34024:2;34013:9;34009:18;34001:26;;34073:9;34067:4;34063:20;34059:1;34048:9;34044:17;34037:47;34101:131;34227:4;34101:131;:::i;:::-;34093:139;;33820:419;;;:::o;34245:::-;34411:4;34449:2;34438:9;34434:18;34426:26;;34498:9;34492:4;34488:20;34484:1;34473:9;34469:17;34462:47;34526:131;34652:4;34526:131;:::i;:::-;34518:139;;34245:419;;;:::o;34670:::-;34836:4;34874:2;34863:9;34859:18;34851:26;;34923:9;34917:4;34913:20;34909:1;34898:9;34894:17;34887:47;34951:131;35077:4;34951:131;:::i;:::-;34943:139;;34670:419;;;:::o;35095:222::-;35188:4;35226:2;35215:9;35211:18;35203:26;;35239:71;35307:1;35296:9;35292:17;35283:6;35239:71;:::i;:::-;35095:222;;;;:::o;35323:129::-;35357:6;35384:20;;:::i;:::-;35374:30;;35413:33;35441:4;35433:6;35413:33;:::i;:::-;35323:129;;;:::o;35458:75::-;35491:6;35524:2;35518:9;35508:19;;35458:75;:::o;35539:307::-;35600:4;35690:18;35682:6;35679:30;35676:56;;;35712:18;;:::i;:::-;35676:56;35750:29;35772:6;35750:29;:::i;:::-;35742:37;;35834:4;35828;35824:15;35816:23;;35539:307;;;:::o;35852:308::-;35914:4;36004:18;35996:6;35993:30;35990:56;;;36026:18;;:::i;:::-;35990:56;36064:29;36086:6;36064:29;:::i;:::-;36056:37;;36148:4;36142;36138:15;36130:23;;35852:308;;;:::o;36166:132::-;36233:4;36256:3;36248:11;;36286:4;36281:3;36277:14;36269:22;;36166:132;;;:::o;36304:114::-;36371:6;36405:5;36399:12;36389:22;;36304:114;;;:::o;36424:98::-;36475:6;36509:5;36503:12;36493:22;;36424:98;;;:::o;36528:99::-;36580:6;36614:5;36608:12;36598:22;;36528:99;;;:::o;36633:113::-;36703:4;36735;36730:3;36726:14;36718:22;;36633:113;;;:::o;36752:184::-;36851:11;36885:6;36880:3;36873:19;36925:4;36920:3;36916:14;36901:29;;36752:184;;;;:::o;36942:168::-;37025:11;37059:6;37054:3;37047:19;37099:4;37094:3;37090:14;37075:29;;36942:168;;;;:::o;37116:147::-;37217:11;37254:3;37239:18;;37116:147;;;;:::o;37269:169::-;37353:11;37387:6;37382:3;37375:19;37427:4;37422:3;37418:14;37403:29;;37269:169;;;;:::o;37444:148::-;37546:11;37583:3;37568:18;;37444:148;;;;:::o;37598:305::-;37638:3;37657:20;37675:1;37657:20;:::i;:::-;37652:25;;37691:20;37709:1;37691:20;:::i;:::-;37686:25;;37845:1;37777:66;37773:74;37770:1;37767:81;37764:107;;;37851:18;;:::i;:::-;37764:107;37895:1;37892;37888:9;37881:16;;37598:305;;;;:::o;37909:185::-;37949:1;37966:20;37984:1;37966:20;:::i;:::-;37961:25;;38000:20;38018:1;38000:20;:::i;:::-;37995:25;;38039:1;38029:35;;38044:18;;:::i;:::-;38029:35;38086:1;38083;38079:9;38074:14;;37909:185;;;;:::o;38100:348::-;38140:7;38163:20;38181:1;38163:20;:::i;:::-;38158:25;;38197:20;38215:1;38197:20;:::i;:::-;38192:25;;38385:1;38317:66;38313:74;38310:1;38307:81;38302:1;38295:9;38288:17;38284:105;38281:131;;;38392:18;;:::i;:::-;38281:131;38440:1;38437;38433:9;38422:20;;38100:348;;;;:::o;38454:191::-;38494:4;38514:20;38532:1;38514:20;:::i;:::-;38509:25;;38548:20;38566:1;38548:20;:::i;:::-;38543:25;;38587:1;38584;38581:8;38578:34;;;38592:18;;:::i;:::-;38578:34;38637:1;38634;38630:9;38622:17;;38454:191;;;;:::o;38651:96::-;38688:7;38717:24;38735:5;38717:24;:::i;:::-;38706:35;;38651:96;;;:::o;38753:90::-;38787:7;38830:5;38823:13;38816:21;38805:32;;38753:90;;;:::o;38849:77::-;38886:7;38915:5;38904:16;;38849:77;;;:::o;38932:149::-;38968:7;39008:66;39001:5;38997:78;38986:89;;38932:149;;;:::o;39087:126::-;39124:7;39164:42;39157:5;39153:54;39142:65;;39087:126;;;:::o;39219:77::-;39256:7;39285:5;39274:16;;39219:77;;;:::o;39302:154::-;39386:6;39381:3;39376;39363:30;39448:1;39439:6;39434:3;39430:16;39423:27;39302:154;;;:::o;39462:307::-;39530:1;39540:113;39554:6;39551:1;39548:13;39540:113;;;39639:1;39634:3;39630:11;39624:18;39620:1;39615:3;39611:11;39604:39;39576:2;39573:1;39569:10;39564:15;;39540:113;;;39671:6;39668:1;39665:13;39662:101;;;39751:1;39742:6;39737:3;39733:16;39726:27;39662:101;39511:258;39462:307;;;:::o;39775:320::-;39819:6;39856:1;39850:4;39846:12;39836:22;;39903:1;39897:4;39893:12;39924:18;39914:81;;39980:4;39972:6;39968:17;39958:27;;39914:81;40042:2;40034:6;40031:14;40011:18;40008:38;40005:84;;;40061:18;;:::i;:::-;40005:84;39826:269;39775:320;;;:::o;40101:281::-;40184:27;40206:4;40184:27;:::i;:::-;40176:6;40172:40;40314:6;40302:10;40299:22;40278:18;40266:10;40263:34;40260:62;40257:88;;;40325:18;;:::i;:::-;40257:88;40365:10;40361:2;40354:22;40144:238;40101:281;;:::o;40388:233::-;40427:3;40450:24;40468:5;40450:24;:::i;:::-;40441:33;;40496:66;40489:5;40486:77;40483:103;;;40566:18;;:::i;:::-;40483:103;40613:1;40606:5;40602:13;40595:20;;40388:233;;;:::o;40627:100::-;40666:7;40695:26;40715:5;40695:26;:::i;:::-;40684:37;;40627:100;;;:::o;40733:94::-;40772:7;40801:20;40815:5;40801:20;:::i;:::-;40790:31;;40733:94;;;:::o;40833:176::-;40865:1;40882:20;40900:1;40882:20;:::i;:::-;40877:25;;40916:20;40934:1;40916:20;:::i;:::-;40911:25;;40955:1;40945:35;;40960:18;;:::i;:::-;40945:35;41001:1;40998;40994:9;40989:14;;40833:176;;;;:::o;41015:180::-;41063:77;41060:1;41053:88;41160:4;41157:1;41150:15;41184:4;41181:1;41174:15;41201:180;41249:77;41246:1;41239:88;41346:4;41343:1;41336:15;41370:4;41367:1;41360:15;41387:180;41435:77;41432:1;41425:88;41532:4;41529:1;41522:15;41556:4;41553:1;41546:15;41573:180;41621:77;41618:1;41611:88;41718:4;41715:1;41708:15;41742:4;41739:1;41732:15;41759:180;41807:77;41804:1;41797:88;41904:4;41901:1;41894:15;41928:4;41925:1;41918:15;41945:117;42054:1;42051;42044:12;42068:117;42177:1;42174;42167:12;42191:117;42300:1;42297;42290:12;42314:117;42423:1;42420;42413:12;42437:117;42546:1;42543;42536:12;42560:117;42669:1;42666;42659:12;42683:102;42724:6;42775:2;42771:7;42766:2;42759:5;42755:14;42751:28;42741:38;;42683:102;;;:::o;42791:94::-;42824:8;42872:5;42868:2;42864:14;42843:35;;42791:94;;;:::o;42891:170::-;43031:22;43027:1;43019:6;43015:14;43008:46;42891:170;:::o;43067:237::-;43207:34;43203:1;43195:6;43191:14;43184:58;43276:20;43271:2;43263:6;43259:15;43252:45;43067:237;:::o;43310:225::-;43450:34;43446:1;43438:6;43434:14;43427:58;43519:8;43514:2;43506:6;43502:15;43495:33;43310:225;:::o;43541:178::-;43681:30;43677:1;43669:6;43665:14;43658:54;43541:178;:::o;43725:170::-;43865:22;43861:1;43853:6;43849:14;43842:46;43725:170;:::o;43901:223::-;44041:34;44037:1;44029:6;44025:14;44018:58;44110:6;44105:2;44097:6;44093:15;44086:31;43901:223;:::o;44130:175::-;44270:27;44266:1;44258:6;44254:14;44247:51;44130:175;:::o;44311:231::-;44451:34;44447:1;44439:6;44435:14;44428:58;44520:14;44515:2;44507:6;44503:15;44496:39;44311:231;:::o;44548:221::-;44688:34;44684:1;44676:6;44672:14;44665:58;44757:4;44752:2;44744:6;44740:15;44733:29;44548:221;:::o;44775:243::-;44915:34;44911:1;44903:6;44899:14;44892:58;44984:26;44979:2;44971:6;44967:15;44960:51;44775:243;:::o;45024:229::-;45164:34;45160:1;45152:6;45148:14;45141:58;45233:12;45228:2;45220:6;45216:15;45209:37;45024:229;:::o;45259:228::-;45399:34;45395:1;45387:6;45383:14;45376:58;45468:11;45463:2;45455:6;45451:15;45444:36;45259:228;:::o;45493:182::-;45633:34;45629:1;45621:6;45617:14;45610:58;45493:182;:::o;45681:231::-;45821:34;45817:1;45809:6;45805:14;45798:58;45890:14;45885:2;45877:6;45873:15;45866:39;45681:231;:::o;45918:155::-;46058:7;46054:1;46046:6;46042:14;46035:31;45918:155;:::o;46079:182::-;46219:34;46215:1;46207:6;46203:14;46196:58;46079:182;:::o;46267:173::-;46407:25;46403:1;46395:6;46391:14;46384:49;46267:173;:::o;46446:180::-;46586:32;46582:1;46574:6;46570:14;46563:56;46446:180;:::o;46632:228::-;46772:34;46768:1;46760:6;46756:14;46749:58;46841:11;46836:2;46828:6;46824:15;46817:36;46632:228;:::o;46866:234::-;47006:34;47002:1;46994:6;46990:14;46983:58;47075:17;47070:2;47062:6;47058:15;47051:42;46866:234;:::o;47106:220::-;47246:34;47242:1;47234:6;47230:14;47223:58;47315:3;47310:2;47302:6;47298:15;47291:28;47106:220;:::o;47332:114::-;;:::o;47452:170::-;47592:22;47588:1;47580:6;47576:14;47569:46;47452:170;:::o;47628:236::-;47768:34;47764:1;47756:6;47752:14;47745:58;47837:19;47832:2;47824:6;47820:15;47813:44;47628:236;:::o;47870:169::-;48010:21;48006:1;47998:6;47994:14;47987:45;47870:169;:::o;48045:122::-;48118:24;48136:5;48118:24;:::i;:::-;48111:5;48108:35;48098:63;;48157:1;48154;48147:12;48098:63;48045:122;:::o;48173:116::-;48243:21;48258:5;48243:21;:::i;:::-;48236:5;48233:32;48223:60;;48279:1;48276;48269:12;48223:60;48173:116;:::o;48295:122::-;48368:24;48386:5;48368:24;:::i;:::-;48361:5;48358:35;48348:63;;48407:1;48404;48397:12;48348:63;48295:122;:::o;48423:120::-;48495:23;48512:5;48495:23;:::i;:::-;48488:5;48485:34;48475:62;;48533:1;48530;48523:12;48475:62;48423:120;:::o;48549:122::-;48622:24;48640:5;48622:24;:::i;:::-;48615:5;48612:35;48602:63;;48661:1;48658;48651:12;48602:63;48549:122;:::o
Swarm Source
ipfs://141969efe8fca3870ab27d8b4dbfad9189f187935fe6f74d46ce6e68ce02a929
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.