Overview
ETH Balance
0.02 ETH
Eth Value
$50.17 (@ $2,508.60/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 13996144 | 1022 days ago | IN | 0 ETH | 0.00600358 | ||||
Transfer From | 13530731 | 1095 days ago | IN | 0 ETH | 0.01233278 | ||||
Transfer From | 13527421 | 1096 days ago | IN | 0 ETH | 0.01203023 | ||||
Mint | 13527369 | 1096 days ago | IN | 0.02 ETH | 0.02344639 | ||||
Flip Pause Statu... | 13527335 | 1096 days ago | IN | 0 ETH | 0.00344967 | ||||
Mint Reserve For... | 13527064 | 1096 days ago | IN | 0 ETH | 0.09317406 | ||||
Mint Reserve For... | 13526954 | 1096 days ago | IN | 0 ETH | 0.08302718 | ||||
Mint Reserve For... | 13526925 | 1096 days ago | IN | 0 ETH | 0.08587403 | ||||
Set Base URI | 13526870 | 1096 days ago | IN | 0 ETH | 0.01352436 | ||||
Set Price | 13526855 | 1096 days ago | IN | 0 ETH | 0.00528622 | ||||
0x60806040 | 13518059 | 1097 days ago | IN | 0 ETH | 0.36623844 |
Loading...
Loading
Contract Name:
SpiderGo
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } 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); } 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; } } 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; } 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); } 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); } pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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)); _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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; string public _baseURI; /** * @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 base = baseURI(); return bytes(base).length > 0 ? string(abi.encodePacked(base, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function baseURI() internal view virtual returns (string memory) { return _baseURI; } /** * @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 { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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(); } } pragma solidity ^0.8.0; contract SpiderGo is ERC721Enumerable, Ownable { using SafeMath for uint256; using Address for address; using Strings for uint256; uint public constant _TOTALSUPPLY = 3000; uint public maxQuantity = 10; uint256 public price = 30000000000000000; // 0.03 ETH bool public isPaused = true; uint public reserve = 50; constructor(string memory baseURI) ERC721("Spider Go", "SG") { setBaseURI(baseURI); } function setBaseURI(string memory baseURI) public onlyOwner { _baseURI = baseURI; } function setPrice(uint256 _newPrice) public onlyOwner() { price = _newPrice; } function setMaxQtPerTx(uint256 _quantity) public onlyOwner { maxQuantity=_quantity; } function mintReserveForOwner(uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; for (uint i = 0; i < quantity; i++) { _safeMint(msg.sender, totalSupply()); } } function mintReserveForOthers(address walletAddress, uint quantity) public onlyOwner { require(quantity <= reserve, "The quantity exceeds the reserve."); reserve -= quantity; for (uint i = 0; i < quantity; i++) { _safeMint(walletAddress, totalSupply()); } } modifier isSaleOpen{ require(totalSupply() < _TOTALSUPPLY, "Sale end"); _; } function flipPauseStatus() public onlyOwner { isPaused = !isPaused; } function mint(uint chosenAmount) public payable isSaleOpen{ require(isPaused == false, "Sale is not active at the moment"); require(chosenAmount > 0, "Number of tokens can not be less than or equal to 0"); require(chosenAmount <= maxQuantity,"Chosen Amount exceeds MaxQuantity"); require(totalSupply().add(chosenAmount + reserve) <= _TOTALSUPPLY, "Purchase would exceed max supply"); require(price.mul(chosenAmount) == msg.value, "Sent ether value is incorrect"); for (uint i = 0; i < chosenAmount; i++) { _safeMint(msg.sender, totalSupply()); } } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 count = balanceOf(_owner); uint256[] memory result = new uint256[](count); for (uint256 index = 0; index < count; index++) { result[index] = tokenOfOwnerByIndex(_owner, index); } return result; } function withdraw() public onlyOwner { uint balance = address(this).balance; payable(msg.sender).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_TOTALSUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPauseStatus","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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chosenAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOthers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintReserveForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","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":"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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"setMaxQtPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":"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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600a600c55666a94d74f430000600d556001600e60006101000a81548160ff0219169083151502179055506032600f553480156200004157600080fd5b5060405162004b9638038062004b968339818101604052810190620000679190620003cf565b6040518060400160405280600981526020017f53706964657220476f00000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f53470000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000eb929190620002ad565b50806001908051906020019062000104929190620002ad565b505050600062000119620001d060201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001c981620001d860201b60201c565b50620005ba565b600033905090565b620001e8620001d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200020e6200028360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000267576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025e9062000456565b60405180910390fd5b80600690805190602001906200027f929190620002ad565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002bb9062000526565b90600052602060002090601f016020900481019282620002df57600085556200032b565b82601f10620002fa57805160ff19168380011785556200032b565b828001600101855582156200032b579182015b828111156200032a5782518255916020019190600101906200030d565b5b5090506200033a91906200033e565b5090565b5b80821115620003595760008160009055506001016200033f565b5090565b6000620003746200036e84620004ac565b62000478565b9050828152602081018484840111156200038d57600080fd5b6200039a848285620004f0565b509392505050565b600082601f830112620003b457600080fd5b8151620003c68482602086016200035d565b91505092915050565b600060208284031215620003e257600080fd5b600082015167ffffffffffffffff811115620003fd57600080fd5b6200040b84828501620003a2565b91505092915050565b600062000423602083620004df565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004718162000414565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620004a257620004a16200058b565b5b8060405250919050565b600067ffffffffffffffff821115620004ca57620004c96200058b565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b8381101562000510578082015181840152602081019050620004f3565b8381111562000520576000848401525b50505050565b600060028204905060018216806200053f57607f821691505b602082108114156200055657620005556200055c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6145cc80620005ca6000396000f3fe6080604052600436106101f95760003560e01c8063743976a01161010d578063b187bd26116100a0578063db4568e21161006f578063db4568e214610722578063e640cf7d1461074d578063e985e9c514610778578063f2fde38b146107b5578063fa62884c146107de576101f9565b8063b187bd2614610666578063b88d4fde14610691578063c87b56dd146106ba578063cd3293de146106f7576101f9565b806395d89b41116100dc57806395d89b41146105cb578063a035b1fe146105f6578063a0712d6814610621578063a22cb4651461063d576101f9565b8063743976a01461050f5780638462151c1461053a5780638da5cb5b1461057757806391b7f5ed146105a2576101f9565b80633ccfd60b1161019057806355f804b31161015f57806355f804b31461042c5780635e74b5b4146104555780636352211e1461047e57806370a08231146104bb578063715018a6146104f8576101f9565b80633ccfd60b1461038657806342842e0e1461039d5780634f6ccce7146103c657806352174cea14610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633b0aedab1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906131ed565b6107f5565b6040516102329190613d71565b60405180910390f35b34801561024757600080fd5b5061025061086f565b60405161025d9190613d8c565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613280565b610901565b60405161029a9190613ce8565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906131b1565b610986565b005b3480156102d857600080fd5b506102e1610a9e565b6040516102ee91906140ce565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906130ab565b610aab565b005b34801561032c57600080fd5b50610347600480360381019061034291906131b1565b610b0b565b60405161035491906140ce565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613280565b610bb0565b005b34801561039257600080fd5b5061039b610c36565b005b3480156103a957600080fd5b506103c460048036038101906103bf91906130ab565b610d01565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613280565b610d21565b6040516103fa91906140ce565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613280565b610db8565b005b34801561043857600080fd5b50610453600480360381019061044e919061323f565b610ec5565b005b34801561046157600080fd5b5061047c600480360381019061047791906131b1565b610f5b565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613280565b611069565b6040516104b29190613ce8565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613046565b61111b565b6040516104ef91906140ce565b60405180910390f35b34801561050457600080fd5b5061050d6111d3565b005b34801561051b57600080fd5b506105246112d8565b6040516105319190613d8c565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613046565b611366565b60405161056e9190613d4f565b60405180910390f35b34801561058357600080fd5b5061058c611460565b6040516105999190613ce8565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613280565b61148a565b005b3480156105d757600080fd5b506105e0611510565b6040516105ed9190613d8c565b60405180910390f35b34801561060257600080fd5b5061060b6115a2565b60405161061891906140ce565b60405180910390f35b61063b60048036038101906106369190613280565b6115a8565b005b34801561064957600080fd5b50610664600480360381019061065f9190613175565b6117c5565b005b34801561067257600080fd5b5061067b611946565b6040516106889190613d71565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b391906130fa565b611959565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190613280565b6119bb565b6040516106ee9190613d8c565b60405180910390f35b34801561070357600080fd5b5061070c611a62565b60405161071991906140ce565b60405180910390f35b34801561072e57600080fd5b50610737611a68565b60405161074491906140ce565b60405180910390f35b34801561075957600080fd5b50610762611a6e565b60405161076f91906140ce565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061306f565b611a74565b6040516107ac9190613d71565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613046565b611b08565b005b3480156107ea57600080fd5b506107f3611c00565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610868575061086782611ca8565b5b9050919050565b60606000805461087e906143c1565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa906143c1565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061090c82611d8a565b61094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613fce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099182611069565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f99061404e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a21611df6565b73ffffffffffffffffffffffffffffffffffffffff161480610a505750610a4f81610a4a611df6565b611a74565b5b610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613ece565b60405180910390fd5b610a998383611dfe565b505050565b6000600980549050905090565b610abc610ab6611df6565b82611eb7565b610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af29061406e565b60405180910390fd5b610b06838383611f95565b505050565b6000610b168361111b565b8210610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613dce565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bb8611df6565b73ffffffffffffffffffffffffffffffffffffffff16610bd6611460565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613fee565b60405180910390fd5b80600c8190555050565b610c3e611df6565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611460565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613fee565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cfd573d6000803e3d6000fd5b5050565b610d1c83838360405180602001604052806000815250611959565b505050565b6000610d2b610a9e565b8210610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d639061408e565b60405180910390fd5b60098281548110610da6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610dc0611df6565b73ffffffffffffffffffffffffffffffffffffffff16610dde611460565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90613fee565b60405180910390fd5b600f54811115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613e4e565b60405180910390fd5b80600f6000828254610e8b91906142d7565b9250508190555060005b81811015610ec157610eae33610ea9610a9e565b6121f1565b8080610eb9906143f3565b915050610e95565b5050565b610ecd611df6565b73ffffffffffffffffffffffffffffffffffffffff16610eeb611460565b73ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613fee565b60405180910390fd5b8060069080519060200190610f57929190612e6a565b5050565b610f63611df6565b73ffffffffffffffffffffffffffffffffffffffff16610f81611460565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613fee565b60405180910390fd5b600f5481111561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613e4e565b60405180910390fd5b80600f600082825461102e91906142d7565b9250508190555060005b81811015611064576110518361104c610a9e565b6121f1565b808061105c906143f3565b915050611038565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613f0e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613eee565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111db611df6565b73ffffffffffffffffffffffffffffffffffffffff166111f9611460565b73ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36112d6600061220f565b565b600680546112e5906143c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611311906143c1565b801561135e5780601f106113335761010080835404028352916020019161135e565b820191906000526020600020905b81548152906001019060200180831161134157829003601f168201915b505050505081565b606060006113738361111b565b905060008167ffffffffffffffff8111156113b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113e55781602001602082028036833780820191505090505b50905060005b82811015611455576113fd8582610b0b565b828281518110611436577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061144d906143f3565b9150506113eb565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611492611df6565b73ffffffffffffffffffffffffffffffffffffffff166114b0611460565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613fee565b60405180910390fd5b80600d8190555050565b60606001805461151f906143c1565b80601f016020809104026020016040519081016040528092919081815260200182805461154b906143c1565b80156115985780601f1061156d57610100808354040283529160200191611598565b820191906000526020600020905b81548152906001019060200180831161157b57829003601f168201915b5050505050905090565b600d5481565b610bb86115b3610a9e565b106115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613f8e565b60405180910390fd5b60001515600e60009054906101000a900460ff16151514611649576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611640906140ae565b60405180910390fd5b6000811161168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613dae565b60405180910390fd5b600c548111156116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613fae565b60405180910390fd5b610bb86116fb600f54836116e591906141f6565b6116ed610a9e565b6122d590919063ffffffff16565b111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390613f4e565b60405180910390fd5b3461175282600d546122eb90919063ffffffff16565b14611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613f2e565b60405180910390fd5b60005b818110156117c1576117ae336117a9610a9e565b6121f1565b80806117b9906143f3565b915050611795565b5050565b6117cd611df6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290613e8e565b60405180910390fd5b8060056000611848611df6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f5611df6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193a9190613d71565b60405180910390a35050565b600e60009054906101000a900460ff1681565b61196a611964611df6565b83611eb7565b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09061406e565b60405180910390fd5b6119b584848484612301565b50505050565b60606119c682611d8a565b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc9061402e565b60405180910390fd5b6000611a0f61235d565b90506000815111611a2f5760405180602001604052806000815250611a5a565b80611a39846123ef565b604051602001611a4a929190613cc4565b6040516020818303038152906040525b915050919050565b600f5481565b610bb881565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b10611df6565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611460565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613e0e565b60405180910390fd5b611bfd8161220f565b50565b611c08611df6565b73ffffffffffffffffffffffffffffffffffffffff16611c26611460565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613fee565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d7357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d835750611d828261259c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e7183611069565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ec282611d8a565b611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890613eae565b60405180910390fd5b6000611f0c83611069565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7b57508373ffffffffffffffffffffffffffffffffffffffff16611f6384610901565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f8c5750611f8b8185611a74565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb582611069565b73ffffffffffffffffffffffffffffffffffffffff161461200b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120029061400e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290613e6e565b60405180910390fd5b612086838383612606565b612091600082611dfe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e191906142d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213891906141f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61220b82826040518060200160405280600081525061271a565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122e391906141f6565b905092915050565b600081836122f9919061427d565b905092915050565b61230c848484611f95565b61231884848484612775565b612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90613dee565b60405180910390fd5b50505050565b60606006805461236c906143c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612398906143c1565b80156123e55780601f106123ba576101008083540402835291602001916123e5565b820191906000526020600020905b8154815290600101906020018083116123c857829003601f168201915b5050505050905090565b60606000821415612437576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612597565b600082905060005b60008214612469578080612452906143f3565b915050600a82612462919061424c565b915061243f565b60008167ffffffffffffffff8111156124ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124dd5781602001600182028036833780820191505090505b5090505b60008514612590576001826124f691906142d7565b9150600a85612505919061443c565b603061251191906141f6565b60f81b81838151811061254d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612589919061424c565b94506124e1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261183838361290c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126545761264f81612911565b612693565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461269257612691838261295a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d6576126d181612ac7565b612715565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612714576127138282612c0a565b5b5b505050565b6127248383612c89565b6127316000848484612775565b612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790613dee565b60405180910390fd5b505050565b60006127968473ffffffffffffffffffffffffffffffffffffffff16612e57565b156128ff578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127bf611df6565b8786866040518563ffffffff1660e01b81526004016127e19493929190613d03565b602060405180830381600087803b1580156127fb57600080fd5b505af192505050801561282c57506040513d601f19601f820116820180604052508101906128299190613216565b60015b6128af573d806000811461285c576040519150601f19603f3d011682016040523d82523d6000602084013e612861565b606091505b506000815114156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90613dee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612904565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129678461111b565b61297191906142d7565b9050600060086000848152602001908152602001600020549050818114612a56576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612adb91906142d7565b90506000600a6000848152602001908152602001600020549050600060098381548110612b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612b79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612bee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c158361111b565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf090613f6e565b60405180910390fd5b612d0281611d8a565b15612d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3990613e2e565b60405180910390fd5b612d4e60008383612606565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9e91906141f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e76906143c1565b90600052602060002090601f016020900481019282612e985760008555612edf565b82601f10612eb157805160ff1916838001178555612edf565b82800160010185558215612edf579182015b82811115612ede578251825591602001919060010190612ec3565b5b509050612eec9190612ef0565b5090565b5b80821115612f09576000816000905550600101612ef1565b5090565b6000612f20612f1b8461411a565b6140e9565b905082815260208101848484011115612f3857600080fd5b612f4384828561437f565b509392505050565b6000612f5e612f598461414a565b6140e9565b905082815260208101848484011115612f7657600080fd5b612f8184828561437f565b509392505050565b600081359050612f988161453a565b92915050565b600081359050612fad81614551565b92915050565b600081359050612fc281614568565b92915050565b600081519050612fd781614568565b92915050565b600082601f830112612fee57600080fd5b8135612ffe848260208601612f0d565b91505092915050565b600082601f83011261301857600080fd5b8135613028848260208601612f4b565b91505092915050565b6000813590506130408161457f565b92915050565b60006020828403121561305857600080fd5b600061306684828501612f89565b91505092915050565b6000806040838503121561308257600080fd5b600061309085828601612f89565b92505060206130a185828601612f89565b9150509250929050565b6000806000606084860312156130c057600080fd5b60006130ce86828701612f89565b93505060206130df86828701612f89565b92505060406130f086828701613031565b9150509250925092565b6000806000806080858703121561311057600080fd5b600061311e87828801612f89565b945050602061312f87828801612f89565b935050604061314087828801613031565b925050606085013567ffffffffffffffff81111561315d57600080fd5b61316987828801612fdd565b91505092959194509250565b6000806040838503121561318857600080fd5b600061319685828601612f89565b92505060206131a785828601612f9e565b9150509250929050565b600080604083850312156131c457600080fd5b60006131d285828601612f89565b92505060206131e385828601613031565b9150509250929050565b6000602082840312156131ff57600080fd5b600061320d84828501612fb3565b91505092915050565b60006020828403121561322857600080fd5b600061323684828501612fc8565b91505092915050565b60006020828403121561325157600080fd5b600082013567ffffffffffffffff81111561326b57600080fd5b61327784828501613007565b91505092915050565b60006020828403121561329257600080fd5b60006132a084828501613031565b91505092915050565b60006132b58383613ca6565b60208301905092915050565b6132ca8161430b565b82525050565b60006132db8261418a565b6132e581856141b8565b93506132f08361417a565b8060005b8381101561332157815161330888826132a9565b9750613313836141ab565b9250506001810190506132f4565b5085935050505092915050565b6133378161431d565b82525050565b600061334882614195565b61335281856141c9565b935061336281856020860161438e565b61336b81614529565b840191505092915050565b6000613381826141a0565b61338b81856141da565b935061339b81856020860161438e565b6133a481614529565b840191505092915050565b60006133ba826141a0565b6133c481856141eb565b93506133d481856020860161438e565b80840191505092915050565b60006133ed6033836141da565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613453602b836141da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134b96032836141da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061351f6026836141da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613585601c836141da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135c56021836141da565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061362b6024836141da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136916019836141da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006136d1602c836141da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006137376038836141da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061379d602a836141da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006138036029836141da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613869601d836141da565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b60006138a96020836141da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b60006138e96020836141da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006139296008836141da565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139696021836141da565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139cf602c836141da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a356020836141da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a756029836141da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613adb602f836141da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613b416021836141da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ba76031836141da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613c0d602c836141da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613c736020836141da565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613caf81614375565b82525050565b613cbe81614375565b82525050565b6000613cd082856133af565b9150613cdc82846133af565b91508190509392505050565b6000602082019050613cfd60008301846132c1565b92915050565b6000608082019050613d1860008301876132c1565b613d2560208301866132c1565b613d326040830185613cb5565b8181036060830152613d44818461333d565b905095945050505050565b60006020820190508181036000830152613d6981846132d0565b905092915050565b6000602082019050613d86600083018461332e565b92915050565b60006020820190508181036000830152613da68184613376565b905092915050565b60006020820190508181036000830152613dc7816133e0565b9050919050565b60006020820190508181036000830152613de781613446565b9050919050565b60006020820190508181036000830152613e07816134ac565b9050919050565b60006020820190508181036000830152613e2781613512565b9050919050565b60006020820190508181036000830152613e4781613578565b9050919050565b60006020820190508181036000830152613e67816135b8565b9050919050565b60006020820190508181036000830152613e878161361e565b9050919050565b60006020820190508181036000830152613ea781613684565b9050919050565b60006020820190508181036000830152613ec7816136c4565b9050919050565b60006020820190508181036000830152613ee78161372a565b9050919050565b60006020820190508181036000830152613f0781613790565b9050919050565b60006020820190508181036000830152613f27816137f6565b9050919050565b60006020820190508181036000830152613f478161385c565b9050919050565b60006020820190508181036000830152613f678161389c565b9050919050565b60006020820190508181036000830152613f87816138dc565b9050919050565b60006020820190508181036000830152613fa78161391c565b9050919050565b60006020820190508181036000830152613fc78161395c565b9050919050565b60006020820190508181036000830152613fe7816139c2565b9050919050565b6000602082019050818103600083015261400781613a28565b9050919050565b6000602082019050818103600083015261402781613a68565b9050919050565b6000602082019050818103600083015261404781613ace565b9050919050565b6000602082019050818103600083015261406781613b34565b9050919050565b6000602082019050818103600083015261408781613b9a565b9050919050565b600060208201905081810360008301526140a781613c00565b9050919050565b600060208201905081810360008301526140c781613c66565b9050919050565b60006020820190506140e36000830184613cb5565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141105761410f6144fa565b5b8060405250919050565b600067ffffffffffffffff821115614135576141346144fa565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614165576141646144fa565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061420182614375565b915061420c83614375565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142415761424061446d565b5b828201905092915050565b600061425782614375565b915061426283614375565b9250826142725761427161449c565b5b828204905092915050565b600061428882614375565b915061429383614375565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142cc576142cb61446d565b5b828202905092915050565b60006142e282614375565b91506142ed83614375565b925082821015614300576142ff61446d565b5b828203905092915050565b600061431682614355565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143ac578082015181840152602081019050614391565b838111156143bb576000848401525b50505050565b600060028204905060018216806143d957607f821691505b602082108114156143ed576143ec6144cb565b5b50919050565b60006143fe82614375565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144315761443061446d565b5b600182019050919050565b600061444782614375565b915061445283614375565b9250826144625761446161449c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145438161430b565b811461454e57600080fd5b50565b61455a8161431d565b811461456557600080fd5b50565b61457181614329565b811461457c57600080fd5b50565b61458881614375565b811461459357600080fd5b5056fea2646970667358221220972908c896be3e4ba60191050191fd8248cb7fbc7ed60108649a2ff02a89e7ac64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063743976a01161010d578063b187bd26116100a0578063db4568e21161006f578063db4568e214610722578063e640cf7d1461074d578063e985e9c514610778578063f2fde38b146107b5578063fa62884c146107de576101f9565b8063b187bd2614610666578063b88d4fde14610691578063c87b56dd146106ba578063cd3293de146106f7576101f9565b806395d89b41116100dc57806395d89b41146105cb578063a035b1fe146105f6578063a0712d6814610621578063a22cb4651461063d576101f9565b8063743976a01461050f5780638462151c1461053a5780638da5cb5b1461057757806391b7f5ed146105a2576101f9565b80633ccfd60b1161019057806355f804b31161015f57806355f804b31461042c5780635e74b5b4146104555780636352211e1461047e57806370a08231146104bb578063715018a6146104f8576101f9565b80633ccfd60b1461038657806342842e0e1461039d5780634f6ccce7146103c657806352174cea14610403576101f9565b806318160ddd116101cc57806318160ddd146102cc57806323b872dd146102f75780632f745c59146103205780633b0aedab1461035d576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906131ed565b6107f5565b6040516102329190613d71565b60405180910390f35b34801561024757600080fd5b5061025061086f565b60405161025d9190613d8c565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613280565b610901565b60405161029a9190613ce8565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c591906131b1565b610986565b005b3480156102d857600080fd5b506102e1610a9e565b6040516102ee91906140ce565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906130ab565b610aab565b005b34801561032c57600080fd5b50610347600480360381019061034291906131b1565b610b0b565b60405161035491906140ce565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613280565b610bb0565b005b34801561039257600080fd5b5061039b610c36565b005b3480156103a957600080fd5b506103c460048036038101906103bf91906130ab565b610d01565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613280565b610d21565b6040516103fa91906140ce565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613280565b610db8565b005b34801561043857600080fd5b50610453600480360381019061044e919061323f565b610ec5565b005b34801561046157600080fd5b5061047c600480360381019061047791906131b1565b610f5b565b005b34801561048a57600080fd5b506104a560048036038101906104a09190613280565b611069565b6040516104b29190613ce8565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613046565b61111b565b6040516104ef91906140ce565b60405180910390f35b34801561050457600080fd5b5061050d6111d3565b005b34801561051b57600080fd5b506105246112d8565b6040516105319190613d8c565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613046565b611366565b60405161056e9190613d4f565b60405180910390f35b34801561058357600080fd5b5061058c611460565b6040516105999190613ce8565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c49190613280565b61148a565b005b3480156105d757600080fd5b506105e0611510565b6040516105ed9190613d8c565b60405180910390f35b34801561060257600080fd5b5061060b6115a2565b60405161061891906140ce565b60405180910390f35b61063b60048036038101906106369190613280565b6115a8565b005b34801561064957600080fd5b50610664600480360381019061065f9190613175565b6117c5565b005b34801561067257600080fd5b5061067b611946565b6040516106889190613d71565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b391906130fa565b611959565b005b3480156106c657600080fd5b506106e160048036038101906106dc9190613280565b6119bb565b6040516106ee9190613d8c565b60405180910390f35b34801561070357600080fd5b5061070c611a62565b60405161071991906140ce565b60405180910390f35b34801561072e57600080fd5b50610737611a68565b60405161074491906140ce565b60405180910390f35b34801561075957600080fd5b50610762611a6e565b60405161076f91906140ce565b60405180910390f35b34801561078457600080fd5b5061079f600480360381019061079a919061306f565b611a74565b6040516107ac9190613d71565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613046565b611b08565b005b3480156107ea57600080fd5b506107f3611c00565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610868575061086782611ca8565b5b9050919050565b60606000805461087e906143c1565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa906143c1565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061090c82611d8a565b61094b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094290613fce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061099182611069565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f99061404e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a21611df6565b73ffffffffffffffffffffffffffffffffffffffff161480610a505750610a4f81610a4a611df6565b611a74565b5b610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613ece565b60405180910390fd5b610a998383611dfe565b505050565b6000600980549050905090565b610abc610ab6611df6565b82611eb7565b610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af29061406e565b60405180910390fd5b610b06838383611f95565b505050565b6000610b168361111b565b8210610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90613dce565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bb8611df6565b73ffffffffffffffffffffffffffffffffffffffff16610bd6611460565b73ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390613fee565b60405180910390fd5b80600c8190555050565b610c3e611df6565b73ffffffffffffffffffffffffffffffffffffffff16610c5c611460565b73ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca990613fee565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cfd573d6000803e3d6000fd5b5050565b610d1c83838360405180602001604052806000815250611959565b505050565b6000610d2b610a9e565b8210610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d639061408e565b60405180910390fd5b60098281548110610da6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610dc0611df6565b73ffffffffffffffffffffffffffffffffffffffff16610dde611460565b73ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90613fee565b60405180910390fd5b600f54811115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090613e4e565b60405180910390fd5b80600f6000828254610e8b91906142d7565b9250508190555060005b81811015610ec157610eae33610ea9610a9e565b6121f1565b8080610eb9906143f3565b915050610e95565b5050565b610ecd611df6565b73ffffffffffffffffffffffffffffffffffffffff16610eeb611460565b73ffffffffffffffffffffffffffffffffffffffff1614610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3890613fee565b60405180910390fd5b8060069080519060200190610f57929190612e6a565b5050565b610f63611df6565b73ffffffffffffffffffffffffffffffffffffffff16610f81611460565b73ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613fee565b60405180910390fd5b600f5481111561101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390613e4e565b60405180910390fd5b80600f600082825461102e91906142d7565b9250508190555060005b81811015611064576110518361104c610a9e565b6121f1565b808061105c906143f3565b915050611038565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110990613f0e565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561118c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118390613eee565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111db611df6565b73ffffffffffffffffffffffffffffffffffffffff166111f9611460565b73ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36112d6600061220f565b565b600680546112e5906143c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611311906143c1565b801561135e5780601f106113335761010080835404028352916020019161135e565b820191906000526020600020905b81548152906001019060200180831161134157829003601f168201915b505050505081565b606060006113738361111b565b905060008167ffffffffffffffff8111156113b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113e55781602001602082028036833780820191505090505b50905060005b82811015611455576113fd8582610b0b565b828281518110611436577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061144d906143f3565b9150506113eb565b508092505050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611492611df6565b73ffffffffffffffffffffffffffffffffffffffff166114b0611460565b73ffffffffffffffffffffffffffffffffffffffff1614611506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fd90613fee565b60405180910390fd5b80600d8190555050565b60606001805461151f906143c1565b80601f016020809104026020016040519081016040528092919081815260200182805461154b906143c1565b80156115985780601f1061156d57610100808354040283529160200191611598565b820191906000526020600020905b81548152906001019060200180831161157b57829003601f168201915b5050505050905090565b600d5481565b610bb86115b3610a9e565b106115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613f8e565b60405180910390fd5b60001515600e60009054906101000a900460ff16151514611649576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611640906140ae565b60405180910390fd5b6000811161168c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168390613dae565b60405180910390fd5b600c548111156116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890613fae565b60405180910390fd5b610bb86116fb600f54836116e591906141f6565b6116ed610a9e565b6122d590919063ffffffff16565b111561173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390613f4e565b60405180910390fd5b3461175282600d546122eb90919063ffffffff16565b14611792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178990613f2e565b60405180910390fd5b60005b818110156117c1576117ae336117a9610a9e565b6121f1565b80806117b9906143f3565b915050611795565b5050565b6117cd611df6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561183b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183290613e8e565b60405180910390fd5b8060056000611848611df6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f5611df6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193a9190613d71565b60405180910390a35050565b600e60009054906101000a900460ff1681565b61196a611964611df6565b83611eb7565b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a09061406e565b60405180910390fd5b6119b584848484612301565b50505050565b60606119c682611d8a565b611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc9061402e565b60405180910390fd5b6000611a0f61235d565b90506000815111611a2f5760405180602001604052806000815250611a5a565b80611a39846123ef565b604051602001611a4a929190613cc4565b6040516020818303038152906040525b915050919050565b600f5481565b610bb881565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b10611df6565b73ffffffffffffffffffffffffffffffffffffffff16611b2e611460565b73ffffffffffffffffffffffffffffffffffffffff1614611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b90613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb90613e0e565b60405180910390fd5b611bfd8161220f565b50565b611c08611df6565b73ffffffffffffffffffffffffffffffffffffffff16611c26611460565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7390613fee565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d7357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d835750611d828261259c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e7183611069565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ec282611d8a565b611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890613eae565b60405180910390fd5b6000611f0c83611069565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7b57508373ffffffffffffffffffffffffffffffffffffffff16611f6384610901565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f8c5750611f8b8185611a74565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb582611069565b73ffffffffffffffffffffffffffffffffffffffff161461200b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120029061400e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561207b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207290613e6e565b60405180910390fd5b612086838383612606565b612091600082611dfe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120e191906142d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461213891906141f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61220b82826040518060200160405280600081525061271a565b5050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836122e391906141f6565b905092915050565b600081836122f9919061427d565b905092915050565b61230c848484611f95565b61231884848484612775565b612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90613dee565b60405180910390fd5b50505050565b60606006805461236c906143c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612398906143c1565b80156123e55780601f106123ba576101008083540402835291602001916123e5565b820191906000526020600020905b8154815290600101906020018083116123c857829003601f168201915b5050505050905090565b60606000821415612437576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612597565b600082905060005b60008214612469578080612452906143f3565b915050600a82612462919061424c565b915061243f565b60008167ffffffffffffffff8111156124ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124dd5781602001600182028036833780820191505090505b5090505b60008514612590576001826124f691906142d7565b9150600a85612505919061443c565b603061251191906141f6565b60f81b81838151811061254d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612589919061424c565b94506124e1565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61261183838361290c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126545761264f81612911565b612693565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461269257612691838261295a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126d6576126d181612ac7565b612715565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612714576127138282612c0a565b5b5b505050565b6127248383612c89565b6127316000848484612775565b612770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276790613dee565b60405180910390fd5b505050565b60006127968473ffffffffffffffffffffffffffffffffffffffff16612e57565b156128ff578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127bf611df6565b8786866040518563ffffffff1660e01b81526004016127e19493929190613d03565b602060405180830381600087803b1580156127fb57600080fd5b505af192505050801561282c57506040513d601f19601f820116820180604052508101906128299190613216565b60015b6128af573d806000811461285c576040519150601f19603f3d011682016040523d82523d6000602084013e612861565b606091505b506000815114156128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90613dee565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612904565b600190505b949350505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129678461111b565b61297191906142d7565b9050600060086000848152602001908152602001600020549050818114612a56576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050612adb91906142d7565b90506000600a6000848152602001908152602001600020549050600060098381548110612b31577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060098381548110612b79577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612bee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612c158361111b565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf090613f6e565b60405180910390fd5b612d0281611d8a565b15612d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3990613e2e565b60405180910390fd5b612d4e60008383612606565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d9e91906141f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612e76906143c1565b90600052602060002090601f016020900481019282612e985760008555612edf565b82601f10612eb157805160ff1916838001178555612edf565b82800160010185558215612edf579182015b82811115612ede578251825591602001919060010190612ec3565b5b509050612eec9190612ef0565b5090565b5b80821115612f09576000816000905550600101612ef1565b5090565b6000612f20612f1b8461411a565b6140e9565b905082815260208101848484011115612f3857600080fd5b612f4384828561437f565b509392505050565b6000612f5e612f598461414a565b6140e9565b905082815260208101848484011115612f7657600080fd5b612f8184828561437f565b509392505050565b600081359050612f988161453a565b92915050565b600081359050612fad81614551565b92915050565b600081359050612fc281614568565b92915050565b600081519050612fd781614568565b92915050565b600082601f830112612fee57600080fd5b8135612ffe848260208601612f0d565b91505092915050565b600082601f83011261301857600080fd5b8135613028848260208601612f4b565b91505092915050565b6000813590506130408161457f565b92915050565b60006020828403121561305857600080fd5b600061306684828501612f89565b91505092915050565b6000806040838503121561308257600080fd5b600061309085828601612f89565b92505060206130a185828601612f89565b9150509250929050565b6000806000606084860312156130c057600080fd5b60006130ce86828701612f89565b93505060206130df86828701612f89565b92505060406130f086828701613031565b9150509250925092565b6000806000806080858703121561311057600080fd5b600061311e87828801612f89565b945050602061312f87828801612f89565b935050604061314087828801613031565b925050606085013567ffffffffffffffff81111561315d57600080fd5b61316987828801612fdd565b91505092959194509250565b6000806040838503121561318857600080fd5b600061319685828601612f89565b92505060206131a785828601612f9e565b9150509250929050565b600080604083850312156131c457600080fd5b60006131d285828601612f89565b92505060206131e385828601613031565b9150509250929050565b6000602082840312156131ff57600080fd5b600061320d84828501612fb3565b91505092915050565b60006020828403121561322857600080fd5b600061323684828501612fc8565b91505092915050565b60006020828403121561325157600080fd5b600082013567ffffffffffffffff81111561326b57600080fd5b61327784828501613007565b91505092915050565b60006020828403121561329257600080fd5b60006132a084828501613031565b91505092915050565b60006132b58383613ca6565b60208301905092915050565b6132ca8161430b565b82525050565b60006132db8261418a565b6132e581856141b8565b93506132f08361417a565b8060005b8381101561332157815161330888826132a9565b9750613313836141ab565b9250506001810190506132f4565b5085935050505092915050565b6133378161431d565b82525050565b600061334882614195565b61335281856141c9565b935061336281856020860161438e565b61336b81614529565b840191505092915050565b6000613381826141a0565b61338b81856141da565b935061339b81856020860161438e565b6133a481614529565b840191505092915050565b60006133ba826141a0565b6133c481856141eb565b93506133d481856020860161438e565b80840191505092915050565b60006133ed6033836141da565b91507f4e756d626572206f6620746f6b656e732063616e206e6f74206265206c65737360008301527f207468616e206f7220657175616c20746f2030000000000000000000000000006020830152604082019050919050565b6000613453602b836141da565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134b96032836141da565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061351f6026836141da565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613585601c836141da565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135c56021836141da565b91507f546865207175616e74697479206578636565647320746865207265736572766560008301527f2e000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061362b6024836141da565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136916019836141da565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006136d1602c836141da565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006137376038836141da565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061379d602a836141da565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006138036029836141da565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613869601d836141da565b91507f53656e742065746865722076616c756520697320696e636f72726563740000006000830152602082019050919050565b60006138a96020836141da565b91507f507572636861736520776f756c6420657863656564206d617820737570706c796000830152602082019050919050565b60006138e96020836141da565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006139296008836141da565b91507f53616c6520656e640000000000000000000000000000000000000000000000006000830152602082019050919050565b60006139696021836141da565b91507f43686f73656e20416d6f756e742065786365656473204d61785175616e74697460008301527f79000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139cf602c836141da565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a356020836141da565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a756029836141da565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613adb602f836141da565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613b416021836141da565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ba76031836141da565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613c0d602c836141da565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613c736020836141da565b91507f53616c65206973206e6f742061637469766520617420746865206d6f6d656e746000830152602082019050919050565b613caf81614375565b82525050565b613cbe81614375565b82525050565b6000613cd082856133af565b9150613cdc82846133af565b91508190509392505050565b6000602082019050613cfd60008301846132c1565b92915050565b6000608082019050613d1860008301876132c1565b613d2560208301866132c1565b613d326040830185613cb5565b8181036060830152613d44818461333d565b905095945050505050565b60006020820190508181036000830152613d6981846132d0565b905092915050565b6000602082019050613d86600083018461332e565b92915050565b60006020820190508181036000830152613da68184613376565b905092915050565b60006020820190508181036000830152613dc7816133e0565b9050919050565b60006020820190508181036000830152613de781613446565b9050919050565b60006020820190508181036000830152613e07816134ac565b9050919050565b60006020820190508181036000830152613e2781613512565b9050919050565b60006020820190508181036000830152613e4781613578565b9050919050565b60006020820190508181036000830152613e67816135b8565b9050919050565b60006020820190508181036000830152613e878161361e565b9050919050565b60006020820190508181036000830152613ea781613684565b9050919050565b60006020820190508181036000830152613ec7816136c4565b9050919050565b60006020820190508181036000830152613ee78161372a565b9050919050565b60006020820190508181036000830152613f0781613790565b9050919050565b60006020820190508181036000830152613f27816137f6565b9050919050565b60006020820190508181036000830152613f478161385c565b9050919050565b60006020820190508181036000830152613f678161389c565b9050919050565b60006020820190508181036000830152613f87816138dc565b9050919050565b60006020820190508181036000830152613fa78161391c565b9050919050565b60006020820190508181036000830152613fc78161395c565b9050919050565b60006020820190508181036000830152613fe7816139c2565b9050919050565b6000602082019050818103600083015261400781613a28565b9050919050565b6000602082019050818103600083015261402781613a68565b9050919050565b6000602082019050818103600083015261404781613ace565b9050919050565b6000602082019050818103600083015261406781613b34565b9050919050565b6000602082019050818103600083015261408781613b9a565b9050919050565b600060208201905081810360008301526140a781613c00565b9050919050565b600060208201905081810360008301526140c781613c66565b9050919050565b60006020820190506140e36000830184613cb5565b92915050565b6000604051905081810181811067ffffffffffffffff821117156141105761410f6144fa565b5b8060405250919050565b600067ffffffffffffffff821115614135576141346144fa565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115614165576141646144fa565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061420182614375565b915061420c83614375565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142415761424061446d565b5b828201905092915050565b600061425782614375565b915061426283614375565b9250826142725761427161449c565b5b828204905092915050565b600061428882614375565b915061429383614375565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142cc576142cb61446d565b5b828202905092915050565b60006142e282614375565b91506142ed83614375565b925082821015614300576142ff61446d565b5b828203905092915050565b600061431682614355565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143ac578082015181840152602081019050614391565b838111156143bb576000848401525b50505050565b600060028204905060018216806143d957607f821691505b602082108114156143ed576143ec6144cb565b5b50919050565b60006143fe82614375565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144315761443061446d565b5b600182019050919050565b600061444782614375565b915061445283614375565b9250826144625761446161449c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6145438161430b565b811461454e57600080fd5b50565b61455a8161431d565b811461456557600080fd5b50565b61457181614329565b811461457c57600080fd5b50565b61458881614375565b811461459357600080fd5b5056fea2646970667358221220972908c896be3e4ba60191050191fd8248cb7fbc7ed60108649a2ff02a89e7ac64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string):
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
49175:2729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43000:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30982:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32536:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32059:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43640:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43308:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49847:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51761:140;;;;;;;;;;;;;:::i;:::-;;33836:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43830:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49954:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49644:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50246:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30676:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30406:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28067:150;;;;;;;;;;;;;:::i;:::-;;29704:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51402:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49749:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31151:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49412:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50763:630;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32829:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49471:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34092:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31326:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49505:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49330:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49377:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50672:83;;;;;;;;;;;;;:::i;:::-;;43000:224;43102:4;43141:35;43126:50;;;:11;:50;;;;:90;;;;43180:36;43204:11;43180:23;:36::i;:::-;43126:90;43119:97;;43000:224;;;:::o;30982:100::-;31036:13;31069:5;31062:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30982:100;:::o;32536:221::-;32612:7;32640:16;32648:7;32640;:16::i;:::-;32632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32725:15;:24;32741:7;32725:24;;;;;;;;;;;;;;;;;;;;;32718:31;;32536:221;;;:::o;32059:411::-;32140:13;32156:23;32171:7;32156:14;:23::i;:::-;32140:39;;32204:5;32198:11;;:2;:11;;;;32190:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32298:5;32282:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32307:37;32324:5;32331:12;:10;:12::i;:::-;32307:16;:37::i;:::-;32282:62;32260:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;32441:21;32450:2;32454:7;32441:8;:21::i;:::-;32059:411;;;:::o;43640:113::-;43701:7;43728:10;:17;;;;43721:24;;43640:113;:::o;33426:339::-;33621:41;33640:12;:10;:12::i;:::-;33654:7;33621:18;:41::i;:::-;33613:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33729:28;33739:4;33745:2;33749:7;33729:9;:28::i;:::-;33426:339;;;:::o;43308:256::-;43405:7;43441:23;43458:5;43441:16;:23::i;:::-;43433:5;:31;43425:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43530:12;:19;43543:5;43530:19;;;;;;;;;;;;;;;:26;43550:5;43530:26;;;;;;;;;;;;43523:33;;43308:256;;;;:::o;49847:99::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49929:9:::1;49917:11;:21;;;;49847:99:::0;:::o;51761:140::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51809:12:::1;51824:21;51809:36;;51864:10;51856:28;;:37;51885:7;51856:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27707:1;51761:140::o:0;33836:185::-;33974:39;33991:4;33997:2;34001:7;33974:39;;;;;;;;;;;;:16;:39::i;:::-;33836:185;;;:::o;43830:233::-;43905:7;43941:30;:28;:30::i;:::-;43933:5;:38;43925:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44038:10;44049:5;44038:17;;;;;;;;;;;;;;;;;;;;;;;;44031:24;;43830:233;;;:::o;49954:284::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50046:7:::1;;50034:8;:19;;50026:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50113:8;50102:7;;:19;;;;;;;:::i;:::-;;;;;;;;50137:6;50132:99;50153:8;50149:1;:12;50132:99;;;50183:36;50193:10;50205:13;:11;:13::i;:::-;50183:9;:36::i;:::-;50163:3;;;;;:::i;:::-;;;;50132:99;;;;49954:284:::0;:::o;49644:97::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49726:7:::1;49715:8;:18;;;;;;;;;;;;:::i;:::-;;49644:97:::0;:::o;50246:311::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50362:7:::1;;50350:8;:19;;50342:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;50429:8;50418:7;;:19;;;;;;;:::i;:::-;;;;;;;;50453:6;50448:102;50469:8;50465:1;:12;50448:102;;;50499:39;50509:13;50524;:11;:13::i;:::-;50499:9;:39::i;:::-;50479:3;;;;;:::i;:::-;;;;50448:102;;;;50246:311:::0;;:::o;30676:239::-;30748:7;30768:13;30784:7;:16;30792:7;30784:16;;;;;;;;;;;;;;;;;;;;;30768:32;;30836:1;30819:19;;:5;:19;;;;30811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30902:5;30895:12;;;30676:239;;;:::o;30406:208::-;30478:7;30523:1;30506:19;;:5;:19;;;;30498:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30590:9;:16;30600:5;30590:16;;;;;;;;;;;;;;;;30583:23;;30406:208;;;:::o;28067:150::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28174:1:::1;28137:40;;28158:6;;;;;;;;;;;28137:40;;;;;;;;;;;;28188:21;28206:1;28188:9;:21::i;:::-;28067:150::o:0;29704:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51402:351::-;51462:16;51496:13;51512:17;51522:6;51512:9;:17::i;:::-;51496:33;;51540:23;51580:5;51566:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51540:46;;51602:13;51597:125;51629:5;51621;:13;51597:125;;;51676:34;51696:6;51704:5;51676:19;:34::i;:::-;51660:6;51667:5;51660:13;;;;;;;;;;;;;;;;;;;;;:50;;;;;51636:7;;;;;:::i;:::-;;;;51597:125;;;;51739:6;51732:13;;;;51402:351;;;:::o;27416:87::-;27462:7;27489:6;;;;;;;;;;;27482:13;;27416:87;:::o;49749:92::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49824:9:::1;49816:5;:17;;;;49749:92:::0;:::o;31151:104::-;31207:13;31240:7;31233:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31151:104;:::o;49412:40::-;;;;:::o;50763:630::-;49366:4;50605:13;:11;:13::i;:::-;:28;50597:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50852:5:::1;50840:17;;:8;;;;;;;;;;;:17;;;50832:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50928:1;50913:12;:16;50905:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51020:11;;51004:12;:27;;50996:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49366:4;51087:41;51120:7;;51105:12;:22;;;;:::i;:::-;51087:13;:11;:13::i;:::-;:17;;:41;;;;:::i;:::-;:57;;51079:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;51227:9;51200:23;51210:12;51200:5;;:9;;:23;;;;:::i;:::-;:36;51192:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;51288:6;51283:103;51304:12;51300:1;:16;51283:103;;;51338:36;51348:10;51360:13;:11;:13::i;:::-;51338:9;:36::i;:::-;51318:3;;;;;:::i;:::-;;;;51283:103;;;;50763:630:::0;:::o;32829:295::-;32944:12;:10;:12::i;:::-;32932:24;;:8;:24;;;;32924:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33044:8;32999:18;:32;33018:12;:10;:12::i;:::-;32999:32;;;;;;;;;;;;;;;:42;33032:8;32999:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33097:8;33068:48;;33083:12;:10;:12::i;:::-;33068:48;;;33107:8;33068:48;;;;;;:::i;:::-;;;;;;;;32829:295;;:::o;49471:27::-;;;;;;;;;;;;;:::o;34092:328::-;34267:41;34286:12;:10;:12::i;:::-;34300:7;34267:18;:41::i;:::-;34259:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34373:39;34387:4;34393:2;34397:7;34406:5;34373:13;:39::i;:::-;34092:328;;;;:::o;31326:324::-;31399:13;31433:16;31441:7;31433;:16::i;:::-;31425:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:18;31535:9;:7;:9::i;:::-;31514:30;;31583:1;31568:4;31562:18;:22;:80;;;;;;;;;;;;;;;;;31611:4;31617:18;:7;:16;:18::i;:::-;31594:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31562:80;31555:87;;;31326:324;;;:::o;49505:24::-;;;;:::o;49330:40::-;49366:4;49330:40;:::o;49377:28::-;;;;:::o;33195:164::-;33292:4;33316:18;:25;33335:5;33316:25;;;;;;;;;;;;;;;:35;33342:8;33316:35;;;;;;;;;;;;;;;;;;;;;;;;;33309:42;;33195:164;;;;:::o;28372:192::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28481:1:::1;28461:22;;:8;:22;;;;28453:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28537:19;28547:8;28537:9;:19::i;:::-;28372:192:::0;:::o;50672:83::-;27647:12;:10;:12::i;:::-;27636:23;;:7;:5;:7::i;:::-;:23;;;27628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50739:8:::1;;;;;;;;;;;50738:9;50727:8;;:20;;;;;;;;;;;;;;;;;;50672:83::o:0;30037:305::-;30139:4;30191:25;30176:40;;;:11;:40;;;;:105;;;;30248:33;30233:48;;;:11;:48;;;;30176:105;:158;;;;30298:36;30322:11;30298:23;:36::i;:::-;30176:158;30156:178;;30037:305;;;:::o;35930:127::-;35995:4;36047:1;36019:30;;:7;:16;36027:7;36019:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36012:37;;35930:127;;;:::o;26167:98::-;26220:7;26247:10;26240:17;;26167:98;:::o;39912:174::-;40014:2;39987:15;:24;40003:7;39987:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40070:7;40066:2;40032:46;;40041:23;40056:7;40041:14;:23::i;:::-;40032:46;;;;;;;;;;;;39912:174;;:::o;36224:348::-;36317:4;36342:16;36350:7;36342;:16::i;:::-;36334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36418:13;36434:23;36449:7;36434:14;:23::i;:::-;36418:39;;36487:5;36476:16;;:7;:16;;;:51;;;;36520:7;36496:31;;:20;36508:7;36496:11;:20::i;:::-;:31;;;36476:51;:87;;;;36531:32;36548:5;36555:7;36531:16;:32::i;:::-;36476:87;36468:96;;;36224:348;;;;:::o;39216:578::-;39375:4;39348:31;;:23;39363:7;39348:14;:23::i;:::-;:31;;;39340:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39458:1;39444:16;;:2;:16;;;;39436:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39514:39;39535:4;39541:2;39545:7;39514:20;:39::i;:::-;39618:29;39635:1;39639:7;39618:8;:29::i;:::-;39679:1;39660:9;:15;39670:4;39660:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39708:1;39691:9;:13;39701:2;39691:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39739:2;39720:7;:16;39728:7;39720:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39778:7;39774:2;39759:27;;39768:4;39759:27;;;;;;;;;;;;39216:578;;;:::o;36914:110::-;36990:26;37000:2;37004:7;36990:26;;;;;;;;;;;;:9;:26::i;:::-;36914:110;;:::o;28572:173::-;28628:16;28647:6;;;;;;;;;;;28628:25;;28673:8;28664:6;;:17;;;;;;;;;;;;;;;;;;28728:8;28697:40;;28718:8;28697:40;;;;;;;;;;;;28572:173;;:::o;2763:98::-;2821:7;2852:1;2848;:5;;;;:::i;:::-;2841:12;;2763:98;;;;:::o;3501:::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;35302:315::-;35459:28;35469:4;35475:2;35479:7;35459:9;:28::i;:::-;35506:48;35529:4;35535:2;35539:7;35548:5;35506:22;:48::i;:::-;35498:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;35302:315;;;;:::o;31898:99::-;31948:13;31981:8;31974:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31898:99;:::o;7181:723::-;7237:13;7467:1;7458:5;:10;7454:53;;;7485:10;;;;;;;;;;;;;;;;;;;;;7454:53;7517:12;7532:5;7517:20;;7548:14;7573:78;7588:1;7580:4;:9;7573:78;;7606:8;;;;;:::i;:::-;;;;7637:2;7629:10;;;;;:::i;:::-;;;7573:78;;;7661:19;7693:6;7683:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7661:39;;7711:154;7727:1;7718:5;:10;7711:154;;7755:1;7745:11;;;;;:::i;:::-;;;7822:2;7814:5;:10;;;;:::i;:::-;7801:2;:24;;;;:::i;:::-;7788:39;;7771:6;7778;7771:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;7851:2;7842:11;;;;;:::i;:::-;;;7711:154;;;7889:6;7875:21;;;;;7181:723;;;;:::o;19153:157::-;19238:4;19277:25;19262:40;;;:11;:40;;;;19255:47;;19153:157;;;:::o;44676:589::-;44820:45;44847:4;44853:2;44857:7;44820:26;:45::i;:::-;44898:1;44882:18;;:4;:18;;;44878:187;;;44917:40;44949:7;44917:31;:40::i;:::-;44878:187;;;44987:2;44979:10;;:4;:10;;;44975:90;;45006:47;45039:4;45045:7;45006:32;:47::i;:::-;44975:90;44878:187;45093:1;45079:16;;:2;:16;;;45075:183;;;45112:45;45149:7;45112:36;:45::i;:::-;45075:183;;;45185:4;45179:10;;:2;:10;;;45175:83;;45206:40;45234:2;45238:7;45206:27;:40::i;:::-;45175:83;45075:183;44676:589;;;:::o;37251:321::-;37381:18;37387:2;37391:7;37381:5;:18::i;:::-;37432:54;37463:1;37467:2;37471:7;37480:5;37432:22;:54::i;:::-;37410:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;37251:321;;;:::o;40651:803::-;40806:4;40827:15;:2;:13;;;:15::i;:::-;40823:624;;;40879:2;40863:36;;;40900:12;:10;:12::i;:::-;40914:4;40920:7;40929:5;40863:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40859:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41126:1;41109:6;:13;:18;41105:272;;;41152:60;;;;;;;;;;:::i;:::-;;;;;;;;41105:272;41327:6;41321:13;41312:6;41308:2;41304:15;41297:38;40859:533;40996:45;;;40986:55;;;:6;:55;;;;40979:62;;;;;40823:624;41431:4;41424:11;;40651:803;;;;;;;:::o;42026:126::-;;;;:::o;45988:164::-;46092:10;:17;;;;46065:15;:24;46081:7;46065:24;;;;;;;;;;;:44;;;;46120:10;46136:7;46120:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45988:164;:::o;46779:988::-;47045:22;47095:1;47070:22;47087:4;47070:16;:22::i;:::-;:26;;;;:::i;:::-;47045:51;;47107:18;47128:17;:26;47146:7;47128:26;;;;;;;;;;;;47107:47;;47275:14;47261:10;:28;47257:328;;47306:19;47328:12;:18;47341:4;47328:18;;;;;;;;;;;;;;;:34;47347:14;47328:34;;;;;;;;;;;;47306:56;;47412:11;47379:12;:18;47392:4;47379:18;;;;;;;;;;;;;;;:30;47398:10;47379:30;;;;;;;;;;;:44;;;;47529:10;47496:17;:30;47514:11;47496:30;;;;;;;;;;;:43;;;;47257:328;;47681:17;:26;47699:7;47681:26;;;;;;;;;;;47674:33;;;47725:12;:18;47738:4;47725:18;;;;;;;;;;;;;;;:34;47744:14;47725:34;;;;;;;;;;;47718:41;;;46779:988;;;;:::o;48062:1079::-;48315:22;48360:1;48340:10;:17;;;;:21;;;;:::i;:::-;48315:46;;48372:18;48393:15;:24;48409:7;48393:24;;;;;;;;;;;;48372:45;;48744:19;48766:10;48777:14;48766:26;;;;;;;;;;;;;;;;;;;;;;;;48744:48;;48830:11;48805:10;48816;48805:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;48941:10;48910:15;:28;48926:11;48910:28;;;;;;;;;;;:41;;;;49082:15;:24;49098:7;49082:24;;;;;;;;;;;49075:31;;;49117:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48062:1079;;;;:::o;45566:221::-;45651:14;45668:20;45685:2;45668:16;:20::i;:::-;45651:37;;45726:7;45699:12;:16;45712:2;45699:16;;;;;;;;;;;;;;;:24;45716:6;45699:24;;;;;;;;;;;:34;;;;45773:6;45744:17;:26;45762:7;45744:26;;;;;;;;;;;:35;;;;45566:221;;;:::o;37908:382::-;38002:1;37988:16;;:2;:16;;;;37980:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38061:16;38069:7;38061;:16::i;:::-;38060:17;38052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38123:45;38152:1;38156:2;38160:7;38123:20;:45::i;:::-;38198:1;38181:9;:13;38191:2;38181:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38229:2;38210:7;:16;38218:7;38210:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38274:7;38270:2;38249:33;;38266:1;38249:33;;;;;;;;;;;;37908:382;;:::o;9648:387::-;9708:4;9916:12;9983:7;9971:20;9963:28;;10026:1;10019:4;:8;10012:15;;;9648:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:179::-;;6174:46;6216:3;6208:6;6174:46;:::i;:::-;6252:4;6247:3;6243:14;6229:28;;6164:99;;;;:::o;6269:118::-;6356:24;6374:5;6356:24;:::i;:::-;6351:3;6344:37;6334:53;;:::o;6423:732::-;;6571:54;6619:5;6571:54;:::i;:::-;6641:86;6720:6;6715:3;6641:86;:::i;:::-;6634:93;;6751:56;6801:5;6751:56;:::i;:::-;6830:7;6861:1;6846:284;6871:6;6868:1;6865:13;6846:284;;;6947:6;6941:13;6974:63;7033:3;7018:13;6974:63;:::i;:::-;6967:70;;7060:60;7113:6;7060:60;:::i;:::-;7050:70;;6906:224;6893:1;6890;6886:9;6881:14;;6846:284;;;6850:14;7146:3;7139:10;;6547:608;;;;;;;:::o;7161:109::-;7242:21;7257:5;7242:21;:::i;:::-;7237:3;7230:34;7220:50;;:::o;7276:360::-;;7390:38;7422:5;7390:38;:::i;:::-;7444:70;7507:6;7502:3;7444:70;:::i;:::-;7437:77;;7523:52;7568:6;7563:3;7556:4;7549:5;7545:16;7523:52;:::i;:::-;7600:29;7622:6;7600:29;:::i;:::-;7595:3;7591:39;7584:46;;7366:270;;;;;:::o;7642:364::-;;7758:39;7791:5;7758:39;:::i;:::-;7813:71;7877:6;7872:3;7813:71;:::i;:::-;7806:78;;7893:52;7938:6;7933:3;7926:4;7919:5;7915:16;7893:52;:::i;:::-;7970:29;7992:6;7970:29;:::i;:::-;7965:3;7961:39;7954:46;;7734:272;;;;;:::o;8012:377::-;;8146:39;8179:5;8146:39;:::i;:::-;8201:89;8283:6;8278:3;8201:89;:::i;:::-;8194:96;;8299:52;8344:6;8339:3;8332:4;8325:5;8321:16;8299:52;:::i;:::-;8376:6;8371:3;8367:16;8360:23;;8122:267;;;;;:::o;8395:383::-;;8558:67;8622:2;8617:3;8558:67;:::i;:::-;8551:74;;8655:34;8651:1;8646:3;8642:11;8635:55;8721:21;8716:2;8711:3;8707:12;8700:43;8769:2;8764:3;8760:12;8753:19;;8541:237;;;:::o;8784:375::-;;8947:67;9011:2;9006:3;8947:67;:::i;:::-;8940:74;;9044:34;9040:1;9035:3;9031:11;9024:55;9110:13;9105:2;9100:3;9096:12;9089:35;9150:2;9145:3;9141:12;9134:19;;8930:229;;;:::o;9165:382::-;;9328:67;9392:2;9387:3;9328:67;:::i;:::-;9321:74;;9425:34;9421:1;9416:3;9412:11;9405:55;9491:20;9486:2;9481:3;9477:12;9470:42;9538:2;9533:3;9529:12;9522:19;;9311:236;;;:::o;9553:370::-;;9716:67;9780:2;9775:3;9716:67;:::i;:::-;9709:74;;9813:34;9809:1;9804:3;9800:11;9793:55;9879:8;9874:2;9869:3;9865:12;9858:30;9914:2;9909:3;9905:12;9898:19;;9699:224;;;:::o;9929:326::-;;10092:67;10156:2;10151:3;10092:67;:::i;:::-;10085:74;;10189:30;10185:1;10180:3;10176:11;10169:51;10246:2;10241:3;10237:12;10230:19;;10075:180;;;:::o;10261:365::-;;10424:67;10488:2;10483:3;10424:67;:::i;:::-;10417:74;;10521:34;10517:1;10512:3;10508:11;10501:55;10587:3;10582:2;10577:3;10573:12;10566:25;10617:2;10612:3;10608:12;10601:19;;10407:219;;;:::o;10632:368::-;;10795:67;10859:2;10854:3;10795:67;:::i;:::-;10788:74;;10892:34;10888:1;10883:3;10879:11;10872:55;10958:6;10953:2;10948:3;10944:12;10937:28;10991:2;10986:3;10982:12;10975:19;;10778:222;;;:::o;11006:323::-;;11169:67;11233:2;11228:3;11169:67;:::i;:::-;11162:74;;11266:27;11262:1;11257:3;11253:11;11246:48;11320:2;11315:3;11311:12;11304:19;;11152:177;;;:::o;11335:376::-;;11498:67;11562:2;11557:3;11498:67;:::i;:::-;11491:74;;11595:34;11591:1;11586:3;11582:11;11575:55;11661:14;11656:2;11651:3;11647:12;11640:36;11702:2;11697:3;11693:12;11686:19;;11481:230;;;:::o;11717:388::-;;11880:67;11944:2;11939:3;11880:67;:::i;:::-;11873:74;;11977:34;11973:1;11968:3;11964:11;11957:55;12043:26;12038:2;12033:3;12029:12;12022:48;12096:2;12091:3;12087:12;12080:19;;11863:242;;;:::o;12111:374::-;;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12371:34;12367:1;12362:3;12358:11;12351:55;12437:12;12432:2;12427:3;12423:12;12416:34;12476:2;12471:3;12467:12;12460:19;;12257:228;;;:::o;12491:373::-;;12654:67;12718:2;12713:3;12654:67;:::i;:::-;12647:74;;12751:34;12747:1;12742:3;12738:11;12731:55;12817:11;12812:2;12807:3;12803:12;12796:33;12855:2;12850:3;12846:12;12839:19;;12637:227;;;:::o;12870:327::-;;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13130:31;13126:1;13121:3;13117:11;13110:52;13188:2;13183:3;13179:12;13172:19;;13016:181;;;:::o;13203:330::-;;13366:67;13430:2;13425:3;13366:67;:::i;:::-;13359:74;;13463:34;13459:1;13454:3;13450:11;13443:55;13524:2;13519:3;13515:12;13508:19;;13349:184;;;:::o;13539:330::-;;13702:67;13766:2;13761:3;13702:67;:::i;:::-;13695:74;;13799:34;13795:1;13790:3;13786:11;13779:55;13860:2;13855:3;13851:12;13844:19;;13685:184;;;:::o;13875:305::-;;14038:66;14102:1;14097:3;14038:66;:::i;:::-;14031:73;;14134:10;14130:1;14125:3;14121:11;14114:31;14171:2;14166:3;14162:12;14155:19;;14021:159;;;:::o;14186:365::-;;14349:67;14413:2;14408:3;14349:67;:::i;:::-;14342:74;;14446:34;14442:1;14437:3;14433:11;14426:55;14512:3;14507:2;14502:3;14498:12;14491:25;14542:2;14537:3;14533:12;14526:19;;14332:219;;;:::o;14557:376::-;;14720:67;14784:2;14779:3;14720:67;:::i;:::-;14713:74;;14817:34;14813:1;14808:3;14804:11;14797:55;14883:14;14878:2;14873:3;14869:12;14862:36;14924:2;14919:3;14915:12;14908:19;;14703:230;;;:::o;14939:330::-;;15102:67;15166:2;15161:3;15102:67;:::i;:::-;15095:74;;15199:34;15195:1;15190:3;15186:11;15179:55;15260:2;15255:3;15251:12;15244:19;;15085:184;;;:::o;15275:373::-;;15438:67;15502:2;15497:3;15438:67;:::i;:::-;15431:74;;15535:34;15531:1;15526:3;15522:11;15515:55;15601:11;15596:2;15591:3;15587:12;15580:33;15639:2;15634:3;15630:12;15623:19;;15421:227;;;:::o;15654:379::-;;15817:67;15881:2;15876:3;15817:67;:::i;:::-;15810:74;;15914:34;15910:1;15905:3;15901:11;15894:55;15980:17;15975:2;15970:3;15966:12;15959:39;16024:2;16019:3;16015:12;16008:19;;15800:233;;;:::o;16039:365::-;;16202:67;16266:2;16261:3;16202:67;:::i;:::-;16195:74;;16299:34;16295:1;16290:3;16286:11;16279:55;16365:3;16360:2;16355:3;16351:12;16344:25;16395:2;16390:3;16386:12;16379:19;;16185:219;;;:::o;16410:381::-;;16573:67;16637:2;16632:3;16573:67;:::i;:::-;16566:74;;16670:34;16666:1;16661:3;16657:11;16650:55;16736:19;16731:2;16726:3;16722:12;16715:41;16782:2;16777:3;16773:12;16766:19;;16556:235;;;:::o;16797:376::-;;16960:67;17024:2;17019:3;16960:67;:::i;:::-;16953:74;;17057:34;17053:1;17048:3;17044:11;17037:55;17123:14;17118:2;17113:3;17109:12;17102:36;17164:2;17159:3;17155:12;17148:19;;16943:230;;;:::o;17179:330::-;;17342:67;17406:2;17401:3;17342:67;:::i;:::-;17335:74;;17439:34;17435:1;17430:3;17426:11;17419:55;17500:2;17495:3;17491:12;17484:19;;17325:184;;;:::o;17515:108::-;17592:24;17610:5;17592:24;:::i;:::-;17587:3;17580:37;17570:53;;:::o;17629:118::-;17716:24;17734:5;17716:24;:::i;:::-;17711:3;17704:37;17694:53;;:::o;17753:435::-;;17955:95;18046:3;18037:6;17955:95;:::i;:::-;17948:102;;18067:95;18158:3;18149:6;18067:95;:::i;:::-;18060:102;;18179:3;18172:10;;17937:251;;;;;:::o;18194:222::-;;18325:2;18314:9;18310:18;18302:26;;18338:71;18406:1;18395:9;18391:17;18382:6;18338:71;:::i;:::-;18292:124;;;;:::o;18422:640::-;;18655:3;18644:9;18640:19;18632:27;;18669:71;18737:1;18726:9;18722:17;18713:6;18669:71;:::i;:::-;18750:72;18818:2;18807:9;18803:18;18794:6;18750:72;:::i;:::-;18832;18900:2;18889:9;18885:18;18876:6;18832:72;:::i;:::-;18951:9;18945:4;18941:20;18936:2;18925:9;18921:18;18914:48;18979:76;19050:4;19041:6;18979:76;:::i;:::-;18971:84;;18622:440;;;;;;;:::o;19068:373::-;;19249:2;19238:9;19234:18;19226:26;;19298:9;19292:4;19288:20;19284:1;19273:9;19269:17;19262:47;19326:108;19429:4;19420:6;19326:108;:::i;:::-;19318:116;;19216:225;;;;:::o;19447:210::-;;19572:2;19561:9;19557:18;19549:26;;19585:65;19647:1;19636:9;19632:17;19623:6;19585:65;:::i;:::-;19539:118;;;;:::o;19663:313::-;;19814:2;19803:9;19799:18;19791:26;;19863:9;19857:4;19853:20;19849:1;19838:9;19834:17;19827:47;19891:78;19964:4;19955:6;19891:78;:::i;:::-;19883:86;;19781:195;;;;:::o;19982:419::-;;20186:2;20175:9;20171:18;20163:26;;20235:9;20229:4;20225:20;20221:1;20210:9;20206:17;20199:47;20263:131;20389:4;20263:131;:::i;:::-;20255:139;;20153:248;;;:::o;20407:419::-;;20611:2;20600:9;20596:18;20588:26;;20660:9;20654:4;20650:20;20646:1;20635:9;20631:17;20624:47;20688:131;20814:4;20688:131;:::i;:::-;20680:139;;20578:248;;;:::o;20832:419::-;;21036:2;21025:9;21021:18;21013:26;;21085:9;21079:4;21075:20;21071:1;21060:9;21056:17;21049:47;21113:131;21239:4;21113:131;:::i;:::-;21105:139;;21003:248;;;:::o;21257:419::-;;21461:2;21450:9;21446:18;21438:26;;21510:9;21504:4;21500:20;21496:1;21485:9;21481:17;21474:47;21538:131;21664:4;21538:131;:::i;:::-;21530:139;;21428:248;;;:::o;21682:419::-;;21886:2;21875:9;21871:18;21863:26;;21935:9;21929:4;21925:20;21921:1;21910:9;21906:17;21899:47;21963:131;22089:4;21963:131;:::i;:::-;21955:139;;21853:248;;;:::o;22107:419::-;;22311:2;22300:9;22296:18;22288:26;;22360:9;22354:4;22350:20;22346:1;22335:9;22331:17;22324:47;22388:131;22514:4;22388:131;:::i;:::-;22380:139;;22278:248;;;:::o;22532:419::-;;22736:2;22725:9;22721:18;22713:26;;22785:9;22779:4;22775:20;22771:1;22760:9;22756:17;22749:47;22813:131;22939:4;22813:131;:::i;:::-;22805:139;;22703:248;;;:::o;22957:419::-;;23161:2;23150:9;23146:18;23138:26;;23210:9;23204:4;23200:20;23196:1;23185:9;23181:17;23174:47;23238:131;23364:4;23238:131;:::i;:::-;23230:139;;23128:248;;;:::o;23382:419::-;;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23553:248;;;:::o;23807:419::-;;24011:2;24000:9;23996:18;23988:26;;24060:9;24054:4;24050:20;24046:1;24035:9;24031:17;24024:47;24088:131;24214:4;24088:131;:::i;:::-;24080:139;;23978:248;;;:::o;24232:419::-;;24436:2;24425:9;24421:18;24413:26;;24485:9;24479:4;24475:20;24471:1;24460:9;24456:17;24449:47;24513:131;24639:4;24513:131;:::i;:::-;24505:139;;24403:248;;;:::o;24657:419::-;;24861:2;24850:9;24846:18;24838:26;;24910:9;24904:4;24900:20;24896:1;24885:9;24881:17;24874:47;24938:131;25064:4;24938:131;:::i;:::-;24930:139;;24828:248;;;:::o;25082:419::-;;25286:2;25275:9;25271:18;25263:26;;25335:9;25329:4;25325:20;25321:1;25310:9;25306:17;25299:47;25363:131;25489:4;25363:131;:::i;:::-;25355:139;;25253:248;;;:::o;25507:419::-;;25711:2;25700:9;25696:18;25688:26;;25760:9;25754:4;25750:20;25746:1;25735:9;25731:17;25724:47;25788:131;25914:4;25788:131;:::i;:::-;25780:139;;25678:248;;;:::o;25932:419::-;;26136:2;26125:9;26121:18;26113:26;;26185:9;26179:4;26175:20;26171:1;26160:9;26156:17;26149:47;26213:131;26339:4;26213:131;:::i;:::-;26205:139;;26103:248;;;:::o;26357:419::-;;26561:2;26550:9;26546:18;26538:26;;26610:9;26604:4;26600:20;26596:1;26585:9;26581:17;26574:47;26638:131;26764:4;26638:131;:::i;:::-;26630:139;;26528:248;;;:::o;26782:419::-;;26986:2;26975:9;26971:18;26963:26;;27035:9;27029:4;27025:20;27021:1;27010:9;27006:17;26999:47;27063:131;27189:4;27063:131;:::i;:::-;27055:139;;26953:248;;;:::o;27207:419::-;;27411:2;27400:9;27396:18;27388:26;;27460:9;27454:4;27450:20;27446:1;27435:9;27431:17;27424:47;27488:131;27614:4;27488:131;:::i;:::-;27480:139;;27378:248;;;:::o;27632:419::-;;27836:2;27825:9;27821:18;27813:26;;27885:9;27879:4;27875:20;27871:1;27860:9;27856:17;27849:47;27913:131;28039:4;27913:131;:::i;:::-;27905:139;;27803:248;;;:::o;28057:419::-;;28261:2;28250:9;28246:18;28238:26;;28310:9;28304:4;28300:20;28296:1;28285:9;28281:17;28274:47;28338:131;28464:4;28338:131;:::i;:::-;28330:139;;28228:248;;;:::o;28482:419::-;;28686:2;28675:9;28671:18;28663:26;;28735:9;28729:4;28725:20;28721:1;28710:9;28706:17;28699:47;28763:131;28889:4;28763:131;:::i;:::-;28755:139;;28653:248;;;:::o;28907:419::-;;29111:2;29100:9;29096:18;29088:26;;29160:9;29154:4;29150:20;29146:1;29135:9;29131:17;29124:47;29188:131;29314:4;29188:131;:::i;:::-;29180:139;;29078:248;;;:::o;29332:419::-;;29536:2;29525:9;29521:18;29513:26;;29585:9;29579:4;29575:20;29571:1;29560:9;29556:17;29549:47;29613:131;29739:4;29613:131;:::i;:::-;29605:139;;29503:248;;;:::o;29757:419::-;;29961:2;29950:9;29946:18;29938:26;;30010:9;30004:4;30000:20;29996:1;29985:9;29981:17;29974:47;30038:131;30164:4;30038:131;:::i;:::-;30030:139;;29928:248;;;:::o;30182:419::-;;30386:2;30375:9;30371:18;30363:26;;30435:9;30429:4;30425:20;30421:1;30410:9;30406:17;30399:47;30463:131;30589:4;30463:131;:::i;:::-;30455:139;;30353:248;;;:::o;30607:222::-;;30738:2;30727:9;30723:18;30715:26;;30751:71;30819:1;30808:9;30804:17;30795:6;30751:71;:::i;:::-;30705:124;;;;:::o;30835:283::-;;30901:2;30895:9;30885:19;;30943:4;30935:6;30931:17;31050:6;31038:10;31035:22;31014:18;31002:10;30999:34;30996:62;30993:2;;;31061:18;;:::i;:::-;30993:2;31101:10;31097:2;31090:22;30875:243;;;;:::o;31124:331::-;;31275:18;31267:6;31264:30;31261:2;;;31297:18;;:::i;:::-;31261:2;31382:4;31378:9;31371:4;31363:6;31359:17;31355:33;31347:41;;31443:4;31437;31433:15;31425:23;;31190:265;;;:::o;31461:332::-;;31613:18;31605:6;31602:30;31599:2;;;31635:18;;:::i;:::-;31599:2;31720:4;31716:9;31709:4;31701:6;31697:17;31693:33;31685:41;;31781:4;31775;31771:15;31763:23;;31528:265;;;:::o;31799:132::-;;31889:3;31881:11;;31919:4;31914:3;31910:14;31902:22;;31871:60;;;:::o;31937:114::-;;32038:5;32032:12;32022:22;;32011:40;;;:::o;32057:98::-;;32142:5;32136:12;32126:22;;32115:40;;;:::o;32161:99::-;;32247:5;32241:12;32231:22;;32220:40;;;:::o;32266:113::-;;32368:4;32363:3;32359:14;32351:22;;32341:38;;;:::o;32385:184::-;;32518:6;32513:3;32506:19;32558:4;32553:3;32549:14;32534:29;;32496:73;;;;:::o;32575:168::-;;32692:6;32687:3;32680:19;32732:4;32727:3;32723:14;32708:29;;32670:73;;;;:::o;32749:169::-;;32867:6;32862:3;32855:19;32907:4;32902:3;32898:14;32883:29;;32845:73;;;;:::o;32924:148::-;;33063:3;33048:18;;33038:34;;;;:::o;33078:305::-;;33137:20;33155:1;33137:20;:::i;:::-;33132:25;;33171:20;33189:1;33171:20;:::i;:::-;33166:25;;33325:1;33257:66;33253:74;33250:1;33247:81;33244:2;;;33331:18;;:::i;:::-;33244:2;33375:1;33372;33368:9;33361:16;;33122:261;;;;:::o;33389:185::-;;33446:20;33464:1;33446:20;:::i;:::-;33441:25;;33480:20;33498:1;33480:20;:::i;:::-;33475:25;;33519:1;33509:2;;33524:18;;:::i;:::-;33509:2;33566:1;33563;33559:9;33554:14;;33431:143;;;;:::o;33580:348::-;;33643:20;33661:1;33643:20;:::i;:::-;33638:25;;33677:20;33695:1;33677:20;:::i;:::-;33672:25;;33865:1;33797:66;33793:74;33790:1;33787:81;33782:1;33775:9;33768:17;33764:105;33761:2;;;33872:18;;:::i;:::-;33761:2;33920:1;33917;33913:9;33902:20;;33628:300;;;;:::o;33934:191::-;;33994:20;34012:1;33994:20;:::i;:::-;33989:25;;34028:20;34046:1;34028:20;:::i;:::-;34023:25;;34067:1;34064;34061:8;34058:2;;;34072:18;;:::i;:::-;34058:2;34117:1;34114;34110:9;34102:17;;33979:146;;;;:::o;34131:96::-;;34197:24;34215:5;34197:24;:::i;:::-;34186:35;;34176:51;;;:::o;34233:90::-;;34310:5;34303:13;34296:21;34285:32;;34275:48;;;:::o;34329:149::-;;34405:66;34398:5;34394:78;34383:89;;34373:105;;;:::o;34484:126::-;;34561:42;34554:5;34550:54;34539:65;;34529:81;;;:::o;34616:77::-;;34682:5;34671:16;;34661:32;;;:::o;34699:154::-;34783:6;34778:3;34773;34760:30;34845:1;34836:6;34831:3;34827:16;34820:27;34750:103;;;:::o;34859:307::-;34927:1;34937:113;34951:6;34948:1;34945:13;34937:113;;;35036:1;35031:3;35027:11;35021:18;35017:1;35012:3;35008:11;35001:39;34973:2;34970:1;34966:10;34961:15;;34937:113;;;35068:6;35065:1;35062:13;35059:2;;;35148:1;35139:6;35134:3;35130:16;35123:27;35059:2;34908:258;;;;:::o;35172:320::-;;35253:1;35247:4;35243:12;35233:22;;35300:1;35294:4;35290:12;35321:18;35311:2;;35377:4;35369:6;35365:17;35355:27;;35311:2;35439;35431:6;35428:14;35408:18;35405:38;35402:2;;;35458:18;;:::i;:::-;35402:2;35223:269;;;;:::o;35498:233::-;;35560:24;35578:5;35560:24;:::i;:::-;35551:33;;35606:66;35599:5;35596:77;35593:2;;;35676:18;;:::i;:::-;35593:2;35723:1;35716:5;35712:13;35705:20;;35541:190;;;:::o;35737:176::-;;35786:20;35804:1;35786:20;:::i;:::-;35781:25;;35820:20;35838:1;35820:20;:::i;:::-;35815:25;;35859:1;35849:2;;35864:18;;:::i;:::-;35849:2;35905:1;35902;35898:9;35893:14;;35771:142;;;;:::o;35919:180::-;35967:77;35964:1;35957:88;36064:4;36061:1;36054:15;36088:4;36085:1;36078:15;36105:180;36153:77;36150:1;36143:88;36250:4;36247:1;36240:15;36274:4;36271:1;36264:15;36291:180;36339:77;36336:1;36329:88;36436:4;36433:1;36426:15;36460:4;36457:1;36450:15;36477:180;36525:77;36522:1;36515:88;36622:4;36619:1;36612:15;36646:4;36643:1;36636:15;36663:102;;36755:2;36751:7;36746:2;36739:5;36735:14;36731:28;36721:38;;36711:54;;;:::o;36771:122::-;36844:24;36862:5;36844:24;:::i;:::-;36837:5;36834:35;36824:2;;36883:1;36880;36873:12;36824:2;36814:79;:::o;36899:116::-;36969:21;36984:5;36969:21;:::i;:::-;36962:5;36959:32;36949:2;;37005:1;37002;36995:12;36949:2;36939:76;:::o;37021:120::-;37093:23;37110:5;37093:23;:::i;:::-;37086:5;37083:34;37073:2;;37131:1;37128;37121:12;37073:2;37063:78;:::o;37147:122::-;37220:24;37238:5;37220:24;:::i;:::-;37213:5;37210:35;37200:2;;37259:1;37256;37249:12;37200:2;37190:79;:::o
Swarm Source
ipfs://972908c896be3e4ba60191050191fd8248cb7fbc7ed60108649a2ff02a89e7ac
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,510.22 | 0.02 | $50.2 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.