Overview
TokenID
100100358
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CrypticMonsterMint
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-23 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; // 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 generally not needed starting with Solidity 0.8, since 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; } } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } abstract contract ReentrancyGuarded { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.BNBereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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); } /** * @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; } /** * @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); } /** * @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); } 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); } /** * @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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } contract Initializable { bool inited = false; modifier initializer() { require(!inited, "already inited"); _; inited = true; } } contract EIP712Base is Initializable { struct EIP712Domain { string name; string version; address verifyingContract; bytes32 salt; } string constant public ERC712_VERSION = "1"; bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256( bytes( "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)" ) ); bytes32 internal domainSeperator; // supposed to be called once while initializing. // one of the contracts that inherits this contract follows proxy pattern // so it is not possible to do this in a constructor function _initializeEIP712( string memory name ) internal initializer { _setDomainSeperator(name); } function _setDomainSeperator(string memory name) internal { domainSeperator = keccak256( abi.encode( EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(ERC712_VERSION)), address(this), bytes32(getChainId()) ) ); } function getDomainSeperator() public view returns (bytes32) { return domainSeperator; } function getChainId() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Accept message hash and returns hash message in EIP712 compatible form * So that it can be used to recover signer from signature signed using EIP712 formatted data * https://eips.ethereum.org/EIPS/eip-712 * "\\x19" makes the encoding deterministic * "\\x01" is the version byte to make it compatible to EIP-191 */ function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) { return keccak256( abi.encodePacked("\x19\x01", getDomainSeperator(), messageHash) ); } } contract NativeMetaTransaction is EIP712Base { using SafeMath for uint256; bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256( bytes( "MetaTransaction(uint256 nonce,address from,bytes functionSignature)" ) ); event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; /* * Meta transaction structure. * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas * He should call the desired function directly in that case. */ struct MetaTransaction { uint256 nonce; address from; bytes functionSignature; } function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { MetaTransaction memory metaTx = MetaTransaction({ nonce: nonces[userAddress], from: userAddress, functionSignature: functionSignature }); require( verify(userAddress, metaTx, sigR, sigS, sigV), "Signer and signature do not match" ); // increase nonce for user (to avoid re-use) nonces[userAddress] = nonces[userAddress].add(1); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); // Append userAddress and relayer address at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successful"); return returnData; } function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) { return keccak256( abi.encode( META_TRANSACTION_TYPEHASH, metaTx.nonce, metaTx.from, keccak256(metaTx.functionSignature) ) ); } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } function verify( address signer, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV ) internal view returns (bool) { require(signer != address(0), "NativeMetaTransaction: INVALID_SIGNER"); return signer == ecrecover( toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS ); } } contract OwnableDelegateProxy {} /** * Used to delegate ownership of a contract to another address, to save on unneeded transactions to approve contract use for users */ contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title ERC721Tradable * ERC721Tradable - ERC721 contract that whitelists a trading address, and has minting functionality. */ abstract contract ERC721Tradable is ERC721, ContextMixin, NativeMetaTransaction, Ownable { using SafeMath for uint256; address proxyRegistryAddress; uint256 mintedTokens; constructor( string memory _name, string memory _symbol, address _proxyRegistryAddress ) ERC721(_name, _symbol) { proxyRegistryAddress = _proxyRegistryAddress; // nextTokenId is initialized to 1, since starting at 0 leads to higher gas cost for the first minter mintedTokens = 0; _initializeEIP712(_name); } /** * Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token */ function mintTo(address _to,uint256 _id) internal { uint256 currentTokenId = _id; mintedTokens++; _safeMint(_to, currentTokenId); } /** @dev Returns the total tokens minted so far. 1 is always subtracted from the Counter since it tracks the next available tokenId. */ function totalSupply() public view returns (uint256) { return mintedTokens; } function baseTokenURI() virtual public pure returns (string memory); function tokenURI(uint256 _tokenId) override public pure returns (string memory) { return string(abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId),".json")); } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) override public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } /** * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea. */ function _msgSender() internal override view returns (address sender) { return ContextMixin.msgSender(); } } contract CrypticMonsterMint is ERC721Tradable, ReentrancyGuarded { uint256 public price; uint256 public whitelistPrice; address public paymentReceiver; address[] public whitelistedAddresses; mapping (address => bool) public whitelisted; mapping (address => uint256) public mintedFromWhitelistedAddress; event addressWhitelisted(address _addr); constructor(address _proxyRegistryAddress) ERC721Tradable("CrypticMonster", "CMONSTER", _proxyRegistryAddress) { price = 0.03 ether; whitelistPrice = 0.02 ether; paymentReceiver = msg.sender; } function baseTokenURI() public pure override returns (string memory) { return "https://crypticmonster.io/creations/metadata/"; } function setPrice(uint256 _p) public onlyOwner { price = _p; } function setWhitelistPrice(uint256 _p) public onlyOwner { whitelistPrice = _p; } function mintTokens(uint256 _n, address _to,uint256[] memory _tids) public payable nonReentrant { require(_n > 0 && (totalSupply()+_n) <= 10000 , "The number of tokens to be minted are exhausting our token collection"); require(_n < 21, "You can mint a maximum of 20 tokens at a time"); require(_n == _tids.length, "Number of tokens are not matched with provided token Ids"); if(isWhitelisted(_to)) { require((msg.value/_n) >= whitelistPrice, "Not enough ETH sent: check price."); require(mintedFromWhitelistedAddress[_to]+_n <= 20, "You can mint a maximum of 20 tokens as whitelisted Users"); mintedFromWhitelistedAddress[_to] += _n; } else require((msg.value/_n) >= price, "Not enough ETH sent: check price."); payable(paymentReceiver).transfer(msg.value); for(uint256 i=0 ;i < _n; i++) mintTo(_to,_tids[i]); } function whitelistWalletAddress(address _w) public onlyOwner{ whitelistedAddresses.push(_w); whitelisted[_w] = true; mintedFromWhitelistedAddress[_w] = 0; emit addressWhitelisted(_w); } function isWhitelisted(address _addr) public view returns(bool _success){ if(whitelisted[_addr]) return whitelisted[_addr]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"}],"name":"addressWhitelisted","type":"event"},{"inputs":[],"name":"ERC712_VERSION","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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDomainSeperator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tids","type":"uint256[]"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedFromWhitelistedAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentReceiver","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_p","type":"uint256"}],"name":"setWhitelistPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"whitelistPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_w","type":"address"}],"name":"whitelistWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600660006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200508d3803806200508d833981810160405281019062000052919062000595565b6040518060400160405280600e81526020017f437279707469634d6f6e737465720000000000000000000000000000000000008152506040518060400160405280600881526020017f434d4f4e535445520000000000000000000000000000000000000000000000008152508282828160009080519060200190620000d99291906200047b565b508060019080519060200190620000f29291906200047b565b5050506000620001076200026f60201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b8190555062000200836200028b60201b60201c565b5050506001600c81905550666a94d74f430000600d8190555066470de4df820000600e8190555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000737565b6000620002866200030d60201b62001d5f1760201c565b905090565b600660009054906101000a900460ff1615620002de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d59062000628565b60405180910390fd5b620002ef81620003bf60201b60201c565b6001600660006101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603620003b857600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050620003bc565b3390505b90565b6040518060800160405280604f81526020016200503e604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030620004366200046e60201b60201c565b60001b6040516020016200044f95949392919062000676565b6040516020818303038152906040528051906020012060078190555050565b6000804690508091505090565b828054620004899062000702565b90600052602060002090601f016020900481019282620004ad5760008555620004f9565b82601f10620004c857805160ff1916838001178555620004f9565b82800160010185558215620004f9579182015b82811115620004f8578251825591602001919060010190620004db565b5b5090506200050891906200050c565b5090565b5b80821115620005275760008160009055506001016200050d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200055d8262000530565b9050919050565b6200056f8162000550565b81146200057b57600080fd5b50565b6000815190506200058f8162000564565b92915050565b600060208284031215620005ae57620005ad6200052b565b5b6000620005be848285016200057e565b91505092915050565b600082825260208201905092915050565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b600062000610600e83620005c7565b91506200061d82620005d8565b602082019050919050565b60006020820190508181036000830152620006438162000601565b9050919050565b6000819050919050565b6200065f816200064a565b82525050565b620006708162000550565b82525050565b600060a0820190506200068d600083018862000654565b6200069c602083018762000654565b620006ab604083018662000654565b620006ba606083018562000665565b620006c9608083018462000654565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200071b57607f821691505b602082108103620007315762000730620006d3565b5b50919050565b6148f780620007476000396000f3fe6080604052600436106101f95760003560e01c8063717d57d31161010d578063c87b56dd116100a0578063dbceb35a1161006f578063dbceb35a14610774578063e660300b1461079d578063e985e9c5146107b9578063f2fde38b146107f6578063fc1a1c361461081f576101f9565b8063c87b56dd146106a4578063cb37f3b2146106e1578063d547cfb71461070c578063d936547e14610737576101f9565b8063a035b1fe116100dc578063a035b1fe146105ea578063a22cb46514610615578063b88d4fde1461063e578063ba4e5c4914610667576101f9565b8063717d57d3146105425780638da5cb5b1461056b57806391b7f5ed1461059657806395d89b41146105bf576101f9565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461044b5780636352211e1461047457806370337919146104b157806370a08231146104ee578063715018a61461052b576101f9565b806323b872dd1461037d5780632d0335ab146103a65780633408e470146103e35780633af32abf1461040e576101f9565b80630c53c51c116101cc5780630c53c51c146102cc5780630f7e5970146102fc57806318160ddd1461032757806320379ee514610352576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612cfa565b61084a565b6040516102329190612d42565b60405180910390f35b34801561024757600080fd5b5061025061092c565b60405161025d9190612df6565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612e4e565b6109be565b60405161029a9190612ebc565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f03565b610a43565b005b6102e660048036038101906102e191906130e7565b610b5a565b6040516102f391906131d3565b60405180910390f35b34801561030857600080fd5b50610311610dcc565b60405161031e9190612df6565b60405180910390f35b34801561033357600080fd5b5061033c610e05565b6040516103499190613204565b60405180910390f35b34801561035e57600080fd5b50610367610e0f565b604051610374919061322e565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613249565b610e19565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061329c565b610e79565b6040516103da9190613204565b60405180910390f35b3480156103ef57600080fd5b506103f8610ec2565b6040516104059190613204565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061329c565b610ecf565b6040516104429190612d42565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190613249565b610f7d565b005b34801561048057600080fd5b5061049b60048036038101906104969190612e4e565b610f9d565b6040516104a89190612ebc565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d3919061329c565b61104e565b6040516104e59190613204565b60405180910390f35b3480156104fa57600080fd5b506105156004803603810190610510919061329c565b611066565b6040516105229190613204565b60405180910390f35b34801561053757600080fd5b5061054061111d565b005b34801561054e57600080fd5b5061056960048036038101906105649190612e4e565b61125a565b005b34801561057757600080fd5b506105806112e0565b60405161058d9190612ebc565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190612e4e565b61130a565b005b3480156105cb57600080fd5b506105d4611390565b6040516105e19190612df6565b60405180910390f35b3480156105f657600080fd5b506105ff611422565b60405161060c9190613204565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906132f5565b611428565b005b34801561064a57600080fd5b5061066560048036038101906106609190613335565b61143e565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e4e565b6114a0565b60405161069b9190612ebc565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190612e4e565b6114df565b6040516106d89190612df6565b60405180910390f35b3480156106ed57600080fd5b506106f6611519565b6040516107039190612ebc565b60405180910390f35b34801561071857600080fd5b5061072161153f565b60405161072e9190612df6565b60405180910390f35b34801561074357600080fd5b5061075e6004803603810190610759919061329c565b61155f565b60405161076b9190612d42565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061329c565b61157f565b005b6107b760048036038101906107b29190613480565b611735565b005b3480156107c557600080fd5b506107e060048036038101906107db91906134ef565b611abc565b6040516107ed9190612d42565b60405180910390f35b34801561080257600080fd5b5061081d6004803603810190610818919061329c565b611bae565b005b34801561082b57600080fd5b50610834611d59565b6040516108419190613204565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610925575061092482611e0f565b5b9050919050565b60606000805461093b9061355e565b80601f01602080910402602001604051908101604052809291908181526020018280546109679061355e565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b5050505050905090565b60006109c982611e79565b610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613601565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4e82610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590613693565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610add611ee5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0c5750610b0b81610b06611ee5565b611abc565b5b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613725565b60405180910390fd5b610b558383611ef4565b505050565b606060006040518060600160405280600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610bdd8782878787611fad565b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c13906137b7565b60405180910390fd5b610c6f6001600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b590919063ffffffff16565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610ce5939291906137f8565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610d1a9291906138ba565b604051602081830303815290604052604051610d3691906138e2565b6000604051808303816000865af19150503d8060008114610d73576040519150601f19603f3d011682016040523d82523d6000602084013e610d78565b606091505b509150915081610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490613945565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600b54905090565b6000600754905090565b610e2a610e24611ee5565b826120cb565b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906139d7565b60405180910390fd5b610e748383836121a9565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000804690508091505090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f7757601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050610f78565b5b919050565b610f988383836040518060200160405280600081525061143e565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90613a69565b60405180910390fd5b80915050919050565b60126020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd90613afb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611125611ee5565b73ffffffffffffffffffffffffffffffffffffffff166111436112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611262611ee5565b73ffffffffffffffffffffffffffffffffffffffff166112806112e0565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613b67565b60405180910390fd5b80600e8190555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611312611ee5565b73ffffffffffffffffffffffffffffffffffffffff166113306112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90613b67565b60405180910390fd5b80600d8190555050565b60606001805461139f9061355e565b80601f01602080910402602001604051908101604052809291908181526020018280546113cb9061355e565b80156114185780601f106113ed57610100808354040283529160200191611418565b820191906000526020600020905b8154815290600101906020018083116113fb57829003601f168201915b5050505050905090565b600d5481565b61143a611433611ee5565b838361240f565b5050565b61144f611449611ee5565b836120cb565b61148e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611485906139d7565b60405180910390fd5b61149a8484848461257b565b50505050565b601081815481106114b057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606114e961153f565b6114f2836125d7565b604051602001611503929190613c0f565b6040516020818303038152906040529050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060600160405280602d8152602001614895602d9139905090565b60116020528060005260406000206000915054906101000a900460ff1681565b611587611ee5565b73ffffffffffffffffffffffffffffffffffffffff166115a56112e0565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613b67565b60405180910390fd5b6010819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fb1ad5dd77155fd179efed2d4b1ddf60bb5720e09da3cdf0724689eaddebedce98160405161172a9190612ebc565b60405180910390a150565b6002600c540361177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190613c8a565b60405180910390fd5b6002600c819055506000831180156117a6575061271083611799610e05565b6117a39190613cd9565b11155b6117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90613dc7565b60405180910390fd5b60158310611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613e59565b60405180910390fd5b8051831461186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186290613eeb565b60405180910390fd5b61187482610ecf565b156119b257600e5483346118889190613f3a565b10156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613fdd565b60405180910390fd5b601483601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119169190613cd9565b1115611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e9061406f565b60405180910390fd5b82601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119a69190613cd9565b92505081905550611a03565b600d5483346119c19190613f3a565b1015611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613fdd565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611a6b573d6000803e3d6000fd5b5060005b83811015611aae57611a9b83838381518110611a8e57611a8d61408f565b5b6020026020010151612737565b8080611aa6906140be565b915050611a6f565b506001600c81905550505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611b349190612ebc565b602060405180830381865afa158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b759190614144565b73ffffffffffffffffffffffffffffffffffffffff1603611b9a576001915050611ba8565b611ba48484612763565b9150505b92915050565b611bb6611ee5565b73ffffffffffffffffffffffffffffffffffffffff16611bd46112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906141e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611e0857600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611e0c565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611eef611d5f565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f6783610f9d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614275565b60405180910390fd5b600161203061202b876127f7565b61285f565b8386866040516000815260200160405260405161205094939291906142a4565b6020604051602081039080840390855afa158015612072573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b600081836120c39190613cd9565b905092915050565b60006120d682611e79565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061435b565b60405180910390fd5b600061212083610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061218f57508373ffffffffffffffffffffffffffffffffffffffff16612177846109be565b73ffffffffffffffffffffffffffffffffffffffff16145b806121a0575061219f8185611abc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121c982610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461221f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612216906143ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061447f565b60405180910390fd5b612299838383612898565b6122a4600082611ef4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f4919061449f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234b9190613cd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461240a83838361289d565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361247d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124749061451f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161256e9190612d42565b60405180910390a3505050565b6125868484846121a9565b612592848484846128a2565b6125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c8906145b1565b60405180910390fd5b50505050565b60606000820361261e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612732565b600082905060005b60008214612650578080612639906140be565b915050600a826126499190613f3a565b9150612626565b60008167ffffffffffffffff81111561266c5761266b612f4d565b5b6040519080825280601f01601f19166020018201604052801561269e5781602001600182028036833780820191505090505b5090505b6000851461272b576001826126b7919061449f565b9150600a856126c691906145d1565b60306126d29190613cd9565b60f81b8183815181106126e8576126e761408f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127249190613f3a565b94506126a2565b8093505050505b919050565b6000819050600b600081548092919061274f906140be565b919050555061275e8382612a29565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006040518060800160405280604381526020016148526043913980519060200120826000015183602001518460400151805190602001206040516020016128429493929190614602565b604051602081830303815290604052805190602001209050919050565b6000612869610e0f565b8260405160200161287b9291906146b4565b604051602081830303815290604052805190602001209050919050565b505050565b505050565b60006128c38473ffffffffffffffffffffffffffffffffffffffff16612a47565b15612a1c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ec611ee5565b8786866040518563ffffffff1660e01b815260040161290e94939291906146eb565b6020604051808303816000875af192505050801561294a57506040513d601f19601f82011682018060405250810190612947919061474c565b60015b6129cc573d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b5060008151036129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906145b1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a21565b600190505b949350505050565b612a43828260405180602001604052806000815250612a5a565b5050565b600080823b905060008111915050919050565b612a648383612ab5565b612a7160008484846128a2565b612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa7906145b1565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906147c5565b60405180910390fd5b612b2d81611e79565b15612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6490614831565b60405180910390fd5b612b7960008383612898565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bc99190613cd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8a6000838361289d565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cd781612ca2565b8114612ce257600080fd5b50565b600081359050612cf481612cce565b92915050565b600060208284031215612d1057612d0f612c98565b5b6000612d1e84828501612ce5565b91505092915050565b60008115159050919050565b612d3c81612d27565b82525050565b6000602082019050612d576000830184612d33565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d97578082015181840152602081019050612d7c565b83811115612da6576000848401525b50505050565b6000601f19601f8301169050919050565b6000612dc882612d5d565b612dd28185612d68565b9350612de2818560208601612d79565b612deb81612dac565b840191505092915050565b60006020820190508181036000830152612e108184612dbd565b905092915050565b6000819050919050565b612e2b81612e18565b8114612e3657600080fd5b50565b600081359050612e4881612e22565b92915050565b600060208284031215612e6457612e63612c98565b5b6000612e7284828501612e39565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ea682612e7b565b9050919050565b612eb681612e9b565b82525050565b6000602082019050612ed16000830184612ead565b92915050565b612ee081612e9b565b8114612eeb57600080fd5b50565b600081359050612efd81612ed7565b92915050565b60008060408385031215612f1a57612f19612c98565b5b6000612f2885828601612eee565b9250506020612f3985828601612e39565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f8582612dac565b810181811067ffffffffffffffff82111715612fa457612fa3612f4d565b5b80604052505050565b6000612fb7612c8e565b9050612fc38282612f7c565b919050565b600067ffffffffffffffff821115612fe357612fe2612f4d565b5b612fec82612dac565b9050602081019050919050565b82818337600083830152505050565b600061301b61301684612fc8565b612fad565b90508281526020810184848401111561303757613036612f48565b5b613042848285612ff9565b509392505050565b600082601f83011261305f5761305e612f43565b5b813561306f848260208601613008565b91505092915050565b6000819050919050565b61308b81613078565b811461309657600080fd5b50565b6000813590506130a881613082565b92915050565b600060ff82169050919050565b6130c4816130ae565b81146130cf57600080fd5b50565b6000813590506130e1816130bb565b92915050565b600080600080600060a0868803121561310357613102612c98565b5b600061311188828901612eee565b955050602086013567ffffffffffffffff81111561313257613131612c9d565b5b61313e8882890161304a565b945050604061314f88828901613099565b935050606061316088828901613099565b9250506080613171888289016130d2565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60006131a58261317e565b6131af8185613189565b93506131bf818560208601612d79565b6131c881612dac565b840191505092915050565b600060208201905081810360008301526131ed818461319a565b905092915050565b6131fe81612e18565b82525050565b600060208201905061321960008301846131f5565b92915050565b61322881613078565b82525050565b6000602082019050613243600083018461321f565b92915050565b60008060006060848603121561326257613261612c98565b5b600061327086828701612eee565b935050602061328186828701612eee565b925050604061329286828701612e39565b9150509250925092565b6000602082840312156132b2576132b1612c98565b5b60006132c084828501612eee565b91505092915050565b6132d281612d27565b81146132dd57600080fd5b50565b6000813590506132ef816132c9565b92915050565b6000806040838503121561330c5761330b612c98565b5b600061331a85828601612eee565b925050602061332b858286016132e0565b9150509250929050565b6000806000806080858703121561334f5761334e612c98565b5b600061335d87828801612eee565b945050602061336e87828801612eee565b935050604061337f87828801612e39565b925050606085013567ffffffffffffffff8111156133a05761339f612c9d565b5b6133ac8782880161304a565b91505092959194509250565b600067ffffffffffffffff8211156133d3576133d2612f4d565b5b602082029050602081019050919050565b600080fd5b60006133fc6133f7846133b8565b612fad565b9050808382526020820190506020840283018581111561341f5761341e6133e4565b5b835b8181101561344857806134348882612e39565b845260208401935050602081019050613421565b5050509392505050565b600082601f83011261346757613466612f43565b5b81356134778482602086016133e9565b91505092915050565b60008060006060848603121561349957613498612c98565b5b60006134a786828701612e39565b93505060206134b886828701612eee565b925050604084013567ffffffffffffffff8111156134d9576134d8612c9d565b5b6134e586828701613452565b9150509250925092565b6000806040838503121561350657613505612c98565b5b600061351485828601612eee565b925050602061352585828601612eee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061357657607f821691505b6020821081036135895761358861352f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135eb602c83612d68565b91506135f68261358f565b604082019050919050565b6000602082019050818103600083015261361a816135de565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061367d602183612d68565b915061368882613621565b604082019050919050565b600060208201905081810360008301526136ac81613670565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061370f603883612d68565b915061371a826136b3565b604082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006137a1602183612d68565b91506137ac82613745565b604082019050919050565b600060208201905081810360008301526137d081613794565b9050919050565b60006137e282612e7b565b9050919050565b6137f2816137d7565b82525050565b600060608201905061380d6000830186612ead565b61381a60208301856137e9565b818103604083015261382c818461319a565b9050949350505050565b600081905092915050565b600061384c8261317e565b6138568185613836565b9350613866818560208601612d79565b80840191505092915050565b60008160601b9050919050565b600061388a82613872565b9050919050565b600061389c8261387f565b9050919050565b6138b46138af82612e9b565b613891565b82525050565b60006138c68285613841565b91506138d282846138a3565b6014820191508190509392505050565b60006138ee8284613841565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b600061392f601c83612d68565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139c1603183612d68565b91506139cc82613965565b604082019050919050565b600060208201905081810360008301526139f0816139b4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a53602983612d68565b9150613a5e826139f7565b604082019050919050565b60006020820190508181036000830152613a8281613a46565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ae5602a83612d68565b9150613af082613a89565b604082019050919050565b60006020820190508181036000830152613b1481613ad8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b51602083612d68565b9150613b5c82613b1b565b602082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b600081905092915050565b6000613b9d82612d5d565b613ba78185613b87565b9350613bb7818560208601612d79565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613bf9600583613b87565b9150613c0482613bc3565b600582019050919050565b6000613c1b8285613b92565b9150613c278284613b92565b9150613c3282613bec565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613c74601f83612d68565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce482612e18565b9150613cef83612e18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2457613d23613caa565b5b828201905092915050565b7f546865206e756d626572206f6620746f6b656e7320746f206265206d696e746560008201527f64206172652065786861757374696e67206f757220746f6b656e20636f6c6c6560208201527f6374696f6e000000000000000000000000000000000000000000000000000000604082015250565b6000613db1604583612d68565b9150613dbc82613d2f565b606082019050919050565b60006020820190508181036000830152613de081613da4565b9050919050565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020746f6b60008201527f656e7320617420612074696d6500000000000000000000000000000000000000602082015250565b6000613e43602d83612d68565b9150613e4e82613de7565b604082019050919050565b60006020820190508181036000830152613e7281613e36565b9050919050565b7f4e756d626572206f6620746f6b656e7320617265206e6f74206d61746368656460008201527f20776974682070726f766964656420746f6b656e204964730000000000000000602082015250565b6000613ed5603883612d68565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f4582612e18565b9150613f5083612e18565b925082613f6057613f5f613f0b565b5b828204905092915050565b7f4e6f7420656e6f756768204554482073656e743a20636865636b20707269636560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc7602183612d68565b9150613fd282613f6b565b604082019050919050565b60006020820190508181036000830152613ff681613fba565b9050919050565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020746f6b60008201527f656e732061732077686974656c69737465642055736572730000000000000000602082015250565b6000614059603883612d68565b915061406482613ffd565b604082019050919050565b600060208201905081810360008301526140888161404c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006140c982612e18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140fb576140fa613caa565b5b600182019050919050565b600061411182612e9b565b9050919050565b61412181614106565b811461412c57600080fd5b50565b60008151905061413e81614118565b92915050565b60006020828403121561415a57614159612c98565b5b60006141688482850161412f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141cd602683612d68565b91506141d882614171565b604082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b600061425f602583612d68565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b61429e816130ae565b82525050565b60006080820190506142b9600083018761321f565b6142c66020830186614295565b6142d3604083018561321f565b6142e0606083018461321f565b95945050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614345602c83612d68565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006143d7602583612d68565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614469602483612d68565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b60006144aa82612e18565b91506144b583612e18565b9250828210156144c8576144c7613caa565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614509601983612d68565b9150614514826144d3565b602082019050919050565b60006020820190508181036000830152614538816144fc565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061459b603283612d68565b91506145a68261453f565b604082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b60006145dc82612e18565b91506145e783612e18565b9250826145f7576145f6613f0b565b5b828206905092915050565b6000608082019050614617600083018761321f565b61462460208301866131f5565b6146316040830185612ead565b61463e606083018461321f565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061467d600283613b87565b915061468882614647565b600282019050919050565b6000819050919050565b6146ae6146a982613078565b614693565b82525050565b60006146bf82614670565b91506146cb828561469d565b6020820191506146db828461469d565b6020820191508190509392505050565b60006080820190506147006000830187612ead565b61470d6020830186612ead565b61471a60408301856131f5565b818103606083015261472c818461319a565b905095945050505050565b60008151905061474681612cce565b92915050565b60006020828403121561476257614761612c98565b5b600061477084828501614737565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006147af602083612d68565b91506147ba82614779565b602082019050919050565b600060208201905081810360008301526147de816147a2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061481b601c83612d68565b9150614826826147e5565b602082019050919050565b6000602082019050818103600083015261484a8161480e565b905091905056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f637279707469636d6f6e737465722e696f2f6372656174696f6e732f6d657461646174612fa2646970667358221220176ec61e7f4ca34fb91483c361c33046f12b96d4f730b55ed2085bb032809e9864736f6c634300080d0033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c7429000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x6080604052600436106101f95760003560e01c8063717d57d31161010d578063c87b56dd116100a0578063dbceb35a1161006f578063dbceb35a14610774578063e660300b1461079d578063e985e9c5146107b9578063f2fde38b146107f6578063fc1a1c361461081f576101f9565b8063c87b56dd146106a4578063cb37f3b2146106e1578063d547cfb71461070c578063d936547e14610737576101f9565b8063a035b1fe116100dc578063a035b1fe146105ea578063a22cb46514610615578063b88d4fde1461063e578063ba4e5c4914610667576101f9565b8063717d57d3146105425780638da5cb5b1461056b57806391b7f5ed1461059657806395d89b41146105bf576101f9565b806323b872dd1161019057806342842e0e1161015f57806342842e0e1461044b5780636352211e1461047457806370337919146104b157806370a08231146104ee578063715018a61461052b576101f9565b806323b872dd1461037d5780632d0335ab146103a65780633408e470146103e35780633af32abf1461040e576101f9565b80630c53c51c116101cc5780630c53c51c146102cc5780630f7e5970146102fc57806318160ddd1461032757806320379ee514610352576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612cfa565b61084a565b6040516102329190612d42565b60405180910390f35b34801561024757600080fd5b5061025061092c565b60405161025d9190612df6565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612e4e565b6109be565b60405161029a9190612ebc565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612f03565b610a43565b005b6102e660048036038101906102e191906130e7565b610b5a565b6040516102f391906131d3565b60405180910390f35b34801561030857600080fd5b50610311610dcc565b60405161031e9190612df6565b60405180910390f35b34801561033357600080fd5b5061033c610e05565b6040516103499190613204565b60405180910390f35b34801561035e57600080fd5b50610367610e0f565b604051610374919061322e565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190613249565b610e19565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061329c565b610e79565b6040516103da9190613204565b60405180910390f35b3480156103ef57600080fd5b506103f8610ec2565b6040516104059190613204565b60405180910390f35b34801561041a57600080fd5b506104356004803603810190610430919061329c565b610ecf565b6040516104429190612d42565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190613249565b610f7d565b005b34801561048057600080fd5b5061049b60048036038101906104969190612e4e565b610f9d565b6040516104a89190612ebc565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d3919061329c565b61104e565b6040516104e59190613204565b60405180910390f35b3480156104fa57600080fd5b506105156004803603810190610510919061329c565b611066565b6040516105229190613204565b60405180910390f35b34801561053757600080fd5b5061054061111d565b005b34801561054e57600080fd5b5061056960048036038101906105649190612e4e565b61125a565b005b34801561057757600080fd5b506105806112e0565b60405161058d9190612ebc565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190612e4e565b61130a565b005b3480156105cb57600080fd5b506105d4611390565b6040516105e19190612df6565b60405180910390f35b3480156105f657600080fd5b506105ff611422565b60405161060c9190613204565b60405180910390f35b34801561062157600080fd5b5061063c600480360381019061063791906132f5565b611428565b005b34801561064a57600080fd5b5061066560048036038101906106609190613335565b61143e565b005b34801561067357600080fd5b5061068e60048036038101906106899190612e4e565b6114a0565b60405161069b9190612ebc565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190612e4e565b6114df565b6040516106d89190612df6565b60405180910390f35b3480156106ed57600080fd5b506106f6611519565b6040516107039190612ebc565b60405180910390f35b34801561071857600080fd5b5061072161153f565b60405161072e9190612df6565b60405180910390f35b34801561074357600080fd5b5061075e6004803603810190610759919061329c565b61155f565b60405161076b9190612d42565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061329c565b61157f565b005b6107b760048036038101906107b29190613480565b611735565b005b3480156107c557600080fd5b506107e060048036038101906107db91906134ef565b611abc565b6040516107ed9190612d42565b60405180910390f35b34801561080257600080fd5b5061081d6004803603810190610818919061329c565b611bae565b005b34801561082b57600080fd5b50610834611d59565b6040516108419190613204565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610925575061092482611e0f565b5b9050919050565b60606000805461093b9061355e565b80601f01602080910402602001604051908101604052809291908181526020018280546109679061355e565b80156109b45780601f10610989576101008083540402835291602001916109b4565b820191906000526020600020905b81548152906001019060200180831161099757829003601f168201915b5050505050905090565b60006109c982611e79565b610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ff90613601565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4e82610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590613693565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610add611ee5565b73ffffffffffffffffffffffffffffffffffffffff161480610b0c5750610b0b81610b06611ee5565b611abc565b5b610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613725565b60405180910390fd5b610b558383611ef4565b505050565b606060006040518060600160405280600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610bdd8782878787611fad565b610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c13906137b7565b60405180910390fd5b610c6f6001600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120b590919063ffffffff16565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610ce5939291906137f8565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610d1a9291906138ba565b604051602081830303815290604052604051610d3691906138e2565b6000604051808303816000865af19150503d8060008114610d73576040519150601f19603f3d011682016040523d82523d6000602084013e610d78565b606091505b509150915081610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490613945565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b6000600b54905090565b6000600754905090565b610e2a610e24611ee5565b826120cb565b610e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e60906139d7565b60405180910390fd5b610e748383836121a9565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000804690508091505090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f7757601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050610f78565b5b919050565b610f988383836040518060200160405280600081525061143e565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90613a69565b60405180910390fd5b80915050919050565b60126020528060005260406000206000915090505481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd90613afb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611125611ee5565b73ffffffffffffffffffffffffffffffffffffffff166111436112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119090613b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611262611ee5565b73ffffffffffffffffffffffffffffffffffffffff166112806112e0565b73ffffffffffffffffffffffffffffffffffffffff16146112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90613b67565b60405180910390fd5b80600e8190555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611312611ee5565b73ffffffffffffffffffffffffffffffffffffffff166113306112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d90613b67565b60405180910390fd5b80600d8190555050565b60606001805461139f9061355e565b80601f01602080910402602001604051908101604052809291908181526020018280546113cb9061355e565b80156114185780601f106113ed57610100808354040283529160200191611418565b820191906000526020600020905b8154815290600101906020018083116113fb57829003601f168201915b5050505050905090565b600d5481565b61143a611433611ee5565b838361240f565b5050565b61144f611449611ee5565b836120cb565b61148e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611485906139d7565b60405180910390fd5b61149a8484848461257b565b50505050565b601081815481106114b057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606114e961153f565b6114f2836125d7565b604051602001611503929190613c0f565b6040516020818303038152906040529050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060600160405280602d8152602001614895602d9139905090565b60116020528060005260406000206000915054906101000a900460ff1681565b611587611ee5565b73ffffffffffffffffffffffffffffffffffffffff166115a56112e0565b73ffffffffffffffffffffffffffffffffffffffff16146115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290613b67565b60405180910390fd5b6010819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fb1ad5dd77155fd179efed2d4b1ddf60bb5720e09da3cdf0724689eaddebedce98160405161172a9190612ebc565b60405180910390a150565b6002600c540361177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190613c8a565b60405180910390fd5b6002600c819055506000831180156117a6575061271083611799610e05565b6117a39190613cd9565b11155b6117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90613dc7565b60405180910390fd5b60158310611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613e59565b60405180910390fd5b8051831461186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186290613eeb565b60405180910390fd5b61187482610ecf565b156119b257600e5483346118889190613f3a565b10156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c090613fdd565b60405180910390fd5b601483601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119169190613cd9565b1115611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e9061406f565b60405180910390fd5b82601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119a69190613cd9565b92505081905550611a03565b600d5483346119c19190613f3a565b1015611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f990613fdd565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611a6b573d6000803e3d6000fd5b5060005b83811015611aae57611a9b83838381518110611a8e57611a8d61408f565b5b6020026020010151612737565b8080611aa6906140be565b915050611a6f565b506001600c81905550505050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611b349190612ebc565b602060405180830381865afa158015611b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b759190614144565b73ffffffffffffffffffffffffffffffffffffffff1603611b9a576001915050611ba8565b611ba48484612763565b9150505b92915050565b611bb6611ee5565b73ffffffffffffffffffffffffffffffffffffffff16611bd46112e0565b73ffffffffffffffffffffffffffffffffffffffff1614611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190613b67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c90906141e3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603611e0857600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611e0c565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611eef611d5f565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f6783610f9d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490614275565b60405180910390fd5b600161203061202b876127f7565b61285f565b8386866040516000815260200160405260405161205094939291906142a4565b6020604051602081039080840390855afa158015612072573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b600081836120c39190613cd9565b905092915050565b60006120d682611e79565b612115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210c9061435b565b60405180910390fd5b600061212083610f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061218f57508373ffffffffffffffffffffffffffffffffffffffff16612177846109be565b73ffffffffffffffffffffffffffffffffffffffff16145b806121a0575061219f8185611abc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121c982610f9d565b73ffffffffffffffffffffffffffffffffffffffff161461221f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612216906143ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061447f565b60405180910390fd5b612299838383612898565b6122a4600082611ef4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f4919061449f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461234b9190613cd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461240a83838361289d565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361247d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124749061451f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161256e9190612d42565b60405180910390a3505050565b6125868484846121a9565b612592848484846128a2565b6125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c8906145b1565b60405180910390fd5b50505050565b60606000820361261e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612732565b600082905060005b60008214612650578080612639906140be565b915050600a826126499190613f3a565b9150612626565b60008167ffffffffffffffff81111561266c5761266b612f4d565b5b6040519080825280601f01601f19166020018201604052801561269e5781602001600182028036833780820191505090505b5090505b6000851461272b576001826126b7919061449f565b9150600a856126c691906145d1565b60306126d29190613cd9565b60f81b8183815181106126e8576126e761408f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127249190613f3a565b94506126a2565b8093505050505b919050565b6000819050600b600081548092919061274f906140be565b919050555061275e8382612a29565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60006040518060800160405280604381526020016148526043913980519060200120826000015183602001518460400151805190602001206040516020016128429493929190614602565b604051602081830303815290604052805190602001209050919050565b6000612869610e0f565b8260405160200161287b9291906146b4565b604051602081830303815290604052805190602001209050919050565b505050565b505050565b60006128c38473ffffffffffffffffffffffffffffffffffffffff16612a47565b15612a1c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128ec611ee5565b8786866040518563ffffffff1660e01b815260040161290e94939291906146eb565b6020604051808303816000875af192505050801561294a57506040513d601f19601f82011682018060405250810190612947919061474c565b60015b6129cc573d806000811461297a576040519150601f19603f3d011682016040523d82523d6000602084013e61297f565b606091505b5060008151036129c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bb906145b1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a21565b600190505b949350505050565b612a43828260405180602001604052806000815250612a5a565b5050565b600080823b905060008111915050919050565b612a648383612ab5565b612a7160008484846128a2565b612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa7906145b1565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1b906147c5565b60405180910390fd5b612b2d81611e79565b15612b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6490614831565b60405180910390fd5b612b7960008383612898565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bc99190613cd9565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c8a6000838361289d565b5050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cd781612ca2565b8114612ce257600080fd5b50565b600081359050612cf481612cce565b92915050565b600060208284031215612d1057612d0f612c98565b5b6000612d1e84828501612ce5565b91505092915050565b60008115159050919050565b612d3c81612d27565b82525050565b6000602082019050612d576000830184612d33565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d97578082015181840152602081019050612d7c565b83811115612da6576000848401525b50505050565b6000601f19601f8301169050919050565b6000612dc882612d5d565b612dd28185612d68565b9350612de2818560208601612d79565b612deb81612dac565b840191505092915050565b60006020820190508181036000830152612e108184612dbd565b905092915050565b6000819050919050565b612e2b81612e18565b8114612e3657600080fd5b50565b600081359050612e4881612e22565b92915050565b600060208284031215612e6457612e63612c98565b5b6000612e7284828501612e39565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ea682612e7b565b9050919050565b612eb681612e9b565b82525050565b6000602082019050612ed16000830184612ead565b92915050565b612ee081612e9b565b8114612eeb57600080fd5b50565b600081359050612efd81612ed7565b92915050565b60008060408385031215612f1a57612f19612c98565b5b6000612f2885828601612eee565b9250506020612f3985828601612e39565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f8582612dac565b810181811067ffffffffffffffff82111715612fa457612fa3612f4d565b5b80604052505050565b6000612fb7612c8e565b9050612fc38282612f7c565b919050565b600067ffffffffffffffff821115612fe357612fe2612f4d565b5b612fec82612dac565b9050602081019050919050565b82818337600083830152505050565b600061301b61301684612fc8565b612fad565b90508281526020810184848401111561303757613036612f48565b5b613042848285612ff9565b509392505050565b600082601f83011261305f5761305e612f43565b5b813561306f848260208601613008565b91505092915050565b6000819050919050565b61308b81613078565b811461309657600080fd5b50565b6000813590506130a881613082565b92915050565b600060ff82169050919050565b6130c4816130ae565b81146130cf57600080fd5b50565b6000813590506130e1816130bb565b92915050565b600080600080600060a0868803121561310357613102612c98565b5b600061311188828901612eee565b955050602086013567ffffffffffffffff81111561313257613131612c9d565b5b61313e8882890161304a565b945050604061314f88828901613099565b935050606061316088828901613099565b9250506080613171888289016130d2565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60006131a58261317e565b6131af8185613189565b93506131bf818560208601612d79565b6131c881612dac565b840191505092915050565b600060208201905081810360008301526131ed818461319a565b905092915050565b6131fe81612e18565b82525050565b600060208201905061321960008301846131f5565b92915050565b61322881613078565b82525050565b6000602082019050613243600083018461321f565b92915050565b60008060006060848603121561326257613261612c98565b5b600061327086828701612eee565b935050602061328186828701612eee565b925050604061329286828701612e39565b9150509250925092565b6000602082840312156132b2576132b1612c98565b5b60006132c084828501612eee565b91505092915050565b6132d281612d27565b81146132dd57600080fd5b50565b6000813590506132ef816132c9565b92915050565b6000806040838503121561330c5761330b612c98565b5b600061331a85828601612eee565b925050602061332b858286016132e0565b9150509250929050565b6000806000806080858703121561334f5761334e612c98565b5b600061335d87828801612eee565b945050602061336e87828801612eee565b935050604061337f87828801612e39565b925050606085013567ffffffffffffffff8111156133a05761339f612c9d565b5b6133ac8782880161304a565b91505092959194509250565b600067ffffffffffffffff8211156133d3576133d2612f4d565b5b602082029050602081019050919050565b600080fd5b60006133fc6133f7846133b8565b612fad565b9050808382526020820190506020840283018581111561341f5761341e6133e4565b5b835b8181101561344857806134348882612e39565b845260208401935050602081019050613421565b5050509392505050565b600082601f83011261346757613466612f43565b5b81356134778482602086016133e9565b91505092915050565b60008060006060848603121561349957613498612c98565b5b60006134a786828701612e39565b93505060206134b886828701612eee565b925050604084013567ffffffffffffffff8111156134d9576134d8612c9d565b5b6134e586828701613452565b9150509250925092565b6000806040838503121561350657613505612c98565b5b600061351485828601612eee565b925050602061352585828601612eee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061357657607f821691505b6020821081036135895761358861352f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006135eb602c83612d68565b91506135f68261358f565b604082019050919050565b6000602082019050818103600083015261361a816135de565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061367d602183612d68565b915061368882613621565b604082019050919050565b600060208201905081810360008301526136ac81613670565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061370f603883612d68565b915061371a826136b3565b604082019050919050565b6000602082019050818103600083015261373e81613702565b9050919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006137a1602183612d68565b91506137ac82613745565b604082019050919050565b600060208201905081810360008301526137d081613794565b9050919050565b60006137e282612e7b565b9050919050565b6137f2816137d7565b82525050565b600060608201905061380d6000830186612ead565b61381a60208301856137e9565b818103604083015261382c818461319a565b9050949350505050565b600081905092915050565b600061384c8261317e565b6138568185613836565b9350613866818560208601612d79565b80840191505092915050565b60008160601b9050919050565b600061388a82613872565b9050919050565b600061389c8261387f565b9050919050565b6138b46138af82612e9b565b613891565b82525050565b60006138c68285613841565b91506138d282846138a3565b6014820191508190509392505050565b60006138ee8284613841565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b600061392f601c83612d68565b915061393a826138f9565b602082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006139c1603183612d68565b91506139cc82613965565b604082019050919050565b600060208201905081810360008301526139f0816139b4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613a53602983612d68565b9150613a5e826139f7565b604082019050919050565b60006020820190508181036000830152613a8281613a46565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ae5602a83612d68565b9150613af082613a89565b604082019050919050565b60006020820190508181036000830152613b1481613ad8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b51602083612d68565b9150613b5c82613b1b565b602082019050919050565b60006020820190508181036000830152613b8081613b44565b9050919050565b600081905092915050565b6000613b9d82612d5d565b613ba78185613b87565b9350613bb7818560208601612d79565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613bf9600583613b87565b9150613c0482613bc3565b600582019050919050565b6000613c1b8285613b92565b9150613c278284613b92565b9150613c3282613bec565b91508190509392505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613c74601f83612d68565b9150613c7f82613c3e565b602082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ce482612e18565b9150613cef83612e18565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2457613d23613caa565b5b828201905092915050565b7f546865206e756d626572206f6620746f6b656e7320746f206265206d696e746560008201527f64206172652065786861757374696e67206f757220746f6b656e20636f6c6c6560208201527f6374696f6e000000000000000000000000000000000000000000000000000000604082015250565b6000613db1604583612d68565b9150613dbc82613d2f565b606082019050919050565b60006020820190508181036000830152613de081613da4565b9050919050565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020746f6b60008201527f656e7320617420612074696d6500000000000000000000000000000000000000602082015250565b6000613e43602d83612d68565b9150613e4e82613de7565b604082019050919050565b60006020820190508181036000830152613e7281613e36565b9050919050565b7f4e756d626572206f6620746f6b656e7320617265206e6f74206d61746368656460008201527f20776974682070726f766964656420746f6b656e204964730000000000000000602082015250565b6000613ed5603883612d68565b9150613ee082613e79565b604082019050919050565b60006020820190508181036000830152613f0481613ec8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f4582612e18565b9150613f5083612e18565b925082613f6057613f5f613f0b565b5b828204905092915050565b7f4e6f7420656e6f756768204554482073656e743a20636865636b20707269636560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc7602183612d68565b9150613fd282613f6b565b604082019050919050565b60006020820190508181036000830152613ff681613fba565b9050919050565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020746f6b60008201527f656e732061732077686974656c69737465642055736572730000000000000000602082015250565b6000614059603883612d68565b915061406482613ffd565b604082019050919050565b600060208201905081810360008301526140888161404c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006140c982612e18565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140fb576140fa613caa565b5b600182019050919050565b600061411182612e9b565b9050919050565b61412181614106565b811461412c57600080fd5b50565b60008151905061413e81614118565b92915050565b60006020828403121561415a57614159612c98565b5b60006141688482850161412f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141cd602683612d68565b91506141d882614171565b604082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b600061425f602583612d68565b915061426a82614203565b604082019050919050565b6000602082019050818103600083015261428e81614252565b9050919050565b61429e816130ae565b82525050565b60006080820190506142b9600083018761321f565b6142c66020830186614295565b6142d3604083018561321f565b6142e0606083018461321f565b95945050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614345602c83612d68565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006143d7602583612d68565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614469602483612d68565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b60006144aa82612e18565b91506144b583612e18565b9250828210156144c8576144c7613caa565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614509601983612d68565b9150614514826144d3565b602082019050919050565b60006020820190508181036000830152614538816144fc565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061459b603283612d68565b91506145a68261453f565b604082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b60006145dc82612e18565b91506145e783612e18565b9250826145f7576145f6613f0b565b5b828206905092915050565b6000608082019050614617600083018761321f565b61462460208301866131f5565b6146316040830185612ead565b61463e606083018461321f565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061467d600283613b87565b915061468882614647565b600282019050919050565b6000819050919050565b6146ae6146a982613078565b614693565b82525050565b60006146bf82614670565b91506146cb828561469d565b6020820191506146db828461469d565b6020820191508190509392505050565b60006080820190506147006000830187612ead565b61470d6020830186612ead565b61471a60408301856131f5565b818103606083015261472c818461319a565b905095945050505050565b60008151905061474681612cce565b92915050565b60006020828403121561476257614761612c98565b5b600061477084828501614737565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006147af602083612d68565b91506147ba82614779565b602082019050919050565b600060208201905081810360008301526147de816147a2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061481b601c83612d68565b9150614826826147e5565b602082019050919050565b6000602082019050818103600083015261484a8161480e565b905091905056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e61747572652968747470733a2f2f637279707469636d6f6e737465722e696f2f6372656174696f6e732f6d657461646174612fa2646970667358221220176ec61e7f4ca34fb91483c361c33046f12b96d4f730b55ed2085bb032809e9864736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode Sourcemap
53205:2215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31410:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32355:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33914:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33437:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48309:1151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45576:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51958:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46585:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34664:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49886:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46694:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55271:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35074:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32049:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53469:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31779:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17422:148;;;;;;;;;;;;;:::i;:::-;;54020:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16771:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53940:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32524:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53279:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34207:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35330:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53376:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52133:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53340:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53802:136;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53419:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55043:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54119:920;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52448:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17725:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53305:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31410:305;31512:4;31564:25;31549:40;;;:11;:40;;;;:105;;;;31621:33;31606:48;;;:11;:48;;;;31549:105;:158;;;;31671:36;31695:11;31671:23;:36::i;:::-;31549:158;31529:178;;31410:305;;;:::o;32355:100::-;32409:13;32442:5;32435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32355:100;:::o;33914:221::-;33990:7;34018:16;34026:7;34018;:16::i;:::-;34010:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34103:15;:24;34119:7;34103:24;;;;;;;;;;;;;;;;;;;;;34096:31;;33914:221;;;:::o;33437:411::-;33518:13;33534:23;33549:7;33534:14;:23::i;:::-;33518:39;;33582:5;33576:11;;:2;:11;;;33568:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33676:5;33660:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33685:37;33702:5;33709:12;:10;:12::i;:::-;33685:16;:37::i;:::-;33660:62;33638:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33819:21;33828:2;33832:7;33819:8;:21::i;:::-;33507:341;33437:411;;:::o;48309:1151::-;48510:12;48535:29;48567:152;;;;;;;;48605:6;:19;48612:11;48605:19;;;;;;;;;;;;;;;;48567:152;;;;48645:11;48567:152;;;;;;48690:17;48567:152;;;48535:184;;48754:45;48761:11;48774:6;48782:4;48788;48794;48754:6;:45::i;:::-;48732:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;48949:26;48973:1;48949:6;:19;48956:11;48949:19;;;;;;;;;;;;;;;;:23;;:26;;;;:::i;:::-;48927:6;:19;48934:11;48927:19;;;;;;;;;;;;;;;:48;;;;48993:126;49031:11;49065:10;49091:17;48993:126;;;;;;;;:::i;:::-;;;;;;;;49230:12;49244:23;49279:4;49271:18;;49321:17;49340:11;49304:48;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49271:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49229:134;;;;49382:7;49374:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;49442:10;49435:17;;;;;48309:1151;;;;;;;:::o;45576:43::-;;;;;;;;;;;;;;;;;;;:::o;51958:91::-;52002:7;52029:12;;52022:19;;51958:91;:::o;46585:101::-;46636:7;46663:15;;46656:22;;46585:101;:::o;34664:339::-;34859:41;34878:12;:10;:12::i;:::-;34892:7;34859:18;:41::i;:::-;34851:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34967:28;34977:4;34983:2;34987:7;34967:9;:28::i;:::-;34664:339;;;:::o;49886:107::-;49939:13;49973:6;:12;49980:4;49973:12;;;;;;;;;;;;;;;;49965:20;;49886:107;;;:::o;46694:161::-;46737:7;46757:10;46808:9;46802:15;;46845:2;46838:9;;;46694:161;:::o;55271:146::-;55329:13;55356:11;:18;55368:5;55356:18;;;;;;;;;;;;;;;;;;;;;;;;;55353:57;;;55392:11;:18;55404:5;55392:18;;;;;;;;;;;;;;;;;;;;;;;;;55385:25;;;;55353:57;55271:146;;;;:::o;35074:185::-;35212:39;35229:4;35235:2;35239:7;35212:39;;;;;;;;;;;;:16;:39::i;:::-;35074:185;;;:::o;32049:239::-;32121:7;32141:13;32157:7;:16;32165:7;32157:16;;;;;;;;;;;;;;;;;;;;;32141:32;;32209:1;32192:19;;:5;:19;;;32184:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:5;32268:12;;;32049:239;;;:::o;53469:64::-;;;;;;;;;;;;;;;;;:::o;31779:208::-;31851:7;31896:1;31879:19;;:5;:19;;;31871:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:9;:16;31973:5;31963:16;;;;;;;;;;;;;;;;31956:23;;31779:208;;;:::o;17422:148::-;17002:12;:10;:12::i;:::-;16991:23;;:7;:5;:7::i;:::-;:23;;;16983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17529:1:::1;17492:40;;17513:6;;;;;;;;;;;17492:40;;;;;;;;;;;;17560:1;17543:6;;:19;;;;;;;;;;;;;;;;;;17422:148::o:0;54020:93::-;17002:12;:10;:12::i;:::-;16991:23;;:7;:5;:7::i;:::-;:23;;;16983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54105:2:::1;54088:14;:19;;;;54020:93:::0;:::o;16771:87::-;16817:7;16844:6;;;;;;;;;;;16837:13;;16771:87;:::o;53940:76::-;17002:12;:10;:12::i;:::-;16991:23;;:7;:5;:7::i;:::-;:23;;;16983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54008:2:::1;54000:5;:10;;;;53940:76:::0;:::o;32524:104::-;32580:13;32613:7;32606:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32524:104;:::o;53279:20::-;;;;:::o;34207:155::-;34302:52;34321:12;:10;:12::i;:::-;34335:8;34345;34302:18;:52::i;:::-;34207:155;;:::o;35330:328::-;35505:41;35524:12;:10;:12::i;:::-;35538:7;35505:18;:41::i;:::-;35497:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35611:39;35625:4;35631:2;35635:7;35644:5;35611:13;:39::i;:::-;35330:328;;;;:::o;53376:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;52133:183::-;52199:13;52256:14;:12;:14::i;:::-;52272:26;52289:8;52272:16;:26::i;:::-;52239:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52225:83;;52133:183;;;:::o;53340:30::-;;;;;;;;;;;;;:::o;53802:136::-;53856:13;53878:54;;;;;;;;;;;;;;;;;;;53802:136;:::o;53419:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;55043:223::-;17002:12;:10;:12::i;:::-;16991:23;;:7;:5;:7::i;:::-;:23;;;16983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55119:20:::1;55145:2;55119:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55175:4;55157:11;:15;55169:2;55157:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;55223:1;55188:28;:32;55217:2;55188:32;;;;;;;;;;;;;;;:36;;;;55238:22;55257:2;55238:22;;;;;;:::i;:::-;;;;;;;;55043:223:::0;:::o;54119:920::-;20839:1;21436:7;;:19;21428:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20839:1;21569:7;:18;;;;54240:1:::1;54235:2;:6;:37;;;;;54267:5;54260:2;54246:13;:11;:13::i;:::-;:16;;;;:::i;:::-;54245:27;;54235:37;54227:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;54369:2;54364;:7;54356:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;54444:5;:12;54438:2;:18;54430:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;54529:18;54543:3;54529:13;:18::i;:::-;54526:384;;;54591:14;;54584:2;54574:9;:12;;;;:::i;:::-;54573:32;;54565:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;54700:2;54694;54660:28;:33;54689:3;54660:33;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:42;;54652:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;54809:2;54772:28;:33;54801:3;54772:33;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;54526:384;;;54867:5;;54860:2;54850:9;:12;;;;:::i;:::-;54849:23;;54841:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54526:384;54929:15;;;;;;;;;;;54921:33;;:44;54955:9;54921:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54979:9;54975:58;54996:2;54992:1;:6;54975:58;;;55013:20;55020:3;55024:5;55030:1;55024:8;;;;;;;;:::i;:::-;;;;;;;;55013:6;:20::i;:::-;55000:3;;;;;:::i;:::-;;;;54975:58;;;;20795:1:::0;21748:7;:22;;;;54119:920;;;:::o;52448:445::-;52573:4;52658:27;52702:20;;;;;;;;;;;52658:65;;52779:8;52738:49;;52746:13;:21;;;52768:5;52746:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52738:49;;;52734:93;;52811:4;52804:11;;;;;52734:93;52846:39;52869:5;52876:8;52846:22;:39::i;:::-;52839:46;;;52448:445;;;;;:::o;17725:244::-;17002:12;:10;:12::i;:::-;16991:23;;:7;:5;:7::i;:::-;:23;;;16983:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17834:1:::1;17814:22;;:8;:22;;::::0;17806:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17924:8;17895:38;;17916:6;;;;;;;;;;;17895:38;;;;;;;;;;;;17953:8;17944:6;;:17;;;;;;;;;;;;;;;;;;17725:244:::0;:::o;53305:29::-;;;;:::o;44560:650::-;44631:22;44697:4;44675:27;;:10;:27;;;44671:508;;44719:18;44740:8;;44719:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44763:13;44779:8;;:15;;44763:31;;45031:42;45001:5;44994;44990:17;44984:24;44958:134;44948:144;;44818:289;;44671:508;;;45156:10;45139:28;;44671:508;44560:650;:::o;30021:157::-;30106:4;30145:25;30130:40;;;:11;:40;;;;30123:47;;30021:157;;;:::o;37168:127::-;37233:4;37285:1;37257:30;;:7;:16;37265:7;37257:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37250:37;;37168:127;;;:::o;53037:161::-;53127:14;53166:24;:22;:24::i;:::-;53159:31;;53037:161;:::o;41314:174::-;41416:2;41389:15;:24;41405:7;41389:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41472:7;41468:2;41434:46;;41443:23;41458:7;41443:14;:23::i;:::-;41434:46;;;;;;;;;;;;41314:174;;:::o;50001:486::-;50179:4;50222:1;50204:20;;:6;:20;;;50196:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50320:159;50348:47;50367:27;50387:6;50367:19;:27::i;:::-;50348:18;:47::i;:::-;50414:4;50437;50460;50320:159;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50297:182;;:6;:182;;;50277:202;;50001:486;;;;;;;:::o;2773:98::-;2831:7;2862:1;2858;:5;;;;:::i;:::-;2851:12;;2773:98;;;;:::o;37462:348::-;37555:4;37580:16;37588:7;37580;:16::i;:::-;37572:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37656:13;37672:23;37687:7;37672:14;:23::i;:::-;37656:39;;37725:5;37714:16;;:7;:16;;;:51;;;;37758:7;37734:31;;:20;37746:7;37734:11;:20::i;:::-;:31;;;37714:51;:87;;;;37769:32;37786:5;37793:7;37769:16;:32::i;:::-;37714:87;37706:96;;;37462:348;;;;:::o;40571:625::-;40730:4;40703:31;;:23;40718:7;40703:14;:23::i;:::-;:31;;;40695:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40809:1;40795:16;;:2;:16;;;40787:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40865:39;40886:4;40892:2;40896:7;40865:20;:39::i;:::-;40969:29;40986:1;40990:7;40969:8;:29::i;:::-;41030:1;41011:9;:15;41021:4;41011:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41059:1;41042:9;:13;41052:2;41042:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41090:2;41071:7;:16;41079:7;41071:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41129:7;41125:2;41110:27;;41119:4;41110:27;;;;;;;;;;;;41150:38;41170:4;41176:2;41180:7;41150:19;:38::i;:::-;40571:625;;;:::o;41630:315::-;41785:8;41776:17;;:5;:17;;;41768:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41872:8;41834:18;:25;41853:5;41834:25;;;;;;;;;;;;;;;:35;41860:8;41834:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41918:8;41896:41;;41911:5;41896:41;;;41928:8;41896:41;;;;;;:::i;:::-;;;;;;;;41630:315;;;:::o;36540:::-;36697:28;36707:4;36713:2;36717:7;36697:9;:28::i;:::-;36744:48;36767:4;36773:2;36777:7;36786:5;36744:22;:48::i;:::-;36736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36540:315;;;;:::o;18196:723::-;18252:13;18482:1;18473:5;:10;18469:53;;18500:10;;;;;;;;;;;;;;;;;;;;;18469:53;18532:12;18547:5;18532:20;;18563:14;18588:78;18603:1;18595:4;:9;18588:78;;18621:8;;;;;:::i;:::-;;;;18652:2;18644:10;;;;;:::i;:::-;;;18588:78;;;18676:19;18708:6;18698:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18676:39;;18726:154;18742:1;18733:5;:10;18726:154;;18770:1;18760:11;;;;;:::i;:::-;;;18837:2;18829:5;:10;;;;:::i;:::-;18816:2;:24;;;;:::i;:::-;18803:39;;18786:6;18793;18786:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18866:2;18857:11;;;;;:::i;:::-;;;18726:154;;;18904:6;18890:21;;;;;18196:723;;;;:::o;51621:164::-;51682:22;51707:3;51682:28;;51722:12;;:14;;;;;;;;;:::i;:::-;;;;;;51747:30;51757:3;51762:14;51747:9;:30::i;:::-;51671:114;51621:164;;:::o;34433:::-;34530:4;34554:18;:25;34573:5;34554:25;;;;;;;;;;;;;;;:35;34580:8;34554:35;;;;;;;;;;;;;;;;;;;;;;;;;34547:42;;34433:164;;;;:::o;49468:410::-;49578:7;47645:100;;;;;;;;;;;;;;;;;47625:127;;;;;;49732:6;:12;;;49767:6;:11;;;49811:6;:24;;;49801:35;;;;;;49651:204;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49623:247;;;;;;49603:267;;49468:410;;;:::o;47224:258::-;47323:7;47425:20;:18;:20::i;:::-;47447:11;47396:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47368:106;;;;;;47348:126;;47224:258;;;:::o;43881:126::-;;;;:::o;44392:125::-;;;;:::o;42510:799::-;42665:4;42686:15;:2;:13;;;:15::i;:::-;42682:620;;;42738:2;42722:36;;;42759:12;:10;:12::i;:::-;42773:4;42779:7;42788:5;42722:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42718:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42981:1;42964:6;:13;:18;42960:272;;43007:60;;;;;;;;;;:::i;:::-;;;;;;;;42960:272;43182:6;43176:13;43167:6;43163:2;43159:15;43152:38;42718:529;42855:41;;;42845:51;;;:6;:51;;;;42838:58;;;;;42682:620;43286:4;43279:11;;42510:799;;;;;;;:::o;38152:110::-;38228:26;38238:2;38242:7;38228:26;;;;;;;;;;;;:9;:26::i;:::-;38152:110;;:::o;7619:422::-;7679:4;7887:12;7998:7;7986:20;7978:28;;8032:1;8025:4;:8;8018:15;;;7619:422;;;:::o;38489:321::-;38619:18;38625:2;38629:7;38619:5;:18::i;:::-;38670:54;38701:1;38705:2;38709:7;38718:5;38670:22;:54::i;:::-;38648:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38489:321;;;:::o;39146:439::-;39240:1;39226:16;;:2;:16;;;39218:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39299:16;39307:7;39299;:16::i;:::-;39298:17;39290:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39361:45;39390:1;39394:2;39398:7;39361:20;:45::i;:::-;39436:1;39419:9;:13;39429:2;39419:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39467:2;39448:7;:16;39456:7;39448:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39512:7;39508:2;39487:33;;39504:1;39487:33;;;;;;;;;;;;39533:44;39561:1;39565:2;39569:7;39533:19;:44::i;:::-;39146:439;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:307::-;5853:4;5943:18;5935:6;5932:30;5929:56;;;5965:18;;:::i;:::-;5929:56;6003:29;6025:6;6003:29;:::i;:::-;5995:37;;6087:4;6081;6077:15;6069:23;;5792:307;;;:::o;6105:154::-;6189:6;6184:3;6179;6166:30;6251:1;6242:6;6237:3;6233:16;6226:27;6105:154;;;:::o;6265:410::-;6342:5;6367:65;6383:48;6424:6;6383:48;:::i;:::-;6367:65;:::i;:::-;6358:74;;6455:6;6448:5;6441:21;6493:4;6486:5;6482:16;6531:3;6522:6;6517:3;6513:16;6510:25;6507:112;;;6538:79;;:::i;:::-;6507:112;6628:41;6662:6;6657:3;6652;6628:41;:::i;:::-;6348:327;6265:410;;;;;:::o;6694:338::-;6749:5;6798:3;6791:4;6783:6;6779:17;6775:27;6765:122;;6806:79;;:::i;:::-;6765:122;6923:6;6910:20;6948:78;7022:3;7014:6;7007:4;6999:6;6995:17;6948:78;:::i;:::-;6939:87;;6755:277;6694:338;;;;:::o;7038:77::-;7075:7;7104:5;7093:16;;7038:77;;;:::o;7121:122::-;7194:24;7212:5;7194:24;:::i;:::-;7187:5;7184:35;7174:63;;7233:1;7230;7223:12;7174:63;7121:122;:::o;7249:139::-;7295:5;7333:6;7320:20;7311:29;;7349:33;7376:5;7349:33;:::i;:::-;7249:139;;;;:::o;7394:86::-;7429:7;7469:4;7462:5;7458:16;7447:27;;7394:86;;;:::o;7486:118::-;7557:22;7573:5;7557:22;:::i;:::-;7550:5;7547:33;7537:61;;7594:1;7591;7584:12;7537:61;7486:118;:::o;7610:135::-;7654:5;7692:6;7679:20;7670:29;;7708:31;7733:5;7708:31;:::i;:::-;7610:135;;;;:::o;7751:1085::-;7853:6;7861;7869;7877;7885;7934:3;7922:9;7913:7;7909:23;7905:33;7902:120;;;7941:79;;:::i;:::-;7902:120;8061:1;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8032:117;8216:2;8205:9;8201:18;8188:32;8247:18;8239:6;8236:30;8233:117;;;8269:79;;:::i;:::-;8233:117;8374:62;8428:7;8419:6;8408:9;8404:22;8374:62;:::i;:::-;8364:72;;8159:287;8485:2;8511:53;8556:7;8547:6;8536:9;8532:22;8511:53;:::i;:::-;8501:63;;8456:118;8613:2;8639:53;8684:7;8675:6;8664:9;8660:22;8639:53;:::i;:::-;8629:63;;8584:118;8741:3;8768:51;8811:7;8802:6;8791:9;8787:22;8768:51;:::i;:::-;8758:61;;8712:117;7751:1085;;;;;;;;:::o;8842:98::-;8893:6;8927:5;8921:12;8911:22;;8842:98;;;:::o;8946:168::-;9029:11;9063:6;9058:3;9051:19;9103:4;9098:3;9094:14;9079:29;;8946:168;;;;:::o;9120:360::-;9206:3;9234:38;9266:5;9234:38;:::i;:::-;9288:70;9351:6;9346:3;9288:70;:::i;:::-;9281:77;;9367:52;9412:6;9407:3;9400:4;9393:5;9389:16;9367:52;:::i;:::-;9444:29;9466:6;9444:29;:::i;:::-;9439:3;9435:39;9428:46;;9210:270;9120:360;;;;:::o;9486:309::-;9597:4;9635:2;9624:9;9620:18;9612:26;;9684:9;9678:4;9674:20;9670:1;9659:9;9655:17;9648:47;9712:76;9783:4;9774:6;9712:76;:::i;:::-;9704:84;;9486:309;;;;:::o;9801:118::-;9888:24;9906:5;9888:24;:::i;:::-;9883:3;9876:37;9801:118;;:::o;9925:222::-;10018:4;10056:2;10045:9;10041:18;10033:26;;10069:71;10137:1;10126:9;10122:17;10113:6;10069:71;:::i;:::-;9925:222;;;;:::o;10153:118::-;10240:24;10258:5;10240:24;:::i;:::-;10235:3;10228:37;10153:118;;:::o;10277:222::-;10370:4;10408:2;10397:9;10393:18;10385:26;;10421:71;10489:1;10478:9;10474:17;10465:6;10421:71;:::i;:::-;10277:222;;;;:::o;10505:619::-;10582:6;10590;10598;10647:2;10635:9;10626:7;10622:23;10618:32;10615:119;;;10653:79;;:::i;:::-;10615:119;10773:1;10798:53;10843:7;10834:6;10823:9;10819:22;10798:53;:::i;:::-;10788:63;;10744:117;10900:2;10926:53;10971:7;10962:6;10951:9;10947:22;10926:53;:::i;:::-;10916:63;;10871:118;11028:2;11054:53;11099:7;11090:6;11079:9;11075:22;11054:53;:::i;:::-;11044:63;;10999:118;10505:619;;;;;:::o;11130:329::-;11189:6;11238:2;11226:9;11217:7;11213:23;11209:32;11206:119;;;11244:79;;:::i;:::-;11206:119;11364:1;11389:53;11434:7;11425:6;11414:9;11410:22;11389:53;:::i;:::-;11379:63;;11335:117;11130:329;;;;:::o;11465:116::-;11535:21;11550:5;11535:21;:::i;:::-;11528:5;11525:32;11515:60;;11571:1;11568;11561:12;11515:60;11465:116;:::o;11587:133::-;11630:5;11668:6;11655:20;11646:29;;11684:30;11708:5;11684:30;:::i;:::-;11587:133;;;;:::o;11726:468::-;11791:6;11799;11848:2;11836:9;11827:7;11823:23;11819:32;11816:119;;;11854:79;;:::i;:::-;11816:119;11974:1;11999:53;12044:7;12035:6;12024:9;12020:22;11999:53;:::i;:::-;11989:63;;11945:117;12101:2;12127:50;12169:7;12160:6;12149:9;12145:22;12127:50;:::i;:::-;12117:60;;12072:115;11726:468;;;;;:::o;12200:943::-;12295:6;12303;12311;12319;12368:3;12356:9;12347:7;12343:23;12339:33;12336:120;;;12375:79;;:::i;:::-;12336:120;12495:1;12520:53;12565:7;12556:6;12545:9;12541:22;12520:53;:::i;:::-;12510:63;;12466:117;12622:2;12648:53;12693:7;12684:6;12673:9;12669:22;12648:53;:::i;:::-;12638:63;;12593:118;12750:2;12776:53;12821:7;12812:6;12801:9;12797:22;12776:53;:::i;:::-;12766:63;;12721:118;12906:2;12895:9;12891:18;12878:32;12937:18;12929:6;12926:30;12923:117;;;12959:79;;:::i;:::-;12923:117;13064:62;13118:7;13109:6;13098:9;13094:22;13064:62;:::i;:::-;13054:72;;12849:287;12200:943;;;;;;;:::o;13149:311::-;13226:4;13316:18;13308:6;13305:30;13302:56;;;13338:18;;:::i;:::-;13302:56;13388:4;13380:6;13376:17;13368:25;;13448:4;13442;13438:15;13430:23;;13149:311;;;:::o;13466:117::-;13575:1;13572;13565:12;13606:710;13702:5;13727:81;13743:64;13800:6;13743:64;:::i;:::-;13727:81;:::i;:::-;13718:90;;13828:5;13857:6;13850:5;13843:21;13891:4;13884:5;13880:16;13873:23;;13944:4;13936:6;13932:17;13924:6;13920:30;13973:3;13965:6;13962:15;13959:122;;;13992:79;;:::i;:::-;13959:122;14107:6;14090:220;14124:6;14119:3;14116:15;14090:220;;;14199:3;14228:37;14261:3;14249:10;14228:37;:::i;:::-;14223:3;14216:50;14295:4;14290:3;14286:14;14279:21;;14166:144;14150:4;14145:3;14141:14;14134:21;;14090:220;;;14094:21;13708:608;;13606:710;;;;;:::o;14339:370::-;14410:5;14459:3;14452:4;14444:6;14440:17;14436:27;14426:122;;14467:79;;:::i;:::-;14426:122;14584:6;14571:20;14609:94;14699:3;14691:6;14684:4;14676:6;14672:17;14609:94;:::i;:::-;14600:103;;14416:293;14339:370;;;;:::o;14715:829::-;14817:6;14825;14833;14882:2;14870:9;14861:7;14857:23;14853:32;14850:119;;;14888:79;;:::i;:::-;14850:119;15008:1;15033:53;15078:7;15069:6;15058:9;15054:22;15033:53;:::i;:::-;15023:63;;14979:117;15135:2;15161:53;15206:7;15197:6;15186:9;15182:22;15161:53;:::i;:::-;15151:63;;15106:118;15291:2;15280:9;15276:18;15263:32;15322:18;15314:6;15311:30;15308:117;;;15344:79;;:::i;:::-;15308:117;15449:78;15519:7;15510:6;15499:9;15495:22;15449:78;:::i;:::-;15439:88;;15234:303;14715:829;;;;;:::o;15550:474::-;15618:6;15626;15675:2;15663:9;15654:7;15650:23;15646:32;15643:119;;;15681:79;;:::i;:::-;15643:119;15801:1;15826:53;15871:7;15862:6;15851:9;15847:22;15826:53;:::i;:::-;15816:63;;15772:117;15928:2;15954:53;15999:7;15990:6;15979:9;15975:22;15954:53;:::i;:::-;15944:63;;15899:118;15550:474;;;;;:::o;16030:180::-;16078:77;16075:1;16068:88;16175:4;16172:1;16165:15;16199:4;16196:1;16189:15;16216:320;16260:6;16297:1;16291:4;16287:12;16277:22;;16344:1;16338:4;16334:12;16365:18;16355:81;;16421:4;16413:6;16409:17;16399:27;;16355:81;16483:2;16475:6;16472:14;16452:18;16449:38;16446:84;;16502:18;;:::i;:::-;16446:84;16267:269;16216:320;;;:::o;16542:231::-;16682:34;16678:1;16670:6;16666:14;16659:58;16751:14;16746:2;16738:6;16734:15;16727:39;16542:231;:::o;16779:366::-;16921:3;16942:67;17006:2;17001:3;16942:67;:::i;:::-;16935:74;;17018:93;17107:3;17018:93;:::i;:::-;17136:2;17131:3;17127:12;17120:19;;16779:366;;;:::o;17151:419::-;17317:4;17355:2;17344:9;17340:18;17332:26;;17404:9;17398:4;17394:20;17390:1;17379:9;17375:17;17368:47;17432:131;17558:4;17432:131;:::i;:::-;17424:139;;17151:419;;;:::o;17576:220::-;17716:34;17712:1;17704:6;17700:14;17693:58;17785:3;17780:2;17772:6;17768:15;17761:28;17576:220;:::o;17802:366::-;17944:3;17965:67;18029:2;18024:3;17965:67;:::i;:::-;17958:74;;18041:93;18130:3;18041:93;:::i;:::-;18159:2;18154:3;18150:12;18143:19;;17802:366;;;:::o;18174:419::-;18340:4;18378:2;18367:9;18363:18;18355:26;;18427:9;18421:4;18417:20;18413:1;18402:9;18398:17;18391:47;18455:131;18581:4;18455:131;:::i;:::-;18447:139;;18174:419;;;:::o;18599:243::-;18739:34;18735:1;18727:6;18723:14;18716:58;18808:26;18803:2;18795:6;18791:15;18784:51;18599:243;:::o;18848:366::-;18990:3;19011:67;19075:2;19070:3;19011:67;:::i;:::-;19004:74;;19087:93;19176:3;19087:93;:::i;:::-;19205:2;19200:3;19196:12;19189:19;;18848:366;;;:::o;19220:419::-;19386:4;19424:2;19413:9;19409:18;19401:26;;19473:9;19467:4;19463:20;19459:1;19448:9;19444:17;19437:47;19501:131;19627:4;19501:131;:::i;:::-;19493:139;;19220:419;;;:::o;19645:220::-;19785:34;19781:1;19773:6;19769:14;19762:58;19854:3;19849:2;19841:6;19837:15;19830:28;19645:220;:::o;19871:366::-;20013:3;20034:67;20098:2;20093:3;20034:67;:::i;:::-;20027:74;;20110:93;20199:3;20110:93;:::i;:::-;20228:2;20223:3;20219:12;20212:19;;19871:366;;;:::o;20243:419::-;20409:4;20447:2;20436:9;20432:18;20424:26;;20496:9;20490:4;20486:20;20482:1;20471:9;20467:17;20460:47;20524:131;20650:4;20524:131;:::i;:::-;20516:139;;20243:419;;;:::o;20668:104::-;20713:7;20742:24;20760:5;20742:24;:::i;:::-;20731:35;;20668:104;;;:::o;20778:142::-;20881:32;20907:5;20881:32;:::i;:::-;20876:3;20869:45;20778:142;;:::o;20926:561::-;21109:4;21147:2;21136:9;21132:18;21124:26;;21160:71;21228:1;21217:9;21213:17;21204:6;21160:71;:::i;:::-;21241:88;21325:2;21314:9;21310:18;21301:6;21241:88;:::i;:::-;21376:9;21370:4;21366:20;21361:2;21350:9;21346:18;21339:48;21404:76;21475:4;21466:6;21404:76;:::i;:::-;21396:84;;20926:561;;;;;;:::o;21493:147::-;21594:11;21631:3;21616:18;;21493:147;;;;:::o;21646:373::-;21750:3;21778:38;21810:5;21778:38;:::i;:::-;21832:88;21913:6;21908:3;21832:88;:::i;:::-;21825:95;;21929:52;21974:6;21969:3;21962:4;21955:5;21951:16;21929:52;:::i;:::-;22006:6;22001:3;21997:16;21990:23;;21754:265;21646:373;;;;:::o;22025:94::-;22058:8;22106:5;22102:2;22098:14;22077:35;;22025:94;;;:::o;22125:::-;22164:7;22193:20;22207:5;22193:20;:::i;:::-;22182:31;;22125:94;;;:::o;22225:100::-;22264:7;22293:26;22313:5;22293:26;:::i;:::-;22282:37;;22225:100;;;:::o;22331:157::-;22436:45;22456:24;22474:5;22456:24;:::i;:::-;22436:45;:::i;:::-;22431:3;22424:58;22331:157;;:::o;22494:412::-;22652:3;22674:93;22763:3;22754:6;22674:93;:::i;:::-;22667:100;;22777:75;22848:3;22839:6;22777:75;:::i;:::-;22877:2;22872:3;22868:12;22861:19;;22897:3;22890:10;;22494:412;;;;;:::o;22912:271::-;23042:3;23064:93;23153:3;23144:6;23064:93;:::i;:::-;23057:100;;23174:3;23167:10;;22912:271;;;;:::o;23189:178::-;23329:30;23325:1;23317:6;23313:14;23306:54;23189:178;:::o;23373:366::-;23515:3;23536:67;23600:2;23595:3;23536:67;:::i;:::-;23529:74;;23612:93;23701:3;23612:93;:::i;:::-;23730:2;23725:3;23721:12;23714:19;;23373:366;;;:::o;23745:419::-;23911:4;23949:2;23938:9;23934:18;23926:26;;23998:9;23992:4;23988:20;23984:1;23973:9;23969:17;23962:47;24026:131;24152:4;24026:131;:::i;:::-;24018:139;;23745:419;;;:::o;24170:236::-;24310:34;24306:1;24298:6;24294:14;24287:58;24379:19;24374:2;24366:6;24362:15;24355:44;24170:236;:::o;24412:366::-;24554:3;24575:67;24639:2;24634:3;24575:67;:::i;:::-;24568:74;;24651:93;24740:3;24651:93;:::i;:::-;24769:2;24764:3;24760:12;24753:19;;24412:366;;;:::o;24784:419::-;24950:4;24988:2;24977:9;24973:18;24965:26;;25037:9;25031:4;25027:20;25023:1;25012:9;25008:17;25001:47;25065:131;25191:4;25065:131;:::i;:::-;25057:139;;24784:419;;;:::o;25209:228::-;25349:34;25345:1;25337:6;25333:14;25326:58;25418:11;25413:2;25405:6;25401:15;25394:36;25209:228;:::o;25443:366::-;25585:3;25606:67;25670:2;25665:3;25606:67;:::i;:::-;25599:74;;25682:93;25771:3;25682:93;:::i;:::-;25800:2;25795:3;25791:12;25784:19;;25443:366;;;:::o;25815:419::-;25981:4;26019:2;26008:9;26004:18;25996:26;;26068:9;26062:4;26058:20;26054:1;26043:9;26039:17;26032:47;26096:131;26222:4;26096:131;:::i;:::-;26088:139;;25815:419;;;:::o;26240:229::-;26380:34;26376:1;26368:6;26364:14;26357:58;26449:12;26444:2;26436:6;26432:15;26425:37;26240:229;:::o;26475:366::-;26617:3;26638:67;26702:2;26697:3;26638:67;:::i;:::-;26631:74;;26714:93;26803:3;26714:93;:::i;:::-;26832:2;26827:3;26823:12;26816:19;;26475:366;;;:::o;26847:419::-;27013:4;27051:2;27040:9;27036:18;27028:26;;27100:9;27094:4;27090:20;27086:1;27075:9;27071:17;27064:47;27128:131;27254:4;27128:131;:::i;:::-;27120:139;;26847:419;;;:::o;27272:182::-;27412:34;27408:1;27400:6;27396:14;27389:58;27272:182;:::o;27460:366::-;27602:3;27623:67;27687:2;27682:3;27623:67;:::i;:::-;27616:74;;27699:93;27788:3;27699:93;:::i;:::-;27817:2;27812:3;27808:12;27801:19;;27460:366;;;:::o;27832:419::-;27998:4;28036:2;28025:9;28021:18;28013:26;;28085:9;28079:4;28075:20;28071:1;28060:9;28056:17;28049:47;28113:131;28239:4;28113:131;:::i;:::-;28105:139;;27832:419;;;:::o;28257:148::-;28359:11;28396:3;28381:18;;28257:148;;;;:::o;28411:377::-;28517:3;28545:39;28578:5;28545:39;:::i;:::-;28600:89;28682:6;28677:3;28600:89;:::i;:::-;28593:96;;28698:52;28743:6;28738:3;28731:4;28724:5;28720:16;28698:52;:::i;:::-;28775:6;28770:3;28766:16;28759:23;;28521:267;28411:377;;;;:::o;28794:155::-;28934:7;28930:1;28922:6;28918:14;28911:31;28794:155;:::o;28955:400::-;29115:3;29136:84;29218:1;29213:3;29136:84;:::i;:::-;29129:91;;29229:93;29318:3;29229:93;:::i;:::-;29347:1;29342:3;29338:11;29331:18;;28955:400;;;:::o;29361:701::-;29642:3;29664:95;29755:3;29746:6;29664:95;:::i;:::-;29657:102;;29776:95;29867:3;29858:6;29776:95;:::i;:::-;29769:102;;29888:148;30032:3;29888:148;:::i;:::-;29881:155;;30053:3;30046:10;;29361:701;;;;;:::o;30068:181::-;30208:33;30204:1;30196:6;30192:14;30185:57;30068:181;:::o;30255:366::-;30397:3;30418:67;30482:2;30477:3;30418:67;:::i;:::-;30411:74;;30494:93;30583:3;30494:93;:::i;:::-;30612:2;30607:3;30603:12;30596:19;;30255:366;;;:::o;30627:419::-;30793:4;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30627:419;;;:::o;31052:180::-;31100:77;31097:1;31090:88;31197:4;31194:1;31187:15;31221:4;31218:1;31211:15;31238:305;31278:3;31297:20;31315:1;31297:20;:::i;:::-;31292:25;;31331:20;31349:1;31331:20;:::i;:::-;31326:25;;31485:1;31417:66;31413:74;31410:1;31407:81;31404:107;;;31491:18;;:::i;:::-;31404:107;31535:1;31532;31528:9;31521:16;;31238:305;;;;:::o;31549:293::-;31689:34;31685:1;31677:6;31673:14;31666:58;31758:34;31753:2;31745:6;31741:15;31734:59;31827:7;31822:2;31814:6;31810:15;31803:32;31549:293;:::o;31848:366::-;31990:3;32011:67;32075:2;32070:3;32011:67;:::i;:::-;32004:74;;32087:93;32176:3;32087:93;:::i;:::-;32205:2;32200:3;32196:12;32189:19;;31848:366;;;:::o;32220:419::-;32386:4;32424:2;32413:9;32409:18;32401:26;;32473:9;32467:4;32463:20;32459:1;32448:9;32444:17;32437:47;32501:131;32627:4;32501:131;:::i;:::-;32493:139;;32220:419;;;:::o;32645:232::-;32785:34;32781:1;32773:6;32769:14;32762:58;32854:15;32849:2;32841:6;32837:15;32830:40;32645:232;:::o;32883:366::-;33025:3;33046:67;33110:2;33105:3;33046:67;:::i;:::-;33039:74;;33122:93;33211:3;33122:93;:::i;:::-;33240:2;33235:3;33231:12;33224:19;;32883:366;;;:::o;33255:419::-;33421:4;33459:2;33448:9;33444:18;33436:26;;33508:9;33502:4;33498:20;33494:1;33483:9;33479:17;33472:47;33536:131;33662:4;33536:131;:::i;:::-;33528:139;;33255:419;;;:::o;33680:243::-;33820:34;33816:1;33808:6;33804:14;33797:58;33889:26;33884:2;33876:6;33872:15;33865:51;33680:243;:::o;33929:366::-;34071:3;34092:67;34156:2;34151:3;34092:67;:::i;:::-;34085:74;;34168:93;34257:3;34168:93;:::i;:::-;34286:2;34281:3;34277:12;34270:19;;33929:366;;;:::o;34301:419::-;34467:4;34505:2;34494:9;34490:18;34482:26;;34554:9;34548:4;34544:20;34540:1;34529:9;34525:17;34518:47;34582:131;34708:4;34582:131;:::i;:::-;34574:139;;34301:419;;;:::o;34726:180::-;34774:77;34771:1;34764:88;34871:4;34868:1;34861:15;34895:4;34892:1;34885:15;34912:185;34952:1;34969:20;34987:1;34969:20;:::i;:::-;34964:25;;35003:20;35021:1;35003:20;:::i;:::-;34998:25;;35042:1;35032:35;;35047:18;;:::i;:::-;35032:35;35089:1;35086;35082:9;35077:14;;34912:185;;;;:::o;35103:220::-;35243:34;35239:1;35231:6;35227:14;35220:58;35312:3;35307:2;35299:6;35295:15;35288:28;35103:220;:::o;35329:366::-;35471:3;35492:67;35556:2;35551:3;35492:67;:::i;:::-;35485:74;;35568:93;35657:3;35568:93;:::i;:::-;35686:2;35681:3;35677:12;35670:19;;35329:366;;;:::o;35701:419::-;35867:4;35905:2;35894:9;35890:18;35882:26;;35954:9;35948:4;35944:20;35940:1;35929:9;35925:17;35918:47;35982:131;36108:4;35982:131;:::i;:::-;35974:139;;35701:419;;;:::o;36126:243::-;36266:34;36262:1;36254:6;36250:14;36243:58;36335:26;36330:2;36322:6;36318:15;36311:51;36126:243;:::o;36375:366::-;36517:3;36538:67;36602:2;36597:3;36538:67;:::i;:::-;36531:74;;36614:93;36703:3;36614:93;:::i;:::-;36732:2;36727:3;36723:12;36716:19;;36375:366;;;:::o;36747:419::-;36913:4;36951:2;36940:9;36936:18;36928:26;;37000:9;36994:4;36990:20;36986:1;36975:9;36971:17;36964:47;37028:131;37154:4;37028:131;:::i;:::-;37020:139;;36747:419;;;:::o;37172:180::-;37220:77;37217:1;37210:88;37317:4;37314:1;37307:15;37341:4;37338:1;37331:15;37358:233;37397:3;37420:24;37438:5;37420:24;:::i;:::-;37411:33;;37466:66;37459:5;37456:77;37453:103;;37536:18;;:::i;:::-;37453:103;37583:1;37576:5;37572:13;37565:20;;37358:233;;;:::o;37597:125::-;37663:7;37692:24;37710:5;37692:24;:::i;:::-;37681:35;;37597:125;;;:::o;37728:180::-;37830:53;37877:5;37830:53;:::i;:::-;37823:5;37820:64;37810:92;;37898:1;37895;37888:12;37810:92;37728:180;:::o;37914:201::-;38000:5;38031:6;38025:13;38016:22;;38047:62;38103:5;38047:62;:::i;:::-;37914:201;;;;:::o;38121:409::-;38220:6;38269:2;38257:9;38248:7;38244:23;38240:32;38237:119;;;38275:79;;:::i;:::-;38237:119;38395:1;38420:93;38505:7;38496:6;38485:9;38481:22;38420:93;:::i;:::-;38410:103;;38366:157;38121:409;;;;:::o;38536:225::-;38676:34;38672:1;38664:6;38660:14;38653:58;38745:8;38740:2;38732:6;38728:15;38721:33;38536:225;:::o;38767:366::-;38909:3;38930:67;38994:2;38989:3;38930:67;:::i;:::-;38923:74;;39006:93;39095:3;39006:93;:::i;:::-;39124:2;39119:3;39115:12;39108:19;;38767:366;;;:::o;39139:419::-;39305:4;39343:2;39332:9;39328:18;39320:26;;39392:9;39386:4;39382:20;39378:1;39367:9;39363:17;39356:47;39420:131;39546:4;39420:131;:::i;:::-;39412:139;;39139:419;;;:::o;39564:224::-;39704:34;39700:1;39692:6;39688:14;39681:58;39773:7;39768:2;39760:6;39756:15;39749:32;39564:224;:::o;39794:366::-;39936:3;39957:67;40021:2;40016:3;39957:67;:::i;:::-;39950:74;;40033:93;40122:3;40033:93;:::i;:::-;40151:2;40146:3;40142:12;40135:19;;39794:366;;;:::o;40166:419::-;40332:4;40370:2;40359:9;40355:18;40347:26;;40419:9;40413:4;40409:20;40405:1;40394:9;40390:17;40383:47;40447:131;40573:4;40447:131;:::i;:::-;40439:139;;40166:419;;;:::o;40591:112::-;40674:22;40690:5;40674:22;:::i;:::-;40669:3;40662:35;40591:112;;:::o;40709:545::-;40882:4;40920:3;40909:9;40905:19;40897:27;;40934:71;41002:1;40991:9;40987:17;40978:6;40934:71;:::i;:::-;41015:68;41079:2;41068:9;41064:18;41055:6;41015:68;:::i;:::-;41093:72;41161:2;41150:9;41146:18;41137:6;41093:72;:::i;:::-;41175;41243:2;41232:9;41228:18;41219:6;41175:72;:::i;:::-;40709:545;;;;;;;:::o;41260:231::-;41400:34;41396:1;41388:6;41384:14;41377:58;41469:14;41464:2;41456:6;41452:15;41445:39;41260:231;:::o;41497:366::-;41639:3;41660:67;41724:2;41719:3;41660:67;:::i;:::-;41653:74;;41736:93;41825:3;41736:93;:::i;:::-;41854:2;41849:3;41845:12;41838:19;;41497:366;;;:::o;41869:419::-;42035:4;42073:2;42062:9;42058:18;42050:26;;42122:9;42116:4;42112:20;42108:1;42097:9;42093:17;42086:47;42150:131;42276:4;42150:131;:::i;:::-;42142:139;;41869:419;;;:::o;42294:224::-;42434:34;42430:1;42422:6;42418:14;42411:58;42503:7;42498:2;42490:6;42486:15;42479:32;42294:224;:::o;42524:366::-;42666:3;42687:67;42751:2;42746:3;42687:67;:::i;:::-;42680:74;;42763:93;42852:3;42763:93;:::i;:::-;42881:2;42876:3;42872:12;42865:19;;42524:366;;;:::o;42896:419::-;43062:4;43100:2;43089:9;43085:18;43077:26;;43149:9;43143:4;43139:20;43135:1;43124:9;43120:17;43113:47;43177:131;43303:4;43177:131;:::i;:::-;43169:139;;42896:419;;;:::o;43321:223::-;43461:34;43457:1;43449:6;43445:14;43438:58;43530:6;43525:2;43517:6;43513:15;43506:31;43321:223;:::o;43550:366::-;43692:3;43713:67;43777:2;43772:3;43713:67;:::i;:::-;43706:74;;43789:93;43878:3;43789:93;:::i;:::-;43907:2;43902:3;43898:12;43891:19;;43550:366;;;:::o;43922:419::-;44088:4;44126:2;44115:9;44111:18;44103:26;;44175:9;44169:4;44165:20;44161:1;44150:9;44146:17;44139:47;44203:131;44329:4;44203:131;:::i;:::-;44195:139;;43922:419;;;:::o;44347:191::-;44387:4;44407:20;44425:1;44407:20;:::i;:::-;44402:25;;44441:20;44459:1;44441:20;:::i;:::-;44436:25;;44480:1;44477;44474:8;44471:34;;;44485:18;;:::i;:::-;44471:34;44530:1;44527;44523:9;44515:17;;44347:191;;;;:::o;44544:175::-;44684:27;44680:1;44672:6;44668:14;44661:51;44544:175;:::o;44725:366::-;44867:3;44888:67;44952:2;44947:3;44888:67;:::i;:::-;44881:74;;44964:93;45053:3;44964:93;:::i;:::-;45082:2;45077:3;45073:12;45066:19;;44725:366;;;:::o;45097:419::-;45263:4;45301:2;45290:9;45286:18;45278:26;;45350:9;45344:4;45340:20;45336:1;45325:9;45321:17;45314:47;45378:131;45504:4;45378:131;:::i;:::-;45370:139;;45097:419;;;:::o;45522:237::-;45662:34;45658:1;45650:6;45646:14;45639:58;45731:20;45726:2;45718:6;45714:15;45707:45;45522:237;:::o;45765:366::-;45907:3;45928:67;45992:2;45987:3;45928:67;:::i;:::-;45921:74;;46004:93;46093:3;46004:93;:::i;:::-;46122:2;46117:3;46113:12;46106:19;;45765:366;;;:::o;46137:419::-;46303:4;46341:2;46330:9;46326:18;46318:26;;46390:9;46384:4;46380:20;46376:1;46365:9;46361:17;46354:47;46418:131;46544:4;46418:131;:::i;:::-;46410:139;;46137:419;;;:::o;46562:176::-;46594:1;46611:20;46629:1;46611:20;:::i;:::-;46606:25;;46645:20;46663:1;46645:20;:::i;:::-;46640:25;;46684:1;46674:35;;46689:18;;:::i;:::-;46674:35;46730:1;46727;46723:9;46718:14;;46562:176;;;;:::o;46744:553::-;46921:4;46959:3;46948:9;46944:19;46936:27;;46973:71;47041:1;47030:9;47026:17;47017:6;46973:71;:::i;:::-;47054:72;47122:2;47111:9;47107:18;47098:6;47054:72;:::i;:::-;47136;47204:2;47193:9;47189:18;47180:6;47136:72;:::i;:::-;47218;47286:2;47275:9;47271:18;47262:6;47218:72;:::i;:::-;46744:553;;;;;;;:::o;47303:214::-;47443:66;47439:1;47431:6;47427:14;47420:90;47303:214;:::o;47523:400::-;47683:3;47704:84;47786:1;47781:3;47704:84;:::i;:::-;47697:91;;47797:93;47886:3;47797:93;:::i;:::-;47915:1;47910:3;47906:11;47899:18;;47523:400;;;:::o;47929:79::-;47968:7;47997:5;47986:16;;47929:79;;;:::o;48014:157::-;48119:45;48139:24;48157:5;48139:24;:::i;:::-;48119:45;:::i;:::-;48114:3;48107:58;48014:157;;:::o;48177:663::-;48418:3;48440:148;48584:3;48440:148;:::i;:::-;48433:155;;48598:75;48669:3;48660:6;48598:75;:::i;:::-;48698:2;48693:3;48689:12;48682:19;;48711:75;48782:3;48773:6;48711:75;:::i;:::-;48811:2;48806:3;48802:12;48795:19;;48831:3;48824:10;;48177:663;;;;;:::o;48846:640::-;49041:4;49079:3;49068:9;49064:19;49056:27;;49093:71;49161:1;49150:9;49146:17;49137:6;49093:71;:::i;:::-;49174:72;49242:2;49231:9;49227:18;49218:6;49174:72;:::i;:::-;49256;49324:2;49313:9;49309:18;49300:6;49256:72;:::i;:::-;49375:9;49369:4;49365:20;49360:2;49349:9;49345:18;49338:48;49403:76;49474:4;49465:6;49403:76;:::i;:::-;49395:84;;48846:640;;;;;;;:::o;49492:141::-;49548:5;49579:6;49573:13;49564:22;;49595:32;49621:5;49595:32;:::i;:::-;49492:141;;;;:::o;49639:349::-;49708:6;49757:2;49745:9;49736:7;49732:23;49728:32;49725:119;;;49763:79;;:::i;:::-;49725:119;49883:1;49908:63;49963:7;49954:6;49943:9;49939:22;49908:63;:::i;:::-;49898:73;;49854:127;49639:349;;;;:::o;49994:182::-;50134:34;50130:1;50122:6;50118:14;50111:58;49994:182;:::o;50182:366::-;50324:3;50345:67;50409:2;50404:3;50345:67;:::i;:::-;50338:74;;50421:93;50510:3;50421:93;:::i;:::-;50539:2;50534:3;50530:12;50523:19;;50182:366;;;:::o;50554:419::-;50720:4;50758:2;50747:9;50743:18;50735:26;;50807:9;50801:4;50797:20;50793:1;50782:9;50778:17;50771:47;50835:131;50961:4;50835:131;:::i;:::-;50827:139;;50554:419;;;:::o;50979:178::-;51119:30;51115:1;51107:6;51103:14;51096:54;50979:178;:::o;51163:366::-;51305:3;51326:67;51390:2;51385:3;51326:67;:::i;:::-;51319:74;;51402:93;51491:3;51402:93;:::i;:::-;51520:2;51515:3;51511:12;51504:19;;51163:366;;;:::o;51535:419::-;51701:4;51739:2;51728:9;51724:18;51716:26;;51788:9;51782:4;51778:20;51774:1;51763:9;51759:17;51752:47;51816:131;51942:4;51816:131;:::i;:::-;51808:139;;51535:419;;;:::o
Swarm Source
ipfs://176ec61e7f4ca34fb91483c361c33046f12b96d4f730b55ed2085bb032809e98
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.