ERC-721
Overview
Max Total Supply
200 EVBDZ
Holders
87
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
3 EVBDZLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
EvilBeardZ
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-07-21 */ // File: EvilBeardZ_flat.sol // File: EvilBeardZ.sol // File: contracts/ClampedRandomizer.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract ClampedRandomizer { uint256 private _scopeIndex = 0; //Clamping cache for random TokenID generation in the anti-sniping algo uint256 private immutable _scopeCap; //Size of initial randomized number pool & max generated value (zero indexed) mapping(uint256 => uint256) _swappedIDs; //TokenID cache for random TokenID generation in the anti-sniping algo constructor(uint256 scopeCap) { _scopeCap = scopeCap; } function _genClampedNonce() internal virtual returns(uint256) { uint256 scope = _scopeCap-_scopeIndex; uint256 swap; uint256 result; uint256 i = randomNumber() % scope; //Setup the value to swap in for the selected number if (_swappedIDs[scope-1] == 0){ swap = scope-1; } else { swap = _swappedIDs[scope-1]; } //Select a random number, swap it out with an unselected one then shorten the selection range by 1 if (_swappedIDs[i] == 0){ result = i; _swappedIDs[i] = swap; } else { result = _swappedIDs[i]; _swappedIDs[i] = swap; } _scopeIndex++; return result; } function randomNumber() internal view returns(uint256){ return uint256(keccak256(abi.encodePacked(block.difficulty, block.timestamp))); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/token/ERC721/[email protected] 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/[email protected] 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/token/ERC721/extensions/[email protected] 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/utils/[email protected] 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; // solhint-disable-next-line no-inline-assembly 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" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/[email protected] 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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } function _baseExtension() 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * 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 @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721URIStorage: URI query for nonexistent token" ); string memory base = _baseURI(); string memory ext = _baseExtension(); return string(abi.encodePacked(base, (tokenId).toString(), ext)); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require( _exists(tokenId), "ERC721URIStorage: URI set of nonexistent token" ); _tokenURIs[tokenId] = _tokenURI; } /** * @dev 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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved" ); _burn(tokenId); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. 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; } } } pragma solidity ^0.8.7; /** * @dev Interface for the NFT Royalty Standard */ interface IERC2981 is IERC165 { /** * @dev Called with the sale price to determine how much royalty is owed and to whom. * @param tokenId - the NFT asset queried for royalty information * @param salePrice - the sale price of the NFT asset specified by `tokenId` * @return receiver - address of who should be sent the royalty payment * @return royaltyAmount - the royalty payment amount for `salePrice` */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity ^0.8.0; contract EvilBeardZ is ERC721, ERC721Enumerable, ERC721URIStorage, IERC2981, Pausable, Ownable, ERC721Burnable, ClampedRandomizer { modifier onlyDevs { require(devFees[msg.sender].percent > 0 , "Dev Only: caller is not the developer"); _; } event WithdrawFees(address indexed devAddress, uint256 amount); event WithdrawWrongTokens(address indexed devAddress,address tokenAddress, uint256 amount); event WithdrawWrongNfts(address indexed devAddress,address tokenAddress, uint256 tokenId); event Migration(address indexed _to, uint256 indexed _tokenId); using Counters for Counters.Counter; using SafeMath for uint256; using Address for address; address public royaltyAddress = 0x5b5A59BdDdC3747Fae3030e6e52f6065a7f3A69e; string public baseURI; string public baseExtension = ".json"; // VARIABLES uint256 public maxSupply = 201; uint256 public maxPerTx = 100; uint256 public maxPerPerson = 100; uint256 public price = 0 ether; uint256 public royalty = 750; // COLLECTED FESS struct DevFee { uint256 percent; uint256 amount; } mapping(address => DevFee) public devFees; address[] private devList; bool public whitelistedOnly = true; mapping(address => uint256) public whiteListed; constructor(address[] memory _devList, uint256[] memory _fees) ERC721("EvilBeardZ", "EVBDZ") ClampedRandomizer(maxSupply) { require(_devList.length == _fees.length, "Error: invalid data"); uint256 totalFee = 0; for(uint8 i = 0; i <_devList.length; i++) { devList.push(_devList[i]); devFees[_devList[i]] = DevFee(_fees[i], 0); totalFee += _fees[i]; } require(totalFee == 10000,"Error: invalid total fee"); _pause(); } function _baseExtension() internal view override returns (string memory) { return baseExtension; } function _baseURI() internal view override returns (string memory) { return baseURI; } function splitFees(uint256 sentAmount) internal { for(uint8 i = 0;i < devList.length; i++) { address devAddress = devList[i]; uint256 devFee = devFees[devAddress].percent; uint256 devFeeAmount = sentAmount.mul(devFee).div(10000); devFees[devAddress].amount += devFeeAmount; } } function mint(uint256 amount) public payable whenNotPaused { uint256 supply = totalSupply(); require(amount > 0 && amount <= maxPerTx,"Error: max par tx limit"); require(balanceOf(msg.sender) + 1 <= maxPerPerson,"Error: max per address limit"); require(msg.value == price * amount, "Error: invalid price"); require(supply + amount - 1 < maxSupply, "Error: cannot mint more than total supply"); if(whitelistedOnly) require(whiteListed[msg.sender] >= amount,"Error: you are not whitelisted or amount is higher than limit"); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); if(whitelistedOnly) whiteListed[msg.sender] -= 1; } splitFees(msg.value); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function Owned(address _owner) external view returns (uint256[] memory) { uint256 tokenCount = balanceOf(_owner); if (tokenCount == 0) { return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } } function tokenExists(uint256 _id) external view returns (bool) { return (_exists(_id)); } function royaltyInfo(uint256, uint256 _salePrice) external view override returns (address receiver, uint256 royaltyAmount) { return (royaltyAddress, (_salePrice * royalty) / 10000); } //dev function whiteList(address[] memory _addressList, uint256 count) external onlyOwner { require(_addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i < _addressList.length; i++) { require(_addressList[i] != address(0), "Address cannot be 0."); whiteListed[_addressList[i]] = count; } } function removeWhiteList(address[] memory addressList) external onlyOwner { require(addressList.length > 0,"Error: list is empty"); for(uint256 i = 0;i<addressList.length;i++) whiteListed[addressList[i]] = 0; } function updateWhitelistStatus() external onlyOwner { whitelistedOnly = !whitelistedOnly; } function updatePausedStatus() external onlyOwner { paused() ? _unpause() : _pause(); } function setMaxPerPerson(uint256 newMaxBuy) external onlyOwner { maxPerPerson = newMaxBuy; } function setMaxPerTx(uint256 newMaxBuy) external onlyOwner { maxPerTx = newMaxBuy; } function setBaseURI(string memory newBaseURI) external onlyOwner { baseURI = newBaseURI; } function setPrice(uint256 newPrice) external onlyOwner { price = newPrice; } function setURI(uint256 tokenId, string memory uri) external onlyOwner { _setTokenURI(tokenId, uri); } function setRoyalty(uint16 _royalty) external onlyOwner { require(_royalty >= 0, "Royalty must be greater than or equal to 0%"); require(_royalty <= 750, "Royalty must be greater than or equal to 7,5%" ); royalty = _royalty; } function setRoyaltyAddress(address _royaltyAddress) external onlyOwner { royaltyAddress = _royaltyAddress; } //Overrides function internalMint(address to) internal { uint256 tokenId = _genClampedNonce() + 1; _safeMint(to, tokenId); } function safeMint(address to) public onlyOwner { internalMint(to); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable, IERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } /// @dev withdraw fees function withdraw() external onlyDevs { uint256 amount = devFees[msg.sender].amount; require(amount > 0,"Error: no fees :("); payable(msg.sender).transfer(amount); devFees[msg.sender].amount = 0; emit WithdrawFees(msg.sender,amount); } /// @dev emergency withdraw contract balance to the contract owner function emergencyWithdraw() external onlyOwner { uint256 amount = address(this).balance; require(amount > 0,"Error: no fees :("); payable(msg.sender).transfer(amount); for(uint8 i = 0;i < devList.length; i++) { address devAddress = devList[i]; devFees[devAddress].amount = 0; } emit WithdrawFees(msg.sender,amount); } /// @dev withdraw ERC20 tokens function withdrawTokens(address _tokenContract) external onlyOwner { IERC20 tokenContract = IERC20(_tokenContract); uint256 _amount = tokenContract.balanceOf(address(this)); tokenContract.transfer(owner(), _amount); emit WithdrawWrongTokens(msg.sender,_tokenContract,_amount); } function airdropsToken(address[] memory _addr, uint256 amount) public onlyOwner { for (uint256 i = 0; i < _addr.length; i++) { airdropTokenInternal(amount,_addr[i]); } } function airdropTokenInternal(uint256 amount, address _addr) internal { for (uint256 i = 0; i < amount; i++) { internalMint(_addr); } } /// @dev withdraw ERC721 tokens to the contract owner function withdrawNFT(address _tokenContract, uint256[] memory _id) external onlyOwner { IERC721 tokenContract = IERC721(_tokenContract); for (uint256 i = 0; i < _id.length; i++) { tokenContract.safeTransferFrom(address(this), owner(), _id[i]); emit WithdrawWrongNfts(msg.sender,_tokenContract,_id[i]); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_devList","type":"address[]"},{"internalType":"uint256[]","name":"_fees","type":"uint256[]"}],"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":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Migration","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"WithdrawWrongNfts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"devAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawWrongTokens","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"Owned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdropsToken","outputs":[],"stateMutability":"nonpayable","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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"devFees","outputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","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":"maxPerPerson","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressList","type":"address[]"}],"name":"removeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","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":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxPerPerson","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_royalty","type":"uint16"}],"name":"setRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royaltyAddress","type":"address"}],"name":"setRoyaltyAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"tokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"updatePausedStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistedOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"withdrawNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6000600c55600e80546001600160a01b031916735b5a59bdddc3747fae3030e6e52f6065a7f3a69e17905560e0604052600560a081905264173539b7b760d91b60c0908152620000539160109190620003fa565b5060c96011556064601281905560135560006014556102ee6015556018805460ff191660011790553480156200008857600080fd5b506040516200426c3803806200426c833981016040819052620000ab916200051a565b601154604080518082018252600a81526922bb34b62132b0b9322d60b11b60208083019182528351808501909452600584526422ab21222d60d91b908401528151919291620000fd91600091620003fa565b50805162000113906001906020840190620003fa565b5050600b80546001600160a81b0319163361010081029190911790915560405190915081906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506080528051825114620001bb5760405162461bcd60e51b815260206004820152601360248201527f4572726f723a20696e76616c696420646174610000000000000000000000000060448201526064015b60405180910390fd5b6000805b83518160ff161015620002f8576017848260ff1681518110620001e657620001e6620006e8565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790556040805180820190915283518190859060ff8516908110620002475762000247620006e8565b60200260200101518152602001600081525060166000868460ff1681518110620002755762000275620006e8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000820151816000015560208201518160010155905050828160ff1681518110620002cc57620002cc620006e8565b602002602001015182620002e1919062000657565b915080620002ef81620006af565b915050620001bf565b5080612710146200034c5760405162461bcd60e51b815260206004820152601860248201527f4572726f723a20696e76616c696420746f74616c2066656500000000000000006044820152606401620001b2565b620003566200035f565b50505062000714565b600b5460ff1615620003a75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401620001b2565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003dd3390565b6040516001600160a01b03909116815260200160405180910390a1565b828054620004089062000672565b90600052602060002090601f0160209004810192826200042c576000855562000477565b82601f106200044757805160ff191683800117855562000477565b8280016001018555821562000477579182015b82811115620004775782518255916020019190600101906200045a565b506200048592915062000489565b5090565b5b808211156200048557600081556001016200048a565b600082601f830112620004b257600080fd5b81516020620004cb620004c58362000631565b620005fe565b80838252828201915082860187848660051b8901011115620004ec57600080fd5b60005b858110156200050d57815184529284019290840190600101620004ef565b5090979650505050505050565b600080604083850312156200052e57600080fd5b82516001600160401b03808211156200054657600080fd5b818501915085601f8301126200055b57600080fd5b815160206200056e620004c58362000631565b8083825282820191508286018a848660051b89010111156200058f57600080fd5b600096505b84871015620005ca5780516001600160a01b0381168114620005b557600080fd5b83526001969096019591830191830162000594565b5091880151919650909350505080821115620005e557600080fd5b50620005f485828601620004a0565b9150509250929050565b604051601f8201601f191681016001600160401b0381118282101715620006295762000629620006fe565b604052919050565b60006001600160401b038211156200064d576200064d620006fe565b5060051b60200190565b600082198211156200066d576200066d620006d2565b500190565b600181811c908216806200068757607f821691505b60208210811415620006a957634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415620006c957620006c9620006d2565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b608051613b3c6200073060003960006128370152613b3c6000f3fe6080604052600436106103195760003560e01c806370a08231116101ab578063ad2f852a116100f7578063d5abeb0111610095578063f147efeb1161006f578063f147efeb1461092b578063f2fde38b14610974578063f968adbe14610994578063fa0fca84146109aa57600080fd5b8063d5abeb01146108b7578063db2e21bc146108cd578063e985e9c5146108e257600080fd5b8063c6682862116100d1578063c668286214610835578063c6f6f2161461084a578063c87b56dd1461086a578063d2f8dd451461088a57600080fd5b8063ad2f852a146107e0578063b88d4fde14610800578063b9bfa0bc1461082057600080fd5b80639186b425116101645780639bdedea51161013e5780639bdedea514610777578063a035b1fe14610797578063a0712d68146107ad578063a22cb465146107c057600080fd5b80639186b4251461072857806391b7f5ed1461074257806395d89b411461076257600080fd5b806370a082311461067a578063715018a61461069a578063768d7138146106af5780637e0586f1146106c5578063862440e2146106e55780638da5cb5b1461070557600080fd5b8063397457911161026a57806349df728c116102235780635c975abb116101fd5780635c975abb146106185780636352211e1461063057806367dded4d146106505780636c0360eb1461066557600080fd5b806349df728c146105b85780634f6ccce7146105d857806355f804b3146105f857600080fd5b806339745791146105035780633ccfd60b1461052357806340d097c31461053857806342842e0e1461055857806342966c6814610578578063483efda21461059857600080fd5b806318160ddd116102d757806329ee566c116102b157806329ee566c1461046e5780632a55205a146104845780632f745c59146104c357806336e79a5a146104e357600080fd5b806318160ddd1461040f57806323b872dd1461042e57806329413b121461044e57600080fd5b8062923f9e1461031e57806301ffc9a71461035357806306d254da1461037357806306fdde0314610395578063081812fc146103b7578063095ea7b3146103ef575b600080fd5b34801561032a57600080fd5b5061033e61033936600461366d565b6109d7565b60405190151581526020015b60405180910390f35b34801561035f57600080fd5b5061033e61036e3660046135da565b6109e8565b34801561037f57600080fd5b5061039361038e366004613331565b610a0d565b005b3480156103a157600080fd5b506103aa610a68565b60405161034a91906137f8565b3480156103c357600080fd5b506103d76103d236600461366d565b610afa565b6040516001600160a01b03909116815260200161034a565b3480156103fb57600080fd5b5061039361040a366004613519565b610b82565b34801561041b57600080fd5b506008545b60405190815260200161034a565b34801561043a57600080fd5b5061039361044936600461337f565b610c98565b34801561045a57600080fd5b50610393610469366004613578565b610cca565b34801561047a57600080fd5b5061042060155481565b34801561049057600080fd5b506104a461049f3660046136e6565b610d3b565b604080516001600160a01b03909316835260208301919091520161034a565b3480156104cf57600080fd5b506104206104de366004613519565b610d75565b3480156104ef57600080fd5b506103936104fe366004613649565b610e0b565b34801561050f57600080fd5b5061039361051e366004613543565b610eb0565b34801561052f57600080fd5b50610393610f8f565b34801561054457600080fd5b50610393610553366004613331565b6110cd565b34801561056457600080fd5b5061039361057336600461337f565b611109565b34801561058457600080fd5b5061039361059336600461366d565b611124565b3480156105a457600080fd5b506103936105b336600461366d565b61119b565b3480156105c457600080fd5b506103936105d3366004613331565b6111d0565b3480156105e457600080fd5b506104206105f336600461366d565b61136f565b34801561060457600080fd5b50610393610613366004613614565b611402565b34801561062457600080fd5b50600b5460ff1661033e565b34801561063c57600080fd5b506103d761064b36600461366d565b611445565b34801561065c57600080fd5b506103936114bc565b34801561067157600080fd5b506103aa611508565b34801561068657600080fd5b50610420610695366004613331565b611596565b3480156106a657600080fd5b5061039361161d565b3480156106bb57600080fd5b5061042060135481565b3480156106d157600080fd5b506103936106e0366004613578565b61169d565b3480156106f157600080fd5b5061039361070036600461369f565b6117ea565b34801561071157600080fd5b50600b5461010090046001600160a01b03166103d7565b34801561073457600080fd5b5060185461033e9060ff1681565b34801561074e57600080fd5b5061039361075d36600461366d565b611824565b34801561076e57600080fd5b506103aa611859565b34801561078357600080fd5b50610393610792366004613437565b611868565b3480156107a357600080fd5b5061042060145481565b6103936107bb36600461366d565b6119d9565b3480156107cc57600080fd5b506103936107db3660046134e2565b611c88565b3480156107ec57600080fd5b50600e546103d7906001600160a01b031681565b34801561080c57600080fd5b5061039361081b3660046133bb565b611d4d565b34801561082c57600080fd5b50610393611d7f565b34801561084157600080fd5b506103aa611dc3565b34801561085657600080fd5b5061039361086536600461366d565b611dd0565b34801561087657600080fd5b506103aa61088536600461366d565b611e05565b34801561089657600080fd5b506108aa6108a5366004613331565b611e10565b60405161034a91906137b4565b3480156108c357600080fd5b5061042060115481565b3480156108d957600080fd5b50610393611ecf565b3480156108ee57600080fd5b5061033e6108fd36600461334c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561093757600080fd5b5061095f610946366004613331565b6016602052600090815260409020805460019091015482565b6040805192835260208301919091520161034a565b34801561098057600080fd5b5061039361098f366004613331565b612002565b3480156109a057600080fd5b5061042060125481565b3480156109b657600080fd5b506104206109c5366004613331565b60196020526000908152604090205481565b60006109e2826120fe565b92915050565b60006001600160e01b0319821663152a902d60e11b14806109e257506109e28261211b565b600b546001600160a01b03610100909104163314610a465760405162461bcd60e51b8152600401610a3d90613887565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b606060008054610a77906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906139f0565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b6000610b05826120fe565b610b665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b506000908152600460205260409020546001600160a01b031690565b6000610b8d82611445565b9050806001600160a01b0316836001600160a01b03161415610bfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a3d565b336001600160a01b0382161480610c175750610c1781336108fd565b610c895760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a3d565b610c938383612140565b505050565b610ca3335b826121ae565b610cbf5760405162461bcd60e51b8152600401610a3d906138bc565b610c93838383612298565b600b546001600160a01b03610100909104163314610cfa5760405162461bcd60e51b8152600401610a3d90613887565b60005b8251811015610c9357610d2982848381518110610d1c57610d1c613ab6565b6020026020010151612443565b80610d3381613a25565b915050610cfd565b600e5460155460009182916001600160a01b039091169061271090610d60908661398e565b610d6a919061397a565b915091509250929050565b6000610d8083611596565b8210610de25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a3d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03610100909104163314610e3b5760405162461bcd60e51b8152600401610a3d90613887565b6102ee8161ffff161115610ea75760405162461bcd60e51b815260206004820152602d60248201527f526f79616c7479206d7573742062652067726561746572207468616e206f722060448201526c657175616c20746f20372c352560981b6064820152608401610a3d565b61ffff16601555565b600b546001600160a01b03610100909104163314610ee05760405162461bcd60e51b8152600401610a3d90613887565b6000815111610f285760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8151811015610f8b57600060196000848481518110610f4c57610f4c613ab6565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610f8390613a25565b915050610f2b565b5050565b33600090815260166020526040902054610ff95760405162461bcd60e51b815260206004820152602560248201527f446576204f6e6c793a2063616c6c6572206973206e6f742074686520646576656044820152643637b832b960d91b6064820152608401610a3d565b336000908152601660205260409020600101548061104d5760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f1935050505015801561107a573d6000803e3d6000fd5b503360008181526016602052604080822060010191909155517f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906110c29084815260200190565b60405180910390a250565b600b546001600160a01b036101009091041633146110fd5760405162461bcd60e51b8152600401610a3d90613887565b61110681612469565b50565b610c9383838360405180602001604052806000815250611d4d565b61112d33610c9d565b6111925760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610a3d565b6111068161248a565b600b546001600160a01b036101009091041633146111cb5760405162461bcd60e51b8152600401610a3d90613887565b601355565b600b546001600160a01b036101009091041633146112005760405162461bcd60e51b8152600401610a3d90613887565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561124457600080fd5b505afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190613686565b9050816001600160a01b031663a9059cbb6112a5600b546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156112ed57600080fd5b505af1158015611301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132591906135bd565b50604080516001600160a01b03851681526020810183905233917f5aa586896a67fb05c3b86276f66eecee7da00719d0e7299c403596fa2ec58ca4910160405180910390a2505050565b600061137a60085490565b82106113dd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a3d565b600882815481106113f0576113f0613ab6565b90600052602060002001549050919050565b600b546001600160a01b036101009091041633146114325760405162461bcd60e51b8152600401610a3d90613887565b8051610f8b90600f906020840190613155565b6000818152600260205260408120546001600160a01b0316806109e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a3d565b600b546001600160a01b036101009091041633146114ec5760405162461bcd60e51b8152600401610a3d90613887565b600b5460ff16611500576114fe612493565b565b6114fe612508565b600f8054611515906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611541906139f0565b801561158e5780601f106115635761010080835404028352916020019161158e565b820191906000526020600020905b81548152906001019060200180831161157157829003601f168201915b505050505081565b60006001600160a01b0382166116015760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a3d565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0361010090910416331461164d5760405162461bcd60e51b8152600401610a3d90613887565b600b5460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b8054610100600160a81b0319169055565b600b546001600160a01b036101009091041633146116cd5760405162461bcd60e51b8152600401610a3d90613887565b60008251116117155760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8251811015610c935760006001600160a01b031683828151811061173e5761173e613ab6565b60200260200101516001600160a01b031614156117945760405162461bcd60e51b815260206004820152601460248201527320b2323932b9b99031b0b73737ba10313290181760611b6044820152606401610a3d565b81601960008584815181106117ab576117ab613ab6565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806117e290613a25565b915050611718565b600b546001600160a01b0361010090910416331461181a5760405162461bcd60e51b8152600401610a3d90613887565b610f8b8282612582565b600b546001600160a01b036101009091041633146118545760405162461bcd60e51b8152600401610a3d90613887565b601455565b606060018054610a77906139f0565b600b546001600160a01b036101009091041633146118985760405162461bcd60e51b8152600401610a3d90613887565b8160005b82518110156119d357816001600160a01b03166342842e0e306118cd600b546001600160a01b036101009091041690565b8685815181106118df576118df613ab6565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b50505050336001600160a01b03167fb8dbf4ce06446b88ef02ffd28a948c2637ac80fb0bd4d3a31c70878c1046eb7f8585848151811061198f5761198f613ab6565b60200260200101516040516119b99291906001600160a01b03929092168252602082015260400190565b60405180910390a2806119cb81613a25565b91505061189c565b50505050565b600b5460ff16156119fc5760405162461bcd60e51b8152600401610a3d9061385d565b6000611a0760085490565b9050600082118015611a1b57506012548211155b611a675760405162461bcd60e51b815260206004820152601760248201527f4572726f723a206d617820706172207478206c696d69740000000000000000006044820152606401610a3d565b601354611a7333611596565b611a7e906001613962565b1115611acc5760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a206d6178207065722061646472657373206c696d6974000000006044820152606401610a3d565b81601454611ada919061398e565b3414611b1f5760405162461bcd60e51b81526020600482015260146024820152734572726f723a20696e76616c696420707269636560601b6044820152606401610a3d565b6011546001611b2e8484613962565b611b3891906139ad565b10611b975760405162461bcd60e51b815260206004820152602960248201527f4572726f723a2063616e6e6f74206d696e74206d6f7265207468616e20746f74604482015268616c20737570706c7960b81b6064820152608401610a3d565b60185460ff1615611c275733600090815260196020526040902054821115611c275760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20796f7520617265206e6f742077686974656c6973746564206f60448201527f7220616d6f756e7420697320686967686572207468616e206c696d69740000006064820152608401610a3d565b60005b82811015611c7e57611c3b33612469565b60185460ff1615611c6c57336000908152601960205260408120805460019290611c669084906139ad565b90915550505b80611c7681613a25565b915050611c2a565b50610f8b3461260d565b6001600160a01b038216331415611ce15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a3d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611d5733836121ae565b611d735760405162461bcd60e51b8152600401610a3d906138bc565b6119d3848484846126c0565b600b546001600160a01b03610100909104163314611daf5760405162461bcd60e51b8152600401610a3d90613887565b6018805460ff19811660ff90911615179055565b60108054611515906139f0565b600b546001600160a01b03610100909104163314611e005760405162461bcd60e51b8152600401610a3d90613887565b601255565b60606109e2826126f3565b60606000611e1d83611596565b905080611e3e5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115611e5957611e59613acc565b604051908082528060200260200182016040528015611e82578160200160208202803683370190505b50905060005b82811015611e3657611e9a8582610d75565b828281518110611eac57611eac613ab6565b602090810291909101015280611ec181613a25565b915050611e88565b50919050565b600b546001600160a01b03610100909104163314611eff5760405162461bcd60e51b8152600401610a3d90613887565b4780611f415760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f19350505050158015611f6e573d6000803e3d6000fd5b5060005b60175460ff82161015611fcf57600060178260ff1681548110611f9757611f97613ab6565b60009182526020808320909101546001600160a01b031682526016905260408120600101555080611fc781613a40565b915050611f72565b5060405181815233907f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906020016110c2565b600b546001600160a01b036101009091041633146120325760405162461bcd60e51b8152600401610a3d90613887565b6001600160a01b0381166120975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3d565b600b546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b60006001600160e01b0319821663780e9d6360e01b14806109e257506109e2826127b1565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061217582611445565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121b9826120fe565b61221a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b600061222583611445565b9050806001600160a01b0316846001600160a01b031614806122605750836001600160a01b031661225584610afa565b6001600160a01b0316145b8061229057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122ab82611445565b6001600160a01b0316146123135760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a3d565b6001600160a01b0382166123755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3d565b612380838383612801565b61238b600082612140565b6001600160a01b03831660009081526003602052604081208054600192906123b49084906139ad565b90915550506001600160a01b03821660009081526003602052604081208054600192906123e2908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b82811015610c935761245782612469565b8061246181613a25565b915050612446565b600061247361282f565b61247e906001613962565b9050610f8b8282612936565b61110681612950565b600b5460ff16156124b65760405162461bcd60e51b8152600401610a3d9061385d565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124eb3390565b6040516001600160a01b03909116815260200160405180910390a1565b600b5460ff166125515760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a3d565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336124eb565b61258b826120fe565b6125ee5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a3d565b6000828152600a602090815260409091208251610c9392840190613155565b60005b60175460ff82161015610f8b57600060178260ff168154811061263557612635613ab6565b60009182526020808320909101546001600160a01b0316808352601690915260408220549092509061267361271061266d8785612990565b90612a16565b6001600160a01b0384166000908152601660205260408120600101805492935083929091906126a3908490613962565b9250508190555050505080806126b890613a40565b915050612610565b6126cb848484612298565b6126d784848484612a58565b6119d35760405162461bcd60e51b8152600401610a3d9061380b565b60606126fe826120fe565b6127645760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610a3d565b600061276e612b65565b9050600061277a612b74565b90508161278685612b83565b8260405160200161279993929190613734565b60405160208183030381529060405292505050919050565b60006001600160e01b031982166380ac58cd60e01b14806127e257506001600160e01b03198216635b5e139f60e01b145b806109e257506301ffc9a760e01b6001600160e01b03198316146109e2565b600b5460ff16156128245760405162461bcd60e51b8152600401610a3d9061385d565b610c93838383612c81565b600080600c547f000000000000000000000000000000000000000000000000000000000000000061286091906139ad565b9050600080600083612870612d39565b61287a9190613a60565b9050600d600061288b6001876139ad565b815260200190815260200160002054600014156128b4576128ad6001856139ad565b92506128d5565b600d60006128c36001876139ad565b81526020019081526020016000205492505b6000818152600d6020526040902054612901576000818152600d60205260409020839055905080612918565b6000818152600d6020526040902080549084905591505b600c805490600061292883613a25565b909155509195945050505050565b610f8b828260405180602001604052806000815250612d75565b61295981612da8565b6000818152600a602052604090208054612972906139f0565b159050611106576000818152600a60205260408120611106916131d9565b60008261299f575060006109e2565b60006129ab838561398e565b9050826129b8858361397a565b14612a0f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a3d565b9392505050565b6000612a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e4f565b60006001600160a01b0384163b15612b5a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a9c903390899088908890600401613777565b602060405180830381600087803b158015612ab657600080fd5b505af1925050508015612ae6575060408051601f3d908101601f19168201909252612ae3918101906135f7565b60015b612b40573d808015612b14576040519150601f19603f3d011682016040523d82523d6000602084013e612b19565b606091505b508051612b385760405162461bcd60e51b8152600401610a3d9061380b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612290565b506001949350505050565b6060600f8054610a77906139f0565b606060108054610a77906139f0565b606081612ba75750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bd15780612bbb81613a25565b9150612bca9050600a8361397a565b9150612bab565b60008167ffffffffffffffff811115612bec57612bec613acc565b6040519080825280601f01601f191660200182016040528015612c16576020820181803683370190505b5090505b841561229057612c2b6001836139ad565b9150612c38600a86613a60565b612c43906030613962565b60f81b818381518110612c5857612c58613ab6565b60200101906001600160f81b031916908160001a905350612c7a600a8661397a565b9450612c1a565b6001600160a01b038316612cdc57612cd781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612cff565b816001600160a01b0316836001600160a01b031614612cff57612cff8382612e86565b6001600160a01b038216612d1657610c9381612f23565b826001600160a01b0316826001600160a01b031614610c9357610c938282612fd2565b60004442604051602001612d57929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905090565b612d7f8383613016565b612d8c6000848484612a58565b610c935760405162461bcd60e51b8152600401610a3d9061380b565b6000612db382611445565b9050612dc181600084612801565b612dcc600083612140565b6001600160a01b0381166000908152600360205260408120805460019290612df59084906139ad565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008183612e705760405162461bcd60e51b8152600401610a3d91906137f8565b506000612e7d848661397a565b95945050505050565b60006001612e9384611596565b612e9d91906139ad565b600083815260076020526040902054909150808214612ef0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612f35906001906139ad565b60008381526009602052604081205460088054939450909284908110612f5d57612f5d613ab6565b906000526020600020015490508060088381548110612f7e57612f7e613ab6565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612fb657612fb6613aa0565b6001900381819060005260206000200160009055905550505050565b6000612fdd83611596565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661306c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a3d565b613075816120fe565b156130c25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a3d565b6130ce60008383612801565b6001600160a01b03821660009081526003602052604081208054600192906130f7908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054613161906139f0565b90600052602060002090601f01602090048101928261318357600085556131c9565b82601f1061319c57805160ff19168380011785556131c9565b828001600101855582156131c9579182015b828111156131c95782518255916020019190600101906131ae565b506131d592915061320f565b5090565b5080546131e5906139f0565b6000825580601f106131f5575050565b601f01602090049060005260206000209081019061110691905b5b808211156131d55760008155600101613210565b600067ffffffffffffffff83111561323e5761323e613acc565b613251601f8401601f191660200161390d565b905082815283838301111561326557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461329357600080fd5b919050565b600082601f8301126132a957600080fd5b813560206132be6132b98361393e565b61390d565b80838252828201915082860187848660051b89010111156132de57600080fd5b60005b85811015613304576132f28261327c565b845292840192908401906001016132e1565b5090979650505050505050565b600082601f83011261332257600080fd5b612a0f83833560208501613224565b60006020828403121561334357600080fd5b612a0f8261327c565b6000806040838503121561335f57600080fd5b6133688361327c565b91506133766020840161327c565b90509250929050565b60008060006060848603121561339457600080fd5b61339d8461327c565b92506133ab6020850161327c565b9150604084013590509250925092565b600080600080608085870312156133d157600080fd5b6133da8561327c565b93506133e86020860161327c565b925060408501359150606085013567ffffffffffffffff81111561340b57600080fd5b8501601f8101871361341c57600080fd5b61342b87823560208401613224565b91505092959194509250565b6000806040838503121561344a57600080fd5b6134538361327c565b915060208084013567ffffffffffffffff81111561347057600080fd5b8401601f8101861361348157600080fd5b803561348f6132b98261393e565b80828252848201915084840189868560051b87010111156134af57600080fd5b600094505b838510156134d25780358352600194909401939185019185016134b4565b5080955050505050509250929050565b600080604083850312156134f557600080fd5b6134fe8361327c565b9150602083013561350e81613ae2565b809150509250929050565b6000806040838503121561352c57600080fd5b6135358361327c565b946020939093013593505050565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b61229084828501613298565b6000806040838503121561358b57600080fd5b823567ffffffffffffffff8111156135a257600080fd5b6135ae85828601613298565b95602094909401359450505050565b6000602082840312156135cf57600080fd5b8151612a0f81613ae2565b6000602082840312156135ec57600080fd5b8135612a0f81613af0565b60006020828403121561360957600080fd5b8151612a0f81613af0565b60006020828403121561362657600080fd5b813567ffffffffffffffff81111561363d57600080fd5b61229084828501613311565b60006020828403121561365b57600080fd5b813561ffff81168114612a0f57600080fd5b60006020828403121561367f57600080fd5b5035919050565b60006020828403121561369857600080fd5b5051919050565b600080604083850312156136b257600080fd5b82359150602083013567ffffffffffffffff8111156136d057600080fd5b6136dc85828601613311565b9150509250929050565b600080604083850312156136f957600080fd5b50508035926020909101359150565b600081518084526137208160208601602086016139c4565b601f01601f19169290920160200192915050565b600084516137468184602089016139c4565b84519083019061375a8183602089016139c4565b845191019061376d8183602088016139c4565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906137aa90830184613708565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156137ec578351835292840192918401916001016137d0565b50909695505050505050565b602081526000612a0f6020830184613708565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561393657613936613acc565b604052919050565b600067ffffffffffffffff82111561395857613958613acc565b5060051b60200190565b6000821982111561397557613975613a74565b500190565b60008261398957613989613a8a565b500490565b60008160001904831182151516156139a8576139a8613a74565b500290565b6000828210156139bf576139bf613a74565b500390565b60005b838110156139df5781810151838201526020016139c7565b838111156119d35750506000910152565b600181811c90821680613a0457607f821691505b60208210811415611ec957634e487b7160e01b600052602260045260246000fd5b6000600019821415613a3957613a39613a74565b5060010190565b600060ff821660ff811415613a5757613a57613a74565b60010192915050565b600082613a6f57613a6f613a8a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461110657600080fd5b6001600160e01b03198116811461110657600080fdfea26469706673582212201754acd9e89e1e61c2ab47d2f9d8ae63d1a664a84e38711744bc7004a542183f64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ec9803e29b3169bce9d53cef6eb56cfa74f78de00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode
0x6080604052600436106103195760003560e01c806370a08231116101ab578063ad2f852a116100f7578063d5abeb0111610095578063f147efeb1161006f578063f147efeb1461092b578063f2fde38b14610974578063f968adbe14610994578063fa0fca84146109aa57600080fd5b8063d5abeb01146108b7578063db2e21bc146108cd578063e985e9c5146108e257600080fd5b8063c6682862116100d1578063c668286214610835578063c6f6f2161461084a578063c87b56dd1461086a578063d2f8dd451461088a57600080fd5b8063ad2f852a146107e0578063b88d4fde14610800578063b9bfa0bc1461082057600080fd5b80639186b425116101645780639bdedea51161013e5780639bdedea514610777578063a035b1fe14610797578063a0712d68146107ad578063a22cb465146107c057600080fd5b80639186b4251461072857806391b7f5ed1461074257806395d89b411461076257600080fd5b806370a082311461067a578063715018a61461069a578063768d7138146106af5780637e0586f1146106c5578063862440e2146106e55780638da5cb5b1461070557600080fd5b8063397457911161026a57806349df728c116102235780635c975abb116101fd5780635c975abb146106185780636352211e1461063057806367dded4d146106505780636c0360eb1461066557600080fd5b806349df728c146105b85780634f6ccce7146105d857806355f804b3146105f857600080fd5b806339745791146105035780633ccfd60b1461052357806340d097c31461053857806342842e0e1461055857806342966c6814610578578063483efda21461059857600080fd5b806318160ddd116102d757806329ee566c116102b157806329ee566c1461046e5780632a55205a146104845780632f745c59146104c357806336e79a5a146104e357600080fd5b806318160ddd1461040f57806323b872dd1461042e57806329413b121461044e57600080fd5b8062923f9e1461031e57806301ffc9a71461035357806306d254da1461037357806306fdde0314610395578063081812fc146103b7578063095ea7b3146103ef575b600080fd5b34801561032a57600080fd5b5061033e61033936600461366d565b6109d7565b60405190151581526020015b60405180910390f35b34801561035f57600080fd5b5061033e61036e3660046135da565b6109e8565b34801561037f57600080fd5b5061039361038e366004613331565b610a0d565b005b3480156103a157600080fd5b506103aa610a68565b60405161034a91906137f8565b3480156103c357600080fd5b506103d76103d236600461366d565b610afa565b6040516001600160a01b03909116815260200161034a565b3480156103fb57600080fd5b5061039361040a366004613519565b610b82565b34801561041b57600080fd5b506008545b60405190815260200161034a565b34801561043a57600080fd5b5061039361044936600461337f565b610c98565b34801561045a57600080fd5b50610393610469366004613578565b610cca565b34801561047a57600080fd5b5061042060155481565b34801561049057600080fd5b506104a461049f3660046136e6565b610d3b565b604080516001600160a01b03909316835260208301919091520161034a565b3480156104cf57600080fd5b506104206104de366004613519565b610d75565b3480156104ef57600080fd5b506103936104fe366004613649565b610e0b565b34801561050f57600080fd5b5061039361051e366004613543565b610eb0565b34801561052f57600080fd5b50610393610f8f565b34801561054457600080fd5b50610393610553366004613331565b6110cd565b34801561056457600080fd5b5061039361057336600461337f565b611109565b34801561058457600080fd5b5061039361059336600461366d565b611124565b3480156105a457600080fd5b506103936105b336600461366d565b61119b565b3480156105c457600080fd5b506103936105d3366004613331565b6111d0565b3480156105e457600080fd5b506104206105f336600461366d565b61136f565b34801561060457600080fd5b50610393610613366004613614565b611402565b34801561062457600080fd5b50600b5460ff1661033e565b34801561063c57600080fd5b506103d761064b36600461366d565b611445565b34801561065c57600080fd5b506103936114bc565b34801561067157600080fd5b506103aa611508565b34801561068657600080fd5b50610420610695366004613331565b611596565b3480156106a657600080fd5b5061039361161d565b3480156106bb57600080fd5b5061042060135481565b3480156106d157600080fd5b506103936106e0366004613578565b61169d565b3480156106f157600080fd5b5061039361070036600461369f565b6117ea565b34801561071157600080fd5b50600b5461010090046001600160a01b03166103d7565b34801561073457600080fd5b5060185461033e9060ff1681565b34801561074e57600080fd5b5061039361075d36600461366d565b611824565b34801561076e57600080fd5b506103aa611859565b34801561078357600080fd5b50610393610792366004613437565b611868565b3480156107a357600080fd5b5061042060145481565b6103936107bb36600461366d565b6119d9565b3480156107cc57600080fd5b506103936107db3660046134e2565b611c88565b3480156107ec57600080fd5b50600e546103d7906001600160a01b031681565b34801561080c57600080fd5b5061039361081b3660046133bb565b611d4d565b34801561082c57600080fd5b50610393611d7f565b34801561084157600080fd5b506103aa611dc3565b34801561085657600080fd5b5061039361086536600461366d565b611dd0565b34801561087657600080fd5b506103aa61088536600461366d565b611e05565b34801561089657600080fd5b506108aa6108a5366004613331565b611e10565b60405161034a91906137b4565b3480156108c357600080fd5b5061042060115481565b3480156108d957600080fd5b50610393611ecf565b3480156108ee57600080fd5b5061033e6108fd36600461334c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561093757600080fd5b5061095f610946366004613331565b6016602052600090815260409020805460019091015482565b6040805192835260208301919091520161034a565b34801561098057600080fd5b5061039361098f366004613331565b612002565b3480156109a057600080fd5b5061042060125481565b3480156109b657600080fd5b506104206109c5366004613331565b60196020526000908152604090205481565b60006109e2826120fe565b92915050565b60006001600160e01b0319821663152a902d60e11b14806109e257506109e28261211b565b600b546001600160a01b03610100909104163314610a465760405162461bcd60e51b8152600401610a3d90613887565b60405180910390fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b606060008054610a77906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906139f0565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b6000610b05826120fe565b610b665760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b506000908152600460205260409020546001600160a01b031690565b6000610b8d82611445565b9050806001600160a01b0316836001600160a01b03161415610bfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a3d565b336001600160a01b0382161480610c175750610c1781336108fd565b610c895760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a3d565b610c938383612140565b505050565b610ca3335b826121ae565b610cbf5760405162461bcd60e51b8152600401610a3d906138bc565b610c93838383612298565b600b546001600160a01b03610100909104163314610cfa5760405162461bcd60e51b8152600401610a3d90613887565b60005b8251811015610c9357610d2982848381518110610d1c57610d1c613ab6565b6020026020010151612443565b80610d3381613a25565b915050610cfd565b600e5460155460009182916001600160a01b039091169061271090610d60908661398e565b610d6a919061397a565b915091509250929050565b6000610d8083611596565b8210610de25760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a3d565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03610100909104163314610e3b5760405162461bcd60e51b8152600401610a3d90613887565b6102ee8161ffff161115610ea75760405162461bcd60e51b815260206004820152602d60248201527f526f79616c7479206d7573742062652067726561746572207468616e206f722060448201526c657175616c20746f20372c352560981b6064820152608401610a3d565b61ffff16601555565b600b546001600160a01b03610100909104163314610ee05760405162461bcd60e51b8152600401610a3d90613887565b6000815111610f285760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8151811015610f8b57600060196000848481518110610f4c57610f4c613ab6565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080610f8390613a25565b915050610f2b565b5050565b33600090815260166020526040902054610ff95760405162461bcd60e51b815260206004820152602560248201527f446576204f6e6c793a2063616c6c6572206973206e6f742074686520646576656044820152643637b832b960d91b6064820152608401610a3d565b336000908152601660205260409020600101548061104d5760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f1935050505015801561107a573d6000803e3d6000fd5b503360008181526016602052604080822060010191909155517f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906110c29084815260200190565b60405180910390a250565b600b546001600160a01b036101009091041633146110fd5760405162461bcd60e51b8152600401610a3d90613887565b61110681612469565b50565b610c9383838360405180602001604052806000815250611d4d565b61112d33610c9d565b6111925760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610a3d565b6111068161248a565b600b546001600160a01b036101009091041633146111cb5760405162461bcd60e51b8152600401610a3d90613887565b601355565b600b546001600160a01b036101009091041633146112005760405162461bcd60e51b8152600401610a3d90613887565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b15801561124457600080fd5b505afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c9190613686565b9050816001600160a01b031663a9059cbb6112a5600b546001600160a01b036101009091041690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b1580156112ed57600080fd5b505af1158015611301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132591906135bd565b50604080516001600160a01b03851681526020810183905233917f5aa586896a67fb05c3b86276f66eecee7da00719d0e7299c403596fa2ec58ca4910160405180910390a2505050565b600061137a60085490565b82106113dd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a3d565b600882815481106113f0576113f0613ab6565b90600052602060002001549050919050565b600b546001600160a01b036101009091041633146114325760405162461bcd60e51b8152600401610a3d90613887565b8051610f8b90600f906020840190613155565b6000818152600260205260408120546001600160a01b0316806109e25760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a3d565b600b546001600160a01b036101009091041633146114ec5760405162461bcd60e51b8152600401610a3d90613887565b600b5460ff16611500576114fe612493565b565b6114fe612508565b600f8054611515906139f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611541906139f0565b801561158e5780601f106115635761010080835404028352916020019161158e565b820191906000526020600020905b81548152906001019060200180831161157157829003601f168201915b505050505081565b60006001600160a01b0382166116015760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a3d565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b0361010090910416331461164d5760405162461bcd60e51b8152600401610a3d90613887565b600b5460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b8054610100600160a81b0319169055565b600b546001600160a01b036101009091041633146116cd5760405162461bcd60e51b8152600401610a3d90613887565b60008251116117155760405162461bcd60e51b81526020600482015260146024820152734572726f723a206c69737420697320656d70747960601b6044820152606401610a3d565b60005b8251811015610c935760006001600160a01b031683828151811061173e5761173e613ab6565b60200260200101516001600160a01b031614156117945760405162461bcd60e51b815260206004820152601460248201527320b2323932b9b99031b0b73737ba10313290181760611b6044820152606401610a3d565b81601960008584815181106117ab576117ab613ab6565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806117e290613a25565b915050611718565b600b546001600160a01b0361010090910416331461181a5760405162461bcd60e51b8152600401610a3d90613887565b610f8b8282612582565b600b546001600160a01b036101009091041633146118545760405162461bcd60e51b8152600401610a3d90613887565b601455565b606060018054610a77906139f0565b600b546001600160a01b036101009091041633146118985760405162461bcd60e51b8152600401610a3d90613887565b8160005b82518110156119d357816001600160a01b03166342842e0e306118cd600b546001600160a01b036101009091041690565b8685815181106118df576118df613ab6565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561193957600080fd5b505af115801561194d573d6000803e3d6000fd5b50505050336001600160a01b03167fb8dbf4ce06446b88ef02ffd28a948c2637ac80fb0bd4d3a31c70878c1046eb7f8585848151811061198f5761198f613ab6565b60200260200101516040516119b99291906001600160a01b03929092168252602082015260400190565b60405180910390a2806119cb81613a25565b91505061189c565b50505050565b600b5460ff16156119fc5760405162461bcd60e51b8152600401610a3d9061385d565b6000611a0760085490565b9050600082118015611a1b57506012548211155b611a675760405162461bcd60e51b815260206004820152601760248201527f4572726f723a206d617820706172207478206c696d69740000000000000000006044820152606401610a3d565b601354611a7333611596565b611a7e906001613962565b1115611acc5760405162461bcd60e51b815260206004820152601c60248201527f4572726f723a206d6178207065722061646472657373206c696d6974000000006044820152606401610a3d565b81601454611ada919061398e565b3414611b1f5760405162461bcd60e51b81526020600482015260146024820152734572726f723a20696e76616c696420707269636560601b6044820152606401610a3d565b6011546001611b2e8484613962565b611b3891906139ad565b10611b975760405162461bcd60e51b815260206004820152602960248201527f4572726f723a2063616e6e6f74206d696e74206d6f7265207468616e20746f74604482015268616c20737570706c7960b81b6064820152608401610a3d565b60185460ff1615611c275733600090815260196020526040902054821115611c275760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20796f7520617265206e6f742077686974656c6973746564206f60448201527f7220616d6f756e7420697320686967686572207468616e206c696d69740000006064820152608401610a3d565b60005b82811015611c7e57611c3b33612469565b60185460ff1615611c6c57336000908152601960205260408120805460019290611c669084906139ad565b90915550505b80611c7681613a25565b915050611c2a565b50610f8b3461260d565b6001600160a01b038216331415611ce15760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a3d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611d5733836121ae565b611d735760405162461bcd60e51b8152600401610a3d906138bc565b6119d3848484846126c0565b600b546001600160a01b03610100909104163314611daf5760405162461bcd60e51b8152600401610a3d90613887565b6018805460ff19811660ff90911615179055565b60108054611515906139f0565b600b546001600160a01b03610100909104163314611e005760405162461bcd60e51b8152600401610a3d90613887565b601255565b60606109e2826126f3565b60606000611e1d83611596565b905080611e3e5760408051600080825260208201909252905b509392505050565b60008167ffffffffffffffff811115611e5957611e59613acc565b604051908082528060200260200182016040528015611e82578160200160208202803683370190505b50905060005b82811015611e3657611e9a8582610d75565b828281518110611eac57611eac613ab6565b602090810291909101015280611ec181613a25565b915050611e88565b50919050565b600b546001600160a01b03610100909104163314611eff5760405162461bcd60e51b8152600401610a3d90613887565b4780611f415760405162461bcd60e51b815260206004820152601160248201527008ae4e4dee47440dcde40cccacae640745607b1b6044820152606401610a3d565b604051339082156108fc029083906000818181858888f19350505050158015611f6e573d6000803e3d6000fd5b5060005b60175460ff82161015611fcf57600060178260ff1681548110611f9757611f97613ab6565b60009182526020808320909101546001600160a01b031682526016905260408120600101555080611fc781613a40565b915050611f72565b5060405181815233907f9bba815921f12cb7b1408e14b5ade745234397d39623ae5e7c82d693cb45815f906020016110c2565b600b546001600160a01b036101009091041633146120325760405162461bcd60e51b8152600401610a3d90613887565b6001600160a01b0381166120975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3d565b600b546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000908152600260205260409020546001600160a01b0316151590565b60006001600160e01b0319821663780e9d6360e01b14806109e257506109e2826127b1565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061217582611445565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006121b9826120fe565b61221a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a3d565b600061222583611445565b9050806001600160a01b0316846001600160a01b031614806122605750836001600160a01b031661225584610afa565b6001600160a01b0316145b8061229057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166122ab82611445565b6001600160a01b0316146123135760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a3d565b6001600160a01b0382166123755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3d565b612380838383612801565b61238b600082612140565b6001600160a01b03831660009081526003602052604081208054600192906123b49084906139ad565b90915550506001600160a01b03821660009081526003602052604081208054600192906123e2908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60005b82811015610c935761245782612469565b8061246181613a25565b915050612446565b600061247361282f565b61247e906001613962565b9050610f8b8282612936565b61110681612950565b600b5460ff16156124b65760405162461bcd60e51b8152600401610a3d9061385d565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124eb3390565b6040516001600160a01b03909116815260200160405180910390a1565b600b5460ff166125515760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a3d565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336124eb565b61258b826120fe565b6125ee5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a3d565b6000828152600a602090815260409091208251610c9392840190613155565b60005b60175460ff82161015610f8b57600060178260ff168154811061263557612635613ab6565b60009182526020808320909101546001600160a01b0316808352601690915260408220549092509061267361271061266d8785612990565b90612a16565b6001600160a01b0384166000908152601660205260408120600101805492935083929091906126a3908490613962565b9250508190555050505080806126b890613a40565b915050612610565b6126cb848484612298565b6126d784848484612a58565b6119d35760405162461bcd60e51b8152600401610a3d9061380b565b60606126fe826120fe565b6127645760405162461bcd60e51b815260206004820152603160248201527f45524337323155524953746f726167653a2055524920717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b6064820152608401610a3d565b600061276e612b65565b9050600061277a612b74565b90508161278685612b83565b8260405160200161279993929190613734565b60405160208183030381529060405292505050919050565b60006001600160e01b031982166380ac58cd60e01b14806127e257506001600160e01b03198216635b5e139f60e01b145b806109e257506301ffc9a760e01b6001600160e01b03198316146109e2565b600b5460ff16156128245760405162461bcd60e51b8152600401610a3d9061385d565b610c93838383612c81565b600080600c547f00000000000000000000000000000000000000000000000000000000000000c961286091906139ad565b9050600080600083612870612d39565b61287a9190613a60565b9050600d600061288b6001876139ad565b815260200190815260200160002054600014156128b4576128ad6001856139ad565b92506128d5565b600d60006128c36001876139ad565b81526020019081526020016000205492505b6000818152600d6020526040902054612901576000818152600d60205260409020839055905080612918565b6000818152600d6020526040902080549084905591505b600c805490600061292883613a25565b909155509195945050505050565b610f8b828260405180602001604052806000815250612d75565b61295981612da8565b6000818152600a602052604090208054612972906139f0565b159050611106576000818152600a60205260408120611106916131d9565b60008261299f575060006109e2565b60006129ab838561398e565b9050826129b8858361397a565b14612a0f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a3d565b9392505050565b6000612a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e4f565b60006001600160a01b0384163b15612b5a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a9c903390899088908890600401613777565b602060405180830381600087803b158015612ab657600080fd5b505af1925050508015612ae6575060408051601f3d908101601f19168201909252612ae3918101906135f7565b60015b612b40573d808015612b14576040519150601f19603f3d011682016040523d82523d6000602084013e612b19565b606091505b508051612b385760405162461bcd60e51b8152600401610a3d9061380b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612290565b506001949350505050565b6060600f8054610a77906139f0565b606060108054610a77906139f0565b606081612ba75750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612bd15780612bbb81613a25565b9150612bca9050600a8361397a565b9150612bab565b60008167ffffffffffffffff811115612bec57612bec613acc565b6040519080825280601f01601f191660200182016040528015612c16576020820181803683370190505b5090505b841561229057612c2b6001836139ad565b9150612c38600a86613a60565b612c43906030613962565b60f81b818381518110612c5857612c58613ab6565b60200101906001600160f81b031916908160001a905350612c7a600a8661397a565b9450612c1a565b6001600160a01b038316612cdc57612cd781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612cff565b816001600160a01b0316836001600160a01b031614612cff57612cff8382612e86565b6001600160a01b038216612d1657610c9381612f23565b826001600160a01b0316826001600160a01b031614610c9357610c938282612fd2565b60004442604051602001612d57929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905090565b612d7f8383613016565b612d8c6000848484612a58565b610c935760405162461bcd60e51b8152600401610a3d9061380b565b6000612db382611445565b9050612dc181600084612801565b612dcc600083612140565b6001600160a01b0381166000908152600360205260408120805460019290612df59084906139ad565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008183612e705760405162461bcd60e51b8152600401610a3d91906137f8565b506000612e7d848661397a565b95945050505050565b60006001612e9384611596565b612e9d91906139ad565b600083815260076020526040902054909150808214612ef0576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612f35906001906139ad565b60008381526009602052604081205460088054939450909284908110612f5d57612f5d613ab6565b906000526020600020015490508060088381548110612f7e57612f7e613ab6565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612fb657612fb6613aa0565b6001900381819060005260206000200160009055905550505050565b6000612fdd83611596565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b03821661306c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a3d565b613075816120fe565b156130c25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a3d565b6130ce60008383612801565b6001600160a01b03821660009081526003602052604081208054600192906130f7908490613962565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054613161906139f0565b90600052602060002090601f01602090048101928261318357600085556131c9565b82601f1061319c57805160ff19168380011785556131c9565b828001600101855582156131c9579182015b828111156131c95782518255916020019190600101906131ae565b506131d592915061320f565b5090565b5080546131e5906139f0565b6000825580601f106131f5575050565b601f01602090049060005260206000209081019061110691905b5b808211156131d55760008155600101613210565b600067ffffffffffffffff83111561323e5761323e613acc565b613251601f8401601f191660200161390d565b905082815283838301111561326557600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461329357600080fd5b919050565b600082601f8301126132a957600080fd5b813560206132be6132b98361393e565b61390d565b80838252828201915082860187848660051b89010111156132de57600080fd5b60005b85811015613304576132f28261327c565b845292840192908401906001016132e1565b5090979650505050505050565b600082601f83011261332257600080fd5b612a0f83833560208501613224565b60006020828403121561334357600080fd5b612a0f8261327c565b6000806040838503121561335f57600080fd5b6133688361327c565b91506133766020840161327c565b90509250929050565b60008060006060848603121561339457600080fd5b61339d8461327c565b92506133ab6020850161327c565b9150604084013590509250925092565b600080600080608085870312156133d157600080fd5b6133da8561327c565b93506133e86020860161327c565b925060408501359150606085013567ffffffffffffffff81111561340b57600080fd5b8501601f8101871361341c57600080fd5b61342b87823560208401613224565b91505092959194509250565b6000806040838503121561344a57600080fd5b6134538361327c565b915060208084013567ffffffffffffffff81111561347057600080fd5b8401601f8101861361348157600080fd5b803561348f6132b98261393e565b80828252848201915084840189868560051b87010111156134af57600080fd5b600094505b838510156134d25780358352600194909401939185019185016134b4565b5080955050505050509250929050565b600080604083850312156134f557600080fd5b6134fe8361327c565b9150602083013561350e81613ae2565b809150509250929050565b6000806040838503121561352c57600080fd5b6135358361327c565b946020939093013593505050565b60006020828403121561355557600080fd5b813567ffffffffffffffff81111561356c57600080fd5b61229084828501613298565b6000806040838503121561358b57600080fd5b823567ffffffffffffffff8111156135a257600080fd5b6135ae85828601613298565b95602094909401359450505050565b6000602082840312156135cf57600080fd5b8151612a0f81613ae2565b6000602082840312156135ec57600080fd5b8135612a0f81613af0565b60006020828403121561360957600080fd5b8151612a0f81613af0565b60006020828403121561362657600080fd5b813567ffffffffffffffff81111561363d57600080fd5b61229084828501613311565b60006020828403121561365b57600080fd5b813561ffff81168114612a0f57600080fd5b60006020828403121561367f57600080fd5b5035919050565b60006020828403121561369857600080fd5b5051919050565b600080604083850312156136b257600080fd5b82359150602083013567ffffffffffffffff8111156136d057600080fd5b6136dc85828601613311565b9150509250929050565b600080604083850312156136f957600080fd5b50508035926020909101359150565b600081518084526137208160208601602086016139c4565b601f01601f19169290920160200192915050565b600084516137468184602089016139c4565b84519083019061375a8183602089016139c4565b845191019061376d8183602088016139c4565b0195945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906137aa90830184613708565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156137ec578351835292840192918401916001016137d0565b50909695505050505050565b602081526000612a0f6020830184613708565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561393657613936613acc565b604052919050565b600067ffffffffffffffff82111561395857613958613acc565b5060051b60200190565b6000821982111561397557613975613a74565b500190565b60008261398957613989613a8a565b500490565b60008160001904831182151516156139a8576139a8613a74565b500290565b6000828210156139bf576139bf613a74565b500390565b60005b838110156139df5781810151838201526020016139c7565b838111156119d35750506000910152565b600181811c90821680613a0457607f821691505b60208210811415611ec957634e487b7160e01b600052602260045260246000fd5b6000600019821415613a3957613a39613a74565b5060010190565b600060ff821660ff811415613a5757613a57613a74565b60010192915050565b600082613a6f57613a6f613a8a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461110657600080fd5b6001600160e01b03198116811461110657600080fdfea26469706673582212201754acd9e89e1e61c2ab47d2f9d8ae63d1a664a84e38711744bc7004a542183f64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ec9803e29b3169bce9d53cef6eb56cfa74f78de00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710
-----Decoded View---------------
Arg [0] : _devList (address[]): 0x9eC9803E29B3169bce9d53CEf6Eb56CfA74f78dE
Arg [1] : _fees (uint256[]): 10000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 0000000000000000000000009ec9803e29b3169bce9d53cef6eb56cfa74f78de
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000002710
Deployed Bytecode Sourcemap
56157:9326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60307:103;;;;;;;;;;-1:-1:-1;60307:103:0;;;;;:::i;:::-;;:::i;:::-;;;11032:14:1;;11025:22;11007:41;;10995:2;10980:18;60307:103:0;;;;;;;;62782:292;;;;;;;;;;-1:-1:-1;62782:292:0;;;;;:::i;:::-;;:::i;62380:122::-;;;;;;;;;;-1:-1:-1;62380:122:0;;;;;:::i;:::-;;:::i;:::-;;24371:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26061:308::-;;;;;;;;;;-1:-1:-1;26061:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9034:32:1;;;9016:51;;9004:2;8989:18;26061:308:0;8870:203:1;25584:411:0;;;;;;;;;;-1:-1:-1;25584:411:0;;;;;:::i;:::-;;:::i;39145:113::-;;;;;;;;;;-1:-1:-1;39233:10:0;:17;39145:113;;;24740:25:1;;;24728:2;24713:18;39145:113:0;24594:177:1;27120:376:0;;;;;;;;;;-1:-1:-1;27120:376:0;;;;;:::i;:::-;;:::i;64662:205::-;;;;;;;;;;-1:-1:-1;64662:205:0;;;;;:::i;:::-;;:::i;57266:28::-;;;;;;;;;;;;;;;;60418:238;;;;;;;;;;-1:-1:-1;60418:238:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;10143:32:1;;;10125:51;;10207:2;10192:18;;10185:34;;;;10098:18;60418:238:0;9951:274:1;38726:343:0;;;;;;;;;;-1:-1:-1;38726:343:0;;;;;:::i;:::-;;:::i;62110:258::-;;;;;;;;;;-1:-1:-1;62110:258:0;;;;;:::i;:::-;;:::i;61068:242::-;;;;;;;;;;-1:-1:-1;61068:242:0;;;;;:::i;:::-;;:::i;63507:285::-;;;;;;;;;;;;;:::i;62682:82::-;;;;;;;;;;-1:-1:-1;62682:82:0;;;;;:::i;:::-;;:::i;27567:185::-;;;;;;;;;;-1:-1:-1;27567:185:0;;;;;:::i;:::-;;:::i;51597:282::-;;;;;;;;;;-1:-1:-1;51597:282:0;;;;;:::i;:::-;;:::i;61540:106::-;;;;;;;;;;-1:-1:-1;61540:106:0;;;;;:::i;:::-;;:::i;64331:319::-;;;;;;;;;;-1:-1:-1;64331:319:0;;;;;:::i;:::-;;:::i;39335:320::-;;;;;;;;;;-1:-1:-1;39335:320:0;;;;;:::i;:::-;;:::i;61760:104::-;;;;;;;;;;-1:-1:-1;61760:104:0;;;;;:::i;:::-;;:::i;47594:86::-;;;;;;;;;;-1:-1:-1;47665:7:0;;;;47594:86;;23978:326;;;;;;;;;;-1:-1:-1;23978:326:0;;;;;:::i;:::-;;:::i;61431:101::-;;;;;;;;;;;;;:::i;57017:21::-;;;;;;;;;;;;;:::i;23621:295::-;;;;;;;;;;-1:-1:-1;23621:295:0;;;;;:::i;:::-;;:::i;50551:148::-;;;;;;;;;;;;;:::i;57185:33::-;;;;;;;;;;;;;;;;60690:370;;;;;;;;;;-1:-1:-1;60690:370:0;;;;;:::i;:::-;;:::i;61980:116::-;;;;;;;;;;-1:-1:-1;61980:116:0;;;;;:::i;:::-;;:::i;49900:87::-;;;;;;;;;;-1:-1:-1;49973:6:0;;;;;-1:-1:-1;;;;;49973:6:0;49900:87;;57485:34;;;;;;;;;;-1:-1:-1;57485:34:0;;;;;;;;61872:90;;;;;;;;;;-1:-1:-1;61872:90:0;;;;;:::i;:::-;;:::i;24540:104::-;;;;;;;;;;;;;:::i;65117:363::-;;;;;;;;;;-1:-1:-1;65117:363:0;;;;;:::i;:::-;;:::i;57225:30::-;;;;;;;;;;;;;;;;58725:828;;;;;;:::i;:::-;;:::i;26441:327::-;;;;;;;;;;-1:-1:-1;26441:327:0;;;;;:::i;:::-;;:::i;56928:75::-;;;;;;;;;;-1:-1:-1;56928:75:0;;;;-1:-1:-1;;;;;56928:75:0;;;27823:365;;;;;;;;;;-1:-1:-1;27823:365:0;;;;;:::i;:::-;;:::i;61318:105::-;;;;;;;;;;;;;:::i;57045:37::-;;;;;;;;;;;;;:::i;61654:98::-;;;;;;;;;;-1:-1:-1;61654:98:0;;;;;:::i;:::-;;:::i;59569:196::-;;;;;;;;;;-1:-1:-1;59569:196:0;;;;;:::i;:::-;;:::i;59773:526::-;;;;;;;;;;-1:-1:-1;59773:526:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;57112:30::-;;;;;;;;;;;;;;;;63872:403;;;;;;;;;;;;;:::i;26839:214::-;;;;;;;;;;-1:-1:-1;26839:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;27010:25:0;;;26981:4;27010:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26839:214;57403:41;;;;;;;;;;-1:-1:-1;57403:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;24950:25:1;;;25006:2;24991:18;;24984:34;;;;24923:18;57403:41:0;24776:248:1;50854:281:0;;;;;;;;;;-1:-1:-1;50854:281:0;;;;;:::i;:::-;;:::i;57149:29::-;;;;;;;;;;;;;;;;57526:46;;;;;;;;;;-1:-1:-1;57526:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;60307:103;60364:4;60389:12;60397:3;60389:7;:12::i;:::-;60381:21;60307:103;-1:-1:-1;;60307:103:0:o;62782:292::-;62930:4;-1:-1:-1;;;;;;62972:41:0;;-1:-1:-1;;;62972:41:0;;:94;;;63030:36;63054:11;63030:23;:36::i;62380:122::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;;;;;;;;;62462:14:::1;:32:::0;;-1:-1:-1;;;;;;62462:32:0::1;-1:-1:-1::0;;;;;62462:32:0;;;::::1;::::0;;;::::1;::::0;;62380:122::o;24371:100::-;24425:13;24458:5;24451:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24371:100;:::o;26061:308::-;26182:7;26229:16;26237:7;26229;:16::i;:::-;26207:110;;;;-1:-1:-1;;;26207:110:0;;19860:2:1;26207:110:0;;;19842:21:1;19899:2;19879:18;;;19872:30;19938:34;19918:18;;;19911:62;-1:-1:-1;;;19989:18:1;;;19982:42;20041:19;;26207:110:0;19658:408:1;26207:110:0;-1:-1:-1;26337:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26337:24:0;;26061:308::o;25584:411::-;25665:13;25681:23;25696:7;25681:14;:23::i;:::-;25665:39;;25729:5;-1:-1:-1;;;;;25723:11:0;:2;-1:-1:-1;;;;;25723:11:0;;;25715:57;;;;-1:-1:-1;;;25715:57:0;;21750:2:1;25715:57:0;;;21732:21:1;21789:2;21769:18;;;21762:30;21828:34;21808:18;;;21801:62;-1:-1:-1;;;21879:18:1;;;21872:31;21920:19;;25715:57:0;21548:397:1;25715:57:0;18506:10;-1:-1:-1;;;;;25807:21:0;;;;:62;;-1:-1:-1;25832:37:0;25849:5;18506:10;26839:214;:::i;25832:37::-;25785:168;;;;-1:-1:-1;;;25785:168:0;;16200:2:1;25785:168:0;;;16182:21:1;16239:2;16219:18;;;16212:30;16278:34;16258:18;;;16251:62;16349:26;16329:18;;;16322:54;16393:19;;25785:168:0;15998:420:1;25785:168:0;25966:21;25975:2;25979:7;25966:8;:21::i;:::-;25654:341;25584:411;;:::o;27120:376::-;27329:41;18506:10;27348:12;27362:7;27329:18;:41::i;:::-;27307:140;;;;-1:-1:-1;;;27307:140:0;;;;;;;:::i;:::-;27460:28;27470:4;27476:2;27480:7;27460:9;:28::i;64662:205::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;64758:9:::1;64753:107;64777:5;:12;64773:1;:16;64753:107;;;64811:37;64832:6;64839:5;64845:1;64839:8;;;;;;;;:::i;:::-;;;;;;;64811:20;:37::i;:::-;64791:3:::0;::::1;::::0;::::1;:::i;:::-;;;;64753:107;;60418:238:::0;60601:14;;60631:7;;60536:16;;;;-1:-1:-1;;;;;60601:14:0;;;;60642:5;;60618:20;;:10;:20;:::i;:::-;60617:30;;;;:::i;:::-;60593:55;;;;60418:238;;;;;:::o;38726:343::-;38868:7;38923:23;38940:5;38923:16;:23::i;:::-;38915:5;:31;38893:124;;;;-1:-1:-1;;;38893:124:0;;11834:2:1;38893:124:0;;;11816:21:1;11873:2;11853:18;;;11846:30;11912:34;11892:18;;;11885:62;-1:-1:-1;;;11963:18:1;;;11956:41;12014:19;;38893:124:0;11632:407:1;38893:124:0;-1:-1:-1;;;;;;39035:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38726:343::o;62110:258::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;62277:3:::1;62265:8;:15;;;;62257:74;;;::::0;-1:-1:-1;;;62257:74:0;;15441:2:1;62257:74:0::1;::::0;::::1;15423:21:1::0;15480:2;15460:18;;;15453:30;15519:34;15499:18;;;15492:62;-1:-1:-1;;;15570:18:1;;;15563:43;15623:19;;62257:74:0::1;15239:409:1::0;62257:74:0::1;62342:18;;:7;:18:::0;62110:258::o;61068:242::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61182:1:::1;61161:11;:18;:22;61153:54;;;::::0;-1:-1:-1;;;61153:54:0;;22152:2:1;61153:54:0::1;::::0;::::1;22134:21:1::0;22191:2;22171:18;;;22164:30;-1:-1:-1;;;22210:18:1;;;22203:50;22270:18;;61153:54:0::1;21950:344:1::0;61153:54:0::1;61222:9;61218:84;61238:11;:18;61236:1;:20;61218:84;;;61301:1;61271:11;:27;61283:11;61295:1;61283:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;61271:27:0::1;-1:-1:-1::0;;;;;61271:27:0::1;;;;;;;;;;;;:31;;;;61257:3;;;;;:::i;:::-;;;;61218:84;;;;61068:242:::0;:::o;63507:285::-;56381:10;56403:1;56373:19;;;:7;:19;;;;;:27;56365:82;;;;-1:-1:-1;;;56365:82:0;;18273:2:1;56365:82:0;;;18255:21:1;18312:2;18292:18;;;18285:30;18351:34;18331:18;;;18324:62;-1:-1:-1;;;18402:18:1;;;18395:35;18447:19;;56365:82:0;18071:401:1;56365:82:0;63581:10:::1;63556:14;63573:19:::0;;;:7:::1;:19;::::0;;;;:26:::1;;::::0;63618:10;63610:39:::1;;;::::0;-1:-1:-1;;;63610:39:0;;24450:2:1;63610:39:0::1;::::0;::::1;24432:21:1::0;24489:2;24469:18;;;24462:30;-1:-1:-1;;;24508:18:1;;;24501:47;24565:18;;63610:39:0::1;24248:341:1::0;63610:39:0::1;63660:36;::::0;63668:10:::1;::::0;63660:36;::::1;;;::::0;63689:6;;63660:36:::1;::::0;;;63689:6;63668:10;63660:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;63715:10:0::1;63736:1;63707:19:::0;;;:7:::1;:19;::::0;;;;;:26:::1;;:30:::0;;;;63753:31;::::1;::::0;::::1;::::0;63777:6;24740:25:1;;24728:2;24713:18;;24594:177;63753:31:0::1;;;;;;;;63545:247;63507:285::o:0;62682:82::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;62740:16:::1;62753:2;62740:12;:16::i;:::-;62682:82:::0;:::o;27567:185::-;27705:39;27722:4;27728:2;27732:7;27705:39;;;;;;;;;;;;:16;:39::i;51597:282::-;51729:41;18506:10;51748:12;18426:98;51729:41;51707:139;;;;-1:-1:-1;;;51707:139:0;;23684:2:1;51707:139:0;;;23666:21:1;23723:2;23703:18;;;23696:30;23762:34;23742:18;;;23735:62;-1:-1:-1;;;23813:18:1;;;23806:46;23869:19;;51707:139:0;23482:412:1;51707:139:0;51857:14;51863:7;51857:5;:14::i;61540:106::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61614:12:::1;:24:::0;61540:106::o;64331:319::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;64483:38:::1;::::0;-1:-1:-1;;;64483:38:0;;64515:4:::1;64483:38;::::0;::::1;9016:51:1::0;64439:14:0;;64409:20:::1;::::0;-1:-1:-1;;;;;64483:23:0;::::1;::::0;::::1;::::0;8989:18:1;;64483:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64465:56;;64532:13;-1:-1:-1::0;;;;;64532:22:0::1;;64555:7;49973:6:::0;;-1:-1:-1;;;;;49973:6:0;;;;;;49900:87;64555:7:::1;64532:40;::::0;-1:-1:-1;;;;;;64532:40:0::1;::::0;;;;;;-1:-1:-1;;;;;10143:32:1;;;64532:40:0::1;::::0;::::1;10125:51:1::0;10192:18;;;10185:34;;;10098:18;;64532:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;64588:54:0::1;::::0;;-1:-1:-1;;;;;10143:32:1;;10125:51;;10207:2;10192:18;;10185:34;;;64608:10:0::1;::::0;64588:54:::1;::::0;10098:18:1;64588:54:0::1;;;;;;;64398:252;;64331:319:::0;:::o;39335:320::-;39455:7;39510:30;39233:10;:17;;39145:113;39510:30;39502:5;:38;39480:132;;;;-1:-1:-1;;;39480:132:0;;23271:2:1;39480:132:0;;;23253:21:1;23310:2;23290:18;;;23283:30;23349:34;23329:18;;;23322:62;-1:-1:-1;;;23400:18:1;;;23393:42;23452:19;;39480:132:0;23069:408:1;39480:132:0;39630:10;39641:5;39630:17;;;;;;;;:::i;:::-;;;;;;;;;39623:24;;39335:320;;;:::o;61760:104::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61836:20;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;23978:326::-:0;24095:7;24136:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24136:16:0;24185:19;24163:110;;;;-1:-1:-1;;;24163:110:0;;17448:2:1;24163:110:0;;;17430:21:1;17487:2;17467:18;;;17460:30;17526:34;17506:18;;;17499:62;-1:-1:-1;;;17577:18:1;;;17570:39;17626:19;;24163:110:0;17246:405:1;61431:101:0;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;47665:7;;;;61491:33:::1;;61516:8;:6;:8::i;:::-;61431:101::o:0;61491:33::-:1;61503:10;:8;:10::i;57017:21::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23621:295::-;23738:7;-1:-1:-1;;;;;23785:19:0;;23763:111;;;;-1:-1:-1;;;23763:111:0;;17037:2:1;23763:111:0;;;17019:21:1;17076:2;17056:18;;;17049:30;17115:34;17095:18;;;17088:62;-1:-1:-1;;;17166:18:1;;;17159:40;17216:19;;23763:111:0;16835:406:1;23763:111:0;-1:-1:-1;;;;;;23892:16:0;;;;;:9;:16;;;;;;;23621:295::o;50551:148::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;50642:6:::1;::::0;50621:40:::1;::::0;50658:1:::1;::::0;50642:6:::1;::::0;::::1;-1:-1:-1::0;;;;;50642:6:0::1;::::0;50621:40:::1;::::0;50658:1;;50621:40:::1;50672:6;:19:::0;;-1:-1:-1;;;;;;50672:19:0::1;::::0;;50551:148::o;60690:370::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;60815:1:::1;60793:12;:19;:23;60785:55;;;::::0;-1:-1:-1;;;60785:55:0;;22152:2:1;60785:55:0::1;::::0;::::1;22134:21:1::0;22191:2;22171:18;;;22164:30;-1:-1:-1;;;22210:18:1;;;22203:50;22270:18;;60785:55:0::1;21950:344:1::0;60785:55:0::1;60857:9;60853:190;60875:12;:19;60871:1;:23;60853:190;;;60952:1;-1:-1:-1::0;;;;;60925:29:0::1;:12;60938:1;60925:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;60925:29:0::1;;;60917:62;;;::::0;-1:-1:-1;;;60917:62:0;;24101:2:1;60917:62:0::1;::::0;::::1;24083:21:1::0;24140:2;24120:18;;;24113:30;-1:-1:-1;;;24159:18:1;;;24152:50;24219:18;;60917:62:0::1;23899:344:1::0;60917:62:0::1;61026:5;60995:11;:28;61007:12;61020:1;61007:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;60995:28:0::1;-1:-1:-1::0;;;;;60995:28:0::1;;;;;;;;;;;;:36;;;;60896:3;;;;;:::i;:::-;;;;60853:190;;61980:116:::0;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;62062:26:::1;62075:7;62084:3;62062:12;:26::i;61872:90::-:0;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61938:5:::1;:16:::0;61872:90::o;24540:104::-;24596:13;24629:7;24622:14;;;;;:::i;65117:363::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;65246:14;65214:21:::1;65272:201;65296:3;:10;65292:1;:14;65272:201;;;65328:13;-1:-1:-1::0;;;;;65328:30:0::1;;65367:4;65374:7;49973:6:::0;;-1:-1:-1;;;;;49973:6:0;;;;;;49900:87;65374:7:::1;65383:3;65387:1;65383:6;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;65328:62:::1;::::0;-1:-1:-1;;;;;;65328:62:0::1;::::0;;;;;;-1:-1:-1;;;;;9336:15:1;;;65328:62:0::1;::::0;::::1;9318:34:1::0;9388:15;;;;9368:18;;;9361:43;9420:18;;;9413:34;9253:18;;65328:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;65428:10;-1:-1:-1::0;;;;;65410:51:0::1;;65439:14;65454:3;65458:1;65454:6;;;;;;;;:::i;:::-;;;;;;;65410:51;;;;;;-1:-1:-1::0;;;;;10143:32:1;;;;10125:51;;10207:2;10192:18;;10185:34;10113:2;10098:18;;9951:274;65410:51:0::1;;;;;;;;65308:3:::0;::::1;::::0;::::1;:::i;:::-;;;;65272:201;;;;65203:277;65117:363:::0;;:::o;58725:828::-;47665:7;;;;47919:9;47911:38;;;;-1:-1:-1;;;47911:38:0;;;;;;;:::i;:::-;58795:14:::1;58812:13;39233:10:::0;:17;;39145:113;58812:13:::1;58795:30;;58853:1;58844:6;:10;:32;;;;;58868:8;;58858:6;:18;;58844:32;58836:67;;;::::0;-1:-1:-1;;;58836:67:0;;22501:2:1;58836:67:0::1;::::0;::::1;22483:21:1::0;22540:2;22520:18;;;22513:30;22579:25;22559:18;;;22552:53;22622:18;;58836:67:0::1;22299:347:1::0;58836:67:0::1;58951:12;;58922:21;58932:10;58922:9;:21::i;:::-;:25;::::0;58946:1:::1;58922:25;:::i;:::-;:41;;58914:81;;;::::0;-1:-1:-1;;;58914:81:0;;21393:2:1;58914:81:0::1;::::0;::::1;21375:21:1::0;21432:2;21412:18;;;21405:30;21471;21451:18;;;21444:58;21519:18;;58914:81:0::1;21191:352:1::0;58914:81:0::1;59035:6;59027:5;;:14;;;;:::i;:::-;59014:9;:27;59006:60;;;::::0;-1:-1:-1;;;59006:60:0;;20273:2:1;59006:60:0::1;::::0;::::1;20255:21:1::0;20312:2;20292:18;;;20285:30;-1:-1:-1;;;20331:18:1;;;20324:50;20391:18;;59006:60:0::1;20071:344:1::0;59006:60:0::1;59107:9;::::0;59103:1:::1;59085:15;59094:6:::0;59085;:15:::1;:::i;:::-;:19;;;;:::i;:::-;:31;59077:85;;;::::0;-1:-1:-1;;;59077:85:0;;14618:2:1;59077:85:0::1;::::0;::::1;14600:21:1::0;14657:2;14637:18;;;14630:30;14696:34;14676:18;;;14669:62;-1:-1:-1;;;14747:18:1;;;14740:39;14796:19;;59077:85:0::1;14416:405:1::0;59077:85:0::1;59176:15;::::0;::::1;;59173:135;;;59222:10;59210:23;::::0;;;:11:::1;:23;::::0;;;;;:33;-1:-1:-1;59210:33:0::1;59202:106;;;::::0;-1:-1:-1;;;59202:106:0;;13429:2:1;59202:106:0::1;::::0;::::1;13411:21:1::0;13468:2;13448:18;;;13441:30;13507:34;13487:18;;;13480:62;13578:31;13558:18;;;13551:59;13627:19;;59202:106:0::1;13227:425:1::0;59202:106:0::1;59344:9;59339:164;59363:6;59359:1;:10;59339:164;;;59391:24;59404:10;59391:12;:24::i;:::-;59433:15;::::0;::::1;;59430:61;;;59475:10;59463:23;::::0;;;:11:::1;:23;::::0;;;;:28;;59490:1:::1;::::0;59463:23;:28:::1;::::0;59490:1;;59463:28:::1;:::i;:::-;::::0;;;-1:-1:-1;;59430:61:0::1;59371:3:::0;::::1;::::0;::::1;:::i;:::-;;;;59339:164;;;;59525:20;59535:9;59525;:20::i;26441:327::-:0;-1:-1:-1;;;;;26576:24:0;;18506:10;26576:24;;26568:62;;;;-1:-1:-1;;;26568:62:0;;14264:2:1;26568:62:0;;;14246:21:1;14303:2;14283:18;;;14276:30;14342:27;14322:18;;;14315:55;14387:18;;26568:62:0;14062:349:1;26568:62:0;18506:10;26643:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;26643:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;26643:53:0;;;;;;;;;;26712:48;;11007:41:1;;;26643:42:0;;18506:10;26712:48;;10980:18:1;26712:48:0;;;;;;;26441:327;;:::o;27823:365::-;28012:41;18506:10;28045:7;28012:18;:41::i;:::-;27990:140;;;;-1:-1:-1;;;27990:140:0;;;;;;;:::i;:::-;28141:39;28155:4;28161:2;28165:7;28174:5;28141:13;:39::i;61318:105::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61400:15:::1;::::0;;-1:-1:-1;;61381:34:0;::::1;61400:15;::::0;;::::1;61399:16;61381:34;::::0;;61318:105::o;57045:37::-;;;;;;;:::i;61654:98::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;61724:8:::1;:20:::0;61654:98::o;59569:196::-;59696:13;59734:23;59749:7;59734:14;:23::i;59773:526::-;59854:16;59888:18;59909:17;59919:6;59909:9;:17::i;:::-;59888:38;-1:-1:-1;59941:15:0;59937:355;;59980:16;;;59994:1;59980:16;;;;;;;;;;;-1:-1:-1;59973:23:0;59773:526;-1:-1:-1;;;59773:526:0:o;59937:355::-;60029:23;60069:10;60055:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60055:25:0;;60029:51;;60095:13;60123:130;60147:10;60139:5;:18;60123:130;;;60203:34;60223:6;60231:5;60203:19;:34::i;:::-;60187:6;60194:5;60187:13;;;;;;;;:::i;:::-;;;;;;;;;;:50;60159:7;;;;:::i;:::-;;;;60123:130;;59937:355;59877:422;59773:526;;;:::o;63872:403::-;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;63948:21:::1;63988:10:::0;63980:39:::1;;;::::0;-1:-1:-1;;;63980:39:0;;24450:2:1;63980:39:0::1;::::0;::::1;24432:21:1::0;24489:2;24469:18;;;24462:30;-1:-1:-1;;;24508:18:1;;;24501:47;24565:18;;63980:39:0::1;24248:341:1::0;63980:39:0::1;64030:36;::::0;64038:10:::1;::::0;64030:36;::::1;;;::::0;64059:6;;64030:36:::1;::::0;;;64059:6;64038:10;64030:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;64081:7;64077:144;64097:7;:14:::0;64093:18:::1;::::0;::::1;;64077:144;;;64133:18;64154:7;64162:1;64154:10;;;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;64154:10:0::1;64179:19:::0;;:7:::1;:19:::0;;;;;64154:10;64179:26:::1;:30:::0;-1:-1:-1;64113:3:0;::::1;::::0;::::1;:::i;:::-;;;;64077:144;;;-1:-1:-1::0;64236:31:0::1;::::0;24740:25:1;;;64249:10:0::1;::::0;64236:31:::1;::::0;24728:2:1;24713:18;64236:31:0::1;24594:177:1::0;50854:281:0;49973:6;;-1:-1:-1;;;;;49973:6:0;;;;;18506:10;50120:23;50112:68;;;;-1:-1:-1;;;50112:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50957:22:0;::::1;50935:110;;;::::0;-1:-1:-1;;;50935:110:0;;12665:2:1;50935:110:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:36;12840:19;;50935:110:0::1;12463:402:1::0;50935:110:0::1;51082:6;::::0;51061:38:::1;::::0;-1:-1:-1;;;;;51061:38:0;;::::1;::::0;51082:6:::1;::::0;::::1;;::::0;51061:38:::1;::::0;;;::::1;51110:6;:17:::0;;-1:-1:-1;;;;;51110:17:0;;::::1;;;-1:-1:-1::0;;;;;;51110:17:0;;::::1;::::0;;;::::1;::::0;;50854:281::o;29735:127::-;29800:4;29824:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29824:16:0;:30;;;29735:127::o;38342:300::-;38489:4;-1:-1:-1;;;;;;38531:50:0;;-1:-1:-1;;;38531:50:0;;:103;;;38598:36;38622:11;38598:23;:36::i;33858:174::-;33933:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33933:29:0;-1:-1:-1;;;;;33933:29:0;;;;;;;;:24;;33987:23;33933:24;33987:14;:23::i;:::-;-1:-1:-1;;;;;33978:46:0;;;;;;;;;;;33858:174;;:::o;30029:452::-;30158:4;30202:16;30210:7;30202;:16::i;:::-;30180:110;;;;-1:-1:-1;;;30180:110:0;;15028:2:1;30180:110:0;;;15010:21:1;15067:2;15047:18;;;15040:30;15106:34;15086:18;;;15079:62;-1:-1:-1;;;15157:18:1;;;15150:42;15209:19;;30180:110:0;14826:408:1;30180:110:0;30301:13;30317:23;30332:7;30317:14;:23::i;:::-;30301:39;;30370:5;-1:-1:-1;;;;;30359:16:0;:7;-1:-1:-1;;;;;30359:16:0;;:64;;;;30416:7;-1:-1:-1;;;;;30392:31:0;:20;30404:7;30392:11;:20::i;:::-;-1:-1:-1;;;;;30392:31:0;;30359:64;:113;;;-1:-1:-1;;;;;;27010:25:0;;;26981:4;27010:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;30440:32;30351:122;30029:452;-1:-1:-1;;;;30029:452:0:o;33125:615::-;33298:4;-1:-1:-1;;;;;33271:31:0;:23;33286:7;33271:14;:23::i;:::-;-1:-1:-1;;;;;33271:31:0;;33249:122;;;;-1:-1:-1;;;33249:122:0;;20983:2:1;33249:122:0;;;20965:21:1;21022:2;21002:18;;;20995:30;21061:34;21041:18;;;21034:62;-1:-1:-1;;;21112:18:1;;;21105:39;21161:19;;33249:122:0;20781:405:1;33249:122:0;-1:-1:-1;;;;;33390:16:0;;33382:65;;;;-1:-1:-1;;;33382:65:0;;13859:2:1;33382:65:0;;;13841:21:1;13898:2;13878:18;;;13871:30;13937:34;13917:18;;;13910:62;-1:-1:-1;;;13988:18:1;;;13981:34;14032:19;;33382:65:0;13657:400:1;33382:65:0;33460:39;33481:4;33487:2;33491:7;33460:20;:39::i;:::-;33564:29;33581:1;33585:7;33564:8;:29::i;:::-;-1:-1:-1;;;;;33606:15:0;;;;;;:9;:15;;;;;:20;;33625:1;;33606:15;:20;;33625:1;;33606:20;:::i;:::-;;;;-1:-1:-1;;;;;;;33637:13:0;;;;;;:9;:13;;;;;:18;;33654:1;;33637:13;:18;;33654:1;;33637:18;:::i;:::-;;;;-1:-1:-1;;33666:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33666:21:0;-1:-1:-1;;;;;33666:21:0;;;;;;;;;33705:27;;33666:16;;33705:27;;;;;;;33125:615;;;:::o;64879:171::-;64965:9;64960:83;64984:6;64980:1;:10;64960:83;;;65012:19;65025:5;65012:12;:19::i;:::-;64992:3;;;;:::i;:::-;;;;64960:83;;62538:136;62593:15;62611:18;:16;:18::i;:::-;:22;;62632:1;62611:22;:::i;:::-;62593:40;;62644:22;62654:2;62658:7;62644:9;:22::i;63331:138::-;63441:20;63453:7;63441:11;:20::i;48394:118::-;47665:7;;;;47919:9;47911:38;;;;-1:-1:-1;;;47911:38:0;;;;;;;:::i;:::-;48454:7:::1;:14:::0;;-1:-1:-1;;48454:14:0::1;48464:4;48454:14;::::0;;48484:20:::1;48491:12;18506:10:::0;;18426:98;48491:12:::1;48484:20;::::0;-1:-1:-1;;;;;9034:32:1;;;9016:51;;9004:2;8989:18;48484:20:0::1;;;;;;;48394:118::o:0;48653:120::-;47665:7;;;;48189:41;;;;-1:-1:-1;;;48189:41:0;;11485:2:1;48189:41:0;;;11467:21:1;11524:2;11504:18;;;11497:30;-1:-1:-1;;;11543:18:1;;;11536:50;11603:18;;48189:41:0;11283:344:1;48189:41:0;48712:7:::1;:15:::0;;-1:-1:-1;;48712:15:0::1;::::0;;48743:22:::1;18506:10:::0;48752:12:::1;18426:98:::0;45801:277;45938:16;45946:7;45938;:16::i;:::-;45916:112;;;;-1:-1:-1;;;45916:112:0;;17858:2:1;45916:112:0;;;17840:21:1;17897:2;17877:18;;;17870:30;17936:34;17916:18;;;17909:62;-1:-1:-1;;;17987:18:1;;;17980:44;18041:19;;45916:112:0;17656:410:1;45916:112:0;46039:19;;;;:10;:19;;;;;;;;:31;;;;;;;;:::i;58354:357::-;58419:7;58415:287;58435:7;:14;58431:18;;;;58415:287;;;58471:18;58492:7;58500:1;58492:10;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;58492:10:0;58535:19;;;:7;:19;;;;;;:27;58492:10;;-1:-1:-1;58535:27:0;58600:33;58627:5;58600:22;:10;58535:27;58600:14;:22::i;:::-;:26;;:33::i;:::-;-1:-1:-1;;;;;58648:19:0;;;;;;:7;:19;;;;;:26;;:42;;58577:56;;-1:-1:-1;58577:56:0;;58648:26;;:19;:42;;58577:56;;58648:42;:::i;:::-;;;;;;;;58456:246;;;58451:3;;;;;:::i;:::-;;;;58415:287;;29070:352;29227:28;29237:4;29243:2;29247:7;29227:9;:28::i;:::-;29288:48;29311:4;29317:2;29321:7;29330:5;29288:22;:48::i;:::-;29266:148;;;;-1:-1:-1;;;29266:148:0;;;;;;;:::i;45184:461::-;45302:13;45355:16;45363:7;45355;:16::i;:::-;45333:115;;;;-1:-1:-1;;;45333:115:0;;19040:2:1;45333:115:0;;;19022:21:1;19079:2;19059:18;;;19052:30;19118:34;19098:18;;;19091:62;-1:-1:-1;;;19169:18:1;;;19162:47;19226:19;;45333:115:0;18838:413:1;45333:115:0;45461:18;45482:10;:8;:10::i;:::-;45461:31;;45503:17;45523:16;:14;:16::i;:::-;45503:36;;45602:4;45608:20;45609:7;45608:18;:20::i;:::-;45630:3;45585:49;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45571:64;;;;45184:461;;;:::o;23202:355::-;23349:4;-1:-1:-1;;;;;;23391:40:0;;-1:-1:-1;;;23391:40:0;;:105;;-1:-1:-1;;;;;;;23448:48:0;;-1:-1:-1;;;23448:48:0;23391:105;:158;;;-1:-1:-1;;;;;;;;;;21827:40:0;;;23513:36;21668:207;63086:229;47665:7;;;;47919:9;47911:38;;;;-1:-1:-1;;;47911:38:0;;;;;;;:::i;:::-;63262:45:::1;63289:4;63295:2;63299:7;63262:26;:45::i;624:775::-:0;677:7;697:13;723:11;;713:9;:21;;;;:::i;:::-;697:37;;745:12;768:14;795:9;824:5;807:14;:12;:14::i;:::-;:22;;;;:::i;:::-;795:34;-1:-1:-1;908:11:0;:20;920:7;926:1;920:5;:7;:::i;:::-;908:20;;;;;;;;;;;;932:1;908:25;904:131;;;956:7;962:1;956:5;:7;:::i;:::-;949:14;;904:131;;;1003:11;:20;1015:7;1021:1;1015:5;:7;:::i;:::-;1003:20;;;;;;;;;;;;996:27;;904:131;1159:14;;;;:11;:14;;;;;;1155:189;;1219:14;;;;:11;:14;;;;;:21;;;1203:1;-1:-1:-1;1203:1:0;1155:189;;;1282:14;;;;:11;:14;;;;;;;1311:21;;;;1282:14;-1:-1:-1;1155:189:0;1354:11;:13;;;:11;:13;;;:::i;:::-;;;;-1:-1:-1;1385:6:0;;624:775;-1:-1:-1;;;;;624:775:0:o;30823:110::-;30899:26;30909:2;30913:7;30899:26;;;;;;;;;;;;:9;:26::i;46307:206::-;46376:20;46388:7;46376:11;:20::i;:::-;46419:19;;;;:10;:19;;;;;46413:33;;;;;:::i;:::-;:38;;-1:-1:-1;46409:97:0;;46475:19;;;;:10;:19;;;;;46468:26;;;:::i;55133:250::-;55191:7;55215:6;55211:47;;-1:-1:-1;55245:1:0;55238:8;;55211:47;55270:9;55282:5;55286:1;55282;:5;:::i;:::-;55270:17;-1:-1:-1;55315:1:0;55306:5;55310:1;55270:17;55306:5;:::i;:::-;:10;55298:56;;;;-1:-1:-1;;;55298:56:0;;19458:2:1;55298:56:0;;;19440:21:1;19497:2;19477:18;;;19470:30;19536:34;19516:18;;;19509:62;-1:-1:-1;;;19587:18:1;;;19580:31;19628:19;;55298:56:0;19256:397:1;55298:56:0;55374:1;55133:250;-1:-1:-1;;;55133:250:0:o;55393:132::-;55451:7;55478:39;55482:1;55485;55478:39;;;;;;;;;;;;;;;;;:3;:39::i;34597:1053::-;34752:4;-1:-1:-1;;;;;34773:13:0;;10220:20;10268:8;34769:874;;34826:175;;-1:-1:-1;;;34826:175:0;;-1:-1:-1;;;;;34826:36:0;;;;;:175;;18506:10;;34920:4;;34947:7;;34977:5;;34826:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34826:175:0;;;;;;;;-1:-1:-1;;34826:175:0;;;;;;;;;;;;:::i;:::-;;;34805:783;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35188:13:0;;35184:389;;35231:108;;-1:-1:-1;;;35231:108:0;;;;;;;:::i;35184:389::-;35523:6;35517:13;35508:6;35504:2;35500:15;35493:38;34805:783;-1:-1:-1;;;;;;35065:55:0;-1:-1:-1;;;35065:55:0;;-1:-1:-1;35058:62:0;;34769:874;-1:-1:-1;35627:4:0;34597:1053;;;;;;:::o;58241:100::-;58293:13;58326:7;58319:14;;;;;:::i;58119:112::-;58177:13;58210;58203:20;;;;;:::i;19083:723::-;19139:13;19360:10;19356:53;;-1:-1:-1;;19387:10:0;;;;;;;;;;;;-1:-1:-1;;;19387:10:0;;;;;19083:723::o;19356:53::-;19434:5;19419:12;19475:78;19482:9;;19475:78;;19508:8;;;;:::i;:::-;;-1:-1:-1;19531:10:0;;-1:-1:-1;19539:2:0;19531:10;;:::i;:::-;;;19475:78;;;19563:19;19595:6;19585:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19585:17:0;;19563:39;;19613:154;19620:10;;19613:154;;19647:11;19657:1;19647:11;;:::i;:::-;;-1:-1:-1;19716:10:0;19724:2;19716:5;:10;:::i;:::-;19703:24;;:2;:24;:::i;:::-;19690:39;;19673:6;19680;19673:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;19673:56:0;;;;;;;;-1:-1:-1;19744:11:0;19753:2;19744:11;;:::i;:::-;;;19613:154;;40268:589;-1:-1:-1;;;;;40474:18:0;;40470:187;;40509:40;40541:7;41684:10;:17;;41657:24;;;;:15;:24;;;;;:44;;;41712:24;;;;;;;;;;;;41580:164;40509:40;40470:187;;;40579:2;-1:-1:-1;;;;;40571:10:0;:4;-1:-1:-1;;;;;40571:10:0;;40567:90;;40598:47;40631:4;40637:7;40598:32;:47::i;:::-;-1:-1:-1;;;;;40671:16:0;;40667:183;;40704:45;40741:7;40704:36;:45::i;40667:183::-;40777:4;-1:-1:-1;;;;;40771:10:0;:2;-1:-1:-1;;;;;40771:10:0;;40767:83;;40798:40;40826:2;40830:7;40798:27;:40::i;1407:151::-;1453:7;1514:16;1532:15;1497:51;;;;;;;;8775:19:1;;;8819:2;8810:12;;8803:28;8856:2;8847:12;;8618:247;1497:51:0;;;;;;;;;;;;;1487:62;;;;;;1479:71;;1472:78;;1407:151;:::o;31160:321::-;31290:18;31296:2;31300:7;31290:5;:18::i;:::-;31341:54;31372:1;31376:2;31380:7;31389:5;31341:22;:54::i;:::-;31319:154;;;;-1:-1:-1;;;31319:154:0;;;;;;;:::i;32428:360::-;32488:13;32504:23;32519:7;32504:14;:23::i;:::-;32488:39;;32540:48;32561:5;32576:1;32580:7;32540:20;:48::i;:::-;32629:29;32646:1;32650:7;32629:8;:29::i;:::-;-1:-1:-1;;;;;32671:16:0;;;;;;:9;:16;;;;;:21;;32691:1;;32671:16;:21;;32691:1;;32671:21;:::i;:::-;;;;-1:-1:-1;;32710:16:0;;;;:7;:16;;;;;;32703:23;;-1:-1:-1;;;;;;32703:23:0;;;32744:36;32718:7;;32710:16;-1:-1:-1;;;;;32744:36:0;;;;;32710:16;;32744:36;32477:311;32428:360;:::o;55533:278::-;55619:7;55654:12;55647:5;55639:28;;;;-1:-1:-1;;;55639:28:0;;;;;;;;:::i;:::-;-1:-1:-1;55678:9:0;55690:5;55694:1;55690;:5;:::i;:::-;55678:17;55533:278;-1:-1:-1;;;;;55533:278:0:o;42371:1002::-;42651:22;42701:1;42676:22;42693:4;42676:16;:22::i;:::-;:26;;;;:::i;:::-;42713:18;42734:26;;;:17;:26;;;;;;42651:51;;-1:-1:-1;42867:28:0;;;42863:328;;-1:-1:-1;;;;;42934:18:0;;42912:19;42934:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42985:30;;;;;;:44;;;43102:30;;:17;:30;;;;;:43;;;42863:328;-1:-1:-1;43287:26:0;;;;:17;:26;;;;;;;;43280:33;;;-1:-1:-1;;;;;43331:18:0;;;;;:12;:18;;;;;:34;;;;;;;43324:41;42371:1002::o;43668:1079::-;43946:10;:17;43921:22;;43946:21;;43966:1;;43946:21;:::i;:::-;43978:18;43999:24;;;:15;:24;;;;;;44372:10;:26;;43921:46;;-1:-1:-1;43999:24:0;;43921:46;;44372:26;;;;;;:::i;:::-;;;;;;;;;44350:48;;44436:11;44411:10;44422;44411:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44516:28;;;:15;:28;;;;;;;:41;;;44688:24;;;;;44681:31;44723:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43739:1008;;;43668:1079;:::o;41158:221::-;41243:14;41260:20;41277:2;41260:16;:20::i;:::-;-1:-1:-1;;;;;41291:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;41336:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41158:221:0:o;31817:382::-;-1:-1:-1;;;;;31897:16:0;;31889:61;;;;-1:-1:-1;;;31889:61:0;;18679:2:1;31889:61:0;;;18661:21:1;;;18698:18;;;18691:30;18757:34;18737:18;;;18730:62;18809:18;;31889:61:0;18477:356:1;31889:61:0;31970:16;31978:7;31970;:16::i;:::-;31969:17;31961:58;;;;-1:-1:-1;;;31961:58:0;;13072:2:1;31961:58:0;;;13054:21:1;13111:2;13091:18;;;13084:30;13150;13130:18;;;13123:58;13198:18;;31961:58:0;12870:352:1;31961:58:0;32032:45;32061:1;32065:2;32069:7;32032:20;:45::i;:::-;-1:-1:-1;;;;;32090:13:0;;;;;;:9;:13;;;;;:18;;32107:1;;32090:13;:18;;32107:1;;32090:18;:::i;:::-;;;;-1:-1:-1;;32119:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;32119:21:0;-1:-1:-1;;;;;32119:21:0;;;;;;;;32158:33;;32119:16;;;32158:33;;32119:16;;32158:33;31817:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:679::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:169;1098:2;1095:1;1092:9;1084:169;;;1155:23;1174:3;1155:23;:::i;:::-;1143:36;;1199:12;;;;1231;;;;1116:1;1109:9;1084:169;;;-1:-1:-1;1271:5:1;;603:679;-1:-1:-1;;;;;;;603:679:1:o;1287:221::-;1330:5;1383:3;1376:4;1368:6;1364:17;1360:27;1350:55;;1401:1;1398;1391:12;1350:55;1423:79;1498:3;1489:6;1476:20;1469:4;1461:6;1457:17;1423:79;:::i;1513:186::-;1572:6;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;1664:29;1683:9;1664:29;:::i;1704:260::-;1772:6;1780;1833:2;1821:9;1812:7;1808:23;1804:32;1801:52;;;1849:1;1846;1839:12;1801:52;1872:29;1891:9;1872:29;:::i;:::-;1862:39;;1920:38;1954:2;1943:9;1939:18;1920:38;:::i;:::-;1910:48;;1704:260;;;;;:::o;1969:328::-;2046:6;2054;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;2287:2;2276:9;2272:18;2259:32;2249:42;;1969:328;;;;;:::o;2302:666::-;2397:6;2405;2413;2421;2474:3;2462:9;2453:7;2449:23;2445:33;2442:53;;;2491:1;2488;2481:12;2442:53;2514:29;2533:9;2514:29;:::i;:::-;2504:39;;2562:38;2596:2;2585:9;2581:18;2562:38;:::i;:::-;2552:48;;2647:2;2636:9;2632:18;2619:32;2609:42;;2702:2;2691:9;2687:18;2674:32;2729:18;2721:6;2718:30;2715:50;;;2761:1;2758;2751:12;2715:50;2784:22;;2837:4;2829:13;;2825:27;-1:-1:-1;2815:55:1;;2866:1;2863;2856:12;2815:55;2889:73;2954:7;2949:2;2936:16;2931:2;2927;2923:11;2889:73;:::i;:::-;2879:83;;;2302:666;;;;;;;:::o;2973:976::-;3066:6;3074;3127:2;3115:9;3106:7;3102:23;3098:32;3095:52;;;3143:1;3140;3133:12;3095:52;3166:29;3185:9;3166:29;:::i;:::-;3156:39;;3214:2;3267;3256:9;3252:18;3239:32;3294:18;3286:6;3283:30;3280:50;;;3326:1;3323;3316:12;3280:50;3349:22;;3402:4;3394:13;;3390:27;-1:-1:-1;3380:55:1;;3431:1;3428;3421:12;3380:55;3467:2;3454:16;3490:60;3506:43;3546:2;3506:43;:::i;3490:60::-;3572:3;3596:2;3591:3;3584:15;3624:2;3619:3;3615:12;3608:19;;3655:2;3651;3647:11;3703:7;3698:2;3692;3689:1;3685:10;3681:2;3677:19;3673:28;3670:41;3667:61;;;3724:1;3721;3714:12;3667:61;3746:1;3737:10;;3756:163;3770:2;3767:1;3764:9;3756:163;;;3827:17;;3815:30;;3788:1;3781:9;;;;;3865:12;;;;3897;;3756:163;;;3760:3;3938:5;3928:15;;;;;;;2973:976;;;;;:::o;3954:315::-;4019:6;4027;4080:2;4068:9;4059:7;4055:23;4051:32;4048:52;;;4096:1;4093;4086:12;4048:52;4119:29;4138:9;4119:29;:::i;:::-;4109:39;;4198:2;4187:9;4183:18;4170:32;4211:28;4233:5;4211:28;:::i;:::-;4258:5;4248:15;;;3954:315;;;;;:::o;4274:254::-;4342:6;4350;4403:2;4391:9;4382:7;4378:23;4374:32;4371:52;;;4419:1;4416;4409:12;4371:52;4442:29;4461:9;4442:29;:::i;:::-;4432:39;4518:2;4503:18;;;;4490:32;;-1:-1:-1;;;4274:254:1:o;4533:348::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4726:9;4713:23;4759:18;4751:6;4748:30;4745:50;;;4791:1;4788;4781:12;4745:50;4814:61;4867:7;4858:6;4847:9;4843:22;4814:61;:::i;4886:416::-;4979:6;4987;5040:2;5028:9;5019:7;5015:23;5011:32;5008:52;;;5056:1;5053;5046:12;5008:52;5096:9;5083:23;5129:18;5121:6;5118:30;5115:50;;;5161:1;5158;5151:12;5115:50;5184:61;5237:7;5228:6;5217:9;5213:22;5184:61;:::i;:::-;5174:71;5292:2;5277:18;;;;5264:32;;-1:-1:-1;;;;4886:416:1:o;5307:245::-;5374:6;5427:2;5415:9;5406:7;5402:23;5398:32;5395:52;;;5443:1;5440;5433:12;5395:52;5475:9;5469:16;5494:28;5516:5;5494:28;:::i;5557:245::-;5615:6;5668:2;5656:9;5647:7;5643:23;5639:32;5636:52;;;5684:1;5681;5674:12;5636:52;5723:9;5710:23;5742:30;5766:5;5742:30;:::i;5807:249::-;5876:6;5929:2;5917:9;5908:7;5904:23;5900:32;5897:52;;;5945:1;5942;5935:12;5897:52;5977:9;5971:16;5996:30;6020:5;5996:30;:::i;6061:322::-;6130:6;6183:2;6171:9;6162:7;6158:23;6154:32;6151:52;;;6199:1;6196;6189:12;6151:52;6239:9;6226:23;6272:18;6264:6;6261:30;6258:50;;;6304:1;6301;6294:12;6258:50;6327;6369:7;6360:6;6349:9;6345:22;6327:50;:::i;6388:272::-;6446:6;6499:2;6487:9;6478:7;6474:23;6470:32;6467:52;;;6515:1;6512;6505:12;6467:52;6554:9;6541:23;6604:6;6597:5;6593:18;6586:5;6583:29;6573:57;;6626:1;6623;6616:12;6665:180;6724:6;6777:2;6765:9;6756:7;6752:23;6748:32;6745:52;;;6793:1;6790;6783:12;6745:52;-1:-1:-1;6816:23:1;;6665:180;-1:-1:-1;6665:180:1:o;6850:184::-;6920:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:52;;;6989:1;6986;6979:12;6941:52;-1:-1:-1;7012:16:1;;6850:184;-1:-1:-1;6850:184:1:o;7039:390::-;7117:6;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7230:9;7217:23;7207:33;;7291:2;7280:9;7276:18;7263:32;7318:18;7310:6;7307:30;7304:50;;;7350:1;7347;7340:12;7304:50;7373;7415:7;7406:6;7395:9;7391:22;7373:50;:::i;:::-;7363:60;;;7039:390;;;;;:::o;7434:248::-;7502:6;7510;7563:2;7551:9;7542:7;7538:23;7534:32;7531:52;;;7579:1;7576;7569:12;7531:52;-1:-1:-1;;7602:23:1;;;7672:2;7657:18;;;7644:32;;-1:-1:-1;7434:248:1:o;7687:257::-;7728:3;7766:5;7760:12;7793:6;7788:3;7781:19;7809:63;7865:6;7858:4;7853:3;7849:14;7842:4;7835:5;7831:16;7809:63;:::i;:::-;7926:2;7905:15;-1:-1:-1;;7901:29:1;7892:39;;;;7933:4;7888:50;;7687:257;-1:-1:-1;;7687:257:1:o;7949:664::-;8176:3;8214:6;8208:13;8230:53;8276:6;8271:3;8264:4;8256:6;8252:17;8230:53;:::i;:::-;8346:13;;8305:16;;;;8368:57;8346:13;8305:16;8402:4;8390:17;;8368:57;:::i;:::-;8492:13;;8447:20;;;8514:57;8492:13;8447:20;8548:4;8536:17;;8514:57;:::i;:::-;8587:20;;7949:664;-1:-1:-1;;;;;7949:664:1:o;9458:488::-;-1:-1:-1;;;;;9727:15:1;;;9709:34;;9779:15;;9774:2;9759:18;;9752:43;9826:2;9811:18;;9804:34;;;9874:3;9869:2;9854:18;;9847:31;;;9652:4;;9895:45;;9920:19;;9912:6;9895:45;:::i;:::-;9887:53;9458:488;-1:-1:-1;;;;;;9458:488:1:o;10230:632::-;10401:2;10453:21;;;10523:13;;10426:18;;;10545:22;;;10372:4;;10401:2;10624:15;;;;10598:2;10583:18;;;10372:4;10667:169;10681:6;10678:1;10675:13;10667:169;;;10742:13;;10730:26;;10811:15;;;;10776:12;;;;10703:1;10696:9;10667:169;;;-1:-1:-1;10853:3:1;;10230:632;-1:-1:-1;;;;;;10230:632:1:o;11059:219::-;11208:2;11197:9;11190:21;11171:4;11228:44;11268:2;11257:9;11253:18;11245:6;11228:44;:::i;12044:414::-;12246:2;12228:21;;;12285:2;12265:18;;;12258:30;12324:34;12319:2;12304:18;;12297:62;-1:-1:-1;;;12390:2:1;12375:18;;12368:48;12448:3;12433:19;;12044:414::o;15653:340::-;15855:2;15837:21;;;15894:2;15874:18;;;15867:30;-1:-1:-1;;;15928:2:1;15913:18;;15906:46;15984:2;15969:18;;15653:340::o;20420:356::-;20622:2;20604:21;;;20641:18;;;20634:30;20700:34;20695:2;20680:18;;20673:62;20767:2;20752:18;;20420:356::o;22651:413::-;22853:2;22835:21;;;22892:2;22872:18;;;22865:30;22931:34;22926:2;22911:18;;22904:62;-1:-1:-1;;;22997:2:1;22982:18;;22975:47;23054:3;23039:19;;22651:413::o;25029:275::-;25100:2;25094:9;25165:2;25146:13;;-1:-1:-1;;25142:27:1;25130:40;;25200:18;25185:34;;25221:22;;;25182:62;25179:88;;;25247:18;;:::i;:::-;25283:2;25276:22;25029:275;;-1:-1:-1;25029:275:1:o;25309:183::-;25369:4;25402:18;25394:6;25391:30;25388:56;;;25424:18;;:::i;:::-;-1:-1:-1;25469:1:1;25465:14;25481:4;25461:25;;25309:183::o;25497:128::-;25537:3;25568:1;25564:6;25561:1;25558:13;25555:39;;;25574:18;;:::i;:::-;-1:-1:-1;25610:9:1;;25497:128::o;25630:120::-;25670:1;25696;25686:35;;25701:18;;:::i;:::-;-1:-1:-1;25735:9:1;;25630:120::o;25755:168::-;25795:7;25861:1;25857;25853:6;25849:14;25846:1;25843:21;25838:1;25831:9;25824:17;25820:45;25817:71;;;25868:18;;:::i;:::-;-1:-1:-1;25908:9:1;;25755:168::o;25928:125::-;25968:4;25996:1;25993;25990:8;25987:34;;;26001:18;;:::i;:::-;-1:-1:-1;26038:9:1;;25928:125::o;26058:258::-;26130:1;26140:113;26154:6;26151:1;26148:13;26140:113;;;26230:11;;;26224:18;26211:11;;;26204:39;26176:2;26169:10;26140:113;;;26271:6;26268:1;26265:13;26262:48;;;-1:-1:-1;;26306:1:1;26288:16;;26281:27;26058:258::o;26321:380::-;26400:1;26396:12;;;;26443;;;26464:61;;26518:4;26510:6;26506:17;26496:27;;26464:61;26571:2;26563:6;26560:14;26540:18;26537:38;26534:161;;;26617:10;26612:3;26608:20;26605:1;26598:31;26652:4;26649:1;26642:15;26680:4;26677:1;26670:15;26706:135;26745:3;-1:-1:-1;;26766:17:1;;26763:43;;;26786:18;;:::i;:::-;-1:-1:-1;26833:1:1;26822:13;;26706:135::o;26846:175::-;26883:3;26927:4;26920:5;26916:16;26956:4;26947:7;26944:17;26941:43;;;26964:18;;:::i;:::-;27013:1;27000:15;;26846:175;-1:-1:-1;;26846:175:1:o;27026:112::-;27058:1;27084;27074:35;;27089:18;;:::i;:::-;-1:-1:-1;27123:9:1;;27026:112::o;27143:127::-;27204:10;27199:3;27195:20;27192:1;27185:31;27235:4;27232:1;27225:15;27259:4;27256:1;27249:15;27275:127;27336:10;27331:3;27327:20;27324:1;27317:31;27367:4;27364:1;27357:15;27391:4;27388:1;27381:15;27407:127;27468:10;27463:3;27459:20;27456:1;27449:31;27499:4;27496:1;27489:15;27523:4;27520:1;27513:15;27539:127;27600:10;27595:3;27591:20;27588:1;27581:31;27631:4;27628:1;27621:15;27655:4;27652:1;27645:15;27671:127;27732:10;27727:3;27723:20;27720:1;27713:31;27763:4;27760:1;27753:15;27787:4;27784:1;27777:15;27803:118;27889:5;27882:13;27875:21;27868:5;27865:32;27855:60;;27911:1;27908;27901:12;27926:131;-1:-1:-1;;;;;;28000:32:1;;27990:43;;27980:71;;28047:1;28044;28037:12
Swarm Source
ipfs://1754acd9e89e1e61c2ab47d2f9d8ae63d1a664a84e38711744bc7004a542183f
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.