Overview
TokenID
86
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MISSOR404
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-01-21 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } pragma solidity ^0.8.0; abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ 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 subtraction of two unsigned integers, with an overflow flag. */ 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. */ 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. */ 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. */ 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 largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or * denominator == 0. * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by * Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. uint256 twos = denominator & (0 - denominator); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also // works in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded * towards zero. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @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); } // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; /** * @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); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); } // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.20; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; abstract contract ERC404 is Ownable { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Total supply in NFT representation uint256 public immutable totalNativeSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; mapping(address => uint256[]) internal _contractOwned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; /// @dev Holds the IDs of NFTs that have been burned so that they can be re-used uint256[] public availableIds; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalNativeSupply = _totalNativeSupply; totalSupply = _totalNativeSupply * (10**decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } function totalAvailableIds() public view returns (uint256) { return availableIds.length; } function totalNFTsOwned(address owner) public view returns (uint256) { return _owned[owner].length; } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve(address spender, uint256 amountOrId) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amount ) public returns (bool) { uint256 allowed = allowance[from][msg.sender]; require(allowed >= amount, "Not enough allowance."); if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; _transfer(from, to, amount); return true; } /// @notice Function for fractional transfers function transfer(address to, uint256 amount) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { _nftTransferFrom(msg.sender, from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { _nftTransferFrom(msg.sender, from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } // testing only: delete before deploy function contractTokenBalance(address _contract) public view returns (uint256) { return balanceOf[_contract] - (_contractOwned[_contract].length * _getUnit()); } function contractNFTBalance(address _contract) public view returns (uint256) { return _contractOwned[_contract].length; } function enoughTokenBalance(address _contract, uint256 amount) public view returns (bool) { uint256 tokenBalance = balanceOf[_contract] - (_contractOwned[_contract].length * _getUnit()); return tokenBalance >= amount; } function tokenOfOwnerByIndex(address _owner, uint256 index) public view returns (uint256) { require(index < _owned[_owner].length, "Index out of bounds"); return _owned[_owner][index]; } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal returns (bool) { _beforeTokenTransfer(from, to, amount); uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; if (_isContract(from)) { uint256 tokenBalance = balanceBeforeSender - (_contractOwned[from].length * unit); require(tokenBalance >= amount, "Not enough token balance."); } balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas // Skip minting to smart contracts if (!_shouldSkip(from) || _owned[from].length > 0) { uint256 nftsToBurn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < nftsToBurn; i++) { _burnNFT(from); } } // Skip minting for certain addresses to save gas // Skip burning from smart contracts if (!_shouldSkip(to)) { uint256 nftsToMint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < nftsToMint; i++) { _mintNFT(to); } } emit ERC20Transfer(from, to, amount); return true; } function _mint(address recipient, uint256 quantity) internal { balanceOf[recipient] += quantity * _getUnit(); for (uint256 index = 0; index < quantity; index++) { _mintNFT(recipient); } } function _nftTransferFrom( address msgSender, address from, address to, uint256 id ) internal { require(from == _ownerOf[id], "Sender is not owner of NFT."); require(to != address(0), "Cannot send to null address."); require( msgSender == from || isApprovedForAll[from][msgSender] || msgSender == getApproved[id], "Operator is not approved." ); balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _removeSpecificNFT(from, id); _deliverNFT(to, id); emit Transfer(from, to, id); emit ERC20Transfer(from, to, _getUnit()); } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10**decimals; } function _mintNFT(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } uint256 id; if (availableIds.length == 0) { unchecked { minted++; } require( minted <= totalNativeSupply, "Cannot mint more than given supply." ); id = minted; } else { id = availableIds[availableIds.length - 1]; availableIds.pop(); } if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _deliverNFT(to, id); emit Transfer(address(0), to, id); } function _burnNFT(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } // Indiscriminantly burn last NFT in list of owned NFTs for `from` uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; availableIds.push(id); emit Transfer(from, address(0), id); } function _removeSpecificNFT(address from, uint256 id) private { uint256 lastId; if (_isContract(from)) { lastId = _contractOwned[from][_contractOwned[from].length - 1]; _contractOwned[from][_ownedIndex[id]] = lastId; _contractOwned[from].pop(); } else { lastId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[id]] = lastId; _owned[from].pop(); } _ownedIndex[lastId] = _ownedIndex[id]; delete getApproved[id]; } function _deliverNFT(address to, uint256 id) private { _ownerOf[id] = to; if (_isContract(to)) { _contractOwned[to].push(id); _ownedIndex[id] = _contractOwned[to].length - 1; } else { _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; } } function _setNameSymbol(string memory _name, string memory _symbol) internal { name = _name; symbol = _symbol; } function _shouldSkip(address a) private view returns (bool) { return whitelist[a] || _isContract(a); } function _isContract(address a) private view returns (bool result) { assembly { result := extcodesize(a) } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.0; contract MISSOR404 is ERC404, ERC165 { address public royaltyReceiver; bool public paused; bool private _mintActive; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; string public baseTokenURI; string public baseExtension = ".json"; uint256 public maxMintable; uint256 public maxMintPerTx; uint256 public price; uint256 public royaltyAmount; uint256 public startTime; constructor() ERC404( "MISSOR404", "MISSED", 18, 200, msg.sender) { address _owner = msg.sender; uint256 _startTime = block.timestamp; balanceOf[_owner] = 0 ether; whitelist[_owner] = true; maxMintable = 200; maxMintPerTx = 200; price = 1000 ether; royaltyAmount = 250; _mintActive = false; startTime = _startTime; paused = false; royaltyReceiver = _owner; baseTokenURI = "ipfs://bafybeic3qvul6juig7x2pxvi5nrwcvzi777dzx6aynk3cisw4jscwvq3ie/"; } receive() external payable {} function tokenURI(uint256 id) public view override returns (string memory) { return string.concat(baseTokenURI, Strings.toString(id),baseExtension); } function mintHasStarted() public view returns (bool) { return block.timestamp >= startTime; } function mintActive() public view returns (bool) { return _mintActive || (block.timestamp >= startTime); } function mint(uint256 quantity) public payable { require(mintActive(), "Minting is not active."); require(!paused); require(quantity <= maxMintPerTx, "Cannot mint that many at once."); require(minted + quantity <= maxMintable, "Finished minting."); if (msg.sender != owner) { require(msg.value >= (quantity * price), "Not enough FTM sent."); } if (msg.value > 0) { payable(owner).transfer(msg.value); } _mint(msg.sender, quantity); } function batchTransfer(address from, address to, uint256[] calldata tokenIds) external { require(to != address(0), "Invalid recipient address"); require(tokenIds.length > 0, "Token IDs array is empty"); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; require(ownerOf(tokenId) == msg.sender, "You do not own this token"); _nftTransferFrom(msg.sender, from, to, tokenId); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = _owned[_owner].length; uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i = 0; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns (address receiver, uint256 amount) { return (royaltyReceiver, ((_salePrice * royaltyAmount) / 10000)); } function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == _INTERFACE_ID_ERC2981 || super.supportsInterface(interfaceId); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); } function ownerMint(address recipient, uint256 quantity) public onlyOwner { _mint(recipient, quantity); } function setPaused(bool _paused) public onlyOwner { paused = _paused; } function setMintActive(bool mintActive_) public onlyOwner { _mintActive = mintActive_; } function setRoyaltyReceiver(address _receiver) public onlyOwner { royaltyReceiver = _receiver; } function setStartTime(uint256 _startTime) public onlyOwner { startTime = _startTime; } function setRoyaltyAmount(uint256 _royaltyAmount) public onlyOwner { royaltyAmount = _royaltyAmount; } function setBaseURI(string memory _baseURI) public onlyOwner { baseTokenURI = _baseURI; } function setBaseExtension(string memory _extension) public onlyOwner { baseExtension = _extension; } function setMaxPerTx(uint256 _maxMintPerTx) public onlyOwner { maxMintPerTx = _maxMintPerTx; } function setPrice(uint256 _price) public onlyOwner { price = _price; } function withdrawETH() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No ETH to withdraw"); (bool success, ) = payable(owner).call{value: balance}(""); require(success, "ETH withdrawal failed"); } function withdrawToken(address erc20Address) external onlyOwner { IERC20 erc20 = IERC20(erc20Address); uint256 balance = erc20.balanceOf(address(this)); require(balance > 0, "No tokens to withdraw"); require(erc20.transfer(owner, balance), "Token transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"availableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractNFTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"contractTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"enoughTokenBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintHasStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","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":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royaltyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_extension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTx","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"mintActive_","type":"bool"}],"name":"setMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_royaltyAmount","type":"uint256"}],"name":"setRoyaltyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"setRoyaltyReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAvailableIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"totalNFTsOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNativeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc20Address","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e06040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506010908161004891906105d0565b50348015610054575f5ffd5b506040518060400160405280600981526020017f4d4953534f5234303400000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d49535345440000000000000000000000000000000000000000000000000000815250601260c833805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600190816101d591906105d0565b5083600290816101e591906105d0565b508260ff1660808160ff16815250508160c08181525050608051600a61020b9190610807565b826102169190610851565b60a0818152505050505050505f3390505f4290505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060c860118190555060c8601281905550683635c9adc5dea0000060138190555060fa6014819055505f600e60156101000a81548160ff021916908315150217905550806015819055505f600e60146101000a81548160ff02191690831515021790555081600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060800160405280604381526020016167ee60439139600f908161038b91906105d0565b505050610892565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061040e57607f821691505b602082108103610421576104206103ca565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610448565b61048d8683610448565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104d16104cc6104c7846104a5565b6104ae565b6104a5565b9050919050565b5f819050919050565b6104ea836104b7565b6104fe6104f6826104d8565b848454610454565b825550505050565b5f5f905090565b610515610506565b6105208184846104e1565b505050565b5b81811015610543576105385f8261050d565b600181019050610526565b5050565b601f8211156105885761055981610427565b61056284610439565b81016020851015610571578190505b61058561057d85610439565b830182610525565b50505b505050565b5f82821c905092915050565b5f6105a85f198460080261058d565b1980831691505092915050565b5f6105c08383610599565b9150826002028217905092915050565b6105d982610393565b67ffffffffffffffff8111156105f2576105f161039d565b5b6105fc82546103f7565b610607828285610547565b5f60209050601f831160018114610638575f8415610626578287015190505b61063085826105b5565b865550610697565b601f19841661064686610427565b5f5b8281101561066d57848901518255600182019150602085019450602081019050610648565b8683101561068a5784890151610686601f891682610599565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610721578086048111156106fd576106fc61069f565b5b600185161561070c5780820291505b808102905061071a856106cc565b94506106e1565b94509492505050565b5f8261073957600190506107f4565b81610746575f90506107f4565b816001811461075c576002811461076657610795565b60019150506107f4565b60ff8411156107785761077761069f565b5b8360020a91508482111561078f5761078e61069f565b5b506107f4565b5060208310610133831016604e8410600b84101617156107ca5782820a9050838111156107c5576107c461069f565b5b6107f4565b6107d784848460016106d8565b925090508184048111156107ee576107ed61069f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610811826104a5565b915061081c836107fb565b92506108497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461072a565b905092915050565b5f61085b826104a5565b9150610866836104a5565b9250828202610874816104a5565b9150828204841483151761088b5761088a61069f565b5b5092915050565b60805160a05160c051615f246108ca5f395f81816120af0152613e0201525f61139501525f8181611863015261314b0152615f245ff3fe608060405260043610610384575f3560e01c80637c6e551d116101d0578063b88d4fde11610101578063da3ef23f1161009f578063e985e9c51161006e578063e985e9c514610d4a578063ee1cc94414610d86578063ef1f3ebb14610dae578063f2fde38b14610dea5761038b565b8063da3ef23f14610ca6578063dd62ed3e14610cce578063de7fcb1d14610d0a578063e086e5ec14610d345761038b565b8063c87b56dd116100db578063c87b56dd14610bc8578063d528d11814610c04578063d547cfb714610c40578063d9adc19114610c6a5761038b565b8063b88d4fde14610b4e578063c668286214610b76578063c6f6f21614610ba05761038b565b80639b19251a1161016e578063a0712d6811610148578063a0712d6814610aa4578063a21b5fe914610ac0578063a22cb46514610aea578063a9059cbb14610b125761038b565b80639b19251a14610a145780639fbc871314610a50578063a035b1fe14610a7a5761038b565b80638da5cb5b116101aa5780638da5cb5b146109705780638dc251e31461099a57806391b7f5ed146109c257806395d89b41146109ea5761038b565b80637c6e551d146108f457806381456f481461091e57806389476069146109485761038b565b8063313ce567116102b55780634f07de09116102535780636352211e116102225780636352211e1461081657806366e3e5e41461085257806370a082311461088e57806378e97925146108ca5761038b565b80634f07de091461077457806353d6fd591461079c57806355f804b3146107c45780635c975abb146107ec5761038b565b806342842e0e1161028f57806342842e0e146106be578063438b6300146106e6578063484b973c146107225780634f02c4201461074a5761038b565b8063313ce567146106445780633593cebc1461066e5780633e0a322d146106965761038b565b80631ae243661161032257806325fd90f3116102fc57806325fd90f31461058b5780632a55205a146105b55780632b968958146105f25780632f745c59146106085761038b565b80631ae24366146104e95780632154dc391461052557806323b872dd1461054f5761038b565b8063081812fc1161035e578063081812fc1461041f578063095ea7b31461045b57806316c38b3c1461049757806318160ddd146104bf5761038b565b806301ffc9a71461038f57806304bdc76b146103cb57806306fdde03146103f55761038b565b3661038b57005b5f5ffd5b34801561039a575f5ffd5b506103b560048036038101906103b091906146c6565b610e12565b6040516103c2919061470b565b60405180910390f35b3480156103d6575f5ffd5b506103df610f42565b6040516103ec919061473c565b60405180910390f35b348015610400575f5ffd5b50610409610f4e565b60405161041691906147c5565b60405180910390f35b34801561042a575f5ffd5b506104456004803603810190610440919061480f565b610fda565b6040516104529190614879565b60405180910390f35b348015610466575f5ffd5b50610481600480360381019061047c91906148bc565b61100a565b60405161048e919061470b565b60405180910390f35b3480156104a2575f5ffd5b506104bd60048036038101906104b89190614924565b6112f1565b005b3480156104ca575f5ffd5b506104d3611393565b6040516104e0919061473c565b60405180910390f35b3480156104f4575f5ffd5b5061050f600480360381019061050a91906148bc565b6113b7565b60405161051c919061470b565b60405180910390f35b348015610530575f5ffd5b50610539611463565b604051610546919061473c565b60405180910390f35b34801561055a575f5ffd5b506105756004803603810190610570919061494f565b611469565b604051610582919061470b565b60405180910390f35b348015610596575f5ffd5b5061059f6115f1565b6040516105ac919061470b565b60405180910390f35b3480156105c0575f5ffd5b506105db60048036038101906105d6919061499f565b611614565b6040516105e99291906149dd565b60405180910390f35b3480156105fd575f5ffd5b5061060661165e565b005b348015610613575f5ffd5b5061062e600480360381019061062991906148bc565b61177e565b60405161063b919061473c565b60405180910390f35b34801561064f575f5ffd5b50610658611861565b6040516106659190614a1f565b60405180910390f35b348015610679575f5ffd5b50610694600480360381019061068f9190614a99565b611885565b005b3480156106a1575f5ffd5b506106bc60048036038101906106b7919061480f565b6119fc565b005b3480156106c9575f5ffd5b506106e460048036038101906106df919061494f565b611a8b565b005b3480156106f1575f5ffd5b5061070c60048036038101906107079190614b0a565b611bbb565b6040516107199190614bec565b60405180910390f35b34801561072d575f5ffd5b50610748600480360381019061074391906148bc565b611c9b565b005b348015610755575f5ffd5b5061075e611d2e565b60405161076b919061473c565b60405180910390f35b34801561077f575f5ffd5b5061079a6004803603810190610795919061480f565b611d34565b005b3480156107a7575f5ffd5b506107c260048036038101906107bd9190614c0c565b611dc3565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190614d72565b611ea0565b005b3480156107f7575f5ffd5b50610800611f38565b60405161080d919061470b565b60405180910390f35b348015610821575f5ffd5b5061083c6004803603810190610837919061480f565b611f4b565b6040516108499190614879565b60405180910390f35b34801561085d575f5ffd5b5061087860048036038101906108739190614b0a565b611fe9565b604051610885919061473c565b60405180910390f35b348015610899575f5ffd5b506108b460048036038101906108af9190614b0a565b61208c565b6040516108c1919061473c565b60405180910390f35b3480156108d5575f5ffd5b506108de6120a1565b6040516108eb919061473c565b60405180910390f35b3480156108ff575f5ffd5b506109086120a7565b604051610915919061473c565b60405180910390f35b348015610929575f5ffd5b506109326120ad565b60405161093f919061473c565b60405180910390f35b348015610953575f5ffd5b5061096e60048036038101906109699190614b0a565b6120d1565b005b34801561097b575f5ffd5b506109846122f6565b6040516109919190614879565b60405180910390f35b3480156109a5575f5ffd5b506109c060048036038101906109bb9190614b0a565b61231a565b005b3480156109cd575f5ffd5b506109e860048036038101906109e3919061480f565b6123e2565b005b3480156109f5575f5ffd5b506109fe612471565b604051610a0b91906147c5565b60405180910390f35b348015610a1f575f5ffd5b50610a3a6004803603810190610a359190614b0a565b6124fd565b604051610a47919061470b565b60405180910390f35b348015610a5b575f5ffd5b50610a6461251a565b604051610a719190614879565b60405180910390f35b348015610a85575f5ffd5b50610a8e61253f565b604051610a9b919061473c565b60405180910390f35b610abe6004803603810190610ab9919061480f565b612545565b005b348015610acb575f5ffd5b50610ad461275a565b604051610ae1919061470b565b60405180910390f35b348015610af5575f5ffd5b50610b106004803603810190610b0b9190614c0c565b612766565b005b348015610b1d575f5ffd5b50610b386004803603810190610b3391906148bc565b61285e565b604051610b45919061470b565b60405180910390f35b348015610b59575f5ffd5b50610b746004803603810190610b6f9190614e0e565b612872565b005b348015610b81575f5ffd5b50610b8a6129a8565b604051610b9791906147c5565b60405180910390f35b348015610bab575f5ffd5b50610bc66004803603810190610bc1919061480f565b612a34565b005b348015610bd3575f5ffd5b50610bee6004803603810190610be9919061480f565b612ac3565b604051610bfb91906147c5565b60405180910390f35b348015610c0f575f5ffd5b50610c2a6004803603810190610c25919061480f565b612afa565b604051610c37919061473c565b60405180910390f35b348015610c4b575f5ffd5b50610c54612b1a565b604051610c6191906147c5565b60405180910390f35b348015610c75575f5ffd5b50610c906004803603810190610c8b9190614b0a565b612ba6565b604051610c9d919061473c565b60405180910390f35b348015610cb1575f5ffd5b50610ccc6004803603810190610cc79190614d72565b612bef565b005b348015610cd9575f5ffd5b50610cf46004803603810190610cef9190614e92565b612c87565b604051610d01919061473c565b60405180910390f35b348015610d15575f5ffd5b50610d1e612ca7565b604051610d2b919061473c565b60405180910390f35b348015610d3f575f5ffd5b50610d48612cad565b005b348015610d55575f5ffd5b50610d706004803603810190610d6b9190614e92565b612e44565b604051610d7d919061470b565b60405180910390f35b348015610d91575f5ffd5b50610dac6004803603810190610da79190614924565b612e6e565b005b348015610db9575f5ffd5b50610dd46004803603810190610dcf9190614b0a565b612f10565b604051610de1919061473c565b60405180910390f35b348015610df5575f5ffd5b50610e106004803603810190610e0b9190614b0a565b612f59565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610edc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f2b5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f3b5750610f3a826130df565b5b9050919050565b5f600d80549050905090565b60018054610f5b90614efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790614efd565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561101c57505f82115b15611204575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611113575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561114a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516111f6919061473c565b60405180910390a3506112e7565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112de919061473c565b60405180910390a35b6001905092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611376576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e60146101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f6113c1613148565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061140c9190614f5a565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114549190614f9b565b90508281101591505092915050565b60115481565b5f5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090615018565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d957828161155c9190614f9b565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6115e485858561317b565b5060019150509392505050565b5f600e60159054906101000a900460ff168061160f57506015544210155b905090565b5f5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601454856116499190614f5a565b6116539190615063565b915091509250929050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508210611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906150dd565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106118505761184f6150fb565b5b905f5260205f200154905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90615172565b60405180910390fd5b5f8282905011611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f906151da565b60405180910390fd5b5f5f90505b828290508110156119f5575f83838381811061195c5761195b6150fb565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661198582611f4b565b73ffffffffffffffffffffffffffffffffffffffff16146119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290615242565b60405180910390fd5b6119e733878784613547565b50808060010191505061193d565b5050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060158190555050565b611a9733848484613547565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015611b7f575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b1d93929190615293565b6020604051808303815f875af1158015611b39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5d91906152ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611bb6576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8167ffffffffffffffff811115611c1c57611c1b614c4e565b5b604051908082528060200260200182016040528015611c4a5781602001602082028036833780820191505090505b5090505f5f90505b82811015611c9057611c64858261177e565b828281518110611c7757611c766150fb565b5b6020026020010181815250508080600101915050611c52565b508092505050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2a828261393f565b5050565b60035481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060148190555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f9081611f3491906154ba565b5050565b600e60149054906101000a900460ff1681565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f611ff2613148565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061203d9190614f5a565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120859190614f9b565b9050919050565b6004602052805f5260405f205f915090505481565b60155481565b60145481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612156576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121949190614879565b602060405180830381865afa1580156121af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d3919061559d565b90505f8111612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90615612565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122729291906149dd565b6020604051808303815f875af115801561228e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b29190615644565b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906156b9565b60405180910390fd5b505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461239f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612467576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060138190555050565b6002805461247e90614efd565b80601f01602080910402602001604051908101604052809291908181526020018280546124aa90614efd565b80156124f55780601f106124cc576101008083540402835291602001916124f5565b820191905f5260205f20905b8154815290600101906020018083116124d857829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61254d6115f1565b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390615721565b60405180910390fd5b600e60149054906101000a900460ff16156125a5575f5ffd5b6012548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190615789565b60405180910390fd5b601154816003546125fb91906157a7565b111561263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390615824565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126e0576013548161269d9190614f5a565b3410156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d69061588c565b60405180910390fd5b5b5f34111561274d575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561274b573d5f5f3e3d5ffd5b505b612757338261393f565b50565b5f601554421015905090565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612852919061470b565b60405180910390a35050565b5f61286a33848461317b565b905092915050565b61287e33868686613547565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1415801561296a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016129089594939291906158d6565b6020604051808303815f875af1158015612924573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294891906152ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156129a1576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b601080546129b590614efd565b80601f01602080910402602001604051908101604052809291908181526020018280546129e190614efd565b8015612a2c5780601f10612a0357610100808354040283529160200191612a2c565b820191905f5260205f20905b815481529060010190602001808311612a0f57829003601f168201915b505050505081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b6060600f612ad0836139cc565b6010604051602001612ae4939291906159dc565b6040516020818303038152906040529050919050565b600d8181548110612b09575f80fd5b905f5260205f20015f915090505481565b600f8054612b2790614efd565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5390614efd565b8015612b9e5780601f10612b7557610100808354040283529160200191612b9e565b820191905f5260205f20905b815481529060010190602001808311612b8157829003601f168201915b505050505081565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c74576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060109081612c8391906154ba565b5050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b60125481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f8111612d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6f90615a56565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612dbd90615a9e565b5f6040518083038185875af1925050503d805f8114612df7576040519150601f19603f3d011682016040523d82523d5f602084013e612dfc565b606091505b5050905080612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790615afc565b60405180910390fd5b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e60156101000a81548160ff02191690831515021790555050565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fde576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613043576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a6131769190615c49565b905090565b5f613187848484613a96565b5f613190613148565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061321d87613aa6565b156132c1575f83600a5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061326f9190614f5a565b8361327a9190614f9b565b9050858110156132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b690615cdd565b60405180910390fd5b505b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461330d9190614f9b565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061336787613ab0565b15806133b257505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050115b1561343f575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134019190615063565b848461340d9190615063565b6134179190614f9b565b90505f5f90505b8181101561343c5761342f89613b12565b808060010191505061341e565b50505b61344886613ab0565b6134d4575f83826134599190615063565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134a29190615063565b6134ac9190614f9b565b90505f5f90505b818110156134d1576134c488613d7d565b80806001019150506134b3565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051613531919061473c565b60405180910390a3600193505050509392505050565b60085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dc90615d45565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364a90615dad565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061370e575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613774575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6137b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137aa90615e15565b60405180910390fd5b6137bb613148565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138069190614f9b565b92505081905550613815613148565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506138688382613fc3565b613872828261431d565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487613924613148565b604051613931919061473c565b60405180910390a350505050565b613947613148565b816139529190614f5a565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461399d91906157a7565b925050819055505f5f90505b818110156139c7576139ba83613d7d565b80806001019150506139a9565b505050565b60605f60016139da8461450a565b0190505f8167ffffffffffffffff8111156139f8576139f7614c4e565b5b6040519080825280601f01601f191660200182016040528015613a2a5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a8b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a8057613a7f615036565b5b0494505f8503613a37575b819350505050919050565b613aa183838361465b565b505050565b5f813b9050919050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b0b5750613b0a82613aa6565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b77576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050613c029190614f9b565b81548110613c1357613c126150fb565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613c6b57613c6a615e33565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003905f5260205f20015f9091909190915055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613de2576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f600d8054905003613e6f5760035f81548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000000006003541115613e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5c90615ed0565b60405180910390fd5b6003549050613ec5565b600d6001600d80549050613e839190614f9b565b81548110613e9457613e936150fb565b5b905f5260205f2001549050600d805480613eb157613eb0615e33565b5b600190038181905f5260205f20015f905590555b5f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f5a576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f64828261431d565b808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f613fcd83613aa6565b1561414a57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061405c9190614f9b565b8154811061406d5761406c6150fb565b5b905f5260205f200154905080600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f2054815481106140d9576140d86150fb565b5b905f5260205f200181905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061413257614131615e33565b5b600190038181905f5260205f20015f905590556142be565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506141d49190614f9b565b815481106141e5576141e46150fb565b5b905f5260205f20015490508060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110614251576142506150fb565b5b905f5260205f20018190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806142aa576142a9615e33565b5b600190038181905f5260205f20015f905590555b600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f208190555060065f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437582613aa6565b1561444257600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144289190614f9b565b600b5f8381526020019081526020015f2081905550614506565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144f09190614f9b565b600b5f8381526020019081526020015f20819055505b5050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161455c5761455b615036565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106145a3576d04ee2d6d415b85acef8100000000838161459957614598615036565b5b0492506020810190505b662386f26fc1000083106145d257662386f26fc1000083816145c8576145c7615036565b5b0492506010810190505b6305f5e10083106145fb576305f5e10083816145f1576145f0615036565b5b0492506008810190505b612710831061462057612710838161461657614615615036565b5b0492506004810190505b60648310614643576064838161463957614638615036565b5b0492506002810190505b600a8310614652576001810190505b80915050919050565b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6146a581614671565b81146146af575f5ffd5b50565b5f813590506146c08161469c565b92915050565b5f602082840312156146db576146da614669565b5b5f6146e8848285016146b2565b91505092915050565b5f8115159050919050565b614705816146f1565b82525050565b5f60208201905061471e5f8301846146fc565b92915050565b5f819050919050565b61473681614724565b82525050565b5f60208201905061474f5f83018461472d565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61479782614755565b6147a1818561475f565b93506147b181856020860161476f565b6147ba8161477d565b840191505092915050565b5f6020820190508181035f8301526147dd818461478d565b905092915050565b6147ee81614724565b81146147f8575f5ffd5b50565b5f81359050614809816147e5565b92915050565b5f6020828403121561482457614823614669565b5b5f614831848285016147fb565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148638261483a565b9050919050565b61487381614859565b82525050565b5f60208201905061488c5f83018461486a565b92915050565b61489b81614859565b81146148a5575f5ffd5b50565b5f813590506148b681614892565b92915050565b5f5f604083850312156148d2576148d1614669565b5b5f6148df858286016148a8565b92505060206148f0858286016147fb565b9150509250929050565b614903816146f1565b811461490d575f5ffd5b50565b5f8135905061491e816148fa565b92915050565b5f6020828403121561493957614938614669565b5b5f61494684828501614910565b91505092915050565b5f5f5f6060848603121561496657614965614669565b5b5f614973868287016148a8565b9350506020614984868287016148a8565b9250506040614995868287016147fb565b9150509250925092565b5f5f604083850312156149b5576149b4614669565b5b5f6149c2858286016147fb565b92505060206149d3858286016147fb565b9150509250929050565b5f6040820190506149f05f83018561486a565b6149fd602083018461472d565b9392505050565b5f60ff82169050919050565b614a1981614a04565b82525050565b5f602082019050614a325f830184614a10565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112614a5957614a58614a38565b5b8235905067ffffffffffffffff811115614a7657614a75614a3c565b5b602083019150836020820283011115614a9257614a91614a40565b5b9250929050565b5f5f5f5f60608587031215614ab157614ab0614669565b5b5f614abe878288016148a8565b9450506020614acf878288016148a8565b935050604085013567ffffffffffffffff811115614af057614aef61466d565b5b614afc87828801614a44565b925092505092959194509250565b5f60208284031215614b1f57614b1e614669565b5b5f614b2c848285016148a8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6781614724565b82525050565b5f614b788383614b5e565b60208301905092915050565b5f602082019050919050565b5f614b9a82614b35565b614ba48185614b3f565b9350614baf83614b4f565b805f5b83811015614bdf578151614bc68882614b6d565b9750614bd183614b84565b925050600181019050614bb2565b5085935050505092915050565b5f6020820190508181035f830152614c048184614b90565b905092915050565b5f5f60408385031215614c2257614c21614669565b5b5f614c2f858286016148a8565b9250506020614c4085828601614910565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614c848261477d565b810181811067ffffffffffffffff82111715614ca357614ca2614c4e565b5b80604052505050565b5f614cb5614660565b9050614cc18282614c7b565b919050565b5f67ffffffffffffffff821115614ce057614cdf614c4e565b5b614ce98261477d565b9050602081019050919050565b828183375f83830152505050565b5f614d16614d1184614cc6565b614cac565b905082815260208101848484011115614d3257614d31614c4a565b5b614d3d848285614cf6565b509392505050565b5f82601f830112614d5957614d58614a38565b5b8135614d69848260208601614d04565b91505092915050565b5f60208284031215614d8757614d86614669565b5b5f82013567ffffffffffffffff811115614da457614da361466d565b5b614db084828501614d45565b91505092915050565b5f5f83601f840112614dce57614dcd614a38565b5b8235905067ffffffffffffffff811115614deb57614dea614a3c565b5b602083019150836001820283011115614e0757614e06614a40565b5b9250929050565b5f5f5f5f5f60808688031215614e2757614e26614669565b5b5f614e34888289016148a8565b9550506020614e45888289016148a8565b9450506040614e56888289016147fb565b935050606086013567ffffffffffffffff811115614e7757614e7661466d565b5b614e8388828901614db9565b92509250509295509295909350565b5f5f60408385031215614ea857614ea7614669565b5b5f614eb5858286016148a8565b9250506020614ec6858286016148a8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614f1457607f821691505b602082108103614f2757614f26614ed0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f6482614724565b9150614f6f83614724565b9250828202614f7d81614724565b91508282048414831517614f9457614f93614f2d565b5b5092915050565b5f614fa582614724565b9150614fb083614724565b9250828203905081811115614fc857614fc7614f2d565b5b92915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e00000000000000000000005f82015250565b5f61500260158361475f565b915061500d82614fce565b602082019050919050565b5f6020820190508181035f83015261502f81614ff6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506d82614724565b915061507883614724565b92508261508857615087615036565b5b828204905092915050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6150c760138361475f565b91506150d282615093565b602082019050919050565b5f6020820190508181035f8301526150f4816150bb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61515c60198361475f565b915061516782615128565b602082019050919050565b5f6020820190508181035f83015261518981615150565b9050919050565b7f546f6b656e2049447320617272617920697320656d70747900000000000000005f82015250565b5f6151c460188361475f565b91506151cf82615190565b602082019050919050565b5f6020820190508181035f8301526151f1816151b8565b9050919050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000005f82015250565b5f61522c60198361475f565b9150615237826151f8565b602082019050919050565b5f6020820190508181035f83015261525981615220565b9050919050565b5f82825260208201905092915050565b50565b5f61527e5f83615260565b915061528982615270565b5f82019050919050565b5f6080820190506152a65f83018661486a565b6152b3602083018561486a565b6152c0604083018461472d565b81810360608301526152d181615273565b9050949350505050565b5f815190506152e98161469c565b92915050565b5f6020828403121561530457615303614669565b5b5f615311848285016152db565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026153767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261533b565b615380868361533b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6153bb6153b66153b184614724565b615398565b614724565b9050919050565b5f819050919050565b6153d4836153a1565b6153e86153e0826153c2565b848454615347565b825550505050565b5f5f905090565b6153ff6153f0565b61540a8184846153cb565b505050565b5b8181101561542d576154225f826153f7565b600181019050615410565b5050565b601f821115615472576154438161531a565b61544c8461532c565b8101602085101561545b578190505b61546f6154678561532c565b83018261540f565b50505b505050565b5f82821c905092915050565b5f6154925f1984600802615477565b1980831691505092915050565b5f6154aa8383615483565b9150826002028217905092915050565b6154c382614755565b67ffffffffffffffff8111156154dc576154db614c4e565b5b6154e68254614efd565b6154f1828285615431565b5f60209050601f831160018114615522575f8415615510578287015190505b61551a858261549f565b865550615581565b601f1984166155308661531a565b5f5b8281101561555757848901518255600182019150602085019450602081019050615532565b868310156155745784890151615570601f891682615483565b8355505b6001600288020188555050505b505050505050565b5f81519050615597816147e5565b92915050565b5f602082840312156155b2576155b1614669565b5b5f6155bf84828501615589565b91505092915050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f6155fc60158361475f565b9150615607826155c8565b602082019050919050565b5f6020820190508181035f830152615629816155f0565b9050919050565b5f8151905061563e816148fa565b92915050565b5f6020828403121561565957615658614669565b5b5f61566684828501615630565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6156a360158361475f565b91506156ae8261566f565b602082019050919050565b5f6020820190508181035f8301526156d081615697565b9050919050565b7f4d696e74696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61570b60168361475f565b9150615716826156d7565b602082019050919050565b5f6020820190508181035f830152615738816156ff565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e00005f82015250565b5f615773601e8361475f565b915061577e8261573f565b602082019050919050565b5f6020820190508181035f8301526157a081615767565b9050919050565b5f6157b182614724565b91506157bc83614724565b92508282019050808211156157d4576157d3614f2d565b5b92915050565b7f46696e6973686564206d696e74696e672e0000000000000000000000000000005f82015250565b5f61580e60118361475f565b9150615819826157da565b602082019050919050565b5f6020820190508181035f83015261583b81615802565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e0000000000000000000000005f82015250565b5f61587660148361475f565b915061588182615842565b602082019050919050565b5f6020820190508181035f8301526158a38161586a565b9050919050565b5f6158b58385615260565b93506158c2838584614cf6565b6158cb8361477d565b840190509392505050565b5f6080820190506158e95f83018861486a565b6158f6602083018761486a565b615903604083018661472d565b81810360608301526159168184866158aa565b90509695505050505050565b5f81905092915050565b5f815461593881614efd565b6159428186615922565b9450600182165f811461595c5760018114615971576159a3565b60ff19831686528115158202860193506159a3565b61597a8561531a565b5f5b8381101561599b5781548189015260018201915060208101905061597c565b838801955050505b50505092915050565b5f6159b682614755565b6159c08185615922565b93506159d081856020860161476f565b80840191505092915050565b5f6159e7828661592c565b91506159f382856159ac565b91506159ff828461592c565b9150819050949350505050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f615a4060128361475f565b9150615a4b82615a0c565b602082019050919050565b5f6020820190508181035f830152615a6d81615a34565b9050919050565b5f81905092915050565b5f615a895f83615a74565b9150615a9482615270565b5f82019050919050565b5f615aa882615a7e565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f615ae660158361475f565b9150615af182615ab2565b602082019050919050565b5f6020820190508181035f830152615b1381615ada565b9050919050565b5f8160011c9050919050565b5f5f8291508390505b6001851115615b6f57808604811115615b4b57615b4a614f2d565b5b6001851615615b5a5780820291505b8081029050615b6885615b1a565b9450615b2f565b94509492505050565b5f82615b875760019050615c42565b81615b94575f9050615c42565b8160018114615baa5760028114615bb457615be3565b6001915050615c42565b60ff841115615bc657615bc5614f2d565b5b8360020a915084821115615bdd57615bdc614f2d565b5b50615c42565b5060208310610133831016604e8410600b8410161715615c185782820a905083811115615c1357615c12614f2d565b5b615c42565b615c258484846001615b26565b92509050818404811115615c3c57615c3b614f2d565b5b81810290505b9392505050565b5f615c5382614724565b9150615c5e83614a04565b9250615c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615b78565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000005f82015250565b5f615cc760198361475f565b9150615cd282615c93565b602082019050919050565b5f6020820190508181035f830152615cf481615cbb565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e00000000005f82015250565b5f615d2f601b8361475f565b9150615d3a82615cfb565b602082019050919050565b5f6020820190508181035f830152615d5c81615d23565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000005f82015250565b5f615d97601c8361475f565b9150615da282615d63565b602082019050919050565b5f6020820190508181035f830152615dc481615d8b565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e000000000000005f82015250565b5f615dff60198361475f565b9150615e0a82615dcb565b602082019050919050565b5f6020820190508181035f830152615e2c81615df3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e20737570705f8201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615eba60238361475f565b9150615ec582615e60565b604082019050919050565b5f6020820190508181035f830152615ee781615eae565b905091905056fea2646970667358221220f7a83d712f6f3fbf8129db1d1234deacb8d5a6aff16be7c2cc43bbc505326d8264736f6c634300081c0033697066733a2f2f6261667962656963337176756c366a75696737783270787669356e727763767a69373737647a783661796e6b3363697377346a73637776713369652f
Deployed Bytecode
0x608060405260043610610384575f3560e01c80637c6e551d116101d0578063b88d4fde11610101578063da3ef23f1161009f578063e985e9c51161006e578063e985e9c514610d4a578063ee1cc94414610d86578063ef1f3ebb14610dae578063f2fde38b14610dea5761038b565b8063da3ef23f14610ca6578063dd62ed3e14610cce578063de7fcb1d14610d0a578063e086e5ec14610d345761038b565b8063c87b56dd116100db578063c87b56dd14610bc8578063d528d11814610c04578063d547cfb714610c40578063d9adc19114610c6a5761038b565b8063b88d4fde14610b4e578063c668286214610b76578063c6f6f21614610ba05761038b565b80639b19251a1161016e578063a0712d6811610148578063a0712d6814610aa4578063a21b5fe914610ac0578063a22cb46514610aea578063a9059cbb14610b125761038b565b80639b19251a14610a145780639fbc871314610a50578063a035b1fe14610a7a5761038b565b80638da5cb5b116101aa5780638da5cb5b146109705780638dc251e31461099a57806391b7f5ed146109c257806395d89b41146109ea5761038b565b80637c6e551d146108f457806381456f481461091e57806389476069146109485761038b565b8063313ce567116102b55780634f07de09116102535780636352211e116102225780636352211e1461081657806366e3e5e41461085257806370a082311461088e57806378e97925146108ca5761038b565b80634f07de091461077457806353d6fd591461079c57806355f804b3146107c45780635c975abb146107ec5761038b565b806342842e0e1161028f57806342842e0e146106be578063438b6300146106e6578063484b973c146107225780634f02c4201461074a5761038b565b8063313ce567146106445780633593cebc1461066e5780633e0a322d146106965761038b565b80631ae243661161032257806325fd90f3116102fc57806325fd90f31461058b5780632a55205a146105b55780632b968958146105f25780632f745c59146106085761038b565b80631ae24366146104e95780632154dc391461052557806323b872dd1461054f5761038b565b8063081812fc1161035e578063081812fc1461041f578063095ea7b31461045b57806316c38b3c1461049757806318160ddd146104bf5761038b565b806301ffc9a71461038f57806304bdc76b146103cb57806306fdde03146103f55761038b565b3661038b57005b5f5ffd5b34801561039a575f5ffd5b506103b560048036038101906103b091906146c6565b610e12565b6040516103c2919061470b565b60405180910390f35b3480156103d6575f5ffd5b506103df610f42565b6040516103ec919061473c565b60405180910390f35b348015610400575f5ffd5b50610409610f4e565b60405161041691906147c5565b60405180910390f35b34801561042a575f5ffd5b506104456004803603810190610440919061480f565b610fda565b6040516104529190614879565b60405180910390f35b348015610466575f5ffd5b50610481600480360381019061047c91906148bc565b61100a565b60405161048e919061470b565b60405180910390f35b3480156104a2575f5ffd5b506104bd60048036038101906104b89190614924565b6112f1565b005b3480156104ca575f5ffd5b506104d3611393565b6040516104e0919061473c565b60405180910390f35b3480156104f4575f5ffd5b5061050f600480360381019061050a91906148bc565b6113b7565b60405161051c919061470b565b60405180910390f35b348015610530575f5ffd5b50610539611463565b604051610546919061473c565b60405180910390f35b34801561055a575f5ffd5b506105756004803603810190610570919061494f565b611469565b604051610582919061470b565b60405180910390f35b348015610596575f5ffd5b5061059f6115f1565b6040516105ac919061470b565b60405180910390f35b3480156105c0575f5ffd5b506105db60048036038101906105d6919061499f565b611614565b6040516105e99291906149dd565b60405180910390f35b3480156105fd575f5ffd5b5061060661165e565b005b348015610613575f5ffd5b5061062e600480360381019061062991906148bc565b61177e565b60405161063b919061473c565b60405180910390f35b34801561064f575f5ffd5b50610658611861565b6040516106659190614a1f565b60405180910390f35b348015610679575f5ffd5b50610694600480360381019061068f9190614a99565b611885565b005b3480156106a1575f5ffd5b506106bc60048036038101906106b7919061480f565b6119fc565b005b3480156106c9575f5ffd5b506106e460048036038101906106df919061494f565b611a8b565b005b3480156106f1575f5ffd5b5061070c60048036038101906107079190614b0a565b611bbb565b6040516107199190614bec565b60405180910390f35b34801561072d575f5ffd5b50610748600480360381019061074391906148bc565b611c9b565b005b348015610755575f5ffd5b5061075e611d2e565b60405161076b919061473c565b60405180910390f35b34801561077f575f5ffd5b5061079a6004803603810190610795919061480f565b611d34565b005b3480156107a7575f5ffd5b506107c260048036038101906107bd9190614c0c565b611dc3565b005b3480156107cf575f5ffd5b506107ea60048036038101906107e59190614d72565b611ea0565b005b3480156107f7575f5ffd5b50610800611f38565b60405161080d919061470b565b60405180910390f35b348015610821575f5ffd5b5061083c6004803603810190610837919061480f565b611f4b565b6040516108499190614879565b60405180910390f35b34801561085d575f5ffd5b5061087860048036038101906108739190614b0a565b611fe9565b604051610885919061473c565b60405180910390f35b348015610899575f5ffd5b506108b460048036038101906108af9190614b0a565b61208c565b6040516108c1919061473c565b60405180910390f35b3480156108d5575f5ffd5b506108de6120a1565b6040516108eb919061473c565b60405180910390f35b3480156108ff575f5ffd5b506109086120a7565b604051610915919061473c565b60405180910390f35b348015610929575f5ffd5b506109326120ad565b60405161093f919061473c565b60405180910390f35b348015610953575f5ffd5b5061096e60048036038101906109699190614b0a565b6120d1565b005b34801561097b575f5ffd5b506109846122f6565b6040516109919190614879565b60405180910390f35b3480156109a5575f5ffd5b506109c060048036038101906109bb9190614b0a565b61231a565b005b3480156109cd575f5ffd5b506109e860048036038101906109e3919061480f565b6123e2565b005b3480156109f5575f5ffd5b506109fe612471565b604051610a0b91906147c5565b60405180910390f35b348015610a1f575f5ffd5b50610a3a6004803603810190610a359190614b0a565b6124fd565b604051610a47919061470b565b60405180910390f35b348015610a5b575f5ffd5b50610a6461251a565b604051610a719190614879565b60405180910390f35b348015610a85575f5ffd5b50610a8e61253f565b604051610a9b919061473c565b60405180910390f35b610abe6004803603810190610ab9919061480f565b612545565b005b348015610acb575f5ffd5b50610ad461275a565b604051610ae1919061470b565b60405180910390f35b348015610af5575f5ffd5b50610b106004803603810190610b0b9190614c0c565b612766565b005b348015610b1d575f5ffd5b50610b386004803603810190610b3391906148bc565b61285e565b604051610b45919061470b565b60405180910390f35b348015610b59575f5ffd5b50610b746004803603810190610b6f9190614e0e565b612872565b005b348015610b81575f5ffd5b50610b8a6129a8565b604051610b9791906147c5565b60405180910390f35b348015610bab575f5ffd5b50610bc66004803603810190610bc1919061480f565b612a34565b005b348015610bd3575f5ffd5b50610bee6004803603810190610be9919061480f565b612ac3565b604051610bfb91906147c5565b60405180910390f35b348015610c0f575f5ffd5b50610c2a6004803603810190610c25919061480f565b612afa565b604051610c37919061473c565b60405180910390f35b348015610c4b575f5ffd5b50610c54612b1a565b604051610c6191906147c5565b60405180910390f35b348015610c75575f5ffd5b50610c906004803603810190610c8b9190614b0a565b612ba6565b604051610c9d919061473c565b60405180910390f35b348015610cb1575f5ffd5b50610ccc6004803603810190610cc79190614d72565b612bef565b005b348015610cd9575f5ffd5b50610cf46004803603810190610cef9190614e92565b612c87565b604051610d01919061473c565b60405180910390f35b348015610d15575f5ffd5b50610d1e612ca7565b604051610d2b919061473c565b60405180910390f35b348015610d3f575f5ffd5b50610d48612cad565b005b348015610d55575f5ffd5b50610d706004803603810190610d6b9190614e92565b612e44565b604051610d7d919061470b565b60405180910390f35b348015610d91575f5ffd5b50610dac6004803603810190610da79190614924565b612e6e565b005b348015610db9575f5ffd5b50610dd46004803603810190610dcf9190614b0a565b612f10565b604051610de1919061473c565b60405180910390f35b348015610df5575f5ffd5b50610e106004803603810190610e0b9190614b0a565b612f59565b005b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610edc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f2b5750632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f3b5750610f3a826130df565b5b9050919050565b5f600d80549050905090565b60018054610f5b90614efd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790614efd565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561101c57505f82115b15611204575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611113575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561114a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516111f6919061473c565b60405180910390a3506112e7565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112de919061473c565b60405180910390a35b6001905092915050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611376576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e60146101000a81548160ff02191690831515021790555050565b7f00000000000000000000000000000000000000000000000ad78ebc5ac620000081565b5f5f6113c1613148565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061140c9190614f5a565b60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114549190614f9b565b90508281101591505092915050565b60115481565b5f5f60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152090615018565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d957828161155c9190614f9b565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6115e485858561317b565b5060019150509392505050565b5f600e60159054906101000a900460ff168061160f57506015544210155b905090565b5f5f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612710601454856116499190614f5a565b6116539190615063565b915091509250929050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116e3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508210611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f8906150dd565b60405180910390fd5b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082815481106118505761184f6150fb565b5b905f5260205f200154905092915050565b7f000000000000000000000000000000000000000000000000000000000000001281565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90615172565b60405180910390fd5b5f8282905011611938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192f906151da565b60405180910390fd5b5f5f90505b828290508110156119f5575f83838381811061195c5761195b6150fb565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661198582611f4b565b73ffffffffffffffffffffffffffffffffffffffff16146119db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d290615242565b60405180910390fd5b6119e733878784613547565b50808060010191505061193d565b5050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060158190555050565b611a9733848484613547565b5f8273ffffffffffffffffffffffffffffffffffffffff163b14158015611b7f575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b8152600401611b1d93929190615293565b6020604051808303815f875af1158015611b39573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5d91906152ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611bb6576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60605f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905090505f8167ffffffffffffffff811115611c1c57611c1b614c4e565b5b604051908082528060200260200182016040528015611c4a5781602001602082028036833780820191505090505b5090505f5f90505b82811015611c9057611c64858261177e565b828281518110611c7757611c766150fb565b5b6020026020010181815250508080600101915050611c52565b508092505050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d20576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2a828261393f565b5050565b60035481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611db9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060148190555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e48576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f9081611f3491906154ba565b5050565b600e60149054906101000a900460ff1681565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f611ff2613148565b600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061203d9190614f5a565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546120859190614f9b565b9050919050565b6004602052805f5260405f205f915090505481565b60155481565b60145481565b7f00000000000000000000000000000000000000000000000000000000000000c881565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612156576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121949190614879565b602060405180830381865afa1580156121af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d3919061559d565b90505f8111612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90615612565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016122729291906149dd565b6020604051808303815f875af115801561228e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b29190615644565b6122f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e8906156b9565b60405180910390fd5b505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461239f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612467576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060138190555050565b6002805461247e90614efd565b80601f01602080910402602001604051908101604052809291908181526020018280546124aa90614efd565b80156124f55780601f106124cc576101008083540402835291602001916124f5565b820191905f5260205f20905b8154815290600101906020018083116124d857829003601f168201915b505050505081565b600c602052805f5260405f205f915054906101000a900460ff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b61254d6115f1565b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390615721565b60405180910390fd5b600e60149054906101000a900460ff16156125a5575f5ffd5b6012548111156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190615789565b60405180910390fd5b601154816003546125fb91906157a7565b111561263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390615824565b60405180910390fd5b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126e0576013548161269d9190614f5a565b3410156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d69061588c565b60405180910390fd5b5b5f34111561274d575f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f1935050505015801561274b573d5f5f3e3d5ffd5b505b612757338261393f565b50565b5f601554421015905090565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612852919061470b565b60405180910390a35050565b5f61286a33848461317b565b905092915050565b61287e33868686613547565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1415801561296a575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016129089594939291906158d6565b6020604051808303815f875af1158015612924573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294891906152ef565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b156129a1576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b601080546129b590614efd565b80601f01602080910402602001604051908101604052809291908181526020018280546129e190614efd565b8015612a2c5780601f10612a0357610100808354040283529160200191612a2c565b820191905f5260205f20905b815481529060010190602001808311612a0f57829003601f168201915b505050505081565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ab9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060128190555050565b6060600f612ad0836139cc565b6010604051602001612ae4939291906159dc565b6040516020818303038152906040529050919050565b600d8181548110612b09575f80fd5b905f5260205f20015f915090505481565b600f8054612b2790614efd565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5390614efd565b8015612b9e5780601f10612b7557610100808354040283529160200191612b9e565b820191905f5260205f20905b815481529060010190602001808311612b8157829003601f168201915b505050505081565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c74576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060109081612c8391906154ba565b5050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b60125481565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d32576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f4790505f8111612d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6f90615a56565b60405180910390fd5b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612dbd90615a9e565b5f6040518083038185875af1925050503d805f8114612df7576040519150601f19603f3d011682016040523d82523d5f602084013e612dfc565b606091505b5050905080612e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3790615afc565b60405180910390fd5b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef3576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e60156101000a81548160ff02191690831515021790555050565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fde576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613043576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a6131769190615c49565b905090565b5f613187848484613a96565b5f613190613148565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061321d87613aa6565b156132c1575f83600a5f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061326f9190614f5a565b8361327a9190614f9b565b9050858110156132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b690615cdd565b60405180910390fd5b505b8460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461330d9190614f9b565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555061336787613ab0565b15806133b257505f60095f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050115b1561343f575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134019190615063565b848461340d9190615063565b6134179190614f9b565b90505f5f90505b8181101561343c5761342f89613b12565b808060010191505061341e565b50505b61344886613ab0565b6134d4575f83826134599190615063565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134a29190615063565b6134ac9190614f9b565b90505f5f90505b818110156134d1576134c488613d7d565b80806001019150506134b3565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051613531919061473c565b60405180910390a3600193505050509392505050565b60085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146135e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dc90615d45565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364a90615dad565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061370e575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80613774575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b6137b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137aa90615e15565b60405180910390fd5b6137bb613148565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138069190614f9b565b92505081905550613815613148565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055506138688382613fc3565b613872828261431d565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487613924613148565b604051613931919061473c565b60405180910390a350505050565b613947613148565b816139529190614f5a565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461399d91906157a7565b925050819055505f5f90505b818110156139c7576139ba83613d7d565b80806001019150506139a9565b505050565b60605f60016139da8461450a565b0190505f8167ffffffffffffffff8111156139f8576139f7614c4e565b5b6040519080825280601f01601f191660200182016040528015613a2a5781602001600182028036833780820191505090505b5090505f82602001820190505b600115613a8b578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581613a8057613a7f615036565b5b0494505f8503613a37575b819350505050919050565b613aa183838361465b565b505050565b5f813b9050919050565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613b0b5750613b0a82613aa6565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613b77576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050613c029190614f9b565b81548110613c1357613c126150fb565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613c6b57613c6a615e33565b5b600190038181905f5260205f20015f90559055600b5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600d81908060018154018082558091505060019003905f5260205f20015f9091909190915055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613de2576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f600d8054905003613e6f5760035f81548092919060010191905055507f00000000000000000000000000000000000000000000000000000000000000c86003541115613e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5c90615ed0565b60405180910390fd5b6003549050613ec5565b600d6001600d80549050613e839190614f9b565b81548110613e9457613e936150fb565b5b905f5260205f2001549050600d805480613eb157613eb0615e33565b5b600190038181905f5260205f20015f905590555b5f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613f5a576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f64828261431d565b808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f613fcd83613aa6565b1561414a57600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061405c9190614f9b565b8154811061406d5761406c6150fb565b5b905f5260205f200154905080600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f2054815481106140d9576140d86150fb565b5b905f5260205f200181905550600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080548061413257614131615e33565b5b600190038181905f5260205f20015f905590556142be565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506141d49190614f9b565b815481106141e5576141e46150fb565b5b905f5260205f20015490508060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600b5f8581526020019081526020015f205481548110614251576142506150fb565b5b905f5260205f20018190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806142aa576142a9615e33565b5b600190038181905f5260205f20015f905590555b600b5f8381526020019081526020015f2054600b5f8381526020019081526020015f208190555060065f8381526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050565b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437582613aa6565b1561444257600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f90919091909150556001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144289190614f9b565b600b5f8381526020019081526020015f2081905550614506565b60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506144f09190614f9b565b600b5f8381526020019081526020015f20819055505b5050565b5f5f5f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614566577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161455c5761455b615036565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106145a3576d04ee2d6d415b85acef8100000000838161459957614598615036565b5b0492506020810190505b662386f26fc1000083106145d257662386f26fc1000083816145c8576145c7615036565b5b0492506010810190505b6305f5e10083106145fb576305f5e10083816145f1576145f0615036565b5b0492506008810190505b612710831061462057612710838161461657614615615036565b5b0492506004810190505b60648310614643576064838161463957614638615036565b5b0492506002810190505b600a8310614652576001810190505b80915050919050565b505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6146a581614671565b81146146af575f5ffd5b50565b5f813590506146c08161469c565b92915050565b5f602082840312156146db576146da614669565b5b5f6146e8848285016146b2565b91505092915050565b5f8115159050919050565b614705816146f1565b82525050565b5f60208201905061471e5f8301846146fc565b92915050565b5f819050919050565b61473681614724565b82525050565b5f60208201905061474f5f83018461472d565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61479782614755565b6147a1818561475f565b93506147b181856020860161476f565b6147ba8161477d565b840191505092915050565b5f6020820190508181035f8301526147dd818461478d565b905092915050565b6147ee81614724565b81146147f8575f5ffd5b50565b5f81359050614809816147e5565b92915050565b5f6020828403121561482457614823614669565b5b5f614831848285016147fb565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6148638261483a565b9050919050565b61487381614859565b82525050565b5f60208201905061488c5f83018461486a565b92915050565b61489b81614859565b81146148a5575f5ffd5b50565b5f813590506148b681614892565b92915050565b5f5f604083850312156148d2576148d1614669565b5b5f6148df858286016148a8565b92505060206148f0858286016147fb565b9150509250929050565b614903816146f1565b811461490d575f5ffd5b50565b5f8135905061491e816148fa565b92915050565b5f6020828403121561493957614938614669565b5b5f61494684828501614910565b91505092915050565b5f5f5f6060848603121561496657614965614669565b5b5f614973868287016148a8565b9350506020614984868287016148a8565b9250506040614995868287016147fb565b9150509250925092565b5f5f604083850312156149b5576149b4614669565b5b5f6149c2858286016147fb565b92505060206149d3858286016147fb565b9150509250929050565b5f6040820190506149f05f83018561486a565b6149fd602083018461472d565b9392505050565b5f60ff82169050919050565b614a1981614a04565b82525050565b5f602082019050614a325f830184614a10565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112614a5957614a58614a38565b5b8235905067ffffffffffffffff811115614a7657614a75614a3c565b5b602083019150836020820283011115614a9257614a91614a40565b5b9250929050565b5f5f5f5f60608587031215614ab157614ab0614669565b5b5f614abe878288016148a8565b9450506020614acf878288016148a8565b935050604085013567ffffffffffffffff811115614af057614aef61466d565b5b614afc87828801614a44565b925092505092959194509250565b5f60208284031215614b1f57614b1e614669565b5b5f614b2c848285016148a8565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b6781614724565b82525050565b5f614b788383614b5e565b60208301905092915050565b5f602082019050919050565b5f614b9a82614b35565b614ba48185614b3f565b9350614baf83614b4f565b805f5b83811015614bdf578151614bc68882614b6d565b9750614bd183614b84565b925050600181019050614bb2565b5085935050505092915050565b5f6020820190508181035f830152614c048184614b90565b905092915050565b5f5f60408385031215614c2257614c21614669565b5b5f614c2f858286016148a8565b9250506020614c4085828601614910565b9150509250929050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614c848261477d565b810181811067ffffffffffffffff82111715614ca357614ca2614c4e565b5b80604052505050565b5f614cb5614660565b9050614cc18282614c7b565b919050565b5f67ffffffffffffffff821115614ce057614cdf614c4e565b5b614ce98261477d565b9050602081019050919050565b828183375f83830152505050565b5f614d16614d1184614cc6565b614cac565b905082815260208101848484011115614d3257614d31614c4a565b5b614d3d848285614cf6565b509392505050565b5f82601f830112614d5957614d58614a38565b5b8135614d69848260208601614d04565b91505092915050565b5f60208284031215614d8757614d86614669565b5b5f82013567ffffffffffffffff811115614da457614da361466d565b5b614db084828501614d45565b91505092915050565b5f5f83601f840112614dce57614dcd614a38565b5b8235905067ffffffffffffffff811115614deb57614dea614a3c565b5b602083019150836001820283011115614e0757614e06614a40565b5b9250929050565b5f5f5f5f5f60808688031215614e2757614e26614669565b5b5f614e34888289016148a8565b9550506020614e45888289016148a8565b9450506040614e56888289016147fb565b935050606086013567ffffffffffffffff811115614e7757614e7661466d565b5b614e8388828901614db9565b92509250509295509295909350565b5f5f60408385031215614ea857614ea7614669565b5b5f614eb5858286016148a8565b9250506020614ec6858286016148a8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614f1457607f821691505b602082108103614f2757614f26614ed0565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614f6482614724565b9150614f6f83614724565b9250828202614f7d81614724565b91508282048414831517614f9457614f93614f2d565b5b5092915050565b5f614fa582614724565b9150614fb083614724565b9250828203905081811115614fc857614fc7614f2d565b5b92915050565b7f4e6f7420656e6f75676820616c6c6f77616e63652e00000000000000000000005f82015250565b5f61500260158361475f565b915061500d82614fce565b602082019050919050565b5f6020820190508181035f83015261502f81614ff6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61506d82614724565b915061507883614724565b92508261508857615087615036565b5b828204905092915050565b7f496e646578206f7574206f6620626f756e6473000000000000000000000000005f82015250565b5f6150c760138361475f565b91506150d282615093565b602082019050919050565b5f6020820190508181035f8301526150f4816150bb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f61515c60198361475f565b915061516782615128565b602082019050919050565b5f6020820190508181035f83015261518981615150565b9050919050565b7f546f6b656e2049447320617272617920697320656d70747900000000000000005f82015250565b5f6151c460188361475f565b91506151cf82615190565b602082019050919050565b5f6020820190508181035f8301526151f1816151b8565b9050919050565b7f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000005f82015250565b5f61522c60198361475f565b9150615237826151f8565b602082019050919050565b5f6020820190508181035f83015261525981615220565b9050919050565b5f82825260208201905092915050565b50565b5f61527e5f83615260565b915061528982615270565b5f82019050919050565b5f6080820190506152a65f83018661486a565b6152b3602083018561486a565b6152c0604083018461472d565b81810360608301526152d181615273565b9050949350505050565b5f815190506152e98161469c565b92915050565b5f6020828403121561530457615303614669565b5b5f615311848285016152db565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026153767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261533b565b615380868361533b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6153bb6153b66153b184614724565b615398565b614724565b9050919050565b5f819050919050565b6153d4836153a1565b6153e86153e0826153c2565b848454615347565b825550505050565b5f5f905090565b6153ff6153f0565b61540a8184846153cb565b505050565b5b8181101561542d576154225f826153f7565b600181019050615410565b5050565b601f821115615472576154438161531a565b61544c8461532c565b8101602085101561545b578190505b61546f6154678561532c565b83018261540f565b50505b505050565b5f82821c905092915050565b5f6154925f1984600802615477565b1980831691505092915050565b5f6154aa8383615483565b9150826002028217905092915050565b6154c382614755565b67ffffffffffffffff8111156154dc576154db614c4e565b5b6154e68254614efd565b6154f1828285615431565b5f60209050601f831160018114615522575f8415615510578287015190505b61551a858261549f565b865550615581565b601f1984166155308661531a565b5f5b8281101561555757848901518255600182019150602085019450602081019050615532565b868310156155745784890151615570601f891682615483565b8355505b6001600288020188555050505b505050505050565b5f81519050615597816147e5565b92915050565b5f602082840312156155b2576155b1614669565b5b5f6155bf84828501615589565b91505092915050565b7f4e6f20746f6b656e7320746f20776974686472617700000000000000000000005f82015250565b5f6155fc60158361475f565b9150615607826155c8565b602082019050919050565b5f6020820190508181035f830152615629816155f0565b9050919050565b5f8151905061563e816148fa565b92915050565b5f6020828403121561565957615658614669565b5b5f61566684828501615630565b91505092915050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6156a360158361475f565b91506156ae8261566f565b602082019050919050565b5f6020820190508181035f8301526156d081615697565b9050919050565b7f4d696e74696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61570b60168361475f565b9150615716826156d7565b602082019050919050565b5f6020820190508181035f830152615738816156ff565b9050919050565b7f43616e6e6f74206d696e742074686174206d616e79206174206f6e63652e00005f82015250565b5f615773601e8361475f565b915061577e8261573f565b602082019050919050565b5f6020820190508181035f8301526157a081615767565b9050919050565b5f6157b182614724565b91506157bc83614724565b92508282019050808211156157d4576157d3614f2d565b5b92915050565b7f46696e6973686564206d696e74696e672e0000000000000000000000000000005f82015250565b5f61580e60118361475f565b9150615819826157da565b602082019050919050565b5f6020820190508181035f83015261583b81615802565b9050919050565b7f4e6f7420656e6f7567682046544d2073656e742e0000000000000000000000005f82015250565b5f61587660148361475f565b915061588182615842565b602082019050919050565b5f6020820190508181035f8301526158a38161586a565b9050919050565b5f6158b58385615260565b93506158c2838584614cf6565b6158cb8361477d565b840190509392505050565b5f6080820190506158e95f83018861486a565b6158f6602083018761486a565b615903604083018661472d565b81810360608301526159168184866158aa565b90509695505050505050565b5f81905092915050565b5f815461593881614efd565b6159428186615922565b9450600182165f811461595c5760018114615971576159a3565b60ff19831686528115158202860193506159a3565b61597a8561531a565b5f5b8381101561599b5781548189015260018201915060208101905061597c565b838801955050505b50505092915050565b5f6159b682614755565b6159c08185615922565b93506159d081856020860161476f565b80840191505092915050565b5f6159e7828661592c565b91506159f382856159ac565b91506159ff828461592c565b9150819050949350505050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f615a4060128361475f565b9150615a4b82615a0c565b602082019050919050565b5f6020820190508181035f830152615a6d81615a34565b9050919050565b5f81905092915050565b5f615a895f83615a74565b9150615a9482615270565b5f82019050919050565b5f615aa882615a7e565b9150819050919050565b7f455448207769746864726177616c206661696c656400000000000000000000005f82015250565b5f615ae660158361475f565b9150615af182615ab2565b602082019050919050565b5f6020820190508181035f830152615b1381615ada565b9050919050565b5f8160011c9050919050565b5f5f8291508390505b6001851115615b6f57808604811115615b4b57615b4a614f2d565b5b6001851615615b5a5780820291505b8081029050615b6885615b1a565b9450615b2f565b94509492505050565b5f82615b875760019050615c42565b81615b94575f9050615c42565b8160018114615baa5760028114615bb457615be3565b6001915050615c42565b60ff841115615bc657615bc5614f2d565b5b8360020a915084821115615bdd57615bdc614f2d565b5b50615c42565b5060208310610133831016604e8410600b8410161715615c185782820a905083811115615c1357615c12614f2d565b5b615c42565b615c258484846001615b26565b92509050818404811115615c3c57615c3b614f2d565b5b81810290505b9392505050565b5f615c5382614724565b9150615c5e83614a04565b9250615c8b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615b78565b905092915050565b7f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000005f82015250565b5f615cc760198361475f565b9150615cd282615c93565b602082019050919050565b5f6020820190508181035f830152615cf481615cbb565b9050919050565b7f53656e646572206973206e6f74206f776e6572206f66204e46542e00000000005f82015250565b5f615d2f601b8361475f565b9150615d3a82615cfb565b602082019050919050565b5f6020820190508181035f830152615d5c81615d23565b9050919050565b7f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000005f82015250565b5f615d97601c8361475f565b9150615da282615d63565b602082019050919050565b5f6020820190508181035f830152615dc481615d8b565b9050919050565b7f4f70657261746f72206973206e6f7420617070726f7665642e000000000000005f82015250565b5f615dff60198361475f565b9150615e0a82615dcb565b602082019050919050565b5f6020820190508181035f830152615e2c81615df3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f43616e6e6f74206d696e74206d6f7265207468616e20676976656e20737570705f8201527f6c792e0000000000000000000000000000000000000000000000000000000000602082015250565b5f615eba60238361475f565b9150615ec582615e60565b604082019050919050565b5f6020820190508181035f830152615ee781615eae565b905091905056fea2646970667358221220f7a83d712f6f3fbf8129db1d1234deacb8d5a6aff16be7c2cc43bbc505326d8264736f6c634300081c0033
Deployed Bytecode Sourcemap
42447:5476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45634:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32755:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30169:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30980:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33277:649;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46336:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30405:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36488:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42726:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34333:416;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43885:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45402:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1078:151;;;;;;;;;;;;;:::i;:::-;;36783:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30305:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44532:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46657:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35052:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45028:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46210:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30640:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46765:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32371:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46889:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42528:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32554:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36072:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30746:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42855:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42820:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30499:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47612:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;519:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46539:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47238:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30223:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31651:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42491:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42793:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44013:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43770:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33977:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34808:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35568:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42682:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47122:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43598:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31787:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42649:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32867:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47000:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30860:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42759:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47330:274;;;;;;;;;;;;;:::i;:::-;;31091:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46429:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36313:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;851:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45634:365;45743:4;45795:25;45780:40;;;:11;:40;;;;:105;;;;45852:33;45837:48;;;:11;:48;;;;45780:105;:158;;;;42632:10;45917:21;;45902:36;;;:11;:36;;;;45780:158;:211;;;;45955:36;45979:11;45955:23;:36::i;:::-;45780:211;45760:231;;45634:365;;;:::o;32755:104::-;32805:7;32832:12;:19;;;;32825:26;;32755:104;:::o;30169:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30980:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;33277:649::-;33382:4;33422:6;;33408:10;:20;;:38;;;;;33445:1;33432:10;:14;33408:38;33404:491;;;33463:13;33479:8;:20;33488:10;33479:20;;;;;;;;;;;;;;;;;;;;;33463:36;;33534:5;33520:19;;:10;:19;;;;:59;;;;;33544:16;:23;33561:5;33544:23;;;;;;;;;;;;;;;:35;33568:10;33544:35;;;;;;;;;;;;;;;;;;;;;;;;;33543:36;33520:59;33516:121;;;33607:14;;;;;;;;;;;;;;33516:121;33679:7;33653:11;:23;33665:10;33653:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33724:7;33708:36;;33717:5;33708:36;;;33733:10;33708:36;;;;;;:::i;:::-;;;;;;;;33448:308;33404:491;;;33810:10;33777:9;:21;33787:10;33777:21;;;;;;;;;;;;;;;:30;33799:7;33777:30;;;;;;;;;;;;;;;:43;;;;33863:7;33842:41;;33851:10;33842:41;;;33872:10;33842:41;;;;;;:::i;:::-;;;;;;;;33404:491;33914:4;33907:11;;33277:649;;;;:::o;46336:85::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46406:7:::1;46397:6;;:16;;;;;;;;;;;;;;;;;;46336:85:::0;:::o;30405:36::-;;;:::o;36488:287::-;36599:4;36621:20;36716:10;:8;:10::i;:::-;36681:14;:25;36696:9;36681:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;36644:9;:20;36654:9;36644:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;36621:106;;36761:6;36745:12;:22;;36738:29;;;36488:287;;;;:::o;42726:26::-;;;;:::o;34333:416::-;34447:4;34464:15;34482:9;:15;34492:4;34482:15;;;;;;;;;;;;;;;:27;34498:10;34482:27;;;;;;;;;;;;;;;;34464:45;;34541:6;34530:7;:17;;34522:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34601:17;34590:7;:28;34586:93;;34673:6;34663:7;:16;;;;:::i;:::-;34633:9;:15;34643:4;34633:15;;;;;;;;;;;;;;;:27;34649:10;34633:27;;;;;;;;;;;;;;;:46;;;;34586:93;34692:27;34702:4;34708:2;34712:6;34692:9;:27::i;:::-;;34737:4;34730:11;;;34333:416;;;;;:::o;43885:120::-;43928:4;43952:11;;;;;;;;;;;:45;;;;43987:9;;43968:15;:28;;43952:45;43945:52;;43885:120;:::o;45402:224::-;45509:16;45527:14;45562:15;;;;;;;;;;;45611:5;45594:13;;45581:10;:26;;;;:::i;:::-;45580:36;;;;:::i;:::-;45554:64;;;;45402:224;;;;;:::o;1078:151::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;1157:1:::1;1141:5;;:18;;;;;;;;;;;;;;;;;;1218:1;1177:44;;1198:10;1177:44;;;;;;;;;;;;1078:151::o:0;36783:209::-;36864:7;36900:6;:14;36907:6;36900:14;;;;;;;;;;;;;;;:21;;;;36892:5;:29;36884:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36963:6;:14;36970:6;36963:14;;;;;;;;;;;;;;;36978:5;36963:21;;;;;;;;:::i;:::-;;;;;;;;;;36956:28;;36783:209;;;;:::o;30305:31::-;;;:::o;44532:488::-;44652:1;44638:16;;:2;:16;;;44630:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44721:1;44703:8;;:15;;:19;44695:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44769:9;44781:1;44769:13;;44764:249;44788:8;;:15;;44784:1;:19;44764:249;;;44825:15;44843:8;;44852:1;44843:11;;;;;;;:::i;:::-;;;;;;;;44825:29;;44897:10;44877:30;;:16;44885:7;44877;:16::i;:::-;:30;;;44869:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44954:47;44971:10;44983:4;44989:2;44993:7;44954:16;:47::i;:::-;44810:203;44805:3;;;;;;;44764:249;;;;44532:488;;;;:::o;46657:100::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46739:10:::1;46727:9;:22;;;;46657:100:::0;:::o;35052:421::-;35176:42;35193:10;35205:4;35211:2;35215;35176:16;:42::i;:::-;35267:1;35249:2;:14;;;:19;;:154;;;;;35363:40;;;35285:118;;;35300:2;35285:35;;;35321:10;35333:4;35339:2;35285:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;35249:154;35231:235;;;35437:17;;;;;;;;;;;;;;35231:235;35052:421;;;:::o;45028:366::-;45088:16;45117:23;45143:6;:14;45150:6;45143:14;;;;;;;;;;;;;;;:21;;;;45117:47;;45175:25;45217:15;45203:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45175:58;;45249:9;45261:1;45249:13;;45244:117;45268:15;45264:1;:19;45244:117;;;45319:30;45339:6;45347:1;45319:19;:30::i;:::-;45305:8;45314:1;45305:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45285:3;;;;;;;45244:117;;;;45378:8;45371:15;;;;45028:366;;;:::o;46210:118::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46294:26:::1;46300:9;46311:8;46294:5;:26::i;:::-;46210:118:::0;;:::o;30640:21::-;;;;:::o;46765:116::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46859:14:::1;46843:13;:30;;;;46765:116:::0;:::o;32371:111::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;32469:5:::1;32449:9;:17;32459:6;32449:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32371:111:::0;;:::o;46889:103::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46976:8:::1;46961:12;:23;;;;;;:::i;:::-;;46889:103:::0;:::o;42528:18::-;;;;;;;;;;;;;:::o;32554:193::-;32612:13;32646:8;:12;32655:2;32646:12;;;;;;;;;;;;;;;;;;;;;32638:20;;32692:1;32675:19;;:5;:19;;;32671:69;;32718:10;;;;;;;;;;;;;;32671:69;32554:193;;;:::o;36072:233::-;36169:7;36286:10;:8;:10::i;:::-;36251:14;:25;36266:9;36251:25;;;;;;;;;;;;;;;:32;;;;:45;;;;:::i;:::-;36214:9;:20;36224:9;36214:20;;;;;;;;;;;;;;;;:83;;;;:::i;:::-;36194:103;;36072:233;;;:::o;30746:44::-;;;;;;;;;;;;;;;;;:::o;42855:24::-;;;;:::o;42820:28::-;;;;:::o;30499:42::-;;;:::o;47612:308::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;47687:12:::1;47709;47687:35;;47733:15;47751:5;:15;;;47775:4;47751:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47733:48;;47810:1;47800:7;:11;47792:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;47856:5;:14;;;47871:5;;;;;;;;;;;47878:7;47856:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47848:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47676:244;;47612:308:::0;:::o;519:20::-;;;;;;;;;;;;;:::o;46539:110::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46632:9:::1;46614:15;;:27;;;;;;;;;;;;;;;;;;46539:110:::0;:::o;47238:84::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;47308:6:::1;47300:5;:14;;;;47238:84:::0;:::o;30223:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31651:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;42491:30::-;;;;;;;;;;;;;:::o;42793:20::-;;;;:::o;44013:511::-;44075:12;:10;:12::i;:::-;44067:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;44130:6;;;;;;;;;;;44129:7;44121:16;;;;;;44166:12;;44154:8;:24;;44146:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44249:11;;44237:8;44228:6;;:17;;;;:::i;:::-;:32;;44220:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44309:5;;;;;;;;;;;44295:19;;:10;:19;;;44291:108;;44360:5;;44349:8;:16;;;;:::i;:::-;44335:9;:31;;44327:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44291:108;44423:1;44411:9;:13;44407:72;;;44445:5;;;;;;;;;;;44437:23;;:34;44461:9;44437:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44407:72;44487:27;44493:10;44505:8;44487:5;:27::i;:::-;44013:511;:::o;43770:107::-;43817:4;43860:9;;43841:15;:28;;43834:35;;43770:107;:::o;33977:207::-;34104:8;34063:16;:28;34080:10;34063:28;;;;;;;;;;;;;;;:38;34092:8;34063:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;34157:8;34130:46;;34145:10;34130:46;;;34167:8;34130:46;;;;;;:::i;:::-;;;;;;;;33977:207;;:::o;34808:167::-;34905:4;34934:33;34944:10;34956:2;34960:6;34934:9;:33::i;:::-;34927:40;;34808:167;;;;:::o;35568:453::-;35722:42;35739:10;35751:4;35757:2;35761;35722:16;:42::i;:::-;35813:1;35795:2;:14;;;:19;;:156;;;;;35911:40;;;35831:120;;;35846:2;35831:35;;;35867:10;35879:4;35885:2;35889:4;;35831:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;35795:156;35777:237;;;35985:17;;;;;;;;;;;;;;35777:237;35568:453;;;;;:::o;42682:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47122:108::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;47209:13:::1;47194:12;:28;;;;47122:108:::0;:::o;43598:164::-;43658:13;43705:12;43719:20;43736:2;43719:16;:20::i;:::-;43740:13;43691:63;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43684:70;;43598:164;;;:::o;31787:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42649:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32867:115::-;32927:7;32954:6;:13;32961:5;32954:13;;;;;;;;;;;;;;;:20;;;;32947:27;;32867:115;;;:::o;47000:114::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;47096:10:::1;47080:13;:26;;;;;;:::i;:::-;;47000:114:::0;:::o;30860:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42759:27::-;;;;:::o;47330:274::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;47383:15:::1;47401:21;47383:39;;47451:1;47441:7;:11;47433:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47487:12;47513:5;;;;;;;;;;;47505:19;;47532:7;47505:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47486:58;;;47563:7;47555:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;47372:232;;47330:274::o:0;31091:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46429:102::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;46512:11:::1;46498;;:25;;;;;;;;;;;;;;;;;;46429:102:::0;:::o;36313:167::-;36408:7;36440:14;:25;36455:9;36440:25;;;;;;;;;;;;;;;:32;;;;36433:39;;36313:167;;;:::o;851:219::-;606:5;;;;;;;;;;;592:19;;:10;:19;;;588:46;;620:14;;;;;;;;;;;;;;588:46;952:1:::1;934:20;;:6;:20;;::::0;930:47:::1;;963:14;;;;;;;;;;;;;;930:47;998:6;990:5;;:14;;;;;;;;;;;;;;;;;;1055:6;1022:40;;1043:10;1022:40;;;;;;;;;;;;851:219:::0;:::o;22649:148::-;22725:4;22764:25;22749:40;;;:11;:40;;;;22742:47;;22649:148;;;:::o;39603:90::-;39646:7;39677:8;39673:2;:12;;;;:::i;:::-;39666:19;;39603:90;:::o;37060:1488::-;37173:4;37190:38;37211:4;37217:2;37221:6;37190:20;:38::i;:::-;37241:12;37256:10;:8;:10::i;:::-;37241:25;;37277:27;37307:9;:15;37317:4;37307:15;;;;;;;;;;;;;;;;37277:45;;37333:29;37365:9;:13;37375:2;37365:13;;;;;;;;;;;;;;;;37333:45;;37395:17;37407:4;37395:11;:17::i;:::-;37391:223;;;37429:20;37522:4;37492:14;:20;37507:4;37492:20;;;;;;;;;;;;;;;:27;;;;:34;;;;:::i;:::-;37452:19;:75;;;;:::i;:::-;37429:98;;37566:6;37550:12;:22;;37542:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37414:200;37391:223;37645:6;37626:9;:15;37636:4;37626:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;37704:6;37687:9;:13;37697:2;37687:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;37839:17;37851:4;37839:11;:17::i;:::-;37838:18;:45;;;;37882:1;37860:6;:12;37867:4;37860:12;;;;;;;;;;;;;;;:19;;;;:23;37838:45;37834:275;;;37900:18;37988:4;37970:9;:15;37980:4;37970:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;37944:4;37922:19;:26;;;;:::i;:::-;37921:72;;;;:::i;:::-;37900:93;;38013:9;38025:1;38013:13;;38008:90;38032:10;38028:1;:14;38008:90;;;38068:14;38077:4;38068:8;:14::i;:::-;38044:3;;;;;;;38008:90;;;;37885:224;37834:275;38231:15;38243:2;38231:11;:15::i;:::-;38226:244;;38263:18;38351:4;38327:21;:28;;;;:::i;:::-;38301:4;38285:9;:13;38295:2;38285:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;38284:72;;;;:::i;:::-;38263:93;;38376:9;38388:1;38376:13;;38371:88;38395:10;38391:1;:14;38371:88;;;38431:12;38440:2;38431:8;:12::i;:::-;38407:3;;;;;;;38371:88;;;;38248:222;38226:244;38507:2;38487:31;;38501:4;38487:31;;;38511:6;38487:31;;;;;;:::i;:::-;;;;;;;;38536:4;38529:11;;;;;37060:1488;;;;;:::o;38798:766::-;38960:8;:12;38969:2;38960:12;;;;;;;;;;;;;;;;;;;;;38952:20;;:4;:20;;;38944:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39037:1;39023:16;;:2;:16;;;39015:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39118:4;39105:17;;:9;:17;;;:71;;;;39143:16;:22;39160:4;39143:22;;;;;;;;;;;;;;;:33;39166:9;39143:33;;;;;;;;;;;;;;;;;;;;;;;;;39105:71;:120;;;;39210:11;:15;39222:2;39210:15;;;;;;;;;;;;;;;;;;;;;39197:28;;:9;:28;;;39105:120;39083:195;;;;;;;;;;;;:::i;:::-;;;;;;;;;39310:10;:8;:10::i;:::-;39291:9;:15;39301:4;39291:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;39373:10;:8;:10::i;:::-;39356:9;:13;39366:2;39356:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;39407:28;39426:4;39432:2;39407:18;:28::i;:::-;39446:19;39458:2;39462;39446:11;:19::i;:::-;39502:2;39498;39483:22;;39492:4;39483:22;;;;;;;;;;;;39541:2;39521:35;;39535:4;39521:35;;;39545:10;:8;:10::i;:::-;39521:35;;;;;;:::i;:::-;;;;;;;;38798:766;;;;:::o;38556:234::-;38663:10;:8;:10::i;:::-;38652:8;:21;;;;:::i;:::-;38628:9;:20;38638:9;38628:20;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;38691:13;38707:1;38691:17;;38686:97;38718:8;38710:5;:16;38686:97;;;38752:19;38761:9;38752:8;:19::i;:::-;38728:7;;;;;;;38686:97;;;;38556:234;;:::o;19406:718::-;19462:13;19513:14;19550:1;19530:17;19541:5;19530:10;:17::i;:::-;:21;19513:38;;19566:20;19600:6;19589:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19566:41;;19622:11;19751:6;19747:2;19743:15;19735:6;19731:28;19724:35;;19788:290;19795:4;19788:290;;;19820:5;;;;;;;;19962:10;19957:2;19950:5;19946:14;19941:32;19936:3;19928:46;20020:2;20011:11;;;;;;:::i;:::-;;;;;20054:1;20045:5;:10;19788:290;20041:21;19788:290;20099:6;20092:13;;;;;19406:718;;;:::o;46007:195::-;46150:44;46177:4;46183:2;46187:6;46150:26;:44::i;:::-;46007:195;;;:::o;42134:144::-;42188:11;42258:1;42246:14;42236:24;;42134:144;;;:::o;42010:116::-;42064:4;42088:9;:12;42098:1;42088:12;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;42104:14;42116:1;42104:11;:14::i;:::-;42088:30;42081:37;;42010:116;;;:::o;40436:486::-;40516:1;40500:18;;:4;:18;;;40496:73;;40542:15;;;;;;;;;;;;;;40496:73;40657:10;40670:6;:12;40677:4;40670:12;;;;;;;;;;;;;;;40705:1;40683:6;:12;40690:4;40683:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;40670:37;;;;;;;;:::i;:::-;;;;;;;;;;40657:50;;40718:6;:12;40725:4;40718:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40754:11;:15;40766:2;40754:15;;;;;;;;;;;40747:22;;;40787:8;:12;40796:2;40787:12;;;;;;;;;;;;40780:19;;;;;;;;;;;40817:11;:15;40829:2;40817:15;;;;;;;;;;;;40810:22;;;;;;;;;;;40845:12;40863:2;40845:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40911:2;40907:1;40884:30;;40893:4;40884:30;;;;;;;;;;;;40485:437;40436:486;:::o;39701:727::-;39777:1;39763:16;;:2;:16;;;39759:74;;39803:18;;;;;;;;;;;;;;39759:74;39845:10;39895:1;39872:12;:19;;;;:24;39868:382;;39942:6;;:8;;;;;;;;;;;;;40016:17;40006:6;;:27;;39980:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40124:6;;40119:11;;39868:382;;;40168:12;40203:1;40181:12;:19;;;;:23;;;;:::i;:::-;40168:37;;;;;;;;:::i;:::-;;;;;;;;;;40163:42;;40220:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39868:382;40290:1;40266:26;;:8;:12;40275:2;40266:12;;;;;;;;;;;;;;;;;;;;;:26;;;40262:81;;40316:15;;;;;;;;;;;;;;40262:81;40355:19;40367:2;40371;40355:11;:19::i;:::-;40417:2;40413;40392:28;;40409:1;40392:28;;;;;;;;;;;;39748:680;39701:727;:::o;40930:565::-;41003:14;41032:17;41044:4;41032:11;:17::i;:::-;41028:379;;;41075:14;:20;41090:4;41075:20;;;;;;;;;;;;;;;41126:1;41096:14;:20;41111:4;41096:20;;;;;;;;;;;;;;;:27;;;;:31;;;;:::i;:::-;41075:53;;;;;;;;:::i;:::-;;;;;;;;;;41066:62;;41183:6;41143:14;:20;41158:4;41143:20;;;;;;;;;;;;;;;41164:11;:15;41176:2;41164:15;;;;;;;;;;;;41143:37;;;;;;;;:::i;:::-;;;;;;;;;:46;;;;41204:14;:20;41219:4;41204:20;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41028:379;;;41272:6;:12;41279:4;41272:12;;;;;;;;;;;;;;;41307:1;41285:6;:12;41292:4;41285:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;41272:37;;;;;;;;:::i;:::-;;;;;;;;;;41263:46;;41356:6;41324;:12;41331:4;41324:12;;;;;;;;;;;;;;;41337:11;:15;41349:2;41337:15;;;;;;;;;;;;41324:29;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;41377:6;:12;41384:4;41377:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41028:379;41439:11;:15;41451:2;41439:15;;;;;;;;;;;;41417:11;:19;41429:6;41417:19;;;;;;;;;;;:37;;;;41472:11;:15;41484:2;41472:15;;;;;;;;;;;;41465:22;;;;;;;;;;;40992:503;40930:565;;:::o;41503:342::-;41582:2;41567:8;:12;41576:2;41567:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;41599:15;41611:2;41599:11;:15::i;:::-;41595:243;;;41631:14;:18;41646:2;41631:18;;;;;;;;;;;;;;;41655:2;41631:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41719:1;41691:14;:18;41706:2;41691:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;41673:11;:15;41685:2;41673:15;;;;;;;;;;;:47;;;;41595:243;;;41753:6;:10;41760:2;41753:10;;;;;;;;;;;;;;;41769:2;41753:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41825:1;41805:6;:10;41812:2;41805:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;41787:11;:15;41799:2;41787:15;;;;;;;;;;;:39;;;;41595:243;41503:342;;:::o;13737:948::-;13790:7;13810:14;13827:1;13810:18;;13877:8;13868:5;:17;13864:106;;13915:8;13906:17;;;;;;:::i;:::-;;;;;13952:2;13942:12;;;;13864:106;13997:8;13988:5;:17;13984:106;;14035:8;14026:17;;;;;;:::i;:::-;;;;;14072:2;14062:12;;;;13984:106;14117:8;14108:5;:17;14104:106;;14155:8;14146:17;;;;;;:::i;:::-;;;;;14192:2;14182:12;;;;14104:106;14237:7;14228:5;:16;14224:103;;14274:7;14265:16;;;;;;:::i;:::-;;;;;14310:1;14300:11;;;;14224:103;14354:7;14345:5;:16;14341:103;;14391:7;14382:16;;;;;;:::i;:::-;;;;;14427:1;14417:11;;;;14341:103;14471:7;14462:5;:16;14458:103;;14508:7;14499:16;;;;;;:::i;:::-;;;;;14544:1;14534:11;;;;14458:103;14588:7;14579:5;:16;14575:68;;14626:1;14616:11;;;;14575:68;14671:6;14664:13;;;13737:948;;;:::o;42286:125::-;;;;:::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:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:99::-;2005:6;2039:5;2033:12;2023:22;;1953:99;;;:::o;2058:169::-;2142:11;2176:6;2171:3;2164:19;2216:4;2211:3;2207:14;2192:29;;2058:169;;;;:::o;2233:139::-;2322:6;2317:3;2312;2306:23;2363:1;2354:6;2349:3;2345:16;2338:27;2233:139;;;:::o;2378:102::-;2419:6;2470:2;2466:7;2461:2;2454:5;2450:14;2446:28;2436:38;;2378:102;;;:::o;2486:377::-;2574:3;2602:39;2635:5;2602:39;:::i;:::-;2657:71;2721:6;2716:3;2657:71;:::i;:::-;2650:78;;2737:65;2795:6;2790:3;2783:4;2776:5;2772:16;2737:65;:::i;:::-;2827:29;2849:6;2827:29;:::i;:::-;2822:3;2818:39;2811:46;;2578:285;2486:377;;;;:::o;2869:313::-;2982:4;3020:2;3009:9;3005:18;2997:26;;3069:9;3063:4;3059:20;3055:1;3044:9;3040:17;3033:47;3097:78;3170:4;3161:6;3097:78;:::i;:::-;3089:86;;2869:313;;;;:::o;3188:122::-;3261:24;3279:5;3261:24;:::i;:::-;3254:5;3251:35;3241:63;;3300:1;3297;3290:12;3241:63;3188:122;:::o;3316:139::-;3362:5;3400:6;3387:20;3378:29;;3416:33;3443:5;3416:33;:::i;:::-;3316:139;;;;:::o;3461:329::-;3520:6;3569:2;3557:9;3548:7;3544:23;3540:32;3537:119;;;3575:79;;:::i;:::-;3537:119;3695:1;3720:53;3765:7;3756:6;3745:9;3741:22;3720:53;:::i;:::-;3710:63;;3666:117;3461:329;;;;:::o;3796:126::-;3833:7;3873:42;3866:5;3862:54;3851:65;;3796:126;;;:::o;3928:96::-;3965:7;3994:24;4012:5;3994:24;:::i;:::-;3983:35;;3928:96;;;:::o;4030:118::-;4117:24;4135:5;4117:24;:::i;:::-;4112:3;4105:37;4030:118;;:::o;4154:222::-;4247:4;4285:2;4274:9;4270:18;4262:26;;4298:71;4366:1;4355:9;4351:17;4342:6;4298:71;:::i;:::-;4154:222;;;;:::o;4382:122::-;4455:24;4473:5;4455:24;:::i;:::-;4448:5;4445:35;4435:63;;4494:1;4491;4484:12;4435:63;4382:122;:::o;4510:139::-;4556:5;4594:6;4581:20;4572:29;;4610:33;4637:5;4610:33;:::i;:::-;4510:139;;;;:::o;4655:474::-;4723:6;4731;4780:2;4768:9;4759:7;4755:23;4751:32;4748:119;;;4786:79;;:::i;:::-;4748:119;4906:1;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4877:117;5033:2;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5004:118;4655:474;;;;;:::o;5135:116::-;5205:21;5220:5;5205:21;:::i;:::-;5198:5;5195:32;5185:60;;5241:1;5238;5231:12;5185:60;5135:116;:::o;5257:133::-;5300:5;5338:6;5325:20;5316:29;;5354:30;5378:5;5354:30;:::i;:::-;5257:133;;;;:::o;5396:323::-;5452:6;5501:2;5489:9;5480:7;5476:23;5472:32;5469:119;;;5507:79;;:::i;:::-;5469:119;5627:1;5652:50;5694:7;5685:6;5674:9;5670:22;5652:50;:::i;:::-;5642:60;;5598:114;5396:323;;;;:::o;5725:619::-;5802:6;5810;5818;5867:2;5855:9;5846:7;5842:23;5838:32;5835:119;;;5873:79;;:::i;:::-;5835:119;5993:1;6018:53;6063:7;6054:6;6043:9;6039:22;6018:53;:::i;:::-;6008:63;;5964:117;6120:2;6146:53;6191:7;6182:6;6171:9;6167:22;6146:53;:::i;:::-;6136:63;;6091:118;6248:2;6274:53;6319:7;6310:6;6299:9;6295:22;6274:53;:::i;:::-;6264:63;;6219:118;5725:619;;;;;:::o;6350:474::-;6418:6;6426;6475:2;6463:9;6454:7;6450:23;6446:32;6443:119;;;6481:79;;:::i;:::-;6443:119;6601:1;6626:53;6671:7;6662:6;6651:9;6647:22;6626:53;:::i;:::-;6616:63;;6572:117;6728:2;6754:53;6799:7;6790:6;6779:9;6775:22;6754:53;:::i;:::-;6744:63;;6699:118;6350:474;;;;;:::o;6830:332::-;6951:4;6989:2;6978:9;6974:18;6966:26;;7002:71;7070:1;7059:9;7055:17;7046:6;7002:71;:::i;:::-;7083:72;7151:2;7140:9;7136:18;7127:6;7083:72;:::i;:::-;6830:332;;;;;:::o;7168:86::-;7203:7;7243:4;7236:5;7232:16;7221:27;;7168:86;;;:::o;7260:112::-;7343:22;7359:5;7343:22;:::i;:::-;7338:3;7331:35;7260:112;;:::o;7378:214::-;7467:4;7505:2;7494:9;7490:18;7482:26;;7518:67;7582:1;7571:9;7567:17;7558:6;7518:67;:::i;:::-;7378:214;;;;:::o;7598:117::-;7707:1;7704;7697:12;7721:117;7830:1;7827;7820:12;7844:117;7953:1;7950;7943:12;7984:568;8057:8;8067:6;8117:3;8110:4;8102:6;8098:17;8094:27;8084:122;;8125:79;;:::i;:::-;8084:122;8238:6;8225:20;8215:30;;8268:18;8260:6;8257:30;8254:117;;;8290:79;;:::i;:::-;8254:117;8404:4;8396:6;8392:17;8380:29;;8458:3;8450:4;8442:6;8438:17;8428:8;8424:32;8421:41;8418:128;;;8465:79;;:::i;:::-;8418:128;7984:568;;;;;:::o;8558:849::-;8662:6;8670;8678;8686;8735:2;8723:9;8714:7;8710:23;8706:32;8703:119;;;8741:79;;:::i;:::-;8703:119;8861:1;8886:53;8931:7;8922:6;8911:9;8907:22;8886:53;:::i;:::-;8876:63;;8832:117;8988:2;9014:53;9059:7;9050:6;9039:9;9035:22;9014:53;:::i;:::-;9004:63;;8959:118;9144:2;9133:9;9129:18;9116:32;9175:18;9167:6;9164:30;9161:117;;;9197:79;;:::i;:::-;9161:117;9310:80;9382:7;9373:6;9362:9;9358:22;9310:80;:::i;:::-;9292:98;;;;9087:313;8558:849;;;;;;;:::o;9413:329::-;9472:6;9521:2;9509:9;9500:7;9496:23;9492:32;9489:119;;;9527:79;;:::i;:::-;9489:119;9647:1;9672:53;9717:7;9708:6;9697:9;9693:22;9672:53;:::i;:::-;9662:63;;9618:117;9413:329;;;;:::o;9748:114::-;9815:6;9849:5;9843:12;9833:22;;9748:114;;;:::o;9868:184::-;9967:11;10001:6;9996:3;9989:19;10041:4;10036:3;10032:14;10017:29;;9868:184;;;;:::o;10058:132::-;10125:4;10148:3;10140:11;;10178:4;10173:3;10169:14;10161:22;;10058:132;;;:::o;10196:108::-;10273:24;10291:5;10273:24;:::i;:::-;10268:3;10261:37;10196:108;;:::o;10310:179::-;10379:10;10400:46;10442:3;10434:6;10400:46;:::i;:::-;10478:4;10473:3;10469:14;10455:28;;10310:179;;;;:::o;10495:113::-;10565:4;10597;10592:3;10588:14;10580:22;;10495:113;;;:::o;10644:732::-;10763:3;10792:54;10840:5;10792:54;:::i;:::-;10862:86;10941:6;10936:3;10862:86;:::i;:::-;10855:93;;10972:56;11022:5;10972:56;:::i;:::-;11051:7;11082:1;11067:284;11092:6;11089:1;11086:13;11067:284;;;11168:6;11162:13;11195:63;11254:3;11239:13;11195:63;:::i;:::-;11188:70;;11281:60;11334:6;11281:60;:::i;:::-;11271:70;;11127:224;11114:1;11111;11107:9;11102:14;;11067:284;;;11071:14;11367:3;11360:10;;10768:608;;;10644:732;;;;:::o;11382:373::-;11525:4;11563:2;11552:9;11548:18;11540:26;;11612:9;11606:4;11602:20;11598:1;11587:9;11583:17;11576:47;11640:108;11743:4;11734:6;11640:108;:::i;:::-;11632:116;;11382:373;;;;:::o;11761:468::-;11826:6;11834;11883:2;11871:9;11862:7;11858:23;11854:32;11851:119;;;11889:79;;:::i;:::-;11851:119;12009:1;12034:53;12079:7;12070:6;12059:9;12055:22;12034:53;:::i;:::-;12024:63;;11980:117;12136:2;12162:50;12204:7;12195:6;12184:9;12180:22;12162:50;:::i;:::-;12152:60;;12107:115;11761:468;;;;;:::o;12235:117::-;12344:1;12341;12334:12;12358:180;12406:77;12403:1;12396:88;12503:4;12500:1;12493:15;12527:4;12524:1;12517:15;12544:281;12627:27;12649:4;12627:27;:::i;:::-;12619:6;12615:40;12757:6;12745:10;12742:22;12721:18;12709:10;12706:34;12703:62;12700:88;;;12768:18;;:::i;:::-;12700:88;12808:10;12804:2;12797:22;12587:238;12544:281;;:::o;12831:129::-;12865:6;12892:20;;:::i;:::-;12882:30;;12921:33;12949:4;12941:6;12921:33;:::i;:::-;12831:129;;;:::o;12966:308::-;13028:4;13118:18;13110:6;13107:30;13104:56;;;13140:18;;:::i;:::-;13104:56;13178:29;13200:6;13178:29;:::i;:::-;13170:37;;13262:4;13256;13252:15;13244:23;;12966:308;;;:::o;13280:148::-;13378:6;13373:3;13368;13355:30;13419:1;13410:6;13405:3;13401:16;13394:27;13280:148;;;:::o;13434:425::-;13512:5;13537:66;13553:49;13595:6;13553:49;:::i;:::-;13537:66;:::i;:::-;13528:75;;13626:6;13619:5;13612:21;13664:4;13657:5;13653:16;13702:3;13693:6;13688:3;13684:16;13681:25;13678:112;;;13709:79;;:::i;:::-;13678:112;13799:54;13846:6;13841:3;13836;13799:54;:::i;:::-;13518:341;13434:425;;;;;:::o;13879:340::-;13935:5;13984:3;13977:4;13969:6;13965:17;13961:27;13951:122;;13992:79;;:::i;:::-;13951:122;14109:6;14096:20;14134:79;14209:3;14201:6;14194:4;14186:6;14182:17;14134:79;:::i;:::-;14125:88;;13941:278;13879:340;;;;:::o;14225:509::-;14294:6;14343:2;14331:9;14322:7;14318:23;14314:32;14311:119;;;14349:79;;:::i;:::-;14311:119;14497:1;14486:9;14482:17;14469:31;14527:18;14519:6;14516:30;14513:117;;;14549:79;;:::i;:::-;14513:117;14654:63;14709:7;14700:6;14689:9;14685:22;14654:63;:::i;:::-;14644:73;;14440:287;14225:509;;;;:::o;14753:552::-;14810:8;14820:6;14870:3;14863:4;14855:6;14851:17;14847:27;14837:122;;14878:79;;:::i;:::-;14837:122;14991:6;14978:20;14968:30;;15021:18;15013:6;15010:30;15007:117;;;15043:79;;:::i;:::-;15007:117;15157:4;15149:6;15145:17;15133:29;;15211:3;15203:4;15195:6;15191:17;15181:8;15177:32;15174:41;15171:128;;;15218:79;;:::i;:::-;15171:128;14753:552;;;;;:::o;15311:963::-;15408:6;15416;15424;15432;15440;15489:3;15477:9;15468:7;15464:23;15460:33;15457:120;;;15496:79;;:::i;:::-;15457:120;15616:1;15641:53;15686:7;15677:6;15666:9;15662:22;15641:53;:::i;:::-;15631:63;;15587:117;15743:2;15769:53;15814:7;15805:6;15794:9;15790:22;15769:53;:::i;:::-;15759:63;;15714:118;15871:2;15897:53;15942:7;15933:6;15922:9;15918:22;15897:53;:::i;:::-;15887:63;;15842:118;16027:2;16016:9;16012:18;15999:32;16058:18;16050:6;16047:30;16044:117;;;16080:79;;:::i;:::-;16044:117;16193:64;16249:7;16240:6;16229:9;16225:22;16193:64;:::i;:::-;16175:82;;;;15970:297;15311:963;;;;;;;;:::o;16280:474::-;16348:6;16356;16405:2;16393:9;16384:7;16380:23;16376:32;16373:119;;;16411:79;;:::i;:::-;16373:119;16531:1;16556:53;16601:7;16592:6;16581:9;16577:22;16556:53;:::i;:::-;16546:63;;16502:117;16658:2;16684:53;16729:7;16720:6;16709:9;16705:22;16684:53;:::i;:::-;16674:63;;16629:118;16280:474;;;;;:::o;16760:180::-;16808:77;16805:1;16798:88;16905:4;16902:1;16895:15;16929:4;16926:1;16919:15;16946:320;16990:6;17027:1;17021:4;17017:12;17007:22;;17074:1;17068:4;17064:12;17095:18;17085:81;;17151:4;17143:6;17139:17;17129:27;;17085:81;17213:2;17205:6;17202:14;17182:18;17179:38;17176:84;;17232:18;;:::i;:::-;17176:84;16997:269;16946:320;;;:::o;17272:180::-;17320:77;17317:1;17310:88;17417:4;17414:1;17407:15;17441:4;17438:1;17431:15;17458:410;17498:7;17521:20;17539:1;17521:20;:::i;:::-;17516:25;;17555:20;17573:1;17555:20;:::i;:::-;17550:25;;17610:1;17607;17603:9;17632:30;17650:11;17632:30;:::i;:::-;17621:41;;17811:1;17802:7;17798:15;17795:1;17792:22;17772:1;17765:9;17745:83;17722:139;;17841:18;;:::i;:::-;17722:139;17506:362;17458:410;;;;:::o;17874:194::-;17914:4;17934:20;17952:1;17934:20;:::i;:::-;17929:25;;17968:20;17986:1;17968:20;:::i;:::-;17963:25;;18012:1;18009;18005:9;17997:17;;18036:1;18030:4;18027:11;18024:37;;;18041:18;;:::i;:::-;18024:37;17874:194;;;;:::o;18074:171::-;18214:23;18210:1;18202:6;18198:14;18191:47;18074:171;:::o;18251:366::-;18393:3;18414:67;18478:2;18473:3;18414:67;:::i;:::-;18407:74;;18490:93;18579:3;18490:93;:::i;:::-;18608:2;18603:3;18599:12;18592:19;;18251:366;;;:::o;18623:419::-;18789:4;18827:2;18816:9;18812:18;18804:26;;18876:9;18870:4;18866:20;18862:1;18851:9;18847:17;18840:47;18904:131;19030:4;18904:131;:::i;:::-;18896:139;;18623:419;;;:::o;19048:180::-;19096:77;19093:1;19086:88;19193:4;19190:1;19183:15;19217:4;19214:1;19207:15;19234:185;19274:1;19291:20;19309:1;19291:20;:::i;:::-;19286:25;;19325:20;19343:1;19325:20;:::i;:::-;19320:25;;19364:1;19354:35;;19369:18;;:::i;:::-;19354:35;19411:1;19408;19404:9;19399:14;;19234:185;;;;:::o;19425:169::-;19565:21;19561:1;19553:6;19549:14;19542:45;19425:169;:::o;19600:366::-;19742:3;19763:67;19827:2;19822:3;19763:67;:::i;:::-;19756:74;;19839:93;19928:3;19839:93;:::i;:::-;19957:2;19952:3;19948:12;19941:19;;19600:366;;;:::o;19972:419::-;20138:4;20176:2;20165:9;20161:18;20153:26;;20225:9;20219:4;20215:20;20211:1;20200:9;20196:17;20189:47;20253:131;20379:4;20253:131;:::i;:::-;20245:139;;19972:419;;;:::o;20397:180::-;20445:77;20442:1;20435:88;20542:4;20539:1;20532:15;20566:4;20563:1;20556:15;20583:175;20723:27;20719:1;20711:6;20707:14;20700:51;20583:175;:::o;20764:366::-;20906:3;20927:67;20991:2;20986:3;20927:67;:::i;:::-;20920:74;;21003:93;21092:3;21003:93;:::i;:::-;21121:2;21116:3;21112:12;21105:19;;20764:366;;;:::o;21136:419::-;21302:4;21340:2;21329:9;21325:18;21317:26;;21389:9;21383:4;21379:20;21375:1;21364:9;21360:17;21353:47;21417:131;21543:4;21417:131;:::i;:::-;21409:139;;21136:419;;;:::o;21561:174::-;21701:26;21697:1;21689:6;21685:14;21678:50;21561:174;:::o;21741:366::-;21883:3;21904:67;21968:2;21963:3;21904:67;:::i;:::-;21897:74;;21980:93;22069:3;21980:93;:::i;:::-;22098:2;22093:3;22089:12;22082:19;;21741:366;;;:::o;22113:419::-;22279:4;22317:2;22306:9;22302:18;22294:26;;22366:9;22360:4;22356:20;22352:1;22341:9;22337:17;22330:47;22394:131;22520:4;22394:131;:::i;:::-;22386:139;;22113:419;;;:::o;22538:175::-;22678:27;22674:1;22666:6;22662:14;22655:51;22538:175;:::o;22719:366::-;22861:3;22882:67;22946:2;22941:3;22882:67;:::i;:::-;22875:74;;22958:93;23047:3;22958:93;:::i;:::-;23076:2;23071:3;23067:12;23060:19;;22719:366;;;:::o;23091:419::-;23257:4;23295:2;23284:9;23280:18;23272:26;;23344:9;23338:4;23334:20;23330:1;23319:9;23315:17;23308:47;23372:131;23498:4;23372:131;:::i;:::-;23364:139;;23091:419;;;:::o;23516:168::-;23599:11;23633:6;23628:3;23621:19;23673:4;23668:3;23664:14;23649:29;;23516:168;;;;:::o;23690:114::-;;:::o;23810:362::-;23951:3;23972:65;24035:1;24030:3;23972:65;:::i;:::-;23965:72;;24046:93;24135:3;24046:93;:::i;:::-;24164:1;24159:3;24155:11;24148:18;;23810:362;;;:::o;24178:748::-;24427:4;24465:3;24454:9;24450:19;24442:27;;24479:71;24547:1;24536:9;24532:17;24523:6;24479:71;:::i;:::-;24560:72;24628:2;24617:9;24613:18;24604:6;24560:72;:::i;:::-;24642;24710:2;24699:9;24695:18;24686:6;24642:72;:::i;:::-;24761:9;24755:4;24751:20;24746:2;24735:9;24731:18;24724:48;24789:130;24914:4;24789:130;:::i;:::-;24781:138;;24178:748;;;;;;:::o;24932:141::-;24988:5;25019:6;25013:13;25004:22;;25035:32;25061:5;25035:32;:::i;:::-;24932:141;;;;:::o;25079:349::-;25148:6;25197:2;25185:9;25176:7;25172:23;25168:32;25165:119;;;25203:79;;:::i;:::-;25165:119;25323:1;25348:63;25403:7;25394:6;25383:9;25379:22;25348:63;:::i;:::-;25338:73;;25294:127;25079:349;;;;:::o;25434:141::-;25483:4;25506:3;25498:11;;25529:3;25526:1;25519:14;25563:4;25560:1;25550:18;25542:26;;25434:141;;;:::o;25581:93::-;25618:6;25665:2;25660;25653:5;25649:14;25645:23;25635:33;;25581:93;;;:::o;25680:107::-;25724:8;25774:5;25768:4;25764:16;25743:37;;25680:107;;;;:::o;25793:393::-;25862:6;25912:1;25900:10;25896:18;25935:97;25965:66;25954:9;25935:97;:::i;:::-;26053:39;26083:8;26072:9;26053:39;:::i;:::-;26041:51;;26125:4;26121:9;26114:5;26110:21;26101:30;;26174:4;26164:8;26160:19;26153:5;26150:30;26140:40;;25869:317;;25793:393;;;;;:::o;26192:60::-;26220:3;26241:5;26234:12;;26192:60;;;:::o;26258:142::-;26308:9;26341:53;26359:34;26368:24;26386:5;26368:24;:::i;:::-;26359:34;:::i;:::-;26341:53;:::i;:::-;26328:66;;26258:142;;;:::o;26406:75::-;26449:3;26470:5;26463:12;;26406:75;;;:::o;26487:269::-;26597:39;26628:7;26597:39;:::i;:::-;26658:91;26707:41;26731:16;26707:41;:::i;:::-;26699:6;26692:4;26686:11;26658:91;:::i;:::-;26652:4;26645:105;26563:193;26487:269;;;:::o;26762:73::-;26807:3;26828:1;26821:8;;26762:73;:::o;26841:189::-;26918:32;;:::i;:::-;26959:65;27017:6;27009;27003:4;26959:65;:::i;:::-;26894:136;26841:189;;:::o;27036:186::-;27096:120;27113:3;27106:5;27103:14;27096:120;;;27167:39;27204:1;27197:5;27167:39;:::i;:::-;27140:1;27133:5;27129:13;27120:22;;27096:120;;;27036:186;;:::o;27228:543::-;27329:2;27324:3;27321:11;27318:446;;;27363:38;27395:5;27363:38;:::i;:::-;27447:29;27465:10;27447:29;:::i;:::-;27437:8;27433:44;27630:2;27618:10;27615:18;27612:49;;;27651:8;27636:23;;27612:49;27674:80;27730:22;27748:3;27730:22;:::i;:::-;27720:8;27716:37;27703:11;27674:80;:::i;:::-;27333:431;;27318:446;27228:543;;;:::o;27777:117::-;27831:8;27881:5;27875:4;27871:16;27850:37;;27777:117;;;;:::o;27900:169::-;27944:6;27977:51;28025:1;28021:6;28013:5;28010:1;28006:13;27977:51;:::i;:::-;27973:56;28058:4;28052;28048:15;28038:25;;27951:118;27900:169;;;;:::o;28074:295::-;28150:4;28296:29;28321:3;28315:4;28296:29;:::i;:::-;28288:37;;28358:3;28355:1;28351:11;28345:4;28342:21;28334:29;;28074:295;;;;:::o;28374:1395::-;28491:37;28524:3;28491:37;:::i;:::-;28593:18;28585:6;28582:30;28579:56;;;28615:18;;:::i;:::-;28579:56;28659:38;28691:4;28685:11;28659:38;:::i;:::-;28744:67;28804:6;28796;28790:4;28744:67;:::i;:::-;28838:1;28862:4;28849:17;;28894:2;28886:6;28883:14;28911:1;28906:618;;;;29568:1;29585:6;29582:77;;;29634:9;29629:3;29625:19;29619:26;29610:35;;29582:77;29685:67;29745:6;29738:5;29685:67;:::i;:::-;29679:4;29672:81;29541:222;28876:887;;28906:618;28958:4;28954:9;28946:6;28942:22;28992:37;29024:4;28992:37;:::i;:::-;29051:1;29065:208;29079:7;29076:1;29073:14;29065:208;;;29158:9;29153:3;29149:19;29143:26;29135:6;29128:42;29209:1;29201:6;29197:14;29187:24;;29256:2;29245:9;29241:18;29228:31;;29102:4;29099:1;29095:12;29090:17;;29065:208;;;29301:6;29292:7;29289:19;29286:179;;;29359:9;29354:3;29350:19;29344:26;29402:48;29444:4;29436:6;29432:17;29421:9;29402:48;:::i;:::-;29394:6;29387:64;29309:156;29286:179;29511:1;29507;29499:6;29495:14;29491:22;29485:4;29478:36;28913:611;;;28876:887;;28466:1303;;;28374:1395;;:::o;29775:143::-;29832:5;29863:6;29857:13;29848:22;;29879:33;29906:5;29879:33;:::i;:::-;29775:143;;;;:::o;29924:351::-;29994:6;30043:2;30031:9;30022:7;30018:23;30014:32;30011:119;;;30049:79;;:::i;:::-;30011:119;30169:1;30194:64;30250:7;30241:6;30230:9;30226:22;30194:64;:::i;:::-;30184:74;;30140:128;29924:351;;;;:::o;30281:171::-;30421:23;30417:1;30409:6;30405:14;30398:47;30281:171;:::o;30458:366::-;30600:3;30621:67;30685:2;30680:3;30621:67;:::i;:::-;30614:74;;30697:93;30786:3;30697:93;:::i;:::-;30815:2;30810:3;30806:12;30799:19;;30458:366;;;:::o;30830:419::-;30996:4;31034:2;31023:9;31019:18;31011:26;;31083:9;31077:4;31073:20;31069:1;31058:9;31054:17;31047:47;31111:131;31237:4;31111:131;:::i;:::-;31103:139;;30830:419;;;:::o;31255:137::-;31309:5;31340:6;31334:13;31325:22;;31356:30;31380:5;31356:30;:::i;:::-;31255:137;;;;:::o;31398:345::-;31465:6;31514:2;31502:9;31493:7;31489:23;31485:32;31482:119;;;31520:79;;:::i;:::-;31482:119;31640:1;31665:61;31718:7;31709:6;31698:9;31694:22;31665:61;:::i;:::-;31655:71;;31611:125;31398:345;;;;:::o;31749:171::-;31889:23;31885:1;31877:6;31873:14;31866:47;31749:171;:::o;31926:366::-;32068:3;32089:67;32153:2;32148:3;32089:67;:::i;:::-;32082:74;;32165:93;32254:3;32165:93;:::i;:::-;32283:2;32278:3;32274:12;32267:19;;31926:366;;;:::o;32298:419::-;32464:4;32502:2;32491:9;32487:18;32479:26;;32551:9;32545:4;32541:20;32537:1;32526:9;32522:17;32515:47;32579:131;32705:4;32579:131;:::i;:::-;32571:139;;32298:419;;;:::o;32723:172::-;32863:24;32859:1;32851:6;32847:14;32840:48;32723:172;:::o;32901:366::-;33043:3;33064:67;33128:2;33123:3;33064:67;:::i;:::-;33057:74;;33140:93;33229:3;33140:93;:::i;:::-;33258:2;33253:3;33249:12;33242:19;;32901:366;;;:::o;33273:419::-;33439:4;33477:2;33466:9;33462:18;33454:26;;33526:9;33520:4;33516:20;33512:1;33501:9;33497:17;33490:47;33554:131;33680:4;33554:131;:::i;:::-;33546:139;;33273:419;;;:::o;33698:180::-;33838:32;33834:1;33826:6;33822:14;33815:56;33698:180;:::o;33884:366::-;34026:3;34047:67;34111:2;34106:3;34047:67;:::i;:::-;34040:74;;34123:93;34212:3;34123:93;:::i;:::-;34241:2;34236:3;34232:12;34225:19;;33884:366;;;:::o;34256:419::-;34422:4;34460:2;34449:9;34445:18;34437:26;;34509:9;34503:4;34499:20;34495:1;34484:9;34480:17;34473:47;34537:131;34663:4;34537:131;:::i;:::-;34529:139;;34256:419;;;:::o;34681:191::-;34721:3;34740:20;34758:1;34740:20;:::i;:::-;34735:25;;34774:20;34792:1;34774:20;:::i;:::-;34769:25;;34817:1;34814;34810:9;34803:16;;34838:3;34835:1;34832:10;34829:36;;;34845:18;;:::i;:::-;34829:36;34681:191;;;;:::o;34878:167::-;35018:19;35014:1;35006:6;35002:14;34995:43;34878:167;:::o;35051:366::-;35193:3;35214:67;35278:2;35273:3;35214:67;:::i;:::-;35207:74;;35290:93;35379:3;35290:93;:::i;:::-;35408:2;35403:3;35399:12;35392:19;;35051:366;;;:::o;35423:419::-;35589:4;35627:2;35616:9;35612:18;35604:26;;35676:9;35670:4;35666:20;35662:1;35651:9;35647:17;35640:47;35704:131;35830:4;35704:131;:::i;:::-;35696:139;;35423:419;;;:::o;35848:170::-;35988:22;35984:1;35976:6;35972:14;35965:46;35848:170;:::o;36024:366::-;36166:3;36187:67;36251:2;36246:3;36187:67;:::i;:::-;36180:74;;36263:93;36352:3;36263:93;:::i;:::-;36381:2;36376:3;36372:12;36365:19;;36024:366;;;:::o;36396:419::-;36562:4;36600:2;36589:9;36585:18;36577:26;;36649:9;36643:4;36639:20;36635:1;36624:9;36620:17;36613:47;36677:131;36803:4;36677:131;:::i;:::-;36669:139;;36396:419;;;:::o;36843:314::-;36939:3;36960:70;37023:6;37018:3;36960:70;:::i;:::-;36953:77;;37040:56;37089:6;37084:3;37077:5;37040:56;:::i;:::-;37121:29;37143:6;37121:29;:::i;:::-;37116:3;37112:39;37105:46;;36843:314;;;;;:::o;37163:660::-;37368:4;37406:3;37395:9;37391:19;37383:27;;37420:71;37488:1;37477:9;37473:17;37464:6;37420:71;:::i;:::-;37501:72;37569:2;37558:9;37554:18;37545:6;37501:72;:::i;:::-;37583;37651:2;37640:9;37636:18;37627:6;37583:72;:::i;:::-;37702:9;37696:4;37692:20;37687:2;37676:9;37672:18;37665:48;37730:86;37811:4;37802:6;37794;37730:86;:::i;:::-;37722:94;;37163:660;;;;;;;;:::o;37829:148::-;37931:11;37968:3;37953:18;;37829:148;;;;:::o;38007:874::-;38110:3;38147:5;38141:12;38176:36;38202:9;38176:36;:::i;:::-;38228:89;38310:6;38305:3;38228:89;:::i;:::-;38221:96;;38348:1;38337:9;38333:17;38364:1;38359:166;;;;38539:1;38534:341;;;;38326:549;;38359:166;38443:4;38439:9;38428;38424:25;38419:3;38412:38;38505:6;38498:14;38491:22;38483:6;38479:35;38474:3;38470:45;38463:52;;38359:166;;38534:341;38601:38;38633:5;38601:38;:::i;:::-;38661:1;38675:154;38689:6;38686:1;38683:13;38675:154;;;38763:7;38757:14;38753:1;38748:3;38744:11;38737:35;38813:1;38804:7;38800:15;38789:26;;38711:4;38708:1;38704:12;38699:17;;38675:154;;;38858:6;38853:3;38849:16;38842:23;;38541:334;;38326:549;;38114:767;;38007:874;;;;:::o;38887:390::-;38993:3;39021:39;39054:5;39021:39;:::i;:::-;39076:89;39158:6;39153:3;39076:89;:::i;:::-;39069:96;;39174:65;39232:6;39227:3;39220:4;39213:5;39209:16;39174:65;:::i;:::-;39264:6;39259:3;39255:16;39248:23;;38997:280;38887:390;;;;:::o;39283:583::-;39505:3;39527:92;39615:3;39606:6;39527:92;:::i;:::-;39520:99;;39636:95;39727:3;39718:6;39636:95;:::i;:::-;39629:102;;39748:92;39836:3;39827:6;39748:92;:::i;:::-;39741:99;;39857:3;39850:10;;39283:583;;;;;;:::o;39872:168::-;40012:20;40008:1;40000:6;39996:14;39989:44;39872:168;:::o;40046:366::-;40188:3;40209:67;40273:2;40268:3;40209:67;:::i;:::-;40202:74;;40285:93;40374:3;40285:93;:::i;:::-;40403:2;40398:3;40394:12;40387:19;;40046:366;;;:::o;40418:419::-;40584:4;40622:2;40611:9;40607:18;40599:26;;40671:9;40665:4;40661:20;40657:1;40646:9;40642:17;40635:47;40699:131;40825:4;40699:131;:::i;:::-;40691:139;;40418:419;;;:::o;40843:147::-;40944:11;40981:3;40966:18;;40843:147;;;;:::o;40996:398::-;41155:3;41176:83;41257:1;41252:3;41176:83;:::i;:::-;41169:90;;41268:93;41357:3;41268:93;:::i;:::-;41386:1;41381:3;41377:11;41370:18;;40996:398;;;:::o;41400:379::-;41584:3;41606:147;41749:3;41606:147;:::i;:::-;41599:154;;41770:3;41763:10;;41400:379;;;:::o;41785:171::-;41925:23;41921:1;41913:6;41909:14;41902:47;41785:171;:::o;41962:366::-;42104:3;42125:67;42189:2;42184:3;42125:67;:::i;:::-;42118:74;;42201:93;42290:3;42201:93;:::i;:::-;42319:2;42314:3;42310:12;42303:19;;41962:366;;;:::o;42334:419::-;42500:4;42538:2;42527:9;42523:18;42515:26;;42587:9;42581:4;42577:20;42573:1;42562:9;42558:17;42551:47;42615:131;42741:4;42615:131;:::i;:::-;42607:139;;42334:419;;;:::o;42759:102::-;42801:8;42848:5;42845:1;42841:13;42820:34;;42759:102;;;:::o;42867:848::-;42928:5;42935:4;42959:6;42950:15;;42983:5;42974:14;;42997:712;43018:1;43008:8;43005:15;42997:712;;;43113:4;43108:3;43104:14;43098:4;43095:24;43092:50;;;43122:18;;:::i;:::-;43092:50;43172:1;43162:8;43158:16;43155:451;;;43587:4;43580:5;43576:16;43567:25;;43155:451;43637:4;43631;43627:15;43619:23;;43667:32;43690:8;43667:32;:::i;:::-;43655:44;;42997:712;;;42867:848;;;;;;;:::o;43721:1073::-;43775:5;43966:8;43956:40;;43987:1;43978:10;;43989:5;;43956:40;44015:4;44005:36;;44032:1;44023:10;;44034:5;;44005:36;44101:4;44149:1;44144:27;;;;44185:1;44180:191;;;;44094:277;;44144:27;44162:1;44153:10;;44164:5;;;44180:191;44225:3;44215:8;44212:17;44209:43;;;44232:18;;:::i;:::-;44209:43;44281:8;44278:1;44274:16;44265:25;;44316:3;44309:5;44306:14;44303:40;;;44323:18;;:::i;:::-;44303:40;44356:5;;;44094:277;;44480:2;44470:8;44467:16;44461:3;44455:4;44452:13;44448:36;44430:2;44420:8;44417:16;44412:2;44406:4;44403:12;44399:35;44383:111;44380:246;;;44536:8;44530:4;44526:19;44517:28;;44571:3;44564:5;44561:14;44558:40;;;44578:18;;:::i;:::-;44558:40;44611:5;;44380:246;44651:42;44689:3;44679:8;44673:4;44670:1;44651:42;:::i;:::-;44636:57;;;;44725:4;44720:3;44716:14;44709:5;44706:25;44703:51;;;44734:18;;:::i;:::-;44703:51;44783:4;44776:5;44772:16;44763:25;;43721:1073;;;;;;:::o;44800:281::-;44858:5;44882:23;44900:4;44882:23;:::i;:::-;44874:31;;44926:25;44942:8;44926:25;:::i;:::-;44914:37;;44970:104;45007:66;44997:8;44991:4;44970:104;:::i;:::-;44961:113;;44800:281;;;;:::o;45087:175::-;45227:27;45223:1;45215:6;45211:14;45204:51;45087:175;:::o;45268:366::-;45410:3;45431:67;45495:2;45490:3;45431:67;:::i;:::-;45424:74;;45507:93;45596:3;45507:93;:::i;:::-;45625:2;45620:3;45616:12;45609:19;;45268:366;;;:::o;45640:419::-;45806:4;45844:2;45833:9;45829:18;45821:26;;45893:9;45887:4;45883:20;45879:1;45868:9;45864:17;45857:47;45921:131;46047:4;45921:131;:::i;:::-;45913:139;;45640:419;;;:::o;46065:177::-;46205:29;46201:1;46193:6;46189:14;46182:53;46065:177;:::o;46248:366::-;46390:3;46411:67;46475:2;46470:3;46411:67;:::i;:::-;46404:74;;46487:93;46576:3;46487:93;:::i;:::-;46605:2;46600:3;46596:12;46589:19;;46248:366;;;:::o;46620:419::-;46786:4;46824:2;46813:9;46809:18;46801:26;;46873:9;46867:4;46863:20;46859:1;46848:9;46844:17;46837:47;46901:131;47027:4;46901:131;:::i;:::-;46893:139;;46620:419;;;:::o;47045:178::-;47185:30;47181:1;47173:6;47169:14;47162:54;47045:178;:::o;47229:366::-;47371:3;47392:67;47456:2;47451:3;47392:67;:::i;:::-;47385:74;;47468:93;47557:3;47468:93;:::i;:::-;47586:2;47581:3;47577:12;47570:19;;47229:366;;;:::o;47601:419::-;47767:4;47805:2;47794:9;47790:18;47782:26;;47854:9;47848:4;47844:20;47840:1;47829:9;47825:17;47818:47;47882:131;48008:4;47882:131;:::i;:::-;47874:139;;47601:419;;;:::o;48026:175::-;48166:27;48162:1;48154:6;48150:14;48143:51;48026:175;:::o;48207:366::-;48349:3;48370:67;48434:2;48429:3;48370:67;:::i;:::-;48363:74;;48446:93;48535:3;48446:93;:::i;:::-;48564:2;48559:3;48555:12;48548:19;;48207:366;;;:::o;48579:419::-;48745:4;48783:2;48772:9;48768:18;48760:26;;48832:9;48826:4;48822:20;48818:1;48807:9;48803:17;48796:47;48860:131;48986:4;48860:131;:::i;:::-;48852:139;;48579:419;;;:::o;49004:180::-;49052:77;49049:1;49042:88;49149:4;49146:1;49139:15;49173:4;49170:1;49163:15;49190:222;49330:34;49326:1;49318:6;49314:14;49307:58;49399:5;49394:2;49386:6;49382:15;49375:30;49190:222;:::o;49418:366::-;49560:3;49581:67;49645:2;49640:3;49581:67;:::i;:::-;49574:74;;49657:93;49746:3;49657:93;:::i;:::-;49775:2;49770:3;49766:12;49759:19;;49418:366;;;:::o;49790:419::-;49956:4;49994:2;49983:9;49979:18;49971:26;;50043:9;50037:4;50033:20;50029:1;50018:9;50014:17;50007:47;50071:131;50197:4;50071:131;:::i;:::-;50063:139;;49790:419;;;:::o
Swarm Source
ipfs://f7a83d712f6f3fbf8129db1d1234deacb8d5a6aff16be7c2cc43bbc505326d82
[ 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.