Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
285
Holders
95
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MOMOM
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-22 */ // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @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 up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (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; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 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. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); 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 (rounding == Rounding.Up && 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 down. * * 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 + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * 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 + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * 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 + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * 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 10, 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 + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @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) { 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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); 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); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/Variables.sol pragma solidity ^0.8.9; contract Variables is Ownable{ //SET Variables bool public customPrice = false; uint256 public custom_price = 0.0011 ether; bool public canRenounceOwnership = false; //mint variables bool public soldOut = false; bool public freeClaimOpen = false; bool public burnMomomCommomOpen = false; bool public burnMomomUncommomOpen = false; bool public burnMomomRareOpen = false; bool public burnMomomEpicOpen = false; bool public mintOpen = false; bool public rewardAllMomomsOpen = false; uint256 public maxQtyRewardAllMomom = 2; uint256 public qtyRewardedAllMomom = 0; uint256 public qtyMinBonusMint1 = 5; uint256 public qtyBonusMint1 = 1; uint256 public qtyMinBonusMint2 = 10; uint256 public qtyBonusMint2 = 2; bool public enableTsukiPrice = false; uint256 public custom_price_tsuki = 0.0009 ether; string public baseTokenURI; //Set methods function setCustomPriceTsuki(bool enable, uint256 value) public onlyOwner { enableTsukiPrice = enable; custom_price_tsuki = value; } function setBonusMint1(uint256 qtyMinBonusMint, uint qtyBonusMint) public onlyOwner { qtyMinBonusMint1 = qtyMinBonusMint; qtyBonusMint1 = qtyBonusMint; } function setBonusMint2(uint256 qtyMinBonusMint, uint qtyBonusMint) public onlyOwner { qtyMinBonusMint2 = qtyMinBonusMint; qtyBonusMint2 = qtyBonusMint; } function setBurnMomomCommomOpen(bool _state) public onlyOwner { burnMomomCommomOpen = _state; } function setBurnMomomUncommomOpen(bool _state) public onlyOwner { burnMomomUncommomOpen = _state; } function setBurnMomomRareOpen(bool _state) public onlyOwner { burnMomomRareOpen = _state; } function setBurnMomomEpicOpen(bool _state) public onlyOwner { burnMomomEpicOpen = _state; } function setMintOpen(bool _state) public onlyOwner { mintOpen = _state; } function setRewardAllMomomsOpen(bool _state) public onlyOwner { rewardAllMomomsOpen = _state; } function setFreeClaimOpen(bool _state) public onlyOwner { freeClaimOpen = _state; } function setSoldOut(bool _state) public onlyOwner { soldOut = _state; } function setMaxQtyRewardAllMomom(uint256 maxQtyReward) external onlyOwner { maxQtyRewardAllMomom = maxQtyReward; } function setCustomPrice(bool isCustomPrice, uint256 price) external onlyOwner { customPrice = isCustomPrice; custom_price = price; } function setCanRenounceOwnership(bool _state) external onlyOwner { canRenounceOwnership = _state; } } // File: contracts/BurnTsuki.sol pragma solidity ^0.8.7; interface IERC721{ function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function setApprovalForAll(address _from, bool state) external; function burn(uint256) external payable; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function balanceOf(address owner) external view returns (uint256); } contract BurnTsuki is Ownable { //for burn address public tsukiNftAddress=0x0000000000000000000000000000000000000000; address public tsukiBurnAddress=0x0000000000000000000000000000000000000001; bool public burnTsuki1Open = false; bool public burnTsuki2Open = false; bool public burnTsuki3Open = false; bool public burnTsuki4Open = false; bool public burnTsuki5Open = false; constructor() {} //Set methods function setTsukiNftAddress(address _address) public onlyOwner { tsukiNftAddress = _address; } function setTsukiBurnAddress(address _address) public onlyOwner { tsukiBurnAddress = _address; } function setTsuki1Open(bool _state) public onlyOwner { burnTsuki1Open = _state; } function setTsuki2Open(bool _state) public onlyOwner { burnTsuki2Open = _state; } function setTsuki3Open(bool _state) public onlyOwner { burnTsuki3Open = _state; } function setTsuki4Open(bool _state) public onlyOwner { burnTsuki4Open = _state; } function setTsuki5Open(bool _state) public onlyOwner { burnTsuki5Open = _state; } modifier callerIsUser() { require(tx.origin == msg.sender, "Must from real wallet address"); _; } function getOwner(uint256 tsukiTokenId) public view returns (address){ return IERC721(tsukiNftAddress).ownerOf(tsukiTokenId); } function getBalaceOfTsuki() public view returns (uint256){ return IERC721(tsukiNftAddress).balanceOf(msg.sender); } function bT(uint256[] memory tsukiTokenIds) public callerIsUser { if(tsukiTokenIds.length==1){ require(burnTsuki1Open,"Burn 1 tsuki is not opened!"); }else if(tsukiTokenIds.length==2){ require(burnTsuki1Open,"Burn 2 tsuki is not opened!"); }else if(tsukiTokenIds.length==3){ require(burnTsuki1Open,"Burn 3 tsuki is not opened!"); }else if(tsukiTokenIds.length==4){ require(burnTsuki1Open,"Burn 4 tsuki is not opened!"); }else if(tsukiTokenIds.length==5){ require(burnTsuki1Open,"Burn 5 tsuki is not opened!"); }else{ require(false,"Burn Quant wrong!"); } for (uint i = 0; i < tsukiTokenIds.length; i++) { address owner = IERC721(tsukiNftAddress).ownerOf(tsukiTokenIds[i]); require(msg.sender == owner, "Error: Not ERC721 owner"); IERC721(tsukiNftAddress).transferFrom(msg.sender,tsukiBurnAddress,tsukiTokenIds[i]); } } function getBurnAddress() public view returns (address){ return address(this); } function isApprovedForAllBurn(address owner, address operator) external view returns (bool){ return IERC721(tsukiNftAddress).isApprovedForAll(owner, operator); } } // File: contracts/CommitReveal.sol pragma solidity ^0.8.9; contract CommitReveal is Ownable { uint public maxBlocksAhead = 250; //setter function setMaxBlocksAhead(uint qtd) public onlyOwner { maxBlocksAhead = qtd; } struct Commit { bytes32 commit; uint256 block; bool revealed; } mapping (address => Commit) public commits; function saveGeneratedHash(bytes32 dataHash) public { commits[msg.sender].commit = dataHash; commits[msg.sender].block = uint256(block.number); commits[msg.sender].revealed = false; emit CommitHash(msg.sender,commits[msg.sender].commit,commits[msg.sender].block); } event CommitHash(address sender, bytes32 dataHash, uint256 block); function generateRandom(bytes32 revealHash) public returns (uint){ //make sure it hasn't been revealeld yet and set it to revealed require(commits[msg.sender].revealed==false,"Already revealed"); commits[msg.sender].revealed=true; //require that they can produce the committed hash require(getHash(revealHash)==commits[msg.sender].commit,"Revealed hash does not match commit"); //require that the block number is greater than the original block require(uint64(block.number)>commits[msg.sender].block,"Reveal and commit happened on the same block"); //require that no more than 250 blocks have passed require(uint64(block.number)<=commits[msg.sender].block+maxBlocksAhead,"Revealed too late"); //get the hash of the block that happened after they committed bytes32 blockHash = blockhash(commits[msg.sender].block); //hash that with their reveal that so miner shouldn't know and mod it with some max number you want uint random = uint(keccak256(abi.encodePacked(blockHash,revealHash))); /*emit RevealHash(msg.sender,revealHash,random);*/ return random; } function blockNumber() public view returns (uint256){ return uint256(block.number); } function getHash(bytes32 data) public view returns(bytes32){ return keccak256(abi.encodePacked(address(this), data)); } } // File: contracts/Random.sol pragma solidity ^0.8.9; contract Random is Ownable, CommitReveal { // Initializing the state variable uint randNonce = 0; //setvariables uint public lowerLegendary = 9900; uint public upperLegendary = 9910; uint public lowerEpic = 8000; uint public upperEpic = 8200; uint public lowerRare = 6000; uint public upperRare = 6800; uint public lowerUncommom = 3000; uint public upperUncommom = 5500; uint public qtdCommom = 60; uint public qtdUncommom = 30; uint public qtdRare = 15; uint public qtdEpic = 5; uint public qtdLegendary = 1; //setter function setQtdCommom(uint qtd) public onlyOwner { qtdCommom = qtd; } function setQtdUncommom(uint qtd) public onlyOwner { qtdUncommom = qtd; } function setQtdRare(uint qtd) public onlyOwner { qtdRare = qtd; } function setQtdEpic(uint qtd) public onlyOwner { qtdEpic = qtd; } function setQtdLegendary(uint qtd) public onlyOwner { qtdLegendary = qtd; } function setProbLegendary(uint lower, uint upper) public onlyOwner { upperLegendary = upper; lowerLegendary = lower; } function setProbEpic(uint lower, uint upper) public onlyOwner { upperEpic = upper; lowerEpic = lower; } function setProbRare(uint lower, uint upper) public onlyOwner { upperRare = upper; lowerRare = lower; } function setProbUncommom(uint lower, uint upper) public onlyOwner { upperUncommom = upper; lowerUncommom = lower; } function validateCommom(uint256[] memory tsukiTokenIds) public view returns (bool) { for (uint256 i = 0; i < tsukiTokenIds.length; i++) { if(100>tsukiTokenIds[i] || tsukiTokenIds[i]>=(100+qtdCommom)){ return false; } } return true; } function validateUncommom(uint256[] memory tsukiTokenIds) public view returns (bool) { for (uint256 i = 0; i < tsukiTokenIds.length; i++) { if(300>tsukiTokenIds[i] || tsukiTokenIds[i]>=(300+qtdUncommom)){ return false; } } return true; } function validateRare(uint256[] memory tsukiTokenIds) public view returns (bool) { for (uint256 i = 0; i < tsukiTokenIds.length; i++) { if(400>tsukiTokenIds[i] || tsukiTokenIds[i]>=(400+qtdRare)){ return false; } } return true; } function validateEpic(uint256[] memory tsukiTokenIds) public view returns (bool) { for (uint256 i = 0; i < tsukiTokenIds.length; i++) { if(500>tsukiTokenIds[i] || tsukiTokenIds[i]>=(500+qtdEpic)){ return false; } } return true; } function getAllMomoms() public view returns (uint[] memory) { uint[] memory momoms = new uint[](qtdCommom + qtdUncommom + qtdRare + qtdEpic + qtdLegendary); uint256 pos = 0; for (uint256 i = 0; i < qtdCommom; i++) { momoms[pos] = 100+i; pos++; } for (uint256 i = 0; i < qtdUncommom; i++) { momoms[pos] = 300+i; pos++; } for (uint256 i = 0; i < qtdRare; i++) { momoms[pos] = 400+i; pos++; } for (uint256 i = 0; i < qtdEpic; i++) { momoms[pos] = 500+i; pos++; } for (uint256 i = 0; i < qtdLegendary; i++) { momoms[pos] = 600+i; pos++; } return momoms; } function probLegerndary() public view returns (uint) { return (upperLegendary - lowerLegendary); } function probEpic() public view returns (uint) { return (upperEpic - lowerEpic); } function probRare() public view returns (uint) { return (upperRare - lowerRare); } function probUncommom() public view returns (uint) { return (upperUncommom - lowerUncommom); } function probCommom() public view returns (uint) { return (10000 - probUncommom() - probRare() - probEpic() - probLegerndary()); } // 1. Generate preimage off-chain and hash preimage function hashPreimage(bytes32 _preimage) public pure returns(bytes32) { return keccak256(abi.encodePacked(_preimage)); } function random(bytes32 dataHash) public returns (uint) { return generateRandom(dataHash); /*randNonce++; return uint(keccak256(abi.encodePacked(block.timestamp,msg.sender,randNonce)));*/ } function randomPart(uint _random, uint _multiply) public pure returns (uint) { uint ret = _random/_multiply; return ret % 10000; } function getCard(uint number) public view returns (uint){ uint rarity = number % 10000; if(lowerLegendary<rarity && rarity<=upperLegendary){ //legendary 0,1% return (number%qtdLegendary)+600; }else if(lowerEpic<rarity && rarity<=upperEpic){ //epic 2% return (number%qtdEpic)+500; }else if(lowerRare<rarity && rarity<=upperRare){ //rare 8% return (number%qtdRare)+400; }else if(lowerUncommom<rarity && rarity<upperUncommom){ //uncommom 25% return (number%qtdUncommom)+300; }else{ //commom 64,5% return (number%qtdCommom)+100; } } function getCommom(uint number) public view returns (uint){ return (number%qtdCommom)+100; } function getUncommom(uint number) public view returns (uint){ return (number%qtdUncommom)+300; } function getRare(uint number) public view returns (uint){ return (number%qtdRare)+400; } function getEpic(uint number) public view returns (uint){ return (number%qtdEpic)+500; } function getLegendary(uint number) public view returns (uint){ return (number%qtdLegendary)+600; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner or approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non-ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner or approved" ); _burnBatch(account, ids, values); } } // File: contracts/MOMOM.sol pragma solidity ^0.8.9; contract MOMOM is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply, Random, BurnTsuki, Variables { //FOR PRODUCTION uint256 public constant PUBLIC_SALES_PRICE = 0.003 ether; uint256 public constant MAX_QTY_PER_MINT = 12; mapping(uint256 => uint256) public tsukiClaimedMomom; mapping(address => uint256) public preSalesMinterToTokenQty; constructor() ERC1155("MOMOM") {} //Set methods function setPhaseTwoState(bool _state) public onlyOwner { burnMomomCommomOpen = _state; burnMomomUncommomOpen = _state; burnMomomRareOpen = _state; burnMomomEpicOpen = _state; } function setPhaseOneState(bool _state) public onlyOwner { freeClaimOpen = _state; burnTsuki1Open = _state; burnTsuki2Open = _state; burnTsuki3Open = _state; burnTsuki4Open = _state; burnTsuki5Open = _state; } function setURI(string memory newuri) public onlyOwner { baseTokenURI = newuri; _setURI(newuri); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } //end of set methods function getTokensOwnedByAddress() public view returns (uint[] memory) { uint[] memory momoms = getAllMomoms(); uint[] memory momomsOwned = new uint[](momoms.length); for (uint i = 0; i < momoms.length; i++) { momomsOwned[i] = balanceOf(msg.sender,momoms[i]); } return momomsOwned; } function testGetCards(uint256 _mintQty, bytes32 dataHash) external onlyOwner returns (uint[] memory) { uint[] memory cards = new uint[]((_mintQty)+1); uint randNumber = random(dataHash); for (uint i = 0; i < _mintQty; i++) { uint number = randomPart(randNumber, ((i==0)?1:(10000**i))); cards[i] = (number*100000)+getCard(number); } cards[_mintQty] = randNumber; return cards; } function mint(uint256 _mintQty, bytes32 dataHash) external payable returns (uint[] memory) { require(mintOpen,"Mint is not opened!"); require(tx.origin == msg.sender,"CONTRACTS_NOT_ALLOWED_TO_MINT"); require(_mintQty<=MAX_QTY_PER_MINT,"Max mint per mint is 10."); require(msg.value >= _mintQty * getPrice(), "Incorrect ETH"); uint randNumber = random(dataHash); uint bonusMintQty = bonusMint(_mintQty); uint[] memory cards = new uint[](_mintQty+bonusMintQty); for (uint i = 0; i < (_mintQty+ bonusMintQty); i++) { uint number = randomPart(randNumber, ((i==0)?1:(10000**i))); cards[i] = getCard(number); _mint(msg.sender, cards[i], 1, ""); } return cards; } function bonusMint(uint256 _mintQty) public view returns (uint) { uint bonus = 0; if(_mintQty>=qtyMinBonusMint1){ bonus = bonus+qtyBonusMint1; } if(_mintQty>=qtyMinBonusMint2){ bonus = bonus+qtyBonusMint2; } return bonus; } function claimMomon(uint256 tsukiTokenId, bytes32 dataHash) external returns (uint) { uint card; require(freeClaimOpen,"Free Claim is not opened!"); require(tx.origin == msg.sender,"CONTRACTS_NOT_ALLOWED_TO_MINT"); require(tsukiClaimedMomom[tsukiTokenId]==0,"Tsuki already claimed momom!"); require(msg.sender == getOwner(tsukiTokenId), "Error: Not ERC721 owner"); tsukiClaimedMomom[tsukiTokenId] += 1; uint randNumber = random(dataHash); card = getCommom(randNumber); _mint(msg.sender, card, 1, ""); return card; } function burnTsukiGetMomom(uint256[] memory tsukiTokenIds, bytes32 dataHash) external returns (uint) { uint card; uint randNumber = random(dataHash); bT(tsukiTokenIds); if(tsukiTokenIds.length == 1 ){ card = getCommom(randNumber); }else if(tsukiTokenIds.length == 2 ){ card = getUncommom(randNumber); }else if(tsukiTokenIds.length == 3 ){ card = getRare(randNumber); }else if(tsukiTokenIds.length == 4 ){ card = getEpic(randNumber); }else if(tsukiTokenIds.length == 5 ){ card = getLegendary(randNumber); }else{ require(false, "Wrong tsuki qty burn!"); } _mint(msg.sender, card, 1, ""); return card; } function burn5MomomsTo1Better(uint256[] memory momomTokenIds, uint rarity, bytes32 dataHash) external returns (uint[] memory) { uint qtdMint = 0; if(momomTokenIds.length == 5){ qtdMint = 1; }else if(momomTokenIds.length == 10){ qtdMint = 2; }else if(momomTokenIds.length == 15){ qtdMint = 3; }else{ require(false, "You need 5, 10 or 15 Momoms to get 1, 2 or 3 more rare."); } if(rarity==3){ require(momomTokenIds.length == 5, "You can only burn 5 Epic Momoms to get 1 Legendary."); } uint[] memory cards = new uint[](qtdMint); if(rarity==0){ require(burnMomomCommomOpen, "Burn Momom is not open!"); require(validateCommom(momomTokenIds), "You need 5 Commons to receive a Uncommom."); for (uint256 i = 0; i < momomTokenIds.length; i++) { _burn(msg.sender,momomTokenIds[i],1); } uint randNumber = random(dataHash); for (uint i = 0; i < qtdMint; i++) { uint number = randomPart(randNumber, ((i==0)?1:(10000**i))); cards[i] = getUncommom(number); _mint(msg.sender, cards[i], 1, ""); } }else if(rarity==1){ require(burnMomomUncommomOpen, "Burn Momom is not open!"); require(validateUncommom(momomTokenIds), "You need 5 Uncommom to receive a Rare."); for (uint256 i = 0; i < momomTokenIds.length; i++) { _burn(msg.sender,momomTokenIds[i],1); } uint randNumber = random(dataHash); for (uint i = 0; i < qtdMint; i++) { uint number = randomPart(randNumber, ((i==0)?1:(10000**i))); cards[i] = getRare(number); _mint(msg.sender, cards[i], 1, ""); } }else if(rarity==2){ require(burnMomomRareOpen, "Burn Momom is not open!"); require(validateRare(momomTokenIds), "You need 5 Rare to receive a Epic."); for (uint256 i = 0; i < momomTokenIds.length; i++) { _burn(msg.sender,momomTokenIds[i],1); } uint randNumber = random(dataHash); for (uint i = 0; i < qtdMint; i++) { uint number = randomPart(randNumber, ((i==0)?1:(10000**i))); cards[i] = getEpic(number); _mint(msg.sender, cards[i], 1, ""); } }else if(rarity==3){ require(burnMomomEpicOpen, "Burn Momom is not open!"); require(validateEpic(momomTokenIds), "You need 5 Epic to receive a Legendary."); for (uint256 i = 0; i < momomTokenIds.length; i++) { _burn(msg.sender,momomTokenIds[i],1); } uint randNumber = random(dataHash); cards[0] = getLegendary(randNumber); _mint(msg.sender, cards[0], 1, ""); }else { require(false, "Wrong rarity burn!"); } return cards; } function rewardAllMomoms() external { require(rewardAllMomomsOpen, "Reward all Momom is not open!"); require(qtyRewardedAllMomom < maxQtyRewardAllMomom, "Max reward reached! Wait for another reward!"); uint[] memory momoms = getAllMomoms(); for (uint256 i = 0; i < momoms.length; i++) { _burn(msg.sender,momoms[i],1); } //700 is the pin for those who complete de album _mint(msg.sender, 700, 1, ""); qtyRewardedAllMomom++; } function gift(address[] calldata receivers, uint256[] memory momomTokenIds) external onlyOwner { for (uint256 i = 0; i < receivers.length; i++) { _mint(receivers[i], momomTokenIds[i], 1, ""); } } function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } //implemetation function getPrice() public view returns (uint256) { if(enableTsukiPrice && getBalaceOfTsuki()>0){ return custom_price_tsuki; } if(customPrice){ return custom_price; }else{ return PUBLIC_SALES_PRICE; } } function uri(uint256 id) public view virtual override returns (string memory) { require(exists(id), "URI query for nonexistent token" ); return bytes(super.uri(id)).length > 0 ? string(abi.encodePacked(super.uri(id), Strings.toString(id))) : ""; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } function renounceOwnership() override public onlyOwner{ require(canRenounceOwnership,"Not the time to Renounce Ownership"); _transferOwnership(address(0)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes32","name":"dataHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"}],"name":"CommitHash","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_QTY_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_SALES_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"}],"name":"bT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"}],"name":"bonusMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"momomTokenIds","type":"uint256[]"},{"internalType":"uint256","name":"rarity","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"burn5MomomsTo1Better","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnMomomCommomOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnMomomEpicOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnMomomRareOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnMomomUncommomOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTsuki1Open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTsuki2Open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTsuki3Open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTsuki4Open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTsuki5Open","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"burnTsukiGetMomom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"canRenounceOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tsukiTokenId","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"claimMomon","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"commits","outputs":[{"internalType":"bytes32","name":"commit","type":"bytes32"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"bool","name":"revealed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"customPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"custom_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"custom_price_tsuki","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTsukiPrice","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeClaimOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"revealHash","type":"bytes32"}],"name":"generateRandom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllMomoms","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalaceOfTsuki","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getCard","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getCommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getEpic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"data","type":"bytes32"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getLegendary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tsukiTokenId","type":"uint256"}],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensOwnedByAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"getUncommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"momomTokenIds","type":"uint256[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_preimage","type":"bytes32"}],"name":"hashPreimage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAllBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerEpic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerLegendary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lowerUncommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBlocksAhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxQtyRewardAllMomom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preSalesMinterToTokenQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"probCommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"probEpic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"probLegerndary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"probRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"probUncommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtdCommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtdEpic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtdLegendary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtdRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtdUncommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyBonusMint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyBonusMint2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyMinBonusMint1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyMinBonusMint2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qtyRewardedAllMomom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"random","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_random","type":"uint256"},{"internalType":"uint256","name":"_multiply","type":"uint256"}],"name":"randomPart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAllMomoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAllMomomsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"saveGeneratedHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtyMinBonusMint","type":"uint256"},{"internalType":"uint256","name":"qtyBonusMint","type":"uint256"}],"name":"setBonusMint1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtyMinBonusMint","type":"uint256"},{"internalType":"uint256","name":"qtyBonusMint","type":"uint256"}],"name":"setBonusMint2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setBurnMomomCommomOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setBurnMomomEpicOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setBurnMomomRareOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setBurnMomomUncommomOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setCanRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isCustomPrice","type":"bool"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setCustomPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setCustomPriceTsuki","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setFreeClaimOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setMaxBlocksAhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxQtyReward","type":"uint256"}],"name":"setMaxQtyRewardAllMomom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setMintOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPhaseOneState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPhaseTwoState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"name":"setProbEpic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"name":"setProbLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"name":"setProbRare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"name":"setProbUncommom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setQtdCommom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setQtdEpic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setQtdLegendary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setQtdRare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"qtd","type":"uint256"}],"name":"setQtdUncommom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRewardAllMomomsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setSoldOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTsuki1Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTsuki2Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTsuki3Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTsuki4Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setTsuki5Open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTsukiBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTsukiNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soldOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"},{"internalType":"bytes32","name":"dataHash","type":"bytes32"}],"name":"testGetCards","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tsukiBurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tsukiClaimedMomom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tsukiNftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperEpic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upperLegendary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upperRare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"upperUncommom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"}],"name":"validateCommom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"}],"name":"validateEpic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"}],"name":"validateRare","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tsukiTokenIds","type":"uint256[]"}],"name":"validateUncommom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405260fa6005908155600060078190556126ac6008556126b6600955611f40600a908155612008600b55611770600c55611a90600d55610bb8600e5561157c600f908155603c601055601e6011819055601291909155601384905560016014819055601580546001600160a01b0319169055601680546001600160d01b031916821790556603e871b540c000601755601880546001600160481b031916905560026019819055601a94909455601b94909455601c93909355601d559055601f805460ff191690556603328b944c4000602055348015620000e157600080fd5b506040805180820190915260058152644d4f4d4f4d60d81b6020820152620001098162000128565b5062000115336200013a565b6003805460ff60a01b19169055620002fd565b600262000136828262000231565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b757607f821691505b602082108103620001d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022c57600081815260208120601f850160051c81016020861015620002075750805b601f850160051c820191505b81811015620002285782815560010162000213565b5050505b505050565b81516001600160401b038111156200024d576200024d6200018c565b62000265816200025e8454620001a2565b84620001de565b602080601f8311600181146200029d5760008415620002845750858301515b600019600386901b1c1916600185901b17855562000228565b600085815260208120601f198616915b82811015620002ce57888601518255948401946001909101908401620002ad565b5085821015620002ed5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b615f1e806200030d6000396000f3fe6080604052600436106107e55760003560e01c80637b2ca38611610409578063ba5cfc1e1161021e578063d5616b7c1161012e578063eb501ea6116100b6578063f24ca59411610085578063f24ca59414611794578063f2fde38b146117b4578063f5298aca146117d4578063f7002710146117f4578063f8004d311461181457600080fd5b8063eb501ea614611728578063edf4e97a1461173e578063f1ac79d314611754578063f242432a1461177457600080fd5b8063dfd352ca116100fd578063dfd352ca14611667578063e805d32414611688578063e8c545ac146116a9578063e985e9c5146116bf578063e9cdf3a01461170857600080fd5b8063d5616b7c146115f6578063d6eec46a1461160c578063d7c009ce14611627578063d9ef157a1461164757600080fd5b8063c30d72d5116101b1578063c7fa69a911610180578063c7fa69a914611560578063d4811e3b14611581578063d4ce545a146115a1578063d5069924146115c1578063d547cfb7146115e157600080fd5b8063c30d72d5146114eb578063c41a360a1461150b578063c712fc601461152b578063c7ab2ce61461154057600080fd5b8063bde40a01116101ed578063bde40a0114611475578063be66f87114611495578063bf6b2a0d146114b5578063c1e1d0ee146114cb57600080fd5b8063ba5cfc1e14611406578063bcaae26f1461141c578063bcd56d0014611432578063bd85b0391461144857600080fd5b80639188d31211610319578063a43c6536116102ac578063adf36e9a1161027b578063adf36e9a14611384578063ae8506061461139a578063aeea2d45146113ba578063b488f3ef146113d0578063b5eb11d4146113f157600080fd5b8063a43c6536146112f6578063a90b9c7214611317578063a92e7e0714611337578063acf3d8571461135757600080fd5b80639c070274116102e85780639c070274146112765780639dcd50b8146112965780639e2c4f3e146112b6578063a22cb465146112d657600080fd5b80639188d3121461120157806393ffc2f7146112215780639571ab2b1461124157806398d5fdca1461126157600080fd5b8063829b5f7f1161039c578063886d6e431161036b578063886d6e4314611163578063893da6c9146111845780638b96e424146111a35780638da5cb5b146111c35780638e009c00146111e157600080fd5b8063829b5f7f146110f85780638456cb591461111857806385fa62f31461112d5780638708974a1461114d57600080fd5b80637d0091d4116103d85780637d0091d41461107f5780637dccc516146110955780637e1913b0146110b65780638161afcd146110d657600080fd5b80637b2ca38614610fc85780637b43a8e614610fe25780637b9842201461103e5780637bdb326f1461105e57600080fd5b80633cf5040a116105ff57806358963bbd1161050f5780636ae15cc8116104a257806374ba411e1161047157806374ba411e14610f255780637629a21314610f455780637705f9b514610f65578063775b700914610f85578063791eef0714610f9b57600080fd5b80636ae15cc814610eba5780636b20c45414610eda5780636f72fd8314610efa578063715018a614610f1057600080fd5b8063657a20fe116104de578063657a20fe14610e50578063660ee00b14610e7057806367bd44cb14610e85578063689fc11614610e9a57600080fd5b806358963bbd14610df05780635b1e025514610e065780635c975abb14610e1c57806360b0854c14610e3b57600080fd5b80634b2539b8116105925780634f558e79116105615780634f558e7914610d6357806352e4ec3114610d92578063534b959114610da857806357e871e714610dbd57806357f8887b14610dd057600080fd5b80634b2539b814610cee5780634bf2326b14610d0e5780634def4d1a14610d235780634e1273f414610d4357600080fd5b806340a5aae4116105ce57806340a5aae414610c6e57806345383f4014610c8e57806348e39d2c14610cae57806349825cea14610cce57600080fd5b80633cf5040a14610bf95780633dc7ad6514610c195780633f4ba83a14610c395780633fcc46b014610c4e57600080fd5b80631cd0c4c1116106fa5780632eb2c2d61161068d57806338b39d291161065c57806338b39d2914610b93578063394b117e14610ba65780633a4087c714610bbb5780633c99e8a114610bd15780633ccfd60b14610bf157600080fd5b80632eb2c2d614610afb578063321a7a7f14610b1b57806332e94ae414610b5357806333a4d1a114610b7357600080fd5b806327ec9b0a116106c957806327ec9b0a14610a845780632c3b9f5514610aa45780632d577e3614610aba5780632e39a68814610adb57600080fd5b80631cd0c4c114610a0d578063228e1eab14610a2d578063229028a214610a4357806324bbd04914610a6357600080fd5b80630d92a41c1161077d578063154b397b1161074c578063154b397b1461097857806317579e151461098d5780631801fbe5146109ad578063181204c9146109cd57806318510158146109ed57600080fd5b80630d92a41c146108f65780630e89341c1461091657806310406bec14610943578063122be4a31461096357600080fd5b806307aaeae4116107b957806307aaeae41461088f57806309c5663b146108a95780630aec2a0f146108bf5780630b3a921c146108d557600080fd5b8062fdd58e146107ea57806301ffc9a71461081d57806302fe53051461084d578063038133e51461086f575b600080fd5b3480156107f657600080fd5b5061080a610805366004615047565b611834565b6040519081526020015b60405180910390f35b34801561082957600080fd5b5061083d610838366004615089565b6118cd565b6040519015158152602001610814565b34801561085957600080fd5b5061086d610868366004615145565b61191d565b005b34801561087b57600080fd5b5061086d61088a36600461518d565b61193e565b34801561089b57600080fd5b50601f5461083d9060ff1681565b3480156108b557600080fd5b5061080a60055481565b3480156108cb57600080fd5b5061080a60115481565b3480156108e157600080fd5b5060165461083d90600160b01b900460ff1681565b34801561090257600080fd5b5061086d6109113660046151b4565b61194b565b34801561092257600080fd5b5061093661093136600461518d565b611971565b6040516108149190615221565b34801561094f57600080fd5b5061080a61095e36600461518d565b611a2d565b34801561096f57600080fd5b5061080a600c81565b34801561098457600080fd5b5061086d611a49565b34801561099957600080fd5b5061086d6109a8366004615234565b611b90565b6109c06109bb366004615234565b611ba0565b6040516108149190615291565b3480156109d957600080fd5b5061086d6109e83660046151b4565b611dfa565b3480156109f957600080fd5b5061080a610a0836600461518d565b611e25565b348015610a1957600080fd5b5061083d610a28366004615338565b611e41565b348015610a3957600080fd5b5061080a601c5481565b348015610a4f57600080fd5b5061086d610a5e3660046151b4565b611ec7565b348015610a6f57600080fd5b5060185461083d90600160381b900460ff1681565b348015610a9057600080fd5b5061080a610a9f36600461518d565b611eed565b348015610ab057600080fd5b5061080a600e5481565b348015610ac657600080fd5b5060165461083d90600160c01b900460ff1681565b348015610ae757600080fd5b5061086d610af63660046151b4565b6120ef565b348015610b0757600080fd5b5061086d610b1636600461538c565b612167565b348015610b2757600080fd5b50601654610b3b906001600160a01b031681565b6040516001600160a01b039091168152602001610814565b348015610b5f57600080fd5b5061086d610b6e366004615234565b6121b3565b348015610b7f57600080fd5b5061086d610b8e3660046151b4565b6121c3565b348015610b9f57600080fd5b5030610b3b565b348015610bb257600080fd5b5061080a6121e9565b348015610bc757600080fd5b5061080a60175481565b348015610bdd57600080fd5b5061086d610bec3660046151b4565b612200565b61086d612229565b348015610c0557600080fd5b5061080a610c1436600461518d565b612286565b348015610c2557600080fd5b5061086d610c34366004615439565b6122cc565b348015610c4557600080fd5b5061086d6122f6565b348015610c5a57600080fd5b5061086d610c69366004615338565b612308565b348015610c7a57600080fd5b5061086d610c89366004615234565b61272e565b348015610c9a57600080fd5b5061080a610ca9366004615234565b612741565b348015610cba57600080fd5b5061086d610cc936600461518d565b61290d565b348015610cda57600080fd5b5061083d610ce9366004615338565b61291a565b348015610cfa57600080fd5b506109c0610d09366004615456565b612997565b348015610d1a57600080fd5b5061080a613045565b348015610d2f57600080fd5b5061086d610d3e3660046151b4565b6130b2565b348015610d4f57600080fd5b506109c0610d5e3660046154a3565b6130cd565b348015610d6f57600080fd5b5061083d610d7e36600461518d565b600090815260046020526040902054151590565b348015610d9e57600080fd5b5061080a60135481565b348015610db457600080fd5b5061080a6131ee565b348015610dc957600080fd5b504361080a565b348015610ddc57600080fd5b5061086d610deb366004615234565b61323a565b348015610dfc57600080fd5b5061080a600d5481565b348015610e1257600080fd5b5061080a601a5481565b348015610e2857600080fd5b50600354600160a01b900460ff1661083d565b348015610e4757600080fd5b5061080a61324a565b348015610e5c57600080fd5b5061086d610e6b36600461518d565b61325c565b348015610e7c57600080fd5b5061080a613269565b348015610e9157600080fd5b506109c061327b565b348015610ea657600080fd5b5061086d610eb536600461518d565b613328565b348015610ec657600080fd5b5060185461083d9062010000900460ff1681565b348015610ee657600080fd5b5061086d610ef536600461556f565b613335565b348015610f0657600080fd5b5061080a601d5481565b348015610f1c57600080fd5b5061086d61337d565b348015610f3157600080fd5b5061086d610f4036600461518d565b6133ec565b348015610f5157600080fd5b5061083d610f60366004615338565b613454565b348015610f7157600080fd5b5061086d610f803660046155e4565b6134d1565b348015610f9157600080fd5b5061080a60095481565b348015610fa757600080fd5b5061080a610fb6366004615439565b60236020526000908152604090205481565b348015610fd457600080fd5b5060185461083d9060ff1681565b348015610fee57600080fd5b50611021610ffd366004615439565b60066020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610814565b34801561104a57600080fd5b50601554610b3b906001600160a01b031681565b34801561106a57600080fd5b5060165461083d90600160a81b900460ff1681565b34801561108b57600080fd5b5061080a600c5481565b3480156110a157600080fd5b5060185461083d90600160401b900460ff1681565b3480156110c257600080fd5b5061080a6110d1366004615234565b613538565b3480156110e257600080fd5b5060185461083d90640100000000900460ff1681565b34801561110457600080fd5b5061086d6111133660046151b4565b61355b565b34801561112457600080fd5b5061086d613583565b34801561113957600080fd5b5061083d611148366004615338565b613593565b34801561115957600080fd5b5061080a600f5481565b34801561116f57600080fd5b5060185461083d90600160281b900460ff1681565b34801561119057600080fd5b5060185461083d90610100900460ff1681565b3480156111af57600080fd5b5061080a6111be36600461518d565b61360e565b3480156111cf57600080fd5b506003546001600160a01b0316610b3b565b3480156111ed57600080fd5b5061086d6111fc36600461518d565b61362a565b34801561120d57600080fd5b5061080a61121c36600461518d565b613637565b34801561122d57600080fd5b506109c061123c366004615234565b613730565b34801561124d57600080fd5b5061086d61125c3660046151b4565b613833565b34801561126d57600080fd5b5061080a61385b565b34801561128257600080fd5b5061086d611291366004615234565b6138ab565b3480156112a257600080fd5b5061080a6112b136600461518d565b6138bb565b3480156112c257600080fd5b5061080a6112d1366004615663565b6138d6565b3480156112e257600080fd5b5061086d6112f13660046156a7565b6139ac565b34801561130257600080fd5b5060165461083d90600160c81b900460ff1681565b34801561132357600080fd5b5061080a61133236600461518d565b6139b7565b34801561134357600080fd5b5061086d6113523660046151b4565b6139d3565b34801561136357600080fd5b5061080a61137236600461518d565b60226020526000908152604090205481565b34801561139057600080fd5b5061080a60205481565b3480156113a657600080fd5b5061086d6113b53660046151b4565b6139f9565b3480156113c657600080fd5b5061080a60105481565b3480156113dc57600080fd5b5060185461083d906301000000900460ff1681565b3480156113fd57600080fd5b5061080a613a57565b34801561141257600080fd5b5061080a60085481565b34801561142857600080fd5b5061080a601e5481565b34801561143e57600080fd5b5061080a600a5481565b34801561145457600080fd5b5061080a61146336600461518d565b60009081526004602052604090205490565b34801561148157600080fd5b5061080a61149036600461518d565b613a69565b3480156114a157600080fd5b5061086d6114b0366004615439565b613a7e565b3480156114c157600080fd5b5061080a60145481565b3480156114d757600080fd5b5061083d6114e63660046156e0565b613aa8565b3480156114f757600080fd5b5061080a61150636600461518d565b613b1f565b34801561151757600080fd5b50610b3b61152636600461518d565b613b53565b34801561153757600080fd5b506109c0613bc1565b34801561154c57600080fd5b5061086d61155b36600461518d565b613df9565b34801561156c57600080fd5b5060165461083d90600160b81b900460ff1681565b34801561158d57600080fd5b5061086d61159c3660046151b4565b613e06565b3480156115ad57600080fd5b5061080a6115bc36600461518d565b613e2c565b3480156115cd57600080fd5b5061086d6115dc36600461570e565b613e37565b3480156115ed57600080fd5b50610936613e61565b34801561160257600080fd5b5061080a60195481565b34801561161857600080fd5b5061080a660aa87bee53800081565b34801561163357600080fd5b5061086d61164236600461570e565b613eef565b34801561165357600080fd5b5061086d6116623660046151b4565b613f0e565b34801561167357600080fd5b5060165461083d90600160a01b900460ff1681565b34801561169457600080fd5b5060185461083d90600160301b900460ff1681565b3480156116b557600080fd5b5061080a601b5481565b3480156116cb57600080fd5b5061083d6116da3660046156e0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561171457600080fd5b5061086d611723366004615234565b613f30565b34801561173457600080fd5b5061080a60125481565b34801561174a57600080fd5b5061080a600b5481565b34801561176057600080fd5b5061086d61176f36600461518d565b613f43565b34801561178057600080fd5b5061086d61178f36600461572c565b613f50565b3480156117a057600080fd5b5061086d6117af3660046151b4565b613f95565b3480156117c057600080fd5b5061086d6117cf366004615439565b613fb9565b3480156117e057600080fd5b5061086d6117ef366004615794565b61402f565b34801561180057600080fd5b5061086d61180f3660046151b4565b614072565b34801561182057600080fd5b5061086d61182f3660046151b4565b614098565b60006001600160a01b0383166118a45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806118fe57506001600160e01b031982166303a24d0760e21b145b806118c757506301ffc9a760e01b6001600160e01b03198316146118c7565b6119256140c2565b60216119318282615843565b5061193b8161411c565b50565b6119466140c2565b601255565b6119536140c2565b60168054911515600160a01b0260ff60a01b19909216919091179055565b6000818152600460205260409020546060906119cf5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604482015260640161189b565b60006119da83614128565b51116119f557604051806020016040528060008152506118c7565b6119fe82614128565b611a07836141bc565b604051602001611a18929190615902565b60405160208183030381529060405292915050565b600060145482611a3d9190615947565b6118c790610258615971565b601854600160401b900460ff16611aa25760405162461bcd60e51b815260206004820152601d60248201527f52657761726420616c6c204d6f6d6f6d206973206e6f74206f70656e21000000604482015260640161189b565b601954601a5410611b0a5760405162461bcd60e51b815260206004820152602c60248201527f4d617820726577617264207265616368656421205761697420666f7220616e6f60448201526b74686572207265776172642160a01b606482015260840161189b565b6000611b14613bc1565b905060005b8151811015611b5957611b4733838381518110611b3857611b38615984565b6020026020010151600161424e565b80611b518161599a565b915050611b19565b50611b78336102bc60016040518060200160405280600081525061436b565b601a8054906000611b888361599a565b919050555050565b611b986140c2565b600d55600c55565b601854606090600160381b900460ff16611bf25760405162461bcd60e51b81526020600482015260136024820152724d696e74206973206e6f74206f70656e65642160681b604482015260640161189b565b323314611c415760405162461bcd60e51b815260206004820152601d60248201527f434f4e5452414354535f4e4f545f414c4c4f5745445f544f5f4d494e54000000604482015260640161189b565b600c831115611c925760405162461bcd60e51b815260206004820152601860248201527f4d6178206d696e7420706572206d696e742069732031302e0000000000000000604482015260640161189b565b611c9a61385b565b611ca490846159b3565b341015611ce35760405162461bcd60e51b815260206004820152600d60248201526c092dcc6dee4e4cac6e8408aa89609b1b604482015260640161189b565b6000611cee83613e2c565b90506000611cfb85613b1f565b90506000611d098287615971565b6001600160401b03811115611d2057611d206150a6565b604051908082528060200260200182016040528015611d49578160200160208202803683370190505b50905060005b611d598388615971565b811015611df0576000611d7f858315611d78576110d184612710615aae565b6001613538565b9050611d8a81613637565b838381518110611d9c57611d9c615984565b602002602001018181525050611ddd33848481518110611dbe57611dbe615984565b602002602001015160016040518060200160405280600081525061436b565b5080611de88161599a565b915050611d4f565b5095945050505050565b611e026140c2565b60188054911515600160401b0268ff000000000000000019909216919091179055565b600060115482611e359190615947565b6118c79061012c615971565b6000805b8251811015611ebe57828181518110611e6057611e60615984565b602002602001015161012c1180611e9e5750601154611e819061012c615971565b838281518110611e9357611e93615984565b602002602001015110155b15611eac5750600092915050565b80611eb68161599a565b915050611e45565b50600192915050565b611ecf6140c2565b60168054911515600160a81b0260ff60a81b19909216919091179055565b3360009081526006602052604081206002015460ff1615611f435760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995d99585b195960821b604482015260640161189b565b33600090815260066020526040902060028101805460ff1916600117905554611f6b83612286565b14611fc45760405162461bcd60e51b815260206004820152602360248201527f52657665616c6564206861736820646f6573206e6f74206d6174636820636f6d6044820152621b5a5d60ea1b606482015260840161189b565b336000908152600660205260409020600101546001600160401b034316116120435760405162461bcd60e51b815260206004820152602c60248201527f52657665616c20616e6420636f6d6d69742068617070656e6564206f6e20746860448201526b652073616d6520626c6f636b60a01b606482015260840161189b565b600554336000908152600660205260409020600101546120639190615971565b436001600160401b031611156120af5760405162461bcd60e51b815260206004820152601160248201527052657665616c656420746f6f206c61746560781b604482015260640161189b565b5033600090815260066020908152604091829020600101548251904081830152808301939093528151808403830181526060909301909152815191012090565b6120f76140c2565b6018805462ff00001916620100009215159283021790556016805461ffff60a01b1916600160a01b830260ff60a81b191617600160a81b83021761ffff60b01b1916600160b01b830260ff60b81b191617600160b81b83021760ff60c01b1916600160c01b909202919091179055565b6001600160a01b038516331480612183575061218385336116da565b61219f5760405162461bcd60e51b815260040161189b90615aba565b6121ac8585858585614485565b5050505050565b6121bb6140c2565b600f55600e55565b6121cb6140c2565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6000600c54600d546121fb9190615b08565b905090565b6122086140c2565b60188054911515600160301b0266ff00000000000019909216919091179055565b6122316140c2565b604051600090339047908381818185875af1925050503d8060008114612273576040519150601f19603f3d011682016040523d82523d6000602084013e612278565b606091505b505090508061193b57600080fd5b6040516bffffffffffffffffffffffff193060601b166020820152603481018290526000906054015b604051602081830303815290604052805190602001209050919050565b6122d46140c2565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6122fe6140c2565b61230661462f565b565b3233146123575760405162461bcd60e51b815260206004820152601d60248201527f4d7573742066726f6d207265616c2077616c6c65742061646472657373000000604482015260640161189b565b80516001036123be57601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2031207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b612582565b805160020361242057601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2032207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b805160030361248257601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2033207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b80516004036124e457601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2034207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b805160050361254657601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2035207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b60405162461bcd60e51b81526020600482015260116024820152704275726e205175616e742077726f6e672160781b604482015260640161189b565b60005b815181101561272a5760155482516000916001600160a01b031690636352211e908590859081106125b8576125b8615984565b60200260200101516040518263ffffffff1660e01b81526004016125de91815260200190565b602060405180830381865afa1580156125fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261f9190615b1b565b9050336001600160a01b038216146126735760405162461bcd60e51b815260206004820152601760248201527622b93937b91d102737ba1022a9219b99189037bbb732b960491b604482015260640161189b565b60155460165484516001600160a01b03928316926323b872dd9233929116908790879081106126a4576126a4615984565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156126fe57600080fd5b505af1158015612712573d6000803e3d6000fd5b505050505080806127229061599a565b915050612585565b5050565b6127366140c2565b601b91909155601c55565b601854600090819062010000900460ff1661279e5760405162461bcd60e51b815260206004820152601960248201527f4672656520436c61696d206973206e6f74206f70656e65642100000000000000604482015260640161189b565b3233146127ed5760405162461bcd60e51b815260206004820152601d60248201527f434f4e5452414354535f4e4f545f414c4c4f5745445f544f5f4d494e54000000604482015260640161189b565b600084815260226020526040902054156128495760405162461bcd60e51b815260206004820152601c60248201527f5473756b6920616c726561647920636c61696d6564206d6f6d6f6d2100000000604482015260640161189b565b61285284613b53565b6001600160a01b0316336001600160a01b0316146128ac5760405162461bcd60e51b815260206004820152601760248201527622b93937b91d102737ba1022a9219b99189037bbb732b960491b604482015260640161189b565b60008481526022602052604081208054600192906128cb908490615971565b90915550600090506128dc84613e2c565b90506128e7816138bb565b9150612905338360016040518060200160405280600081525061436b565b509392505050565b6129156140c2565b601055565b6000805b8251811015611ebe5782818151811061293957612939615984565b60200260200101516101f41180612977575060135461295a906101f4615971565b83828151811061296c5761296c615984565b602002602001015110155b156129855750600092915050565b8061298f8161599a565b91505061291e565b6060600084516005036129ac57506001612a3c565b8451600a036129bd57506002612a3c565b8451600f036129ce57506003612a3c565b60405162461bcd60e51b815260206004820152603760248201527f596f75206e65656420352c203130206f72203135204d6f6d6f6d7320746f206760448201527f657420312c2032206f722033206d6f726520726172652e000000000000000000606482015260840161189b565b83600303612ab1578451600514612ab15760405162461bcd60e51b815260206004820152603360248201527f596f752063616e206f6e6c79206275726e20352045706963204d6f6d6f6d73206044820152723a379033b2ba1018902632b3b2b73230b93c9760691b606482015260840161189b565b6000816001600160401b03811115612acb57612acb6150a6565b604051908082528060200260200182016040528015612af4578160200160208202803683370190505b50905084600003612c4d576018546301000000900460ff16612b285760405162461bcd60e51b815260040161189b90615b38565b612b3186613593565b612b8f5760405162461bcd60e51b815260206004820152602960248201527f596f75206e656564203520436f6d6d6f6e7320746f20726563656976652061206044820152682ab731b7b6b6b7b69760b91b606482015260840161189b565b60005b8651811015612bc357612bb133888381518110611b3857611b38615984565b80612bbb8161599a565b915050612b92565b506000612bcf85613e2c565b905060005b83811015612c46576000612bf4838315611d78576110d184612710615aae565b9050612bff81611e25565b848381518110612c1157612c11615984565b602002602001018181525050612c3333858481518110611dbe57611dbe615984565b5080612c3e8161599a565b915050612bd4565b505061303c565b84600103612d9a57601854640100000000900460ff16612c7f5760405162461bcd60e51b815260040161189b90615b38565b612c8886611e41565b612ce35760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564203520556e636f6d6d6f6d20746f20726563656976652061604482015265102930b9329760d11b606482015260840161189b565b60005b8651811015612d1757612d0533888381518110611b3857611b38615984565b80612d0f8161599a565b915050612ce6565b506000612d2385613e2c565b905060005b83811015612c46576000612d48838315611d78576110d184612710615aae565b9050612d53816139b7565b848381518110612d6557612d65615984565b602002602001018181525050612d8733858481518110611dbe57611dbe615984565b5080612d928161599a565b915050612d28565b84600203612ee257601854600160281b900460ff16612dcb5760405162461bcd60e51b815260040161189b90615b38565b612dd486613454565b612e2b5760405162461bcd60e51b815260206004820152602260248201527f596f75206e6565642035205261726520746f2072656365697665206120457069604482015261319760f11b606482015260840161189b565b60005b8651811015612e5f57612e4d33888381518110611b3857611b38615984565b80612e578161599a565b915050612e2e565b506000612e6b85613e2c565b905060005b83811015612c46576000612e90838315611d78576110d184612710615aae565b9050612e9b8161360e565b848381518110612ead57612ead615984565b602002602001018181525050612ecf33858481518110611dbe57611dbe615984565b5080612eda8161599a565b915050612e70565b84600303612fff57601854600160301b900460ff16612f135760405162461bcd60e51b815260040161189b90615b38565b612f1c8661291a565b612f785760405162461bcd60e51b815260206004820152602760248201527f596f75206e6565642035204570696320746f20726563656976652061204c656760448201526632b73230b93c9760c91b606482015260840161189b565b60005b8651811015612fac57612f9a33888381518110611b3857611b38615984565b80612fa48161599a565b915050612f7b565b506000612fb885613e2c565b9050612fc381611a2d565b82600081518110612fd657612fd6615984565b602002602001018181525050612ff93383600081518110611dbe57611dbe615984565b5061303c565b60405162461bcd60e51b815260206004820152601260248201527157726f6e6720726172697479206275726e2160701b604482015260640161189b565b95945050505050565b6015546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fb9190615b6f565b6130ba6140c2565b6018805460ff1916911515919091179055565b606081518351146131325760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161189b565b600083516001600160401b0381111561314d5761314d6150a6565b604051908082528060200260200182016040528015613176578160200160208202803683370190505b50905060005b8451811015612905576131c185828151811061319a5761319a615984565b60200260200101518583815181106131b4576131b4615984565b6020026020010151611834565b8282815181106131d3576131d3615984565b60209081029190910101526131e78161599a565b905061317c565b60006131f8613a57565b613200613269565b6132086121e9565b61321061324a565b61321c90612710615b08565b6132269190615b08565b6132309190615b08565b6121fb9190615b08565b6132426140c2565b600b55600a55565b6000600e54600f546121fb9190615b08565b6132646140c2565b601155565b6000600a54600b546121fb9190615b08565b60606000613287613bc1565b9050600081516001600160401b038111156132a4576132a46150a6565b6040519080825280602002602001820160405280156132cd578160200160208202803683370190505b50905060005b8251811015613321576132f2338483815181106131b4576131b4615984565b82828151811061330457613304615984565b6020908102919091010152806133198161599a565b9150506132d3565b5092915050565b6133306140c2565b600555565b6001600160a01b038316331480613351575061335183336116da565b61336d5760405162461bcd60e51b815260040161189b90615aba565b613378838383614684565b505050565b6133856140c2565b60185460ff166133e25760405162461bcd60e51b815260206004820152602260248201527f4e6f74207468652074696d6520746f2052656e6f756e6365204f776e65727368604482015261069760f41b606482015260840161189b565b6123066000614820565b3360008181526006602090815260409182902084815543600182018190556002909101805460ff19169055825193845290830184905282820152517f19fad381b1712620715f03d76aa899a2fb46b402f67a49a4c13ff09a23a177249181900360600190a150565b6000805b8251811015611ebe5782818151811061347357613473615984565b602002602001015161019011806134b1575060125461349490610190615971565b8382815181106134a6576134a6615984565b602002602001015110155b156134bf5750600092915050565b806134c98161599a565b915050613458565b6134d96140c2565b60005b82811015613532576135208484838181106134f9576134f9615984565b905060200201602081019061350e9190615439565b838381518110611dbe57611dbe615984565b8061352a8161599a565b9150506134dc565b50505050565b6000806135458385615b88565b905061355361271082615947565b949350505050565b6135636140c2565b60188054911515600160281b0265ff000000000019909216919091179055565b61358b6140c2565b612306614872565b6000805b8251811015611ebe578281815181106135b2576135b2615984565b6020026020010151606411806135ee57506010546135d1906064615971565b8382815181106135e3576135e3615984565b602002602001015110155b156135fc5750600092915050565b806136068161599a565b915050613597565b60006013548261361e9190615947565b6118c7906101f4615971565b6136326140c2565b601355565b60008061364661271084615947565b90508060085410801561365b57506009548111155b156136805760145461366d9084615947565b61367990610258615971565b9392505050565b80600a541080156136935750600b548111155b156136b1576013546136a59084615947565b613679906101f4615971565b80600c541080156136c45750600d548111155b156136e2576012546136d69084615947565b61367990610190615971565b80600e541080156136f45750600f5481105b15613712576011546137069084615947565b6136799061012c615971565b60105461371f9084615947565b613679906064615971565b50919050565b606061373a6140c2565b6000613747846001615971565b6001600160401b0381111561375e5761375e6150a6565b604051908082528060200260200182016040528015613787578160200160208202803683370190505b509050600061379584613e2c565b905060005b8581101561380c5760006137ba838315611d78576110d184612710615aae565b90506137c581613637565b6137d282620186a06159b3565b6137dc9190615971565b8483815181106137ee576137ee615984565b602090810291909101015250806138048161599a565b91505061379a565b508082868151811061382057613820615984565b6020908102919091010152509392505050565b61383b6140c2565b601880549115156401000000000264ff0000000019909216919091179055565b601f5460009060ff16801561387757506000613875613045565b115b15613883575060205490565b601654600160c81b900460ff161561389c575060175490565b50660aa87bee53800090565b90565b6138b36140c2565b600955600855565b6000601054826138cb9190615947565b6118c7906064615971565b60008060006138e484613e2c565b90506138ef85612308565b845160010361390857613901816138bb565b9150613990565b845160020361391a5761390181611e25565b845160030361392c57613901816139b7565b845160040361393e576139018161360e565b84516005036139505761390181611a2d565b60405162461bcd60e51b815260206004820152601560248201527457726f6e67207473756b6920717479206275726e2160581b604482015260640161189b565b612905338360016040518060200160405280600081525061436b565b61272a3383836148b5565b6000601254826139c79190615947565b6118c790610190615971565b6139db6140c2565b60168054911515600160c01b0260ff60c01b19909216919091179055565b613a016140c2565b6018805464ffff0000001916630100000092151592830264ff0000000019161764010000000083021766ffff00000000001916600160281b830266ff000000000000191617600160301b92909202919091179055565b60006008546009546121fb9190615b08565b6000816040516020016122af91815260200190565b613a866140c2565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60155460405163e985e9c560e01b81526001600160a01b0384811660048301528381166024830152600092169063e985e9c590604401602060405180830381865afa158015613afb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136799190615b9c565b601b5460009081908310613b3d57601c54613b3a9082615971565b90505b601d5483106118c757601e546136799082615971565b6015546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190615b1b565b60606000601454601354601254601154601054613bde9190615971565b613be89190615971565b613bf29190615971565b613bfc9190615971565b6001600160401b03811115613c1357613c136150a6565b604051908082528060200260200182016040528015613c3c578160200160208202803683370190505b5090506000805b601054811015613c9557613c58816064615971565b838381518110613c6a57613c6a615984565b602090810291909101015281613c7f8161599a565b9250508080613c8d9061599a565b915050613c43565b5060005b601154811015613cec57613caf8161012c615971565b838381518110613cc157613cc1615984565b602090810291909101015281613cd68161599a565b9250508080613ce49061599a565b915050613c99565b5060005b601254811015613d4357613d0681610190615971565b838381518110613d1857613d18615984565b602090810291909101015281613d2d8161599a565b9250508080613d3b9061599a565b915050613cf0565b5060005b601354811015613d9a57613d5d816101f4615971565b838381518110613d6f57613d6f615984565b602090810291909101015281613d848161599a565b9250508080613d929061599a565b915050613d47565b5060005b601454811015613df157613db481610258615971565b838381518110613dc657613dc6615984565b602090810291909101015281613ddb8161599a565b9250508080613de99061599a565b915050613d9e565b509092915050565b613e016140c2565b601955565b613e0e6140c2565b60168054911515600160b81b0260ff60b81b19909216919091179055565b60006118c782611eed565b613e3f6140c2565b60168054921515600160c81b0260ff60c81b1990931692909217909155601755565b60218054613e6e906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054613e9a906157c9565b8015613ee75780601f10613ebc57610100808354040283529160200191613ee7565b820191906000526020600020905b815481529060010190602001808311613eca57829003601f168201915b505050505081565b613ef76140c2565b601f805460ff191692151592909217909155602055565b613f166140c2565b601880549115156101000261ff0019909216919091179055565b613f386140c2565b601d91909155601e55565b613f4b6140c2565b601455565b6001600160a01b038516331480613f6c5750613f6c85336116da565b613f885760405162461bcd60e51b815260040161189b90615aba565b6121ac8585858585614995565b613f9d6140c2565b60188054911515620100000262ff000019909216919091179055565b613fc16140c2565b6001600160a01b0381166140265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161189b565b61193b81614820565b6001600160a01b03831633148061404b575061404b83336116da565b6140675760405162461bcd60e51b815260040161189b90615aba565b61337883838361424e565b61407a6140c2565b6018805491151563010000000263ff00000019909216919091179055565b6140a06140c2565b60188054911515600160381b0267ff0000000000000019909216919091179055565b6003546001600160a01b031633146123065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161189b565b600261272a8282615843565b606060028054614137906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054614163906157c9565b80156141b05780601f10614185576101008083540402835291602001916141b0565b820191906000526020600020905b81548152906001019060200180831161419357829003601f168201915b50505050509050919050565b606060006141c983614acd565b60010190506000816001600160401b038111156141e8576141e86150a6565b6040519080825280601f01601f191660200182016040528015614212576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461421c57509392505050565b6001600160a01b0383166142745760405162461bcd60e51b815260040161189b90615bb9565b33600061428084614ba5565b9050600061428d84614ba5565b90506142ad83876000858560405180602001604052806000815250614bf0565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156142ee5760405162461bcd60e51b815260040161189b90615bfc565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b6001600160a01b0384166143cb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161189b565b3360006143d785614ba5565b905060006143e485614ba5565b90506143f583600089858589614bf0565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290614425908490615971565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461436283600089898989614c06565b81518351146144a65760405162461bcd60e51b815260040161189b90615c40565b6001600160a01b0384166144cc5760405162461bcd60e51b815260040161189b90615c88565b336144db818787878787614bf0565b60005b84518110156145c15760008582815181106144fb576144fb615984565b60200260200101519050600085838151811061451957614519615984565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156145695760405162461bcd60e51b815260040161189b90615ccd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906145a6908490615971565b92505081905550505050806145ba9061599a565b90506144de565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614611929190615d17565b60405180910390a4614627818787878787614d61565b505050505050565b614637614e1c565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0383166146aa5760405162461bcd60e51b815260040161189b90615bb9565b80518251146146cb5760405162461bcd60e51b815260040161189b90615c40565b60003390506146ee81856000868660405180602001604052806000815250614bf0565b60005b83518110156147b357600084828151811061470e5761470e615984565b60200260200101519050600084838151811061472c5761472c615984565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561477c5760405162461bcd60e51b815260040161189b90615bfc565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806147ab8161599a565b9150506146f1565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051614804929190615d17565b60405180910390a4604080516020810190915260009052613532565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61487a614e6c565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146673390565b816001600160a01b0316836001600160a01b0316036149285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161189b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166149bb5760405162461bcd60e51b815260040161189b90615c88565b3360006149c785614ba5565b905060006149d485614ba5565b90506149e4838989858589614bf0565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015614a255760405162461bcd60e51b815260040161189b90615ccd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290614a62908490615971565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4614ac2848a8a8a8a8a614c06565b505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614b0c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614b38576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614b5657662386f26fc10000830492506010015b6305f5e1008310614b6e576305f5e100830492506008015b6127108310614b8257612710830492506004015b60648310614b94576064830492506002015b600a83106118c75760010192915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110614bdf57614bdf615984565b602090810291909101015292915050565b614bf8614e6c565b614627868686868686614eb9565b6001600160a01b0384163b156146275760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190614c4a9089908990889088908890600401615d3c565b6020604051808303816000875af1925050508015614c85575060408051601f3d908101601f19168201909252614c8291810190615d81565b60015b614d3157614c91615d9e565b806308c379a003614cca5750614ca5615db9565b80614cb05750614ccc565b8060405162461bcd60e51b815260040161189b9190615221565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161189b565b6001600160e01b0319811663f23a6e6160e01b146143625760405162461bcd60e51b815260040161189b90615e42565b6001600160a01b0384163b156146275760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190614da59089908990889088908890600401615e8a565b6020604051808303816000875af1925050508015614de0575060408051601f3d908101601f19168201909252614ddd91810190615d81565b60015b614dec57614c91615d9e565b6001600160e01b0319811663bc197c8160e01b146143625760405162461bcd60e51b815260040161189b90615e42565b600354600160a01b900460ff166123065760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161189b565b600354600160a01b900460ff16156123065760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161189b565b6001600160a01b038516614f405760005b8351811015614f3e57828181518110614ee557614ee5615984565b602002602001015160046000868481518110614f0357614f03615984565b602002602001015181526020019081526020016000206000828254614f289190615971565b90915550614f3790508161599a565b9050614eca565b505b6001600160a01b0384166146275760005b8351811015614362576000848281518110614f6e57614f6e615984565b602002602001015190506000848381518110614f8c57614f8c615984565b602002602001015190506000600460008481526020019081526020016000205490508181101561500f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161189b565b6000928352600460205260409092209103905561502b8161599a565b9050614f51565b6001600160a01b038116811461193b57600080fd5b6000806040838503121561505a57600080fd5b823561506581615032565b946020939093013593505050565b6001600160e01b03198116811461193b57600080fd5b60006020828403121561509b57600080fd5b813561367981615073565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156150e1576150e16150a6565b6040525050565b60006001600160401b03831115615101576151016150a6565b604051615118601f8501601f1916602001826150bc565b80915083815284848401111561512d57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561515757600080fd5b81356001600160401b0381111561516d57600080fd5b8201601f8101841361517e57600080fd5b613553848235602084016150e8565b60006020828403121561519f57600080fd5b5035919050565b801515811461193b57600080fd5b6000602082840312156151c657600080fd5b8135613679816151a6565b60005b838110156151ec5781810151838201526020016151d4565b50506000910152565b6000815180845261520d8160208601602086016151d1565b601f01601f19169290920160200192915050565b60208152600061367960208301846151f5565b6000806040838503121561524757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156152865781518752958201959082019060010161526a565b509495945050505050565b6020815260006136796020830184615256565b60006001600160401b038211156152bd576152bd6150a6565b5060051b60200190565b600082601f8301126152d857600080fd5b813560206152e5826152a4565b6040516152f282826150bc565b83815260059390931b850182019282810191508684111561531257600080fd5b8286015b8481101561532d5780358352918301918301615316565b509695505050505050565b60006020828403121561534a57600080fd5b81356001600160401b0381111561536057600080fd5b613553848285016152c7565b600082601f83011261537d57600080fd5b613679838335602085016150e8565b600080600080600060a086880312156153a457600080fd5b85356153af81615032565b945060208601356153bf81615032565b935060408601356001600160401b03808211156153db57600080fd5b6153e789838a016152c7565b945060608801359150808211156153fd57600080fd5b61540989838a016152c7565b9350608088013591508082111561541f57600080fd5b5061542c8882890161536c565b9150509295509295909350565b60006020828403121561544b57600080fd5b813561367981615032565b60008060006060848603121561546b57600080fd5b83356001600160401b0381111561548157600080fd5b61548d868287016152c7565b9660208601359650604090950135949350505050565b600080604083850312156154b657600080fd5b82356001600160401b03808211156154cd57600080fd5b818501915085601f8301126154e157600080fd5b813560206154ee826152a4565b6040516154fb82826150bc565b83815260059390931b850182019282810191508984111561551b57600080fd5b948201945b8386101561554257853561553381615032565b82529482019490820190615520565b9650508601359250508082111561555857600080fd5b50615565858286016152c7565b9150509250929050565b60008060006060848603121561558457600080fd5b833561558f81615032565b925060208401356001600160401b03808211156155ab57600080fd5b6155b7878388016152c7565b935060408601359150808211156155cd57600080fd5b506155da868287016152c7565b9150509250925092565b6000806000604084860312156155f957600080fd5b83356001600160401b038082111561561057600080fd5b818601915086601f83011261562457600080fd5b81358181111561563357600080fd5b8760208260051b850101111561564857600080fd5b6020928301955093509085013590808211156155cd57600080fd5b6000806040838503121561567657600080fd5b82356001600160401b0381111561568c57600080fd5b615698858286016152c7565b95602094909401359450505050565b600080604083850312156156ba57600080fd5b82356156c581615032565b915060208301356156d5816151a6565b809150509250929050565b600080604083850312156156f357600080fd5b82356156fe81615032565b915060208301356156d581615032565b6000806040838503121561572157600080fd5b8235615065816151a6565b600080600080600060a0868803121561574457600080fd5b853561574f81615032565b9450602086013561575f81615032565b9350604086013592506060860135915060808601356001600160401b0381111561578857600080fd5b61542c8882890161536c565b6000806000606084860312156157a957600080fd5b83356157b481615032565b95602085013595506040909401359392505050565b600181811c908216806157dd57607f821691505b60208210810361372a57634e487b7160e01b600052602260045260246000fd5b601f82111561337857600081815260208120601f850160051c810160208610156158245750805b601f850160051c820191505b8181101561462757828155600101615830565b81516001600160401b0381111561585c5761585c6150a6565b6158708161586a84546157c9565b846157fd565b602080601f8311600181146158a5576000841561588d5750858301515b600019600386901b1c1916600185901b178555614627565b600085815260208120601f198616915b828110156158d4578886015182559484019460019091019084016158b5565b50858210156158f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516159148184602088016151d1565b8351908301906159288183602088016151d1565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261595657615956615931565b500690565b634e487b7160e01b600052601160045260246000fd5b808201808211156118c7576118c761595b565b634e487b7160e01b600052603260045260246000fd5b6000600182016159ac576159ac61595b565b5060010190565b80820281158282048414176118c7576118c761595b565b600181815b80851115615a055781600019048211156159eb576159eb61595b565b808516156159f857918102915b93841c93908002906159cf565b509250929050565b600082615a1c575060016118c7565b81615a29575060006118c7565b8160018114615a3f5760028114615a4957615a65565b60019150506118c7565b60ff841115615a5a57615a5a61595b565b50506001821b6118c7565b5060208310610133831016604e8410600b8410161715615a88575081810a6118c7565b615a9283836159ca565b8060001904821115615aa657615aa661595b565b029392505050565b60006136798383615a0d565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b818103818111156118c7576118c761595b565b600060208284031215615b2d57600080fd5b815161367981615032565b60208082526017908201527f4275726e204d6f6d6f6d206973206e6f74206f70656e21000000000000000000604082015260600190565b600060208284031215615b8157600080fd5b5051919050565b600082615b9757615b97615931565b500490565b600060208284031215615bae57600080fd5b8151613679816151a6565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000615d2a6040830185615256565b828103602084015261303c8185615256565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090615d76908301846151f5565b979650505050505050565b600060208284031215615d9357600080fd5b815161367981615073565b600060033d11156138a85760046000803e5060005160e01c90565b600060443d1015615dc75790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715615df657505050505090565b8285019150815181811115615e0e5750505050505090565b843d8701016020828501011115615e285750505050505090565b615e37602082860101876150bc565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090615eb690830186615256565b8281036060840152615ec88186615256565b90508281036080840152615edc81856151f5565b9897505050505050505056fea2646970667358221220bc880ca4f81a287e32893b5cbb770f6924d6f78bdbea3d59c5f64434745a976b64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106107e55760003560e01c80637b2ca38611610409578063ba5cfc1e1161021e578063d5616b7c1161012e578063eb501ea6116100b6578063f24ca59411610085578063f24ca59414611794578063f2fde38b146117b4578063f5298aca146117d4578063f7002710146117f4578063f8004d311461181457600080fd5b8063eb501ea614611728578063edf4e97a1461173e578063f1ac79d314611754578063f242432a1461177457600080fd5b8063dfd352ca116100fd578063dfd352ca14611667578063e805d32414611688578063e8c545ac146116a9578063e985e9c5146116bf578063e9cdf3a01461170857600080fd5b8063d5616b7c146115f6578063d6eec46a1461160c578063d7c009ce14611627578063d9ef157a1461164757600080fd5b8063c30d72d5116101b1578063c7fa69a911610180578063c7fa69a914611560578063d4811e3b14611581578063d4ce545a146115a1578063d5069924146115c1578063d547cfb7146115e157600080fd5b8063c30d72d5146114eb578063c41a360a1461150b578063c712fc601461152b578063c7ab2ce61461154057600080fd5b8063bde40a01116101ed578063bde40a0114611475578063be66f87114611495578063bf6b2a0d146114b5578063c1e1d0ee146114cb57600080fd5b8063ba5cfc1e14611406578063bcaae26f1461141c578063bcd56d0014611432578063bd85b0391461144857600080fd5b80639188d31211610319578063a43c6536116102ac578063adf36e9a1161027b578063adf36e9a14611384578063ae8506061461139a578063aeea2d45146113ba578063b488f3ef146113d0578063b5eb11d4146113f157600080fd5b8063a43c6536146112f6578063a90b9c7214611317578063a92e7e0714611337578063acf3d8571461135757600080fd5b80639c070274116102e85780639c070274146112765780639dcd50b8146112965780639e2c4f3e146112b6578063a22cb465146112d657600080fd5b80639188d3121461120157806393ffc2f7146112215780639571ab2b1461124157806398d5fdca1461126157600080fd5b8063829b5f7f1161039c578063886d6e431161036b578063886d6e4314611163578063893da6c9146111845780638b96e424146111a35780638da5cb5b146111c35780638e009c00146111e157600080fd5b8063829b5f7f146110f85780638456cb591461111857806385fa62f31461112d5780638708974a1461114d57600080fd5b80637d0091d4116103d85780637d0091d41461107f5780637dccc516146110955780637e1913b0146110b65780638161afcd146110d657600080fd5b80637b2ca38614610fc85780637b43a8e614610fe25780637b9842201461103e5780637bdb326f1461105e57600080fd5b80633cf5040a116105ff57806358963bbd1161050f5780636ae15cc8116104a257806374ba411e1161047157806374ba411e14610f255780637629a21314610f455780637705f9b514610f65578063775b700914610f85578063791eef0714610f9b57600080fd5b80636ae15cc814610eba5780636b20c45414610eda5780636f72fd8314610efa578063715018a614610f1057600080fd5b8063657a20fe116104de578063657a20fe14610e50578063660ee00b14610e7057806367bd44cb14610e85578063689fc11614610e9a57600080fd5b806358963bbd14610df05780635b1e025514610e065780635c975abb14610e1c57806360b0854c14610e3b57600080fd5b80634b2539b8116105925780634f558e79116105615780634f558e7914610d6357806352e4ec3114610d92578063534b959114610da857806357e871e714610dbd57806357f8887b14610dd057600080fd5b80634b2539b814610cee5780634bf2326b14610d0e5780634def4d1a14610d235780634e1273f414610d4357600080fd5b806340a5aae4116105ce57806340a5aae414610c6e57806345383f4014610c8e57806348e39d2c14610cae57806349825cea14610cce57600080fd5b80633cf5040a14610bf95780633dc7ad6514610c195780633f4ba83a14610c395780633fcc46b014610c4e57600080fd5b80631cd0c4c1116106fa5780632eb2c2d61161068d57806338b39d291161065c57806338b39d2914610b93578063394b117e14610ba65780633a4087c714610bbb5780633c99e8a114610bd15780633ccfd60b14610bf157600080fd5b80632eb2c2d614610afb578063321a7a7f14610b1b57806332e94ae414610b5357806333a4d1a114610b7357600080fd5b806327ec9b0a116106c957806327ec9b0a14610a845780632c3b9f5514610aa45780632d577e3614610aba5780632e39a68814610adb57600080fd5b80631cd0c4c114610a0d578063228e1eab14610a2d578063229028a214610a4357806324bbd04914610a6357600080fd5b80630d92a41c1161077d578063154b397b1161074c578063154b397b1461097857806317579e151461098d5780631801fbe5146109ad578063181204c9146109cd57806318510158146109ed57600080fd5b80630d92a41c146108f65780630e89341c1461091657806310406bec14610943578063122be4a31461096357600080fd5b806307aaeae4116107b957806307aaeae41461088f57806309c5663b146108a95780630aec2a0f146108bf5780630b3a921c146108d557600080fd5b8062fdd58e146107ea57806301ffc9a71461081d57806302fe53051461084d578063038133e51461086f575b600080fd5b3480156107f657600080fd5b5061080a610805366004615047565b611834565b6040519081526020015b60405180910390f35b34801561082957600080fd5b5061083d610838366004615089565b6118cd565b6040519015158152602001610814565b34801561085957600080fd5b5061086d610868366004615145565b61191d565b005b34801561087b57600080fd5b5061086d61088a36600461518d565b61193e565b34801561089b57600080fd5b50601f5461083d9060ff1681565b3480156108b557600080fd5b5061080a60055481565b3480156108cb57600080fd5b5061080a60115481565b3480156108e157600080fd5b5060165461083d90600160b01b900460ff1681565b34801561090257600080fd5b5061086d6109113660046151b4565b61194b565b34801561092257600080fd5b5061093661093136600461518d565b611971565b6040516108149190615221565b34801561094f57600080fd5b5061080a61095e36600461518d565b611a2d565b34801561096f57600080fd5b5061080a600c81565b34801561098457600080fd5b5061086d611a49565b34801561099957600080fd5b5061086d6109a8366004615234565b611b90565b6109c06109bb366004615234565b611ba0565b6040516108149190615291565b3480156109d957600080fd5b5061086d6109e83660046151b4565b611dfa565b3480156109f957600080fd5b5061080a610a0836600461518d565b611e25565b348015610a1957600080fd5b5061083d610a28366004615338565b611e41565b348015610a3957600080fd5b5061080a601c5481565b348015610a4f57600080fd5b5061086d610a5e3660046151b4565b611ec7565b348015610a6f57600080fd5b5060185461083d90600160381b900460ff1681565b348015610a9057600080fd5b5061080a610a9f36600461518d565b611eed565b348015610ab057600080fd5b5061080a600e5481565b348015610ac657600080fd5b5060165461083d90600160c01b900460ff1681565b348015610ae757600080fd5b5061086d610af63660046151b4565b6120ef565b348015610b0757600080fd5b5061086d610b1636600461538c565b612167565b348015610b2757600080fd5b50601654610b3b906001600160a01b031681565b6040516001600160a01b039091168152602001610814565b348015610b5f57600080fd5b5061086d610b6e366004615234565b6121b3565b348015610b7f57600080fd5b5061086d610b8e3660046151b4565b6121c3565b348015610b9f57600080fd5b5030610b3b565b348015610bb257600080fd5b5061080a6121e9565b348015610bc757600080fd5b5061080a60175481565b348015610bdd57600080fd5b5061086d610bec3660046151b4565b612200565b61086d612229565b348015610c0557600080fd5b5061080a610c1436600461518d565b612286565b348015610c2557600080fd5b5061086d610c34366004615439565b6122cc565b348015610c4557600080fd5b5061086d6122f6565b348015610c5a57600080fd5b5061086d610c69366004615338565b612308565b348015610c7a57600080fd5b5061086d610c89366004615234565b61272e565b348015610c9a57600080fd5b5061080a610ca9366004615234565b612741565b348015610cba57600080fd5b5061086d610cc936600461518d565b61290d565b348015610cda57600080fd5b5061083d610ce9366004615338565b61291a565b348015610cfa57600080fd5b506109c0610d09366004615456565b612997565b348015610d1a57600080fd5b5061080a613045565b348015610d2f57600080fd5b5061086d610d3e3660046151b4565b6130b2565b348015610d4f57600080fd5b506109c0610d5e3660046154a3565b6130cd565b348015610d6f57600080fd5b5061083d610d7e36600461518d565b600090815260046020526040902054151590565b348015610d9e57600080fd5b5061080a60135481565b348015610db457600080fd5b5061080a6131ee565b348015610dc957600080fd5b504361080a565b348015610ddc57600080fd5b5061086d610deb366004615234565b61323a565b348015610dfc57600080fd5b5061080a600d5481565b348015610e1257600080fd5b5061080a601a5481565b348015610e2857600080fd5b50600354600160a01b900460ff1661083d565b348015610e4757600080fd5b5061080a61324a565b348015610e5c57600080fd5b5061086d610e6b36600461518d565b61325c565b348015610e7c57600080fd5b5061080a613269565b348015610e9157600080fd5b506109c061327b565b348015610ea657600080fd5b5061086d610eb536600461518d565b613328565b348015610ec657600080fd5b5060185461083d9062010000900460ff1681565b348015610ee657600080fd5b5061086d610ef536600461556f565b613335565b348015610f0657600080fd5b5061080a601d5481565b348015610f1c57600080fd5b5061086d61337d565b348015610f3157600080fd5b5061086d610f4036600461518d565b6133ec565b348015610f5157600080fd5b5061083d610f60366004615338565b613454565b348015610f7157600080fd5b5061086d610f803660046155e4565b6134d1565b348015610f9157600080fd5b5061080a60095481565b348015610fa757600080fd5b5061080a610fb6366004615439565b60236020526000908152604090205481565b348015610fd457600080fd5b5060185461083d9060ff1681565b348015610fee57600080fd5b50611021610ffd366004615439565b60066020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610814565b34801561104a57600080fd5b50601554610b3b906001600160a01b031681565b34801561106a57600080fd5b5060165461083d90600160a81b900460ff1681565b34801561108b57600080fd5b5061080a600c5481565b3480156110a157600080fd5b5060185461083d90600160401b900460ff1681565b3480156110c257600080fd5b5061080a6110d1366004615234565b613538565b3480156110e257600080fd5b5060185461083d90640100000000900460ff1681565b34801561110457600080fd5b5061086d6111133660046151b4565b61355b565b34801561112457600080fd5b5061086d613583565b34801561113957600080fd5b5061083d611148366004615338565b613593565b34801561115957600080fd5b5061080a600f5481565b34801561116f57600080fd5b5060185461083d90600160281b900460ff1681565b34801561119057600080fd5b5060185461083d90610100900460ff1681565b3480156111af57600080fd5b5061080a6111be36600461518d565b61360e565b3480156111cf57600080fd5b506003546001600160a01b0316610b3b565b3480156111ed57600080fd5b5061086d6111fc36600461518d565b61362a565b34801561120d57600080fd5b5061080a61121c36600461518d565b613637565b34801561122d57600080fd5b506109c061123c366004615234565b613730565b34801561124d57600080fd5b5061086d61125c3660046151b4565b613833565b34801561126d57600080fd5b5061080a61385b565b34801561128257600080fd5b5061086d611291366004615234565b6138ab565b3480156112a257600080fd5b5061080a6112b136600461518d565b6138bb565b3480156112c257600080fd5b5061080a6112d1366004615663565b6138d6565b3480156112e257600080fd5b5061086d6112f13660046156a7565b6139ac565b34801561130257600080fd5b5060165461083d90600160c81b900460ff1681565b34801561132357600080fd5b5061080a61133236600461518d565b6139b7565b34801561134357600080fd5b5061086d6113523660046151b4565b6139d3565b34801561136357600080fd5b5061080a61137236600461518d565b60226020526000908152604090205481565b34801561139057600080fd5b5061080a60205481565b3480156113a657600080fd5b5061086d6113b53660046151b4565b6139f9565b3480156113c657600080fd5b5061080a60105481565b3480156113dc57600080fd5b5060185461083d906301000000900460ff1681565b3480156113fd57600080fd5b5061080a613a57565b34801561141257600080fd5b5061080a60085481565b34801561142857600080fd5b5061080a601e5481565b34801561143e57600080fd5b5061080a600a5481565b34801561145457600080fd5b5061080a61146336600461518d565b60009081526004602052604090205490565b34801561148157600080fd5b5061080a61149036600461518d565b613a69565b3480156114a157600080fd5b5061086d6114b0366004615439565b613a7e565b3480156114c157600080fd5b5061080a60145481565b3480156114d757600080fd5b5061083d6114e63660046156e0565b613aa8565b3480156114f757600080fd5b5061080a61150636600461518d565b613b1f565b34801561151757600080fd5b50610b3b61152636600461518d565b613b53565b34801561153757600080fd5b506109c0613bc1565b34801561154c57600080fd5b5061086d61155b36600461518d565b613df9565b34801561156c57600080fd5b5060165461083d90600160b81b900460ff1681565b34801561158d57600080fd5b5061086d61159c3660046151b4565b613e06565b3480156115ad57600080fd5b5061080a6115bc36600461518d565b613e2c565b3480156115cd57600080fd5b5061086d6115dc36600461570e565b613e37565b3480156115ed57600080fd5b50610936613e61565b34801561160257600080fd5b5061080a60195481565b34801561161857600080fd5b5061080a660aa87bee53800081565b34801561163357600080fd5b5061086d61164236600461570e565b613eef565b34801561165357600080fd5b5061086d6116623660046151b4565b613f0e565b34801561167357600080fd5b5060165461083d90600160a01b900460ff1681565b34801561169457600080fd5b5060185461083d90600160301b900460ff1681565b3480156116b557600080fd5b5061080a601b5481565b3480156116cb57600080fd5b5061083d6116da3660046156e0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561171457600080fd5b5061086d611723366004615234565b613f30565b34801561173457600080fd5b5061080a60125481565b34801561174a57600080fd5b5061080a600b5481565b34801561176057600080fd5b5061086d61176f36600461518d565b613f43565b34801561178057600080fd5b5061086d61178f36600461572c565b613f50565b3480156117a057600080fd5b5061086d6117af3660046151b4565b613f95565b3480156117c057600080fd5b5061086d6117cf366004615439565b613fb9565b3480156117e057600080fd5b5061086d6117ef366004615794565b61402f565b34801561180057600080fd5b5061086d61180f3660046151b4565b614072565b34801561182057600080fd5b5061086d61182f3660046151b4565b614098565b60006001600160a01b0383166118a45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806118fe57506001600160e01b031982166303a24d0760e21b145b806118c757506301ffc9a760e01b6001600160e01b03198316146118c7565b6119256140c2565b60216119318282615843565b5061193b8161411c565b50565b6119466140c2565b601255565b6119536140c2565b60168054911515600160a01b0260ff60a01b19909216919091179055565b6000818152600460205260409020546060906119cf5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604482015260640161189b565b60006119da83614128565b51116119f557604051806020016040528060008152506118c7565b6119fe82614128565b611a07836141bc565b604051602001611a18929190615902565b60405160208183030381529060405292915050565b600060145482611a3d9190615947565b6118c790610258615971565b601854600160401b900460ff16611aa25760405162461bcd60e51b815260206004820152601d60248201527f52657761726420616c6c204d6f6d6f6d206973206e6f74206f70656e21000000604482015260640161189b565b601954601a5410611b0a5760405162461bcd60e51b815260206004820152602c60248201527f4d617820726577617264207265616368656421205761697420666f7220616e6f60448201526b74686572207265776172642160a01b606482015260840161189b565b6000611b14613bc1565b905060005b8151811015611b5957611b4733838381518110611b3857611b38615984565b6020026020010151600161424e565b80611b518161599a565b915050611b19565b50611b78336102bc60016040518060200160405280600081525061436b565b601a8054906000611b888361599a565b919050555050565b611b986140c2565b600d55600c55565b601854606090600160381b900460ff16611bf25760405162461bcd60e51b81526020600482015260136024820152724d696e74206973206e6f74206f70656e65642160681b604482015260640161189b565b323314611c415760405162461bcd60e51b815260206004820152601d60248201527f434f4e5452414354535f4e4f545f414c4c4f5745445f544f5f4d494e54000000604482015260640161189b565b600c831115611c925760405162461bcd60e51b815260206004820152601860248201527f4d6178206d696e7420706572206d696e742069732031302e0000000000000000604482015260640161189b565b611c9a61385b565b611ca490846159b3565b341015611ce35760405162461bcd60e51b815260206004820152600d60248201526c092dcc6dee4e4cac6e8408aa89609b1b604482015260640161189b565b6000611cee83613e2c565b90506000611cfb85613b1f565b90506000611d098287615971565b6001600160401b03811115611d2057611d206150a6565b604051908082528060200260200182016040528015611d49578160200160208202803683370190505b50905060005b611d598388615971565b811015611df0576000611d7f858315611d78576110d184612710615aae565b6001613538565b9050611d8a81613637565b838381518110611d9c57611d9c615984565b602002602001018181525050611ddd33848481518110611dbe57611dbe615984565b602002602001015160016040518060200160405280600081525061436b565b5080611de88161599a565b915050611d4f565b5095945050505050565b611e026140c2565b60188054911515600160401b0268ff000000000000000019909216919091179055565b600060115482611e359190615947565b6118c79061012c615971565b6000805b8251811015611ebe57828181518110611e6057611e60615984565b602002602001015161012c1180611e9e5750601154611e819061012c615971565b838281518110611e9357611e93615984565b602002602001015110155b15611eac5750600092915050565b80611eb68161599a565b915050611e45565b50600192915050565b611ecf6140c2565b60168054911515600160a81b0260ff60a81b19909216919091179055565b3360009081526006602052604081206002015460ff1615611f435760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e481c995d99585b195960821b604482015260640161189b565b33600090815260066020526040902060028101805460ff1916600117905554611f6b83612286565b14611fc45760405162461bcd60e51b815260206004820152602360248201527f52657665616c6564206861736820646f6573206e6f74206d6174636820636f6d6044820152621b5a5d60ea1b606482015260840161189b565b336000908152600660205260409020600101546001600160401b034316116120435760405162461bcd60e51b815260206004820152602c60248201527f52657665616c20616e6420636f6d6d69742068617070656e6564206f6e20746860448201526b652073616d6520626c6f636b60a01b606482015260840161189b565b600554336000908152600660205260409020600101546120639190615971565b436001600160401b031611156120af5760405162461bcd60e51b815260206004820152601160248201527052657665616c656420746f6f206c61746560781b604482015260640161189b565b5033600090815260066020908152604091829020600101548251904081830152808301939093528151808403830181526060909301909152815191012090565b6120f76140c2565b6018805462ff00001916620100009215159283021790556016805461ffff60a01b1916600160a01b830260ff60a81b191617600160a81b83021761ffff60b01b1916600160b01b830260ff60b81b191617600160b81b83021760ff60c01b1916600160c01b909202919091179055565b6001600160a01b038516331480612183575061218385336116da565b61219f5760405162461bcd60e51b815260040161189b90615aba565b6121ac8585858585614485565b5050505050565b6121bb6140c2565b600f55600e55565b6121cb6140c2565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6000600c54600d546121fb9190615b08565b905090565b6122086140c2565b60188054911515600160301b0266ff00000000000019909216919091179055565b6122316140c2565b604051600090339047908381818185875af1925050503d8060008114612273576040519150601f19603f3d011682016040523d82523d6000602084013e612278565b606091505b505090508061193b57600080fd5b6040516bffffffffffffffffffffffff193060601b166020820152603481018290526000906054015b604051602081830303815290604052805190602001209050919050565b6122d46140c2565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6122fe6140c2565b61230661462f565b565b3233146123575760405162461bcd60e51b815260206004820152601d60248201527f4d7573742066726f6d207265616c2077616c6c65742061646472657373000000604482015260640161189b565b80516001036123be57601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2031207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b612582565b805160020361242057601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2032207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b805160030361248257601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2033207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b80516004036124e457601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2034207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b805160050361254657601654600160a01b900460ff166123b95760405162461bcd60e51b815260206004820152601b60248201527f4275726e2035207473756b69206973206e6f74206f70656e6564210000000000604482015260640161189b565b60405162461bcd60e51b81526020600482015260116024820152704275726e205175616e742077726f6e672160781b604482015260640161189b565b60005b815181101561272a5760155482516000916001600160a01b031690636352211e908590859081106125b8576125b8615984565b60200260200101516040518263ffffffff1660e01b81526004016125de91815260200190565b602060405180830381865afa1580156125fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261f9190615b1b565b9050336001600160a01b038216146126735760405162461bcd60e51b815260206004820152601760248201527622b93937b91d102737ba1022a9219b99189037bbb732b960491b604482015260640161189b565b60155460165484516001600160a01b03928316926323b872dd9233929116908790879081106126a4576126a4615984565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156126fe57600080fd5b505af1158015612712573d6000803e3d6000fd5b505050505080806127229061599a565b915050612585565b5050565b6127366140c2565b601b91909155601c55565b601854600090819062010000900460ff1661279e5760405162461bcd60e51b815260206004820152601960248201527f4672656520436c61696d206973206e6f74206f70656e65642100000000000000604482015260640161189b565b3233146127ed5760405162461bcd60e51b815260206004820152601d60248201527f434f4e5452414354535f4e4f545f414c4c4f5745445f544f5f4d494e54000000604482015260640161189b565b600084815260226020526040902054156128495760405162461bcd60e51b815260206004820152601c60248201527f5473756b6920616c726561647920636c61696d6564206d6f6d6f6d2100000000604482015260640161189b565b61285284613b53565b6001600160a01b0316336001600160a01b0316146128ac5760405162461bcd60e51b815260206004820152601760248201527622b93937b91d102737ba1022a9219b99189037bbb732b960491b604482015260640161189b565b60008481526022602052604081208054600192906128cb908490615971565b90915550600090506128dc84613e2c565b90506128e7816138bb565b9150612905338360016040518060200160405280600081525061436b565b509392505050565b6129156140c2565b601055565b6000805b8251811015611ebe5782818151811061293957612939615984565b60200260200101516101f41180612977575060135461295a906101f4615971565b83828151811061296c5761296c615984565b602002602001015110155b156129855750600092915050565b8061298f8161599a565b91505061291e565b6060600084516005036129ac57506001612a3c565b8451600a036129bd57506002612a3c565b8451600f036129ce57506003612a3c565b60405162461bcd60e51b815260206004820152603760248201527f596f75206e65656420352c203130206f72203135204d6f6d6f6d7320746f206760448201527f657420312c2032206f722033206d6f726520726172652e000000000000000000606482015260840161189b565b83600303612ab1578451600514612ab15760405162461bcd60e51b815260206004820152603360248201527f596f752063616e206f6e6c79206275726e20352045706963204d6f6d6f6d73206044820152723a379033b2ba1018902632b3b2b73230b93c9760691b606482015260840161189b565b6000816001600160401b03811115612acb57612acb6150a6565b604051908082528060200260200182016040528015612af4578160200160208202803683370190505b50905084600003612c4d576018546301000000900460ff16612b285760405162461bcd60e51b815260040161189b90615b38565b612b3186613593565b612b8f5760405162461bcd60e51b815260206004820152602960248201527f596f75206e656564203520436f6d6d6f6e7320746f20726563656976652061206044820152682ab731b7b6b6b7b69760b91b606482015260840161189b565b60005b8651811015612bc357612bb133888381518110611b3857611b38615984565b80612bbb8161599a565b915050612b92565b506000612bcf85613e2c565b905060005b83811015612c46576000612bf4838315611d78576110d184612710615aae565b9050612bff81611e25565b848381518110612c1157612c11615984565b602002602001018181525050612c3333858481518110611dbe57611dbe615984565b5080612c3e8161599a565b915050612bd4565b505061303c565b84600103612d9a57601854640100000000900460ff16612c7f5760405162461bcd60e51b815260040161189b90615b38565b612c8886611e41565b612ce35760405162461bcd60e51b815260206004820152602660248201527f596f75206e656564203520556e636f6d6d6f6d20746f20726563656976652061604482015265102930b9329760d11b606482015260840161189b565b60005b8651811015612d1757612d0533888381518110611b3857611b38615984565b80612d0f8161599a565b915050612ce6565b506000612d2385613e2c565b905060005b83811015612c46576000612d48838315611d78576110d184612710615aae565b9050612d53816139b7565b848381518110612d6557612d65615984565b602002602001018181525050612d8733858481518110611dbe57611dbe615984565b5080612d928161599a565b915050612d28565b84600203612ee257601854600160281b900460ff16612dcb5760405162461bcd60e51b815260040161189b90615b38565b612dd486613454565b612e2b5760405162461bcd60e51b815260206004820152602260248201527f596f75206e6565642035205261726520746f2072656365697665206120457069604482015261319760f11b606482015260840161189b565b60005b8651811015612e5f57612e4d33888381518110611b3857611b38615984565b80612e578161599a565b915050612e2e565b506000612e6b85613e2c565b905060005b83811015612c46576000612e90838315611d78576110d184612710615aae565b9050612e9b8161360e565b848381518110612ead57612ead615984565b602002602001018181525050612ecf33858481518110611dbe57611dbe615984565b5080612eda8161599a565b915050612e70565b84600303612fff57601854600160301b900460ff16612f135760405162461bcd60e51b815260040161189b90615b38565b612f1c8661291a565b612f785760405162461bcd60e51b815260206004820152602760248201527f596f75206e6565642035204570696320746f20726563656976652061204c656760448201526632b73230b93c9760c91b606482015260840161189b565b60005b8651811015612fac57612f9a33888381518110611b3857611b38615984565b80612fa48161599a565b915050612f7b565b506000612fb885613e2c565b9050612fc381611a2d565b82600081518110612fd657612fd6615984565b602002602001018181525050612ff93383600081518110611dbe57611dbe615984565b5061303c565b60405162461bcd60e51b815260206004820152601260248201527157726f6e6720726172697479206275726e2160701b604482015260640161189b565b95945050505050565b6015546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561308e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fb9190615b6f565b6130ba6140c2565b6018805460ff1916911515919091179055565b606081518351146131325760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161189b565b600083516001600160401b0381111561314d5761314d6150a6565b604051908082528060200260200182016040528015613176578160200160208202803683370190505b50905060005b8451811015612905576131c185828151811061319a5761319a615984565b60200260200101518583815181106131b4576131b4615984565b6020026020010151611834565b8282815181106131d3576131d3615984565b60209081029190910101526131e78161599a565b905061317c565b60006131f8613a57565b613200613269565b6132086121e9565b61321061324a565b61321c90612710615b08565b6132269190615b08565b6132309190615b08565b6121fb9190615b08565b6132426140c2565b600b55600a55565b6000600e54600f546121fb9190615b08565b6132646140c2565b601155565b6000600a54600b546121fb9190615b08565b60606000613287613bc1565b9050600081516001600160401b038111156132a4576132a46150a6565b6040519080825280602002602001820160405280156132cd578160200160208202803683370190505b50905060005b8251811015613321576132f2338483815181106131b4576131b4615984565b82828151811061330457613304615984565b6020908102919091010152806133198161599a565b9150506132d3565b5092915050565b6133306140c2565b600555565b6001600160a01b038316331480613351575061335183336116da565b61336d5760405162461bcd60e51b815260040161189b90615aba565b613378838383614684565b505050565b6133856140c2565b60185460ff166133e25760405162461bcd60e51b815260206004820152602260248201527f4e6f74207468652074696d6520746f2052656e6f756e6365204f776e65727368604482015261069760f41b606482015260840161189b565b6123066000614820565b3360008181526006602090815260409182902084815543600182018190556002909101805460ff19169055825193845290830184905282820152517f19fad381b1712620715f03d76aa899a2fb46b402f67a49a4c13ff09a23a177249181900360600190a150565b6000805b8251811015611ebe5782818151811061347357613473615984565b602002602001015161019011806134b1575060125461349490610190615971565b8382815181106134a6576134a6615984565b602002602001015110155b156134bf5750600092915050565b806134c98161599a565b915050613458565b6134d96140c2565b60005b82811015613532576135208484838181106134f9576134f9615984565b905060200201602081019061350e9190615439565b838381518110611dbe57611dbe615984565b8061352a8161599a565b9150506134dc565b50505050565b6000806135458385615b88565b905061355361271082615947565b949350505050565b6135636140c2565b60188054911515600160281b0265ff000000000019909216919091179055565b61358b6140c2565b612306614872565b6000805b8251811015611ebe578281815181106135b2576135b2615984565b6020026020010151606411806135ee57506010546135d1906064615971565b8382815181106135e3576135e3615984565b602002602001015110155b156135fc5750600092915050565b806136068161599a565b915050613597565b60006013548261361e9190615947565b6118c7906101f4615971565b6136326140c2565b601355565b60008061364661271084615947565b90508060085410801561365b57506009548111155b156136805760145461366d9084615947565b61367990610258615971565b9392505050565b80600a541080156136935750600b548111155b156136b1576013546136a59084615947565b613679906101f4615971565b80600c541080156136c45750600d548111155b156136e2576012546136d69084615947565b61367990610190615971565b80600e541080156136f45750600f5481105b15613712576011546137069084615947565b6136799061012c615971565b60105461371f9084615947565b613679906064615971565b50919050565b606061373a6140c2565b6000613747846001615971565b6001600160401b0381111561375e5761375e6150a6565b604051908082528060200260200182016040528015613787578160200160208202803683370190505b509050600061379584613e2c565b905060005b8581101561380c5760006137ba838315611d78576110d184612710615aae565b90506137c581613637565b6137d282620186a06159b3565b6137dc9190615971565b8483815181106137ee576137ee615984565b602090810291909101015250806138048161599a565b91505061379a565b508082868151811061382057613820615984565b6020908102919091010152509392505050565b61383b6140c2565b601880549115156401000000000264ff0000000019909216919091179055565b601f5460009060ff16801561387757506000613875613045565b115b15613883575060205490565b601654600160c81b900460ff161561389c575060175490565b50660aa87bee53800090565b90565b6138b36140c2565b600955600855565b6000601054826138cb9190615947565b6118c7906064615971565b60008060006138e484613e2c565b90506138ef85612308565b845160010361390857613901816138bb565b9150613990565b845160020361391a5761390181611e25565b845160030361392c57613901816139b7565b845160040361393e576139018161360e565b84516005036139505761390181611a2d565b60405162461bcd60e51b815260206004820152601560248201527457726f6e67207473756b6920717479206275726e2160581b604482015260640161189b565b612905338360016040518060200160405280600081525061436b565b61272a3383836148b5565b6000601254826139c79190615947565b6118c790610190615971565b6139db6140c2565b60168054911515600160c01b0260ff60c01b19909216919091179055565b613a016140c2565b6018805464ffff0000001916630100000092151592830264ff0000000019161764010000000083021766ffff00000000001916600160281b830266ff000000000000191617600160301b92909202919091179055565b60006008546009546121fb9190615b08565b6000816040516020016122af91815260200190565b613a866140c2565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60155460405163e985e9c560e01b81526001600160a01b0384811660048301528381166024830152600092169063e985e9c590604401602060405180830381865afa158015613afb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136799190615b9c565b601b5460009081908310613b3d57601c54613b3a9082615971565b90505b601d5483106118c757601e546136799082615971565b6015546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa158015613b9d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c79190615b1b565b60606000601454601354601254601154601054613bde9190615971565b613be89190615971565b613bf29190615971565b613bfc9190615971565b6001600160401b03811115613c1357613c136150a6565b604051908082528060200260200182016040528015613c3c578160200160208202803683370190505b5090506000805b601054811015613c9557613c58816064615971565b838381518110613c6a57613c6a615984565b602090810291909101015281613c7f8161599a565b9250508080613c8d9061599a565b915050613c43565b5060005b601154811015613cec57613caf8161012c615971565b838381518110613cc157613cc1615984565b602090810291909101015281613cd68161599a565b9250508080613ce49061599a565b915050613c99565b5060005b601254811015613d4357613d0681610190615971565b838381518110613d1857613d18615984565b602090810291909101015281613d2d8161599a565b9250508080613d3b9061599a565b915050613cf0565b5060005b601354811015613d9a57613d5d816101f4615971565b838381518110613d6f57613d6f615984565b602090810291909101015281613d848161599a565b9250508080613d929061599a565b915050613d47565b5060005b601454811015613df157613db481610258615971565b838381518110613dc657613dc6615984565b602090810291909101015281613ddb8161599a565b9250508080613de99061599a565b915050613d9e565b509092915050565b613e016140c2565b601955565b613e0e6140c2565b60168054911515600160b81b0260ff60b81b19909216919091179055565b60006118c782611eed565b613e3f6140c2565b60168054921515600160c81b0260ff60c81b1990931692909217909155601755565b60218054613e6e906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054613e9a906157c9565b8015613ee75780601f10613ebc57610100808354040283529160200191613ee7565b820191906000526020600020905b815481529060010190602001808311613eca57829003601f168201915b505050505081565b613ef76140c2565b601f805460ff191692151592909217909155602055565b613f166140c2565b601880549115156101000261ff0019909216919091179055565b613f386140c2565b601d91909155601e55565b613f4b6140c2565b601455565b6001600160a01b038516331480613f6c5750613f6c85336116da565b613f885760405162461bcd60e51b815260040161189b90615aba565b6121ac8585858585614995565b613f9d6140c2565b60188054911515620100000262ff000019909216919091179055565b613fc16140c2565b6001600160a01b0381166140265760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161189b565b61193b81614820565b6001600160a01b03831633148061404b575061404b83336116da565b6140675760405162461bcd60e51b815260040161189b90615aba565b61337883838361424e565b61407a6140c2565b6018805491151563010000000263ff00000019909216919091179055565b6140a06140c2565b60188054911515600160381b0267ff0000000000000019909216919091179055565b6003546001600160a01b031633146123065760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161189b565b600261272a8282615843565b606060028054614137906157c9565b80601f0160208091040260200160405190810160405280929190818152602001828054614163906157c9565b80156141b05780601f10614185576101008083540402835291602001916141b0565b820191906000526020600020905b81548152906001019060200180831161419357829003601f168201915b50505050509050919050565b606060006141c983614acd565b60010190506000816001600160401b038111156141e8576141e86150a6565b6040519080825280601f01601f191660200182016040528015614212576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461421c57509392505050565b6001600160a01b0383166142745760405162461bcd60e51b815260040161189b90615bb9565b33600061428084614ba5565b9050600061428d84614ba5565b90506142ad83876000858560405180602001604052806000815250614bf0565b6000858152602081815260408083206001600160a01b038a168452909152902054848110156142ee5760405162461bcd60e51b815260040161189b90615bfc565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b6001600160a01b0384166143cb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161189b565b3360006143d785614ba5565b905060006143e485614ba5565b90506143f583600089858589614bf0565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290614425908490615971565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461436283600089898989614c06565b81518351146144a65760405162461bcd60e51b815260040161189b90615c40565b6001600160a01b0384166144cc5760405162461bcd60e51b815260040161189b90615c88565b336144db818787878787614bf0565b60005b84518110156145c15760008582815181106144fb576144fb615984565b60200260200101519050600085838151811061451957614519615984565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156145695760405162461bcd60e51b815260040161189b90615ccd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906145a6908490615971565b92505081905550505050806145ba9061599a565b90506144de565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051614611929190615d17565b60405180910390a4614627818787878787614d61565b505050505050565b614637614e1c565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0383166146aa5760405162461bcd60e51b815260040161189b90615bb9565b80518251146146cb5760405162461bcd60e51b815260040161189b90615c40565b60003390506146ee81856000868660405180602001604052806000815250614bf0565b60005b83518110156147b357600084828151811061470e5761470e615984565b60200260200101519050600084838151811061472c5761472c615984565b602090810291909101810151600084815280835260408082206001600160a01b038c16835290935291909120549091508181101561477c5760405162461bcd60e51b815260040161189b90615bfc565b6000928352602083815260408085206001600160a01b038b16865290915290922091039055806147ab8161599a565b9150506146f1565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051614804929190615d17565b60405180910390a4604080516020810190915260009052613532565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61487a614e6c565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146673390565b816001600160a01b0316836001600160a01b0316036149285760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161189b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166149bb5760405162461bcd60e51b815260040161189b90615c88565b3360006149c785614ba5565b905060006149d485614ba5565b90506149e4838989858589614bf0565b6000868152602081815260408083206001600160a01b038c16845290915290205485811015614a255760405162461bcd60e51b815260040161189b90615ccd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290614a62908490615971565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4614ac2848a8a8a8a8a614c06565b505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310614b0c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310614b38576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614b5657662386f26fc10000830492506010015b6305f5e1008310614b6e576305f5e100830492506008015b6127108310614b8257612710830492506004015b60648310614b94576064830492506002015b600a83106118c75760010192915050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110614bdf57614bdf615984565b602090810291909101015292915050565b614bf8614e6c565b614627868686868686614eb9565b6001600160a01b0384163b156146275760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190614c4a9089908990889088908890600401615d3c565b6020604051808303816000875af1925050508015614c85575060408051601f3d908101601f19168201909252614c8291810190615d81565b60015b614d3157614c91615d9e565b806308c379a003614cca5750614ca5615db9565b80614cb05750614ccc565b8060405162461bcd60e51b815260040161189b9190615221565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161189b565b6001600160e01b0319811663f23a6e6160e01b146143625760405162461bcd60e51b815260040161189b90615e42565b6001600160a01b0384163b156146275760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190614da59089908990889088908890600401615e8a565b6020604051808303816000875af1925050508015614de0575060408051601f3d908101601f19168201909252614ddd91810190615d81565b60015b614dec57614c91615d9e565b6001600160e01b0319811663bc197c8160e01b146143625760405162461bcd60e51b815260040161189b90615e42565b600354600160a01b900460ff166123065760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161189b565b600354600160a01b900460ff16156123065760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161189b565b6001600160a01b038516614f405760005b8351811015614f3e57828181518110614ee557614ee5615984565b602002602001015160046000868481518110614f0357614f03615984565b602002602001015181526020019081526020016000206000828254614f289190615971565b90915550614f3790508161599a565b9050614eca565b505b6001600160a01b0384166146275760005b8351811015614362576000848281518110614f6e57614f6e615984565b602002602001015190506000848381518110614f8c57614f8c615984565b602002602001015190506000600460008481526020019081526020016000205490508181101561500f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161189b565b6000928352600460205260409092209103905561502b8161599a565b9050614f51565b6001600160a01b038116811461193b57600080fd5b6000806040838503121561505a57600080fd5b823561506581615032565b946020939093013593505050565b6001600160e01b03198116811461193b57600080fd5b60006020828403121561509b57600080fd5b813561367981615073565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156150e1576150e16150a6565b6040525050565b60006001600160401b03831115615101576151016150a6565b604051615118601f8501601f1916602001826150bc565b80915083815284848401111561512d57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561515757600080fd5b81356001600160401b0381111561516d57600080fd5b8201601f8101841361517e57600080fd5b613553848235602084016150e8565b60006020828403121561519f57600080fd5b5035919050565b801515811461193b57600080fd5b6000602082840312156151c657600080fd5b8135613679816151a6565b60005b838110156151ec5781810151838201526020016151d4565b50506000910152565b6000815180845261520d8160208601602086016151d1565b601f01601f19169290920160200192915050565b60208152600061367960208301846151f5565b6000806040838503121561524757600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b838110156152865781518752958201959082019060010161526a565b509495945050505050565b6020815260006136796020830184615256565b60006001600160401b038211156152bd576152bd6150a6565b5060051b60200190565b600082601f8301126152d857600080fd5b813560206152e5826152a4565b6040516152f282826150bc565b83815260059390931b850182019282810191508684111561531257600080fd5b8286015b8481101561532d5780358352918301918301615316565b509695505050505050565b60006020828403121561534a57600080fd5b81356001600160401b0381111561536057600080fd5b613553848285016152c7565b600082601f83011261537d57600080fd5b613679838335602085016150e8565b600080600080600060a086880312156153a457600080fd5b85356153af81615032565b945060208601356153bf81615032565b935060408601356001600160401b03808211156153db57600080fd5b6153e789838a016152c7565b945060608801359150808211156153fd57600080fd5b61540989838a016152c7565b9350608088013591508082111561541f57600080fd5b5061542c8882890161536c565b9150509295509295909350565b60006020828403121561544b57600080fd5b813561367981615032565b60008060006060848603121561546b57600080fd5b83356001600160401b0381111561548157600080fd5b61548d868287016152c7565b9660208601359650604090950135949350505050565b600080604083850312156154b657600080fd5b82356001600160401b03808211156154cd57600080fd5b818501915085601f8301126154e157600080fd5b813560206154ee826152a4565b6040516154fb82826150bc565b83815260059390931b850182019282810191508984111561551b57600080fd5b948201945b8386101561554257853561553381615032565b82529482019490820190615520565b9650508601359250508082111561555857600080fd5b50615565858286016152c7565b9150509250929050565b60008060006060848603121561558457600080fd5b833561558f81615032565b925060208401356001600160401b03808211156155ab57600080fd5b6155b7878388016152c7565b935060408601359150808211156155cd57600080fd5b506155da868287016152c7565b9150509250925092565b6000806000604084860312156155f957600080fd5b83356001600160401b038082111561561057600080fd5b818601915086601f83011261562457600080fd5b81358181111561563357600080fd5b8760208260051b850101111561564857600080fd5b6020928301955093509085013590808211156155cd57600080fd5b6000806040838503121561567657600080fd5b82356001600160401b0381111561568c57600080fd5b615698858286016152c7565b95602094909401359450505050565b600080604083850312156156ba57600080fd5b82356156c581615032565b915060208301356156d5816151a6565b809150509250929050565b600080604083850312156156f357600080fd5b82356156fe81615032565b915060208301356156d581615032565b6000806040838503121561572157600080fd5b8235615065816151a6565b600080600080600060a0868803121561574457600080fd5b853561574f81615032565b9450602086013561575f81615032565b9350604086013592506060860135915060808601356001600160401b0381111561578857600080fd5b61542c8882890161536c565b6000806000606084860312156157a957600080fd5b83356157b481615032565b95602085013595506040909401359392505050565b600181811c908216806157dd57607f821691505b60208210810361372a57634e487b7160e01b600052602260045260246000fd5b601f82111561337857600081815260208120601f850160051c810160208610156158245750805b601f850160051c820191505b8181101561462757828155600101615830565b81516001600160401b0381111561585c5761585c6150a6565b6158708161586a84546157c9565b846157fd565b602080601f8311600181146158a5576000841561588d5750858301515b600019600386901b1c1916600185901b178555614627565b600085815260208120601f198616915b828110156158d4578886015182559484019460019091019084016158b5565b50858210156158f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516159148184602088016151d1565b8351908301906159288183602088016151d1565b01949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261595657615956615931565b500690565b634e487b7160e01b600052601160045260246000fd5b808201808211156118c7576118c761595b565b634e487b7160e01b600052603260045260246000fd5b6000600182016159ac576159ac61595b565b5060010190565b80820281158282048414176118c7576118c761595b565b600181815b80851115615a055781600019048211156159eb576159eb61595b565b808516156159f857918102915b93841c93908002906159cf565b509250929050565b600082615a1c575060016118c7565b81615a29575060006118c7565b8160018114615a3f5760028114615a4957615a65565b60019150506118c7565b60ff841115615a5a57615a5a61595b565b50506001821b6118c7565b5060208310610133831016604e8410600b8410161715615a88575081810a6118c7565b615a9283836159ca565b8060001904821115615aa657615aa661595b565b029392505050565b60006136798383615a0d565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b818103818111156118c7576118c761595b565b600060208284031215615b2d57600080fd5b815161367981615032565b60208082526017908201527f4275726e204d6f6d6f6d206973206e6f74206f70656e21000000000000000000604082015260600190565b600060208284031215615b8157600080fd5b5051919050565b600082615b9757615b97615931565b500490565b600060208284031215615bae57600080fd5b8151613679816151a6565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000615d2a6040830185615256565b828103602084015261303c8185615256565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090615d76908301846151f5565b979650505050505050565b600060208284031215615d9357600080fd5b815161367981615073565b600060033d11156138a85760046000803e5060005160e01c90565b600060443d1015615dc75790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715615df657505050505090565b8285019150815181811115615e0e5750505050505090565b843d8701016020828501011115615e285750505050505090565b615e37602082860101876150bc565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090615eb690830186615256565b8281036060840152615ec88186615256565b90508281036080840152615edc81856151f5565b9897505050505050505056fea2646970667358221220bc880ca4f81a287e32893b5cbb770f6924d6f78bdbea3d59c5f64434745a976b64736f6c63430008120033
Deployed Bytecode Sourcemap
84929:9976:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66094:230;;;;;;;;;;-1:-1:-1;66094:230:0;;;;;:::i;:::-;;:::i;:::-;;;616:25:1;;;604:2;589:18;66094:230:0;;;;;;;;65117:310;;;;;;;;;;-1:-1:-1;65117:310:0;;;;;:::i;:::-;;:::i;:::-;;;1203:14:1;;1196:22;1178:41;;1166:2;1151:18;65117:310:0;1038:187:1;85874:121:0;;;;;;;;;;-1:-1:-1;85874:121:0;;;;;:::i;:::-;;:::i;:::-;;39758:79;;;;;;;;;;-1:-1:-1;39758:79:0;;;;;:::i;:::-;;:::i;31079:36::-;;;;;;;;;;-1:-1:-1;31079:36:0;;;;;;;;36866:32;;;;;;;;;;;;;;;;39433:28;;;;;;;;;;;;;;;;34071:34;;;;;;;;;;-1:-1:-1;34071:34:0;;;;-1:-1:-1;;;34071:34:0;;;;;;34481:95;;;;;;;;;;-1:-1:-1;34481:95:0;;;;;:::i;:::-;;:::i;94165:374::-;;;;;;;;;;-1:-1:-1;94165:374:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45069:112::-;;;;;;;;;;-1:-1:-1;45069:112:0;;;;;:::i;:::-;;:::i;85132:45::-;;;;;;;;;;;;85175:2;85132:45;;92766:516;;;;;;;;;;;;;:::i;40308:126::-;;;;;;;;;;-1:-1:-1;40308:126:0;;;;;:::i;:::-;;:::i;86997:822::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;32321:109::-;;;;;;;;;;-1:-1:-1;32321:109:0;;;;;:::i;:::-;;:::i;44731:110::-;;;;;;;;;;-1:-1:-1;44731:110:0;;;;;:::i;:::-;;:::i;40904:312::-;;;;;;;;;;-1:-1:-1;40904:312:0;;;;;:::i;:::-;;:::i;30958:32::-;;;;;;;;;;;;;;;;34584:95;;;;;;;;;;-1:-1:-1;34584:95:0;;;;;:::i;:::-;;:::i;30744:28::-;;;;;;;;;;-1:-1:-1;30744:28:0;;;;-1:-1:-1;;;30744:28:0;;;;;;37518:1130;;;;;;;;;;-1:-1:-1;37518:1130:0;;;;;:::i;:::-;;:::i;39320:32::-;;;;;;;;;;;;;;;;34153:34;;;;;;;;;;-1:-1:-1;34153:34:0;;;;-1:-1:-1;;;34153:34:0;;;;;;85599:267;;;;;;;;;;-1:-1:-1;85599:267:0;;;;;:::i;:::-;;:::i;68037:438::-;;;;;;;;;;-1:-1:-1;68037:438:0;;;;;:::i;:::-;;:::i;33906:74::-;;;;;;;;;;-1:-1:-1;33906:74:0;;;;-1:-1:-1;;;;;33906:74:0;;;;;;-1:-1:-1;;;;;7989:32:1;;;7971:51;;7959:2;7944:18;33906:74:0;7825:203:1;40442:138:0;;;;;;;;;;-1:-1:-1;40442:138:0;;;;;:::i;:::-;;:::i;34687:95::-;;;;;;;;;;-1:-1:-1;34687:95:0;;;;;:::i;:::-;;:::i;36474:94::-;;;;;;;;;;-1:-1:-1;36555:4:0;36474:94;;42892:96;;;;;;;;;;;;;:::i;30368:42::-;;;;;;;;;;;;;;;;32113:105;;;;;;;;;;-1:-1:-1;32113:105:0;;;;;:::i;:::-;;:::i;94547:165::-;;;:::i;38753:127::-;;;;;;;;;;-1:-1:-1;38753:127:0;;;;;:::i;:::-;;:::i;34359:110::-;;;;;;;;;;-1:-1:-1;34359:110:0;;;;;:::i;:::-;;:::i;86072:65::-;;;;;;;;;;;;;:::i;35412:1054::-;;;;;;;;;;-1:-1:-1;35412:1054:0;;;;;:::i;:::-;;:::i;31394:176::-;;;;;;;;;;-1:-1:-1;31394:176:0;;;;;:::i;:::-;;:::i;88143:638::-;;;;;;;;;;-1:-1:-1;88143:638:0;;;;;:::i;:::-;;:::i;39576:83::-;;;;;;;;;;-1:-1:-1;39576:83:0;;;;;:::i;:::-;;:::i;41536:304::-;;;;;;;;;;-1:-1:-1;41536:304:0;;;;;:::i;:::-;;:::i;89613:3145::-;;;;;;;;;;-1:-1:-1;89613:3145:0;;;;;:::i;:::-;;:::i;35274:130::-;;;;;;;;;;;;;:::i;32937:114::-;;;;;;;;;;-1:-1:-1;32937:114:0;;;;;:::i;:::-;;:::i;66490:524::-;;;;;;;;;;-1:-1:-1;66490:524:0;;;;;:::i;:::-;;:::i;82570:122::-;;;;;;;;;;-1:-1:-1;82570:122:0;;;;;:::i;:::-;82627:4;82448:16;;;:12;:16;;;;;;-1:-1:-1;;;82570:122:0;39499:23;;;;;;;;;;;;;;;;43112:144;;;;;;;;;;;;;:::i;38654:93::-;;;;;;;;;;-1:-1:-1;38728:12:0;38654:93;;40174:126;;;;;;;;;;-1:-1:-1;40174:126:0;;;;;:::i;:::-;;:::i;39283:28::-;;;;;;;;;;;;;;;;30871:38;;;;;;;;;;;;;;;;26526:86;;;;;;;;;;-1:-1:-1;26597:7:0;;-1:-1:-1;;;26597:7:0;;;;26526:86;;42996:108;;;;;;;;;;;;;:::i;39665:87::-;;;;;;;;;;-1:-1:-1;39665:87:0;;;;;:::i;:::-;;:::i;42788:96::-;;;;;;;;;;;;;:::i;86171:346::-;;;;;;;;;;;;;:::i;36919:93::-;;;;;;;;;;-1:-1:-1;36919:93:0;;;;;:::i;:::-;;:::i;30518:33::-;;;;;;;;;;-1:-1:-1;30518:33:0;;;;;;;;;;;84485:358;;;;;;;;;;-1:-1:-1;84485:358:0;;;;;:::i;:::-;;:::i;30997:36::-;;;;;;;;;;;;;;;;94720:180;;;;;;;;;;;;;:::i;37154:288::-;;;;;;;;;;-1:-1:-1;37154:288:0;;;;;:::i;:::-;;:::i;41224:304::-;;;;;;;;;;-1:-1:-1;41224:304:0;;;;;:::i;:::-;;:::i;93290:231::-;;;;;;;;;;-1:-1:-1;93290:231:0;;;;;:::i;:::-;;:::i;39134:33::-;;;;;;;;;;;;;;;;85245:59;;;;;;;;;;-1:-1:-1;85245:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;30417:40;;;;;;;;;;-1:-1:-1;30417:40:0;;;;;;;;37105:42;;;;;;;;;;-1:-1:-1;37105:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12021:25:1;;;12077:2;12062:18;;12055:34;;;;12132:14;12125:22;12105:18;;;12098:50;12009:2;11994:18;37105:42:0;11825:329:1;33826:73:0;;;;;;;;;;-1:-1:-1;33826:73:0;;;;-1:-1:-1;;;;;33826:73:0;;;34030:34;;;;;;;;;;-1:-1:-1;34030:34:0;;;;-1:-1:-1;;;34030:34:0;;;;;;39248:28;;;;;;;;;;;;;;;;30779:39;;;;;;;;;;-1:-1:-1;30779:39:0;;;;-1:-1:-1;;;30779:39:0;;;;;;43694:154;;;;;;;;;;-1:-1:-1;43694:154:0;;;;;:::i;:::-;;:::i;30606:41::-;;;;;;;;;;-1:-1:-1;30606:41:0;;;;;;;;;;;32000:105;;;;;;;;;;-1:-1:-1;32000:105:0;;;;;:::i;:::-;;:::i;86003:61::-;;;;;;;;;;;;;:::i;40588:308::-;;;;;;;;;;-1:-1:-1;40588:308:0;;;;;:::i;:::-;;:::i;39359:32::-;;;;;;;;;;;;;;;;30654:37;;;;;;;;;;-1:-1:-1;30654:37:0;;;;-1:-1:-1;;;30654:37:0;;;;;;30484:27;;;;;;;;;;-1:-1:-1;30484:27:0;;;;;;;;;;;44959:102;;;;;;;;;;-1:-1:-1;44959:102:0;;;;;:::i;:::-;;:::i;28743:87::-;;;;;;;;;;-1:-1:-1;28816:6:0;;-1:-1:-1;;;;;28816:6:0;28743:87;;39843:79;;;;;;;;;;-1:-1:-1;39843:79:0;;;;;:::i;:::-;;:::i;43857:752::-;;;;;;;;;;-1:-1:-1;43857:752:0;;;;;:::i;:::-;;:::i;86525:464::-;;;;;;;;;;-1:-1:-1;86525:464:0;;;;;:::i;:::-;;:::i;31879:113::-;;;;;;;;;;-1:-1:-1;31879:113:0;;;;;:::i;:::-;;:::i;93866:291::-;;;;;;;;;;;;;:::i;40025:141::-;;;;;;;;;;-1:-1:-1;40025:141:0;;;;;:::i;:::-;;:::i;44617:106::-;;;;;;;;;;-1:-1:-1;44617:106:0;;;;;:::i;:::-;;:::i;88788:817::-;;;;;;;;;;-1:-1:-1;88788:817:0;;;;;:::i;:::-;;:::i;67087:155::-;;;;;;;;;;-1:-1:-1;67087:155:0;;;;;:::i;:::-;;:::i;30330:31::-;;;;;;;;;;-1:-1:-1;30330:31:0;;;;-1:-1:-1;;;30330:31:0;;;;;;44849:102;;;;;;;;;;-1:-1:-1;44849:102:0;;;;;:::i;:::-;;:::i;34893:95::-;;;;;;;;;;-1:-1:-1;34893:95:0;;;;;:::i;:::-;;:::i;85186:52::-;;;;;;;;;;-1:-1:-1;85186:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;31122:48;;;;;;;;;;;;;;;;85373:218;;;;;;;;;;-1:-1:-1;85373:218:0;;;;;:::i;:::-;;:::i;39400:26::-;;;;;;;;;;;;;;;;30560:39;;;;;;;;;;-1:-1:-1;30560:39:0;;;;;;;;;;;42668:112;;;;;;;;;;;;;:::i;39094:33::-;;;;;;;;;;;;;;;;31040:32;;;;;;;;;;;;;;;;39176:28;;;;;;;;;;;;;;;;82359:113;;;;;;;;;;-1:-1:-1;82359:113:0;;;;;:::i;:::-;82421:7;82448:16;;;:12;:16;;;;;;;82359:113;43322:134;;;;;;;;;;-1:-1:-1;43322:134:0;;;;;:::i;:::-;;:::i;34235:108::-;;;;;;;;;;-1:-1:-1;34235:108:0;;;;;:::i;:::-;;:::i;39529:28::-;;;;;;;;;;;;;;;;36576:175;;;;;;;;;;-1:-1:-1;36576:175:0;;;;;:::i;:::-;;:::i;87827:308::-;;;;;;;;;;-1:-1:-1;87827:308:0;;;;;:::i;:::-;;:::i;35124:142::-;;;;;;;;;;-1:-1:-1;35124:142:0;;;;;:::i;:::-;;:::i;41848:812::-;;;;;;;;;;;;;:::i;32638:128::-;;;;;;;;;;-1:-1:-1;32638:128:0;;;;;:::i;:::-;;:::i;34112:34::-;;;;;;;;;;-1:-1:-1;34112:34:0;;;;-1:-1:-1;;;34112:34:0;;;;;;34790:95;;;;;;;;;;-1:-1:-1;34790:95:0;;;;;:::i;:::-;;:::i;43464:221::-;;;;;;;;;;-1:-1:-1;43464:221:0;;;;;:::i;:::-;;:::i;32774:155::-;;;;;;;;;;-1:-1:-1;32774:155:0;;;;;:::i;:::-;;:::i;31177:26::-;;;;;;;;;;;;;:::i;30825:39::-;;;;;;;;;;;;;;;;85069:56;;;;;;;;;;;;85114:11;85069:56;;31231:155;;;;;;;;;;-1:-1:-1;31231:155:0;;;;;:::i;:::-;;:::i;32545:85::-;;;;;;;;;;-1:-1:-1;32545:85:0;;;;;:::i;:::-;;:::i;33989:34::-;;;;;;;;;;-1:-1:-1;33989:34:0;;;;-1:-1:-1;;;33989:34:0;;;;;;30698:37;;;;;;;;;;-1:-1:-1;30698:37:0;;;;-1:-1:-1;;;30698:37:0;;;;;;30916:35;;;;;;;;;;;;;;;;67314:168;;;;;;;;;;-1:-1:-1;67314:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;67437:27:0;;;67413:4;67437:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;67314:168;31578:176;;;;;;;;;;-1:-1:-1;31578:176:0;;;;;:::i;:::-;;:::i;39468:24::-;;;;;;;;;;;;;;;;39211:28;;;;;;;;;;;;;;;;39928:89;;;;;;;;;;-1:-1:-1;39928:89:0;;;;;:::i;:::-;;:::i;67554:406::-;;;;;;;;;;-1:-1:-1;67554:406:0;;;;;:::i;:::-;;:::i;32438:97::-;;;;;;;;;;-1:-1:-1;32438:97:0;;;;;:::i;:::-;;:::i;29649:201::-;;;;;;;;;;-1:-1:-1;29649:201:0;;;;;:::i;:::-;;:::i;84151:326::-;;;;;;;;;;-1:-1:-1;84151:326:0;;;;;:::i;:::-;;:::i;31762:109::-;;;;;;;;;;-1:-1:-1;31762:109:0;;;;;:::i;:::-;;:::i;32226:87::-;;;;;;;;;;-1:-1:-1;32226:87:0;;;;;:::i;:::-;;:::i;66094:230::-;66180:7;-1:-1:-1;;;;;66208:21:0;;66200:76;;;;-1:-1:-1;;;66200:76:0;;15003:2:1;66200:76:0;;;14985:21:1;15042:2;15022:18;;;15015:30;15081:34;15061:18;;;15054:62;-1:-1:-1;;;15132:18:1;;;15125:40;15182:19;;66200:76:0;;;;;;;;;-1:-1:-1;66294:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;66294:22:0;;;;;;;;;;66094:230;;;;;:::o;65117:310::-;65219:4;-1:-1:-1;;;;;;65256:41:0;;-1:-1:-1;;;65256:41:0;;:110;;-1:-1:-1;;;;;;;65314:52:0;;-1:-1:-1;;;65314:52:0;65256:110;:163;;;-1:-1:-1;;;;;;;;;;56507:40:0;;;65383:36;56398:157;85874:121;28629:13;:11;:13::i;:::-;85940:12:::1;:21;85955:6:::0;85940:12;:21:::1;:::i;:::-;;85972:15;85980:6;85972:7;:15::i;:::-;85874:121:::0;:::o;39758:79::-;28629:13;:11;:13::i;:::-;39816:7:::1;:13:::0;39758:79::o;34481:95::-;28629:13;:11;:13::i;:::-;34545:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34545:23:0::1;-1:-1:-1::0;;;;34545:23:0;;::::1;::::0;;;::::1;::::0;;34481:95::o;94165:374::-;82627:4;82448:16;;;:12;:16;;;;;;94273:13;;94304:73;;;;-1:-1:-1;;;94304:73:0;;18003:2:1;94304:73:0;;;17985:21:1;18042:2;18022:18;;;18015:30;18081:33;18061:18;;;18054:61;18132:18;;94304:73:0;17801:355:1;94304:73:0;94435:1;94411:13;94421:2;94411:9;:13::i;:::-;94405:27;:31;:126;;;;;;;;;;;;;;;;;94476:13;94486:2;94476:9;:13::i;:::-;94491:20;94508:2;94491:16;:20::i;:::-;94459:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;94398:133;94165:374;-1:-1:-1;;94165:374:0:o;45069:112::-;45125:4;45156:12;;45149:6;:19;;;;:::i;:::-;45148:25;;45170:3;45148:25;:::i;92766:516::-;92821:19;;-1:-1:-1;;;92821:19:0;;;;92813:61;;;;-1:-1:-1;;;92813:61:0;;19375:2:1;92813:61:0;;;19357:21:1;19414:2;19394:18;;;19387:30;19453:31;19433:18;;;19426:59;19502:18;;92813:61:0;19173:353:1;92813:61:0;92915:20;;92893:19;;:42;92885:99;;;;-1:-1:-1;;;92885:99:0;;19733:2:1;92885:99:0;;;19715:21:1;19772:2;19752:18;;;19745:30;19811:34;19791:18;;;19784:62;-1:-1:-1;;;19862:18:1;;;19855:42;19914:19;;92885:99:0;19531:408:1;92885:99:0;92995:20;93018:14;:12;:14::i;:::-;92995:37;;93048:9;93043:100;93067:6;:13;93063:1;:17;93043:100;;;93102:29;93108:10;93119:6;93126:1;93119:9;;;;;;;;:::i;:::-;;;;;;;93129:1;93102:5;:29::i;:::-;93082:3;;;;:::i;:::-;;;;93043:100;;;;93212:29;93218:10;93230:3;93235:1;93212:29;;;;;;;;;;;;:5;:29::i;:::-;93253:19;:21;;;:19;:21;;;:::i;:::-;;;;;;92802:480;92766:516::o;40308:126::-;28629:13;:11;:13::i;:::-;40381:9:::1;:17:::0;40409:9:::1;:17:::0;40308:126::o;86997:822::-;87140:8;;87100:13;;-1:-1:-1;;;87140:8:0;;;;87132:39;;;;-1:-1:-1;;;87132:39:0;;20418:2:1;87132:39:0;;;20400:21:1;20457:2;20437:18;;;20430:30;-1:-1:-1;;;20476:18:1;;;20469:49;20535:18;;87132:39:0;20216:343:1;87132:39:0;87190:9;87203:10;87190:23;87182:64;;;;-1:-1:-1;;;87182:64:0;;20766:2:1;87182:64:0;;;20748:21:1;20805:2;20785:18;;;20778:30;20844:31;20824:18;;;20817:59;20893:18;;87182:64:0;20564:353:1;87182:64:0;85175:2;87265:8;:26;;87257:62;;;;-1:-1:-1;;;87257:62:0;;21124:2:1;87257:62:0;;;21106:21:1;21163:2;21143:18;;;21136:30;21202:26;21182:18;;;21175:54;21246:18;;87257:62:0;20922:348:1;87257:62:0;87362:10;:8;:10::i;:::-;87351:21;;:8;:21;:::i;:::-;87338:9;:34;;87330:60;;;;-1:-1:-1;;;87330:60:0;;21650:2:1;87330:60:0;;;21632:21:1;21689:2;21669:18;;;21662:30;-1:-1:-1;;;21708:18:1;;;21701:43;21761:18;;87330:60:0;21448:337:1;87330:60:0;87401:15;87419:16;87426:8;87419:6;:16::i;:::-;87401:34;;87446:17;87466:19;87476:8;87466:9;:19::i;:::-;87446:39;-1:-1:-1;87496:19:0;87529:21;87446:39;87529:8;:21;:::i;:::-;-1:-1:-1;;;;;87518:33:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;87518:33:0;;87496:55;;87567:6;87562:227;87584:22;87594:12;87584:8;:22;:::i;:::-;87579:1;:28;87562:227;;;87629:11;87643:45;87654:10;87668:4;;87667:19;;87677:8;87684:1;87677:5;:8;:::i;87667:19::-;87674:1;87643:10;:45::i;:::-;87629:59;;87714:15;87722:6;87714:7;:15::i;:::-;87703:5;87709:1;87703:8;;;;;;;;:::i;:::-;;;;;;:26;;;;;87743:34;87749:10;87761:5;87767:1;87761:8;;;;;;;;:::i;:::-;;;;;;;87771:1;87743:34;;;;;;;;;;;;:5;:34::i;:::-;-1:-1:-1;87609:3:0;;;;:::i;:::-;;;;87562:227;;;-1:-1:-1;87806:5:0;86997:822;-1:-1:-1;;;;;86997:822:0:o;32321:109::-;28629:13;:11;:13::i;:::-;32394:19:::1;:28:::0;;;::::1;;-1:-1:-1::0;;;32394:28:0::1;-1:-1:-1::0;;32394:28:0;;::::1;::::0;;;::::1;::::0;;32321:109::o;44731:110::-;44786:4;44817:11;;44810:6;:18;;;;:::i;:::-;44809:24;;44830:3;44809:24;:::i;40904:312::-;40983:4;;41000:187;41024:13;:20;41020:1;:24;41000:187;;;41073:13;41087:1;41073:16;;;;;;;;:::i;:::-;;;;;;;41069:3;:20;:59;;;-1:-1:-1;41116:11:0;;41112:15;;:3;:15;:::i;:::-;41093:13;41107:1;41093:16;;;;;;;;:::i;:::-;;;;;;;:35;;41069:59;41066:110;;;-1:-1:-1;41155:5:0;;40904:312;-1:-1:-1;;40904:312:0:o;41066:110::-;41046:3;;;;:::i;:::-;;;;41000:187;;;-1:-1:-1;41204:4:0;;40904:312;-1:-1:-1;;40904:312:0:o;34584:95::-;28629:13;:11;:13::i;:::-;34648:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34648:23:0::1;-1:-1:-1::0;;;;34648:23:0;;::::1;::::0;;;::::1;::::0;;34584:95::o;37518:1130::-;37675:10;37578:4;37667:19;;;:7;:19;;;;;:28;;;;;:35;37659:63;;;;-1:-1:-1;;;37659:63:0;;23366:2:1;37659:63:0;;;23348:21:1;23405:2;23385:18;;;23378:30;-1:-1:-1;;;23424:18:1;;;23417:46;23480:18;;37659:63:0;23164:340:1;37659:63:0;37737:10;37729:19;;;;:7;:19;;;;;:28;;;:33;;-1:-1:-1;;37729:33:0;37758:4;37729:33;;;37854:26;37833:19;37841:10;37833:7;:19::i;:::-;:47;37825:94;;;;-1:-1:-1;;;37825:94:0;;23711:2:1;37825:94:0;;;23693:21:1;23750:2;23730:18;;;23723:30;23789:34;23769:18;;;23762:62;-1:-1:-1;;;23840:18:1;;;23833:33;23883:19;;37825:94:0;23509:399:1;37825:94:0;38035:10;38027:19;;;;:7;:19;;;;;:25;;;-1:-1:-1;;;;;38013:12:0;38006:46;;37998:102;;;;-1:-1:-1;;;37998:102:0;;24115:2:1;37998:102:0;;;24097:21:1;24154:2;24134:18;;;24127:30;24193:34;24173:18;;;24166:62;-1:-1:-1;;;24244:18:1;;;24237:42;24296:19;;37998:102:0;23913:408:1;37998:102:0;38219:14;;38201:10;38193:19;;;;:7;:19;;;;;:25;;;:40;;38219:14;38193:40;:::i;:::-;38178:12;-1:-1:-1;;;;;38171:62:0;;;38163:91;;;;-1:-1:-1;;;38163:91:0;;24528:2:1;38163:91:0;;;24510:21:1;24567:2;24547:18;;;24540:30;-1:-1:-1;;;24586:18:1;;;24579:47;24643:18;;38163:91:0;24326:341:1;38163:91:0;-1:-1:-1;38367:10:0;38329:17;38359:19;;;:7;:19;;;;;;;;;:25;;;38526:38;;38349:36;;38526:38;;;24829:19:1;24864:12;;;24857:28;;;;38526:38:0;;;;;;;;;24901:12:1;;;;38526:38:0;;;38516:49;;;;;;37518:1130::o;85599:267::-;28629:13;:11;:13::i;:::-;85666::::1;:22:::0;;-1:-1:-1;;85666:22:0::1;::::0;;::::1;;::::0;;::::1;;::::0;;85699:14:::1;:23:::0;;-1:-1:-1;;;;85733:23:0;-1:-1:-1;;;85699:23:0;::::1;-1:-1:-1::0;;;;85733:23:0;;-1:-1:-1;;;85733:23:0;::::1;;-1:-1:-1::0;;;;85801:23:0;-1:-1:-1;;;85767:23:0;::::1;-1:-1:-1::0;;;;85801:23:0;;-1:-1:-1;;;85801:23:0;::::1;;-1:-1:-1::0;;;;85835:23:0::1;-1:-1:-1::0;;;85835:23:0;;::::1;::::0;;;::::1;::::0;;85599:267::o;68037:438::-;-1:-1:-1;;;;;68270:20:0;;24719:10;68270:20;;:60;;-1:-1:-1;68294:36:0;68311:4;24719:10;67314:168;:::i;68294:36::-;68248:156;;;;-1:-1:-1;;;68248:156:0;;;;;;;:::i;:::-;68415:52;68438:4;68444:2;68448:3;68453:7;68462:4;68415:22;:52::i;:::-;68037:438;;;;;:::o;40442:138::-;28629:13;:11;:13::i;:::-;40519::::1;:21:::0;40551:13:::1;:21:::0;40442:138::o;34687:95::-;28629:13;:11;:13::i;:::-;34751:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34751:23:0::1;-1:-1:-1::0;;;;34751:23:0;;::::1;::::0;;;::::1;::::0;;34687:95::o;42892:96::-;42933:4;42970:9;;42958;;:21;;;;:::i;:::-;42950:30;;42892:96;:::o;32113:105::-;28629:13;:11;:13::i;:::-;32184:17:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;32184:26:0::1;-1:-1:-1::0;;32184:26:0;;::::1;::::0;;;::::1;::::0;;32113:105::o;94547:165::-;28629:13;:11;:13::i;:::-;94622:58:::1;::::0;94604:12:::1;::::0;94630:10:::1;::::0;94654:21:::1;::::0;94604:12;94622:58;94604:12;94622:58;94654:21;94630:10;94622:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94603:77;;;94699:7;94691:16;;;::::0;::::1;38753:127:::0;38836:37;;-1:-1:-1;;38861:4:0;25859:2:1;25855:15;25851:53;38836:37:0;;;25839:66:1;25921:12;;;25914:28;;;38804:7:0;;25958:12:1;;38836:37:0;;;;;;;;;;;;;38826:48;;;;;;38819:55;;38753:127;;;:::o;34359:110::-;28629:13;:11;:13::i;:::-;34434:16:::1;:27:::0;;-1:-1:-1;;;;;;34434:27:0::1;-1:-1:-1::0;;;;;34434:27:0;;;::::1;::::0;;;::::1;::::0;;34359:110::o;86072:65::-;28629:13;:11;:13::i;:::-;86119:10:::1;:8;:10::i;:::-;86072:65::o:0;35412:1054::-;35039:9;35052:10;35039:23;35031:65;;;;-1:-1:-1;;;35031:65:0;;26183:2:1;35031:65:0;;;26165:21:1;26222:2;26202:18;;;26195:30;26261:31;26241:18;;;26234:59;26310:18;;35031:65:0;25981:353:1;35031:65:0;35513:13:::1;:20;35535:1;35513:23:::0;35510:620:::1;;35560:14;::::0;-1:-1:-1;;;35560:14:0;::::1;;;35552:53;;;::::0;-1:-1:-1;;;35552:53:0;;26541:2:1;35552:53:0::1;::::0;::::1;26523:21:1::0;26580:2;26560:18;;;26553:30;26619:29;26599:18;;;26592:57;26666:18;;35552:53:0::1;26339:351:1::0;35552:53:0::1;35510:620;;;35625:13;:20;35647:1;35625:23:::0;35622:508:::1;;35672:14;::::0;-1:-1:-1;;;35672:14:0;::::1;;;35664:53;;;::::0;-1:-1:-1;;;35664:53:0;;26897:2:1;35664:53:0::1;::::0;::::1;26879:21:1::0;26936:2;26916:18;;;26909:30;26975:29;26955:18;;;26948:57;27022:18;;35664:53:0::1;26695:351:1::0;35622:508:0::1;35737:13;:20;35759:1;35737:23:::0;35734:396:::1;;35784:14;::::0;-1:-1:-1;;;35784:14:0;::::1;;;35776:53;;;::::0;-1:-1:-1;;;35776:53:0;;27253:2:1;35776:53:0::1;::::0;::::1;27235:21:1::0;27292:2;27272:18;;;27265:30;27331:29;27311:18;;;27304:57;27378:18;;35776:53:0::1;27051:351:1::0;35734:396:0::1;35849:13;:20;35871:1;35849:23:::0;35846:284:::1;;35896:14;::::0;-1:-1:-1;;;35896:14:0;::::1;;;35888:53;;;::::0;-1:-1:-1;;;35888:53:0;;27609:2:1;35888:53:0::1;::::0;::::1;27591:21:1::0;27648:2;27628:18;;;27621:30;27687:29;27667:18;;;27660:57;27734:18;;35888:53:0::1;27407:351:1::0;35846:284:0::1;35961:13;:20;35983:1;35961:23:::0;35958:172:::1;;36008:14;::::0;-1:-1:-1;;;36008:14:0;::::1;;;36000:53;;;::::0;-1:-1:-1;;;36000:53:0;;27965:2:1;36000:53:0::1;::::0;::::1;27947:21:1::0;28004:2;27984:18;;;27977:30;28043:29;28023:18;;;28016:57;28090:18;;36000:53:0::1;27763:351:1::0;35958:172:0::1;36084:34;::::0;-1:-1:-1;;;36084:34:0;;28321:2:1;36084:34:0::1;::::0;::::1;28303:21:1::0;28360:2;28340:18;;;28333:30;-1:-1:-1;;;28379:18:1;;;28372:47;28436:18;;36084:34:0::1;28119:341:1::0;36084:34:0::1;36155:6;36150:309;36171:13;:20;36167:1;:24;36150:309;;;36237:15;::::0;36262:16;;36213:13:::1;::::0;-1:-1:-1;;;;;36237:15:0::1;::::0;36229:32:::1;::::0;36262:13;;36276:1;;36262:16;::::1;;;;;:::i;:::-;;;;;;;36229:50;;;;;;;;;;;;;616:25:1::0;;604:2;589:18;;470:177;36229:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36213:66:::0;-1:-1:-1;36302:10:0::1;-1:-1:-1::0;;;;;36302:19:0;::::1;;36294:55;;;::::0;-1:-1:-1;;;36294:55:0;;28923:2:1;36294:55:0::1;::::0;::::1;28905:21:1::0;28962:2;28942:18;;;28935:30;-1:-1:-1;;;28981:18:1;;;28974:53;29044:18;;36294:55:0::1;28721:347:1::0;36294:55:0::1;36372:15;::::0;36413:16:::1;::::0;36430;;-1:-1:-1;;;;;36372:15:0;;::::1;::::0;36364:37:::1;::::0;36402:10:::1;::::0;36413:16;::::1;::::0;36430:13;;36444:1;;36430:16;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;36364:83:::1;::::0;-1:-1:-1;;;;;;36364:83:0::1;::::0;;;;;;-1:-1:-1;;;;;29331:15:1;;;36364:83:0::1;::::0;::::1;29313:34:1::0;29383:15;;;;29363:18;;;29356:43;29415:18;;;29408:34;29248:18;;36364:83:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36198:261;36193:3;;;;;:::i;:::-;;;;36150:309;;;;35412:1054:::0;:::o;31394:176::-;28629:13;:11;:13::i;:::-;31489:16:::1;:34:::0;;;;31534:13:::1;:28:::0;31394:176::o;88143:638::-;88290:13;;88239:4;;;;88290:13;;;;;88282:50;;;;-1:-1:-1;;;88282:50:0;;29655:2:1;88282:50:0;;;29637:21:1;29694:2;29674:18;;;29667:30;29733:27;29713:18;;;29706:55;29778:18;;88282:50:0;29453:349:1;88282:50:0;88351:9;88364:10;88351:23;88343:64;;;;-1:-1:-1;;;88343:64:0;;20766:2:1;88343:64:0;;;20748:21:1;20805:2;20785:18;;;20778:30;20844:31;20824:18;;;20817:59;20893:18;;88343:64:0;20564:353:1;88343:64:0;88426:31;;;;:17;:31;;;;;;:34;88418:74;;;;-1:-1:-1;;;88418:74:0;;30009:2:1;88418:74:0;;;29991:21:1;30048:2;30028:18;;;30021:30;30087;30067:18;;;30060:58;30135:18;;88418:74:0;29807:352:1;88418:74:0;88525:22;88534:12;88525:8;:22::i;:::-;-1:-1:-1;;;;;88511:36:0;:10;-1:-1:-1;;;;;88511:36:0;;88503:72;;;;-1:-1:-1;;;88503:72:0;;28923:2:1;88503:72:0;;;28905:21:1;28962:2;28942:18;;;28935:30;-1:-1:-1;;;28981:18:1;;;28974:53;29044:18;;88503:72:0;28721:347:1;88503:72:0;88588:31;;;;:17;:31;;;;;:36;;88623:1;;88588:31;:36;;88623:1;;88588:36;:::i;:::-;;;;-1:-1:-1;88637:15:0;;-1:-1:-1;88655:16:0;88662:8;88655:6;:16::i;:::-;88637:34;;88689:21;88699:10;88689:9;:21::i;:::-;88682:28;;88721:30;88727:10;88739:4;88745:1;88721:30;;;;;;;;;;;;:5;:30::i;:::-;-1:-1:-1;88769:4:0;88143:638;-1:-1:-1;;;88143:638:0:o;39576:83::-;28629:13;:11;:13::i;:::-;39636:9:::1;:15:::0;39576:83::o;41536:304::-;41611:4;;41628:183;41652:13;:20;41648:1;:24;41628:183;;;41701:13;41715:1;41701:16;;;;;;;;:::i;:::-;;;;;;;41697:3;:20;:55;;;-1:-1:-1;41744:7:0;;41740:11;;:3;:11;:::i;:::-;41721:13;41735:1;41721:16;;;;;;;;:::i;:::-;;;;;;;:31;;41697:55;41694:106;;;-1:-1:-1;41779:5:0;;41536:304;-1:-1:-1;;41536:304:0:o;41694:106::-;41674:3;;;;:::i;:::-;;;;41628:183;;89613:3145;89743:13;89774:12;89804:13;:20;89828:1;89804:25;89801:317;;-1:-1:-1;89855:1:0;89801:317;;;89876:13;:20;89900:2;89876:26;89873:245;;-1:-1:-1;89928:1:0;89873:245;;;89949:13;:20;89973:2;89949:26;89946:172;;-1:-1:-1;90001:1:0;89946:172;;;90033:73;;-1:-1:-1;;;90033:73:0;;30366:2:1;90033:73:0;;;30348:21:1;30405:2;30385:18;;;30378:30;30444:34;30424:18;;;30417:62;30515:25;30495:18;;;30488:53;30558:19;;90033:73:0;30164:419:1;90033:73:0;90131:6;90139:1;90131:9;90128:129;;90164:13;:20;90188:1;90164:25;90156:89;;;;-1:-1:-1;;;90156:89:0;;30790:2:1;90156:89:0;;;30772:21:1;30829:2;30809:18;;;30802:30;30868:34;30848:18;;;30841:62;-1:-1:-1;;;30919:18:1;;;30912:49;30978:19;;90156:89:0;30588:415:1;90156:89:0;90267:19;90300:7;-1:-1:-1;;;;;90289:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;90289:19:0;;90267:41;;90322:6;90330:1;90322:9;90319:2409;;90355:19;;;;;;;90347:55;;;;-1:-1:-1;;;90347:55:0;;;;;;;:::i;:::-;90425:29;90440:13;90425:14;:29::i;:::-;90417:83;;;;-1:-1:-1;;;90417:83:0;;31562:2:1;90417:83:0;;;31544:21:1;31601:2;31581:18;;;31574:30;31640:34;31620:18;;;31613:62;-1:-1:-1;;;31691:18:1;;;31684:39;31740:19;;90417:83:0;31360:405:1;90417:83:0;90520:9;90515:122;90539:13;:20;90535:1;:24;90515:122;;;90585:36;90591:10;90602:13;90616:1;90602:16;;;;;;;;:::i;90585:36::-;90561:3;;;;:::i;:::-;;;;90515:122;;;;90651:15;90669:16;90676:8;90669:6;:16::i;:::-;90651:34;;90705:6;90700:231;90721:7;90717:1;:11;90700:231;;;90754:11;90768:45;90779:10;90793:4;;90792:19;;90802:8;90809:1;90802:5;:8;:::i;90768:45::-;90754:59;;90843:19;90855:6;90843:11;:19::i;:::-;90832:5;90838:1;90832:8;;;;;;;;:::i;:::-;;;;;;:30;;;;;90881:34;90887:10;90899:5;90905:1;90899:8;;;;;;;;:::i;90881:34::-;-1:-1:-1;90730:3:0;;;;:::i;:::-;;;;90700:231;;;;90332:610;90319:2409;;;90950:6;90958:1;90950:9;90947:1781;;90983:21;;;;;;;90975:57;;;;-1:-1:-1;;;90975:57:0;;;;;;;:::i;:::-;91055:31;91072:13;91055:16;:31::i;:::-;91047:82;;;;-1:-1:-1;;;91047:82:0;;31972:2:1;91047:82:0;;;31954:21:1;32011:2;31991:18;;;31984:30;32050:34;32030:18;;;32023:62;-1:-1:-1;;;32101:18:1;;;32094:36;32147:19;;91047:82:0;31770:402:1;91047:82:0;91149:9;91144:122;91168:13;:20;91164:1;:24;91144:122;;;91214:36;91220:10;91231:13;91245:1;91231:16;;;;;;;;:::i;91214:36::-;91190:3;;;;:::i;:::-;;;;91144:122;;;;91280:15;91298:16;91305:8;91298:6;:16::i;:::-;91280:34;;91334:6;91329:227;91350:7;91346:1;:11;91329:227;;;91383:11;91397:45;91408:10;91422:4;;91421:19;;91431:8;91438:1;91431:5;:8;:::i;91397:45::-;91383:59;;91472:15;91480:6;91472:7;:15::i;:::-;91461:5;91467:1;91461:8;;;;;;;;:::i;:::-;;;;;;:26;;;;;91506:34;91512:10;91524:5;91530:1;91524:8;;;;;;;;:::i;91506:34::-;-1:-1:-1;91359:3:0;;;;:::i;:::-;;;;91329:227;;90947:1781;91575:6;91583:1;91575:9;91572:1156;;91608:17;;-1:-1:-1;;;91608:17:0;;;;91600:53;;;;-1:-1:-1;;;91600:53:0;;;;;;;:::i;:::-;91676:27;91689:13;91676:12;:27::i;:::-;91668:74;;;;-1:-1:-1;;;91668:74:0;;32379:2:1;91668:74:0;;;32361:21:1;32418:2;32398:18;;;32391:30;32457:34;32437:18;;;32430:62;-1:-1:-1;;;32508:18:1;;;32501:32;32550:19;;91668:74:0;32177:398:1;91668:74:0;91762:9;91757:122;91781:13;:20;91777:1;:24;91757:122;;;91827:36;91833:10;91844:13;91858:1;91844:16;;;;;;;;:::i;91827:36::-;91803:3;;;;:::i;:::-;;;;91757:122;;;;91894:15;91912:16;91919:8;91912:6;:16::i;:::-;91894:34;;91949:6;91944:227;91965:7;91961:1;:11;91944:227;;;91998:11;92012:45;92023:10;92037:4;;92036:19;;92046:8;92053:1;92046:5;:8;:::i;92012:45::-;91998:59;;92087:15;92095:6;92087:7;:15::i;:::-;92076:5;92082:1;92076:8;;;;;;;;:::i;:::-;;;;;;:26;;;;;92121:34;92127:10;92139:5;92145:1;92139:8;;;;;;;;:::i;92121:34::-;-1:-1:-1;91974:3:0;;;;:::i;:::-;;;;91944:227;;91572:1156;92190:6;92198:1;92190:9;92187:541;;92223:17;;-1:-1:-1;;;92223:17:0;;;;92215:53;;;;-1:-1:-1;;;92215:53:0;;;;;;;:::i;:::-;92291:27;92304:13;92291:12;:27::i;:::-;92283:79;;;;-1:-1:-1;;;92283:79:0;;32782:2:1;92283:79:0;;;32764:21:1;32821:2;32801:18;;;32794:30;32860:34;32840:18;;;32833:62;-1:-1:-1;;;32911:18:1;;;32904:37;32958:19;;92283:79:0;32580:403:1;92283:79:0;92382:9;92377:122;92401:13;:20;92397:1;:24;92377:122;;;92447:36;92453:10;92464:13;92478:1;92464:16;;;;;;;;:::i;92447:36::-;92423:3;;;;:::i;:::-;;;;92377:122;;;;92514:15;92532:16;92539:8;92532:6;:16::i;:::-;92514:34;;92575:24;92588:10;92575:12;:24::i;:::-;92564:5;92570:1;92564:8;;;;;;;;:::i;:::-;;;;;;:35;;;;;92614:34;92620:10;92632:5;92638:1;92632:8;;;;;;;;:::i;92614:34::-;92200:460;92187:541;;;92680:36;;-1:-1:-1;;;92680:36:0;;33190:2:1;92680:36:0;;;33172:21:1;33229:2;33209:18;;;33202:30;-1:-1:-1;;;33248:18:1;;;33241:48;33306:18;;92680:36:0;32988:342:1;92680:36:0;92745:5;89613:3145;-1:-1:-1;;;;;89613:3145:0:o;35274:130::-;35358:15;;35350:46;;-1:-1:-1;;;35350:46:0;;35385:10;35350:46;;;7971:51:1;35323:7:0;;-1:-1:-1;;;;;35358:15:0;;35350:34;;7944:18:1;;35350:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32937:114::-;28629:13;:11;:13::i;:::-;33014:20:::1;:29:::0;;-1:-1:-1;;33014:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32937:114::o;66490:524::-;66646:16;66707:3;:10;66688:8;:15;:29;66680:83;;;;-1:-1:-1;;;66680:83:0;;33726:2:1;66680:83:0;;;33708:21:1;33765:2;33745:18;;;33738:30;33804:34;33784:18;;;33777:62;-1:-1:-1;;;33855:18:1;;;33848:39;33904:19;;66680:83:0;33524:405:1;66680:83:0;66776:30;66823:8;:15;-1:-1:-1;;;;;66809:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;66809:30:0;;66776:63;;66857:9;66852:122;66876:8;:15;66872:1;:19;66852:122;;;66932:30;66942:8;66951:1;66942:11;;;;;;;;:::i;:::-;;;;;;;66955:3;66959:1;66955:6;;;;;;;;:::i;:::-;;;;;;;66932:9;:30::i;:::-;66913:13;66927:1;66913:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;66893:3;;;:::i;:::-;;;66852:122;;43112:144;43155:4;43231:16;:14;:16::i;:::-;43218:10;:8;:10::i;:::-;43205;:8;:10::i;:::-;43188:14;:12;:14::i;:::-;43180:22;;:5;:22;:::i;:::-;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:67;;;;:::i;40174:126::-;28629:13;:11;:13::i;:::-;40247:9:::1;:17:::0;40275:9:::1;:17:::0;40174:126::o;42996:108::-;43041:4;43082:13;;43066;;:29;;;;:::i;39665:87::-;28629:13;:11;:13::i;:::-;39727:11:::1;:17:::0;39665:87::o;42788:96::-;42829:4;42866:9;;42854;;:21;;;;:::i;86171:346::-;86227:13;86253:20;86276:14;:12;:14::i;:::-;86253:37;;86301:25;86340:6;:13;-1:-1:-1;;;;;86329:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;86329:25:0;;86301:53;;86370:6;86365:116;86386:6;:13;86382:1;:17;86365:116;;;86438:31;86448:10;86459:6;86466:1;86459:9;;;;;;;;:::i;86438:31::-;86421:11;86433:1;86421:14;;;;;;;;:::i;:::-;;;;;;;;;;:48;86401:3;;;;:::i;:::-;;;;86365:116;;;-1:-1:-1;86498:11:0;86171:346;-1:-1:-1;;86171:346:0:o;36919:93::-;28629:13;:11;:13::i;:::-;36984:14:::1;:20:::0;36919:93::o;84485:358::-;-1:-1:-1;;;;;84650:23:0;;24719:10;84650:23;;:66;;-1:-1:-1;84677:39:0;84694:7;24719:10;67314:168;:::i;84677:39::-;84628:162;;;;-1:-1:-1;;;84628:162:0;;;;;;;:::i;:::-;84803:32;84814:7;84823:3;84828:6;84803:10;:32::i;:::-;84485:358;;;:::o;94720:180::-;28629:13;:11;:13::i;:::-;94793:20:::1;::::0;::::1;;94785:66;;;::::0;-1:-1:-1;;;94785:66:0;;34136:2:1;94785:66:0::1;::::0;::::1;34118:21:1::0;34175:2;34155:18;;;34148:30;34214:34;34194:18;;;34187:62;-1:-1:-1;;;34265:18:1;;;34258:32;34307:19;;94785:66:0::1;33934:398:1::0;94785:66:0::1;94862:30;94889:1;94862:18;:30::i;37154:288::-:0;37221:10;37213:19;;;;:7;:19;;;;;;;;;:37;;;37293:12;37257:25;;;:49;;;37313:28;;;;:36;;-1:-1:-1;;37313:36:0;;;37361:75;;34539:51:1;;;34606:18;;;34599:34;;;34649:18;;;34642:34;37361:75:0;;;;;;34527:2:1;37361:75:0;;;37154:288;:::o;41224:304::-;41299:4;;41316:183;41340:13;:20;41336:1;:24;41316:183;;;41389:13;41403:1;41389:16;;;;;;;;:::i;:::-;;;;;;;41385:3;:20;:55;;;-1:-1:-1;41432:7:0;;41428:11;;:3;:11;:::i;:::-;41409:13;41423:1;41409:16;;;;;;;;:::i;:::-;;;;;;;:31;;41385:55;41382:106;;;-1:-1:-1;41467:5:0;;41224:304;-1:-1:-1;;41224:304:0:o;41382:106::-;41362:3;;;;:::i;:::-;;;;41316:183;;93290:231;28629:13;:11;:13::i;:::-;93401:9:::1;93396:118;93416:20:::0;;::::1;93396:118;;;93458:44;93464:9;;93474:1;93464:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;93478:13;93492:1;93478:16;;;;;;;;:::i;93458:44::-;93438:3:::0;::::1;::::0;::::1;:::i;:::-;;;;93396:118;;;;93290:231:::0;;;:::o;43694:154::-;43765:4;;43793:17;43801:9;43793:7;:17;:::i;:::-;43782:28;-1:-1:-1;43829:11:0;43835:5;43782:28;43829:11;:::i;:::-;43821:19;43694:154;-1:-1:-1;;;;43694:154:0:o;32000:105::-;28629:13;:11;:13::i;:::-;32071:17:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;32071:26:0::1;-1:-1:-1::0;;32071:26:0;;::::1;::::0;;;::::1;::::0;;32000:105::o;86003:61::-;28629:13;:11;:13::i;:::-;86048:8:::1;:6;:8::i;40588:308::-:0;40665:4;;40682:185;40706:13;:20;40702:1;:24;40682:185;;;40755:13;40769:1;40755:16;;;;;;;;:::i;:::-;;;;;;;40751:3;:20;:57;;;-1:-1:-1;40798:9:0;;40794:13;;:3;:13;:::i;:::-;40775;40789:1;40775:16;;;;;;;;:::i;:::-;;;;;;;:33;;40751:57;40748:108;;;-1:-1:-1;40835:5:0;;40588:308;-1:-1:-1;;40588:308:0:o;40748:108::-;40728:3;;;;:::i;:::-;;;;40682:185;;44959:102;45010:4;45041:7;;45034:6;:14;;;;:::i;:::-;45033:20;;45050:3;45033:20;:::i;39843:79::-;28629:13;:11;:13::i;:::-;39901:7:::1;:13:::0;39843:79::o;43857:752::-;43908:4;;43938:14;43947:5;43938:6;:14;:::i;:::-;43924:28;;43981:6;43966:14;;:21;:47;;;;;43999:14;;43991:6;:22;;43966:47;43963:639;;;44074:12;;44067:19;;:6;:19;:::i;:::-;44066:25;;44088:3;44066:25;:::i;:::-;44059:32;43857:752;-1:-1:-1;;;43857:752:0:o;43963:639::-;44130:6;44120:9;;:16;:37;;;;;44148:9;;44140:6;:17;;44120:37;44117:485;;;44210:7;;44203:14;;:6;:14;:::i;:::-;44202:20;;44219:3;44202:20;:::i;44117:485::-;44261:6;44251:9;;:16;:37;;;;;44279:9;;44271:6;:17;;44251:37;44248:354;;;44342:7;;44335:14;;:6;:14;:::i;:::-;44334:20;;44351:3;44334:20;:::i;44248:354::-;44397:6;44383:13;;:20;:44;;;;;44414:13;;44407:6;:20;44383:44;44380:222;;;44486:11;;44479:18;;:6;:18;:::i;:::-;44478:24;;44499:3;44478:24;:::i;44380:222::-;44576:9;;44569:16;;:6;:16;:::i;:::-;44568:22;;44587:3;44568:22;:::i;44380:222::-;43913:696;43857:752;;;:::o;86525:464::-;86611:13;28629;:11;:13::i;:::-;86637:19:::1;86670:12;86671:8:::0;86681:1:::1;86670:12;:::i;:::-;-1:-1:-1::0;;;;;86659:24:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;86659:24:0::1;;86637:46;;86694:15;86712:16;86719:8;86712:6;:16::i;:::-;86694:34;;86744:6;86739:181;86760:8;86756:1;:12;86739:181;;;86790:11;86804:45;86815:10:::0;86829:4;;86828:19:::1;;86838:8;86845:1:::0;86838:5:::1;:8;:::i;86804:45::-;86790:59;;86891:15;86899:6;86891:7;:15::i;:::-;86876:13;:6:::0;86883::::1;86876:13;:::i;:::-;86875:31;;;;:::i;:::-;86864:5;86870:1;86864:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:42;-1:-1:-1;86770:3:0;::::1;::::0;::::1;:::i;:::-;;;;86739:181;;;;86948:10;86930:5;86936:8;86930:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:28;-1:-1:-1;86976:5:0;86525:464;-1:-1:-1;;;86525:464:0:o;31879:113::-;28629:13;:11;:13::i;:::-;31954:21:::1;:30:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31954:30:0;;::::1;::::0;;;::::1;::::0;;31879:113::o;93866:291::-;93930:16;;93907:7;;93930:16;;:40;;;;;93969:1;93950:18;:16;:18::i;:::-;:20;93930:40;93927:96;;;-1:-1:-1;93993:18:0;;;93866:291::o;93927:96::-;94036:11;;-1:-1:-1;;;94036:11:0;;;;94033:117;;;-1:-1:-1;94070:12:0;;;93866:291::o;94033:117::-;-1:-1:-1;85114:11:0;;93866:291::o;94033:117::-;93866:291;:::o;40025:141::-;28629:13;:11;:13::i;:::-;40103:14:::1;:22:::0;40136:14:::1;:22:::0;40025:141::o;44617:106::-;44670:4;44701:9;;44694:6;:16;;;;:::i;:::-;44693:22;;44712:3;44693:22;:::i;88788:817::-;88901:4;88924:9;88944:15;88962:16;88969:8;88962:6;:16::i;:::-;88944:34;;88989:17;88992:13;88989:2;:17::i;:::-;89020:13;:20;89044:1;89020:25;89017:517;;89069:21;89079:10;89069:9;:21::i;:::-;89062:28;;89017:517;;;89110:13;:20;89134:1;89110:25;89107:427;;89159:23;89171:10;89159:11;:23::i;89107:427::-;89202:13;:20;89226:1;89202:25;89199:335;;89251:19;89259:10;89251:7;:19::i;89199:335::-;89290:13;:20;89314:1;89290:25;89287:247;;89340:19;89348:10;89340:7;:19::i;89287:247::-;89379:13;:20;89403:1;89379:25;89376:158;;89428:24;89441:10;89428:12;:24::i;89376:158::-;89483:39;;-1:-1:-1;;;89483:39:0;;35014:2:1;89483:39:0;;;34996:21:1;35053:2;35033:18;;;35026:30;-1:-1:-1;;;35072:18:1;;;35065:51;35133:18;;89483:39:0;34812:345:1;89483:39:0;89545:30;89551:10;89563:4;89569:1;89545:30;;;;;;;;;;;;:5;:30::i;67087:155::-;67182:52;24719:10;67215:8;67225;67182:18;:52::i;44849:102::-;44900:4;44931:7;;44924:6;:14;;;;:::i;:::-;44923:20;;44940:3;44923:20;:::i;34893:95::-;28629:13;:11;:13::i;:::-;34957:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34957:23:0::1;-1:-1:-1::0;;;;34957:23:0;;::::1;::::0;;;::::1;::::0;;34893:95::o;85373:218::-;28629:13;:11;:13::i;:::-;85440:19:::1;:28:::0;;-1:-1:-1;;85479:30:0;85440:28;;::::1;;::::0;;::::1;-1:-1:-1::0;;85479:30:0;;;;::::1;;-1:-1:-1::0;;85557:26:0;-1:-1:-1;;;85520:26:0;::::1;-1:-1:-1::0;;85557:26:0;;-1:-1:-1;;;85557:26:0;;;::::1;::::0;;;::::1;::::0;;85373:218::o;42668:112::-;42715:4;42757:14;;42740;;:31;;;;:::i;43322:134::-;43383:7;43437:9;43420:27;;;;;;35291:19:1;;35335:2;35326:12;;35162:182;34235:108:0;28629:13;:11;:13::i;:::-;34309:15:::1;:26:::0;;-1:-1:-1;;;;;;34309:26:0::1;-1:-1:-1::0;;;;;34309:26:0;;;::::1;::::0;;;::::1;::::0;;34235:108::o;36576:175::-;36693:15;;36685:58;;-1:-1:-1;;;36685:58:0;;-1:-1:-1;;;;;35579:15:1;;;36685:58:0;;;35561:34:1;35631:15;;;35611:18;;;35604:43;36662:4:0;;36693:15;;36685:41;;35496:18:1;;36685:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;87827:308::-;87940:16;;87885:4;;;;87930:26;;87927:84;;87986:13;;87980:19;;:5;:19;:::i;:::-;87972:27;;87927:84;88034:16;;88024:8;:26;88021:84;;88080:13;;88074:19;;:5;:19;:::i;35124:142::-;35220:15;;35212:46;;-1:-1:-1;;;35212:46:0;;;;;616:25:1;;;35185:7:0;;-1:-1:-1;;;;;35220:15:0;;35212:32;;589:18:1;;35212:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41848:812::-;41893:13;41919:20;41999:12;;41989:7;;41979;;41965:11;;41953:9;;:23;;;;:::i;:::-;:33;;;;:::i;:::-;:43;;;;:::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;41942:70:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41942:70:0;;41919:93;;42023:11;42054:9;42049:107;42073:9;;42069:1;:13;42049:107;;;42118:5;42122:1;42118:3;:5;:::i;:::-;42104:6;42111:3;42104:11;;;;;;;;:::i;:::-;;;;;;;;;;:19;42138:5;;;;:::i;:::-;;;;42084:3;;;;;:::i;:::-;;;;42049:107;;;;42172:9;42167:109;42191:11;;42187:1;:15;42167:109;;;42238:5;42242:1;42238:3;:5;:::i;:::-;42224:6;42231:3;42224:11;;;;;;;;:::i;:::-;;;;;;;;;;:19;42258:5;;;;:::i;:::-;;;;42204:3;;;;;:::i;:::-;;;;42167:109;;;;42292:9;42287:105;42311:7;;42307:1;:11;42287:105;;;42354:5;42358:1;42354:3;:5;:::i;:::-;42340:6;42347:3;42340:11;;;;;;;;:::i;:::-;;;;;;;;;;:19;42374:5;;;;:::i;:::-;;;;42320:3;;;;;:::i;:::-;;;;42287:105;;;;42408:9;42403:105;42427:7;;42423:1;:11;42403:105;;;42470:5;42474:1;42470:3;:5;:::i;:::-;42456:6;42463:3;42456:11;;;;;;;;:::i;:::-;;;;;;;;;;:19;42490:5;;;;:::i;:::-;;;;42436:3;;;;;:::i;:::-;;;;42403:105;;;;42524:9;42519:110;42543:12;;42539:1;:16;42519:110;;;42591:5;42595:1;42591:3;:5;:::i;:::-;42577:6;42584:3;42577:11;;;;;;;;:::i;:::-;;;;;;;;;;:19;42611:5;;;;:::i;:::-;;;;42557:3;;;;;:::i;:::-;;;;42519:110;;;-1:-1:-1;42646:6:0;;41848:812;-1:-1:-1;;41848:812:0:o;32638:128::-;28629:13;:11;:13::i;:::-;32723:20:::1;:35:::0;32638:128::o;34790:95::-;28629:13;:11;:13::i;:::-;34854:14:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;34854:23:0::1;-1:-1:-1::0;;;;34854:23:0;;::::1;::::0;;;::::1;::::0;;34790:95::o;43464:221::-;43514:4;43538:24;43553:8;43538:14;:24::i;32774:155::-;28629:13;:11;:13::i;:::-;32863:11:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;32863:27:0::1;-1:-1:-1::0;;;;32863:27:0;;::::1;::::0;;;::::1;::::0;;;32901:12:::1;:20:::0;32774:155::o;31177:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31231:155::-;28629:13;:11;:13::i;:::-;31316:16:::1;:25:::0;;-1:-1:-1;;31316:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;31352:18:::1;:26:::0;31231:155::o;32545:85::-;28629:13;:11;:13::i;:::-;32606:7:::1;:16:::0;;;::::1;;;;-1:-1:-1::0;;32606:16:0;;::::1;::::0;;;::::1;::::0;;32545:85::o;31578:176::-;28629:13;:11;:13::i;:::-;31673:16:::1;:34:::0;;;;31718:13:::1;:28:::0;31578:176::o;39928:89::-;28629:13;:11;:13::i;:::-;39991:12:::1;:18:::0;39928:89::o;67554:406::-;-1:-1:-1;;;;;67762:20:0;;24719:10;67762:20;;:60;;-1:-1:-1;67786:36:0;67803:4;24719:10;67314:168;:::i;67786:36::-;67740:156;;;;-1:-1:-1;;;67740:156:0;;;;;;;:::i;:::-;67907:45;67925:4;67931:2;67935;67939:6;67947:4;67907:17;:45::i;32438:97::-;28629:13;:11;:13::i;:::-;32505::::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;32505:22:0;;::::1;::::0;;;::::1;::::0;;32438:97::o;29649:201::-;28629:13;:11;:13::i;:::-;-1:-1:-1;;;;;29738:22:0;::::1;29730:73;;;::::0;-1:-1:-1;;;29730:73:0;;36110:2:1;29730:73:0::1;::::0;::::1;36092:21:1::0;36149:2;36129:18;;;36122:30;36188:34;36168:18;;;36161:62;-1:-1:-1;;;36239:18:1;;;36232:36;36285:19;;29730:73:0::1;35908:402:1::0;29730:73:0::1;29814:28;29833:8;29814:18;:28::i;84151:326::-:0;-1:-1:-1;;;;;84291:23:0;;24719:10;84291:23;;:66;;-1:-1:-1;84318:39:0;84335:7;24719:10;67314:168;:::i;84318:39::-;84269:162;;;;-1:-1:-1;;;84269:162:0;;;;;;;:::i;:::-;84444:25;84450:7;84459:2;84463:5;84444;:25::i;31762:109::-;28629:13;:11;:13::i;:::-;31835:19:::1;:28:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31835:28:0;;::::1;::::0;;;::::1;::::0;;31762:109::o;32226:87::-;28629:13;:11;:13::i;:::-;32288:8:::1;:17:::0;;;::::1;;-1:-1:-1::0;;;32288:17:0::1;-1:-1:-1::0;;32288:17:0;;::::1;::::0;;;::::1;::::0;;32226:87::o;28908:132::-;28816:6;;-1:-1:-1;;;;;28816:6:0;24719:10;28972:23;28964:68;;;;-1:-1:-1;;;28964:68:0;;36517:2:1;28964:68:0;;;36499:21:1;;;36536:18;;;36529:30;36595:34;36575:18;;;36568:62;36647:18;;28964:68:0;36315:356:1;72261:88:0;72328:4;:13;72335:6;72328:4;:13;:::i;65838:105::-;65898:13;65931:4;65924:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65838:105;;;:::o;13305:716::-;13361:13;13412:14;13429:17;13440:5;13429:10;:17::i;:::-;13449:1;13429:21;13412:38;;13465:20;13499:6;-1:-1:-1;;;;;13488:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13488:18:0;-1:-1:-1;13465:41:0;-1:-1:-1;13630:28:0;;;13646:2;13630:28;13687:288;-1:-1:-1;;13719:5:0;-1:-1:-1;;;13856:2:0;13845:14;;13840:30;13719:5;13827:44;13917:2;13908:11;;;-1:-1:-1;13938:21:0;13687:288;13938:21;-1:-1:-1;13996:6:0;13305:716;-1:-1:-1;;;13305:716:0:o;74978:808::-;-1:-1:-1;;;;;75105:18:0;;75097:66;;;;-1:-1:-1;;;75097:66:0;;;;;;;:::i;:::-;24719:10;75176:16;75241:21;75259:2;75241:17;:21::i;:::-;75218:44;;75273:24;75300:25;75318:6;75300:17;:25::i;:::-;75273:52;;75338:66;75359:8;75369:4;75383:1;75387:3;75392:7;75338:66;;;;;;;;;;;;:20;:66::i;:::-;75417:19;75439:13;;;;;;;;;;;-1:-1:-1;;;;;75439:19:0;;;;;;;;;;75477:21;;;;75469:70;;;;-1:-1:-1;;;75469:70:0;;;;;;;:::i;:::-;75575:9;:13;;;;;;;;;;;-1:-1:-1;;;;;75575:19:0;;;;;;;;;;;;75597:20;;;75575:42;;75646:54;;37659:25:1;;;37700:18;;;37693:34;;;75575:19:0;;75646:54;;;;;;37632:18:1;75646:54:0;;;;;;;75713:65;;;;;;;;;75757:1;75713:65;;;75086:700;;;;74978:808;;;:::o;72735:729::-;-1:-1:-1;;;;;72888:16:0;;72880:62;;;;-1:-1:-1;;;72880:62:0;;37940:2:1;72880:62:0;;;37922:21:1;37979:2;37959:18;;;37952:30;38018:34;37998:18;;;37991:62;-1:-1:-1;;;38069:18:1;;;38062:31;38110:19;;72880:62:0;37738:397:1;72880:62:0;24719:10;72955:16;73020:21;73038:2;73020:17;:21::i;:::-;72997:44;;73052:24;73079:25;73097:6;73079:17;:25::i;:::-;73052:52;;73117:66;73138:8;73156:1;73160:2;73164:3;73169:7;73178:4;73117:20;:66::i;:::-;73196:9;:13;;;;;;;;;;;-1:-1:-1;;;;;73196:17:0;;;;;;;;;:27;;73217:6;;73196:9;:27;;73217:6;;73196:27;:::i;:::-;;;;-1:-1:-1;;73239:52:0;;;37659:25:1;;;37715:2;37700:18;;37693:34;;;-1:-1:-1;;;;;73239:52:0;;;;73272:1;;73239:52;;;;;;37632:18:1;73239:52:0;;;;;;;73382:74;73413:8;73431:1;73435:2;73439;73443:6;73451:4;73382:30;:74::i;70271:1146::-;70498:7;:14;70484:3;:10;:28;70476:81;;;;-1:-1:-1;;;70476:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;70576:16:0;;70568:66;;;;-1:-1:-1;;;70568:66:0;;;;;;;:::i;:::-;24719:10;70691:60;24719:10;70722:4;70728:2;70732:3;70737:7;70746:4;70691:20;:60::i;:::-;70769:9;70764:421;70788:3;:10;70784:1;:14;70764:421;;;70820:10;70833:3;70837:1;70833:6;;;;;;;;:::i;:::-;;;;;;;70820:19;;70854:14;70871:7;70879:1;70871:10;;;;;;;;:::i;:::-;;;;;;;;;;;;70898:19;70920:13;;;;;;;;;;-1:-1:-1;;;;;70920:19:0;;;;;;;;;;;;70871:10;;-1:-1:-1;70962:21:0;;;;70954:76;;;;-1:-1:-1;;;70954:76:0;;;;;;;:::i;:::-;71074:9;:13;;;;;;;;;;;-1:-1:-1;;;;;71074:19:0;;;;;;;;;;71096:20;;;71074:42;;71146:17;;;;;;;:27;;71096:20;;71074:9;71146:27;;71096:20;;71146:27;:::i;:::-;;;;;;;;70805:380;;;70800:3;;;;:::i;:::-;;;70764:421;;;;71232:2;-1:-1:-1;;;;;71202:47:0;71226:4;-1:-1:-1;;;;;71202:47:0;71216:8;-1:-1:-1;;;;;71202:47:0;;71236:3;71241:7;71202:47;;;;;;;:::i;:::-;;;;;;;;71334:75;71370:8;71380:4;71386:2;71390:3;71395:7;71404:4;71334:35;:75::i;:::-;70465:952;70271:1146;;;;;:::o;27381:120::-;26390:16;:14;:16::i;:::-;27440:7:::1;:15:::0;;-1:-1:-1;;;;27440:15:0::1;::::0;;27471:22:::1;24719:10:::0;27480:12:::1;27471:22;::::0;-1:-1:-1;;;;;7989:32:1;;;7971:51;;7959:2;7944:18;27471:22:0::1;;;;;;;27381:120::o:0;76036:969::-;-1:-1:-1;;;;;76188:18:0;;76180:66;;;;-1:-1:-1;;;76180:66:0;;;;;;;:::i;:::-;76279:7;:14;76265:3;:10;:28;76257:81;;;;-1:-1:-1;;;76257:81:0;;;;;;;:::i;:::-;76351:16;24719:10;76351:31;;76395:66;76416:8;76426:4;76440:1;76444:3;76449:7;76395:66;;;;;;;;;;;;:20;:66::i;:::-;76479:9;76474:373;76498:3;:10;76494:1;:14;76474:373;;;76530:10;76543:3;76547:1;76543:6;;;;;;;;:::i;:::-;;;;;;;76530:19;;76564:14;76581:7;76589:1;76581:10;;;;;;;;:::i;:::-;;;;;;;;;;;;76608:19;76630:13;;;;;;;;;;-1:-1:-1;;;;;76630:19:0;;;;;;;;;;;;76581:10;;-1:-1:-1;76672:21:0;;;;76664:70;;;;-1:-1:-1;;;76664:70:0;;;;;;;:::i;:::-;76778:9;:13;;;;;;;;;;;-1:-1:-1;;;;;76778:19:0;;;;;;;;;;76800:20;;76778:42;;76510:3;;;;:::i;:::-;;;;76474:373;;;;76902:1;-1:-1:-1;;;;;76864:55:0;76888:4;-1:-1:-1;;;;;76864:55:0;76878:8;-1:-1:-1;;;;;76864:55:0;;76906:3;76911:7;76864:55;;;;;;;:::i;:::-;;;;;;;;76932:65;;;;;;;;;76976:1;76932:65;;;70271:1146;30010:191;30103:6;;;-1:-1:-1;;;;;30120:17:0;;;-1:-1:-1;;;;;;30120:17:0;;;;;;;30153:40;;30103:6;;;30120:17;30103:6;;30153:40;;30084:16;;30153:40;30073:128;30010:191;:::o;27122:118::-;26131:19;:17;:19::i;:::-;27182:7:::1;:14:::0;;-1:-1:-1;;;;27182:14:0::1;-1:-1:-1::0;;;27182:14:0::1;::::0;;27212:20:::1;27219:12;24719:10:::0;;24639:98;77148:331;77303:8;-1:-1:-1;;;;;77294:17:0;:5;-1:-1:-1;;;;;77294:17:0;;77286:71;;;;-1:-1:-1;;;77286:71:0;;40038:2:1;77286:71:0;;;40020:21:1;40077:2;40057:18;;;40050:30;40116:34;40096:18;;;40089:62;-1:-1:-1;;;40167:18:1;;;40160:39;40216:19;;77286:71:0;39836:405:1;77286:71:0;-1:-1:-1;;;;;77368:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;77368:46:0;;;;;;;;;;77430:41;;1178::1;;;77430::0;;1151:18:1;77430:41:0;;;;;;;77148:331;;;:::o;68939:974::-;-1:-1:-1;;;;;69127:16:0;;69119:66;;;;-1:-1:-1;;;69119:66:0;;;;;;;:::i;:::-;24719:10;69198:16;69263:21;69281:2;69263:17;:21::i;:::-;69240:44;;69295:24;69322:25;69340:6;69322:17;:25::i;:::-;69295:52;;69360:60;69381:8;69391:4;69397:2;69401:3;69406:7;69415:4;69360:20;:60::i;:::-;69433:19;69455:13;;;;;;;;;;;-1:-1:-1;;;;;69455:19:0;;;;;;;;;;69493:21;;;;69485:76;;;;-1:-1:-1;;;69485:76:0;;;;;;;:::i;:::-;69597:9;:13;;;;;;;;;;;-1:-1:-1;;;;;69597:19:0;;;;;;;;;;69619:20;;;69597:42;;69661:17;;;;;;;:27;;69619:20;;69597:9;69661:27;;69619:20;;69661:27;:::i;:::-;;;;-1:-1:-1;;69706:46:0;;;37659:25:1;;;37715:2;37700:18;;37693:34;;;-1:-1:-1;;;;;69706:46:0;;;;;;;;;;;;;;37632:18:1;69706:46:0;;;;;;;69837:68;69868:8;69878:4;69884:2;69888;69892:6;69900:4;69837:30;:68::i;:::-;69108:805;;;;68939:974;;;;;:::o;10171:922::-;10224:7;;-1:-1:-1;;;10302:15:0;;10298:102;;-1:-1:-1;;;10338:15:0;;;-1:-1:-1;10382:2:0;10372:12;10298:102;10427:6;10418:5;:15;10414:102;;10463:6;10454:15;;;-1:-1:-1;10498:2:0;10488:12;10414:102;10543:6;10534:5;:15;10530:102;;10579:6;10570:15;;;-1:-1:-1;10614:2:0;10604:12;10530:102;10659:5;10650;:14;10646:99;;10694:5;10685:14;;;-1:-1:-1;10728:1:0;10718:11;10646:99;10772:5;10763;:14;10759:99;;10807:5;10798:14;;;-1:-1:-1;10841:1:0;10831:11;10759:99;10885:5;10876;:14;10872:99;;10920:5;10911:14;;;-1:-1:-1;10954:1:0;10944:11;10872:99;10998:5;10989;:14;10985:66;;11034:1;11024:11;11079:6;10171:922;-1:-1:-1;;10171:922:0:o;81414:198::-;81534:16;;;81548:1;81534:16;;;;;;;;;81480;;81509:22;;81534:16;;;;;;;;;;;;-1:-1:-1;81534:16:0;81509:41;;81572:7;81561:5;81567:1;81561:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;81599:5;81414:198;-1:-1:-1;;81414:198:0:o;93529:314::-;26131:19;:17;:19::i;:::-;93769:66:::1;93796:8;93806:4;93812:2;93816:3;93821:7;93830:4;93769:26;:66::i;79841:744::-:0;-1:-1:-1;;;;;80056:13:0;;46716:19;:23;80052:526;;80092:72;;-1:-1:-1;;;80092:72:0;;-1:-1:-1;;;;;80092:38:0;;;;;:72;;80131:8;;80141:4;;80147:2;;80151:6;;80159:4;;80092:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;80092:72:0;;;;;;;;-1:-1:-1;;80092:72:0;;;;;;;;;;;;:::i;:::-;;;80088:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;80440:6;80433:14;;-1:-1:-1;;;80433:14:0;;;;;;;;:::i;80088:479::-;;;80489:62;;-1:-1:-1;;;80489:62:0;;42128:2:1;80489:62:0;;;42110:21:1;42167:2;42147:18;;;42140:30;42206:34;42186:18;;;42179:62;-1:-1:-1;;;42257:18:1;;;42250:50;42317:19;;80489:62:0;41926:416:1;80088:479:0;-1:-1:-1;;;;;;80214:55:0;;-1:-1:-1;;;80214:55:0;80210:154;;80294:50;;-1:-1:-1;;;80294:50:0;;;;;;;:::i;80593:813::-;-1:-1:-1;;;;;80833:13:0;;46716:19;:23;80829:570;;80869:79;;-1:-1:-1;;;80869:79:0;;-1:-1:-1;;;;;80869:43:0;;;;;:79;;80913:8;;80923:4;;80929:3;;80934:7;;80943:4;;80869:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;80869:79:0;;;;;;;;-1:-1:-1;;80869:79:0;;;;;;;;;;;;:::i;:::-;;;80865:523;;;;:::i;:::-;-1:-1:-1;;;;;;81030:60:0;;-1:-1:-1;;;81030:60:0;81026:159;;81115:50;;-1:-1:-1;;;81115:50:0;;;;;;;:::i;26870:108::-;26597:7;;-1:-1:-1;;;26597:7:0;;;;26929:41;;;;-1:-1:-1;;;26929:41:0;;43790:2:1;26929:41:0;;;43772:21:1;43829:2;43809:18;;;43802:30;-1:-1:-1;;;43848:18:1;;;43841:50;43908:18;;26929:41:0;43588:344:1;26685:108:0;26597:7;;-1:-1:-1;;;26597:7:0;;;;26755:9;26747:38;;;;-1:-1:-1;;;26747:38:0;;44139:2:1;26747:38:0;;;44121:21:1;44178:2;44158:18;;;44151:30;-1:-1:-1;;;44197:18:1;;;44190:46;44253:18;;26747:38:0;43937:340:1;82767:931:0;-1:-1:-1;;;;;83089:18:0;;83085:160;;83129:9;83124:110;83148:3;:10;83144:1;:14;83124:110;;;83208:7;83216:1;83208:10;;;;;;;;:::i;:::-;;;;;;;83184:12;:20;83197:3;83201:1;83197:6;;;;;;;;:::i;:::-;;;;;;;83184:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;83160:3:0;;-1:-1:-1;83160:3:0;;:::i;:::-;;;83124:110;;;;83085:160;-1:-1:-1;;;;;83261:16:0;;83257:434;;83299:9;83294:386;83318:3;:10;83314:1;:14;83294:386;;;83354:10;83367:3;83371:1;83367:6;;;;;;;;:::i;:::-;;;;;;;83354:19;;83392:14;83409:7;83417:1;83409:10;;;;;;;;:::i;:::-;;;;;;;83392:27;;83438:14;83455:12;:16;83468:2;83455:16;;;;;;;;;;;;83438:33;;83508:6;83498;:16;;83490:69;;;;-1:-1:-1;;;83490:69:0;;44484:2:1;83490:69:0;;;44466:21:1;44523:2;44503:18;;;44496:30;44562:34;44542:18;;;44535:62;-1:-1:-1;;;44613:18:1;;;44606:38;44661:19;;83490:69:0;44282:404:1;83490:69:0;83611:16;;;;:12;:16;;;;;;83630:15;;83611:34;;83330:3;;;:::i;:::-;;;83294:386;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;652:131::-;-1:-1:-1;;;;;;726:32:1;;716:43;;706:71;;773:1;770;763:12;788:245;846:6;899:2;887:9;878:7;874:23;870:32;867:52;;;915:1;912;905:12;867:52;954:9;941:23;973:30;997:5;973:30;:::i;1230:127::-;1291:10;1286:3;1282:20;1279:1;1272:31;1322:4;1319:1;1312:15;1346:4;1343:1;1336:15;1362:249;1472:2;1453:13;;-1:-1:-1;;1449:27:1;1437:40;;-1:-1:-1;;;;;1492:34:1;;1528:22;;;1489:62;1486:88;;;1554:18;;:::i;:::-;1590:2;1583:22;-1:-1:-1;;1362:249:1:o;1616:469::-;1681:5;-1:-1:-1;;;;;1707:6:1;1704:30;1701:56;;;1737:18;;:::i;:::-;1786:2;1780:9;1798:69;1855:2;1834:15;;-1:-1:-1;;1830:29:1;1861:4;1826:40;1780:9;1798:69;:::i;:::-;1885:6;1876:15;;1915:6;1907;1900:22;1955:3;1946:6;1941:3;1937:16;1934:25;1931:45;;;1972:1;1969;1962:12;1931:45;2022:6;2017:3;2010:4;2002:6;1998:17;1985:44;2077:1;2070:4;2061:6;2053;2049:19;2045:30;2038:41;;1616:469;;;;;:::o;2090:451::-;2159:6;2212:2;2200:9;2191:7;2187:23;2183:32;2180:52;;;2228:1;2225;2218:12;2180:52;2268:9;2255:23;-1:-1:-1;;;;;2293:6:1;2290:30;2287:50;;;2333:1;2330;2323:12;2287:50;2356:22;;2409:4;2401:13;;2397:27;-1:-1:-1;2387:55:1;;2438:1;2435;2428:12;2387:55;2461:74;2527:7;2522:2;2509:16;2504:2;2500;2496:11;2461:74;:::i;2546:180::-;2605:6;2658:2;2646:9;2637:7;2633:23;2629:32;2626:52;;;2674:1;2671;2664:12;2626:52;-1:-1:-1;2697:23:1;;2546:180;-1:-1:-1;2546:180:1:o;2731:118::-;2817:5;2810:13;2803:21;2796:5;2793:32;2783:60;;2839:1;2836;2829:12;2854:241;2910:6;2963:2;2951:9;2942:7;2938:23;2934:32;2931:52;;;2979:1;2976;2969:12;2931:52;3018:9;3005:23;3037:28;3059:5;3037:28;:::i;3100:250::-;3185:1;3195:113;3209:6;3206:1;3203:13;3195:113;;;3285:11;;;3279:18;3266:11;;;3259:39;3231:2;3224:10;3195:113;;;-1:-1:-1;;3342:1:1;3324:16;;3317:27;3100:250::o;3355:271::-;3397:3;3435:5;3429:12;3462:6;3457:3;3450:19;3478:76;3547:6;3540:4;3535:3;3531:14;3524:4;3517:5;3513:16;3478:76;:::i;:::-;3608:2;3587:15;-1:-1:-1;;3583:29:1;3574:39;;;;3615:4;3570:50;;3355:271;-1:-1:-1;;3355:271:1:o;3631:220::-;3780:2;3769:9;3762:21;3743:4;3800:45;3841:2;3830:9;3826:18;3818:6;3800:45;:::i;3856:248::-;3924:6;3932;3985:2;3973:9;3964:7;3960:23;3956:32;3953:52;;;4001:1;3998;3991:12;3953:52;-1:-1:-1;;4024:23:1;;;4094:2;4079:18;;;4066:32;;-1:-1:-1;3856:248:1:o;4362:435::-;4415:3;4453:5;4447:12;4480:6;4475:3;4468:19;4506:4;4535:2;4530:3;4526:12;4519:19;;4572:2;4565:5;4561:14;4593:1;4603:169;4617:6;4614:1;4611:13;4603:169;;;4678:13;;4666:26;;4712:12;;;;4747:15;;;;4639:1;4632:9;4603:169;;;-1:-1:-1;4788:3:1;;4362:435;-1:-1:-1;;;;;4362:435:1:o;4802:261::-;4981:2;4970:9;4963:21;4944:4;5001:56;5053:2;5042:9;5038:18;5030:6;5001:56;:::i;5068:183::-;5128:4;-1:-1:-1;;;;;5153:6:1;5150:30;5147:56;;;5183:18;;:::i;:::-;-1:-1:-1;5228:1:1;5224:14;5240:4;5220:25;;5068:183::o;5256:724::-;5310:5;5363:3;5356:4;5348:6;5344:17;5340:27;5330:55;;5381:1;5378;5371:12;5330:55;5417:6;5404:20;5443:4;5466:43;5506:2;5466:43;:::i;:::-;5538:2;5532:9;5550:31;5578:2;5570:6;5550:31;:::i;:::-;5616:18;;;5708:1;5704:10;;;;5692:23;;5688:32;;;5650:15;;;;-1:-1:-1;5732:15:1;;;5729:35;;;5760:1;5757;5750:12;5729:35;5796:2;5788:6;5784:15;5808:142;5824:6;5819:3;5816:15;5808:142;;;5890:17;;5878:30;;5928:12;;;;5841;;5808:142;;;-1:-1:-1;5968:6:1;5256:724;-1:-1:-1;;;;;;5256:724:1:o;5985:348::-;6069:6;6122:2;6110:9;6101:7;6097:23;6093:32;6090:52;;;6138:1;6135;6128:12;6090:52;6178:9;6165:23;-1:-1:-1;;;;;6203:6:1;6200:30;6197:50;;;6243:1;6240;6233:12;6197:50;6266:61;6319:7;6310:6;6299:9;6295:22;6266:61;:::i;6523:221::-;6565:5;6618:3;6611:4;6603:6;6599:17;6595:27;6585:55;;6636:1;6633;6626:12;6585:55;6658:80;6734:3;6725:6;6712:20;6705:4;6697:6;6693:17;6658:80;:::i;6749:1071::-;6903:6;6911;6919;6927;6935;6988:3;6976:9;6967:7;6963:23;6959:33;6956:53;;;7005:1;7002;6995:12;6956:53;7044:9;7031:23;7063:31;7088:5;7063:31;:::i;:::-;7113:5;-1:-1:-1;7170:2:1;7155:18;;7142:32;7183:33;7142:32;7183:33;:::i;:::-;7235:7;-1:-1:-1;7293:2:1;7278:18;;7265:32;-1:-1:-1;;;;;7346:14:1;;;7343:34;;;7373:1;7370;7363:12;7343:34;7396:61;7449:7;7440:6;7429:9;7425:22;7396:61;:::i;:::-;7386:71;;7510:2;7499:9;7495:18;7482:32;7466:48;;7539:2;7529:8;7526:16;7523:36;;;7555:1;7552;7545:12;7523:36;7578:63;7633:7;7622:8;7611:9;7607:24;7578:63;:::i;:::-;7568:73;;7694:3;7683:9;7679:19;7666:33;7650:49;;7724:2;7714:8;7711:16;7708:36;;;7740:1;7737;7730:12;7708:36;;7763:51;7806:7;7795:8;7784:9;7780:24;7763:51;:::i;:::-;7753:61;;;6749:1071;;;;;;;;:::o;8215:247::-;8274:6;8327:2;8315:9;8306:7;8302:23;8298:32;8295:52;;;8343:1;8340;8333:12;8295:52;8382:9;8369:23;8401:31;8426:5;8401:31;:::i;8467:484::-;8569:6;8577;8585;8638:2;8626:9;8617:7;8613:23;8609:32;8606:52;;;8654:1;8651;8644:12;8606:52;8694:9;8681:23;-1:-1:-1;;;;;8719:6:1;8716:30;8713:50;;;8759:1;8756;8749:12;8713:50;8782:61;8835:7;8826:6;8815:9;8811:22;8782:61;:::i;:::-;8772:71;8890:2;8875:18;;8862:32;;-1:-1:-1;8941:2:1;8926:18;;;8913:32;;8467:484;-1:-1:-1;;;;8467:484:1:o;8956:1277::-;9074:6;9082;9135:2;9123:9;9114:7;9110:23;9106:32;9103:52;;;9151:1;9148;9141:12;9103:52;9191:9;9178:23;-1:-1:-1;;;;;9261:2:1;9253:6;9250:14;9247:34;;;9277:1;9274;9267:12;9247:34;9315:6;9304:9;9300:22;9290:32;;9360:7;9353:4;9349:2;9345:13;9341:27;9331:55;;9382:1;9379;9372:12;9331:55;9418:2;9405:16;9440:4;9463:43;9503:2;9463:43;:::i;:::-;9535:2;9529:9;9547:31;9575:2;9567:6;9547:31;:::i;:::-;9613:18;;;9701:1;9697:10;;;;9689:19;;9685:28;;;9647:15;;;;-1:-1:-1;9725:19:1;;;9722:39;;;9757:1;9754;9747:12;9722:39;9781:11;;;;9801:217;9817:6;9812:3;9809:15;9801:217;;;9897:3;9884:17;9914:31;9939:5;9914:31;:::i;:::-;9958:18;;9834:12;;;;9996;;;;9801:217;;;10037:6;-1:-1:-1;;10081:18:1;;10068:32;;-1:-1:-1;;10112:16:1;;;10109:36;;;10141:1;10138;10131:12;10109:36;;10164:63;10219:7;10208:8;10197:9;10193:24;10164:63;:::i;:::-;10154:73;;;8956:1277;;;;;:::o;10238:730::-;10365:6;10373;10381;10434:2;10422:9;10413:7;10409:23;10405:32;10402:52;;;10450:1;10447;10440:12;10402:52;10489:9;10476:23;10508:31;10533:5;10508:31;:::i;:::-;10558:5;-1:-1:-1;10614:2:1;10599:18;;10586:32;-1:-1:-1;;;;;10667:14:1;;;10664:34;;;10694:1;10691;10684:12;10664:34;10717:61;10770:7;10761:6;10750:9;10746:22;10717:61;:::i;:::-;10707:71;;10831:2;10820:9;10816:18;10803:32;10787:48;;10860:2;10850:8;10847:16;10844:36;;;10876:1;10873;10866:12;10844:36;;10899:63;10954:7;10943:8;10932:9;10928:24;10899:63;:::i;:::-;10889:73;;;10238:730;;;;;:::o;10973:847::-;11093:6;11101;11109;11162:2;11150:9;11141:7;11137:23;11133:32;11130:52;;;11178:1;11175;11168:12;11130:52;11218:9;11205:23;-1:-1:-1;;;;;11288:2:1;11280:6;11277:14;11274:34;;;11304:1;11301;11294:12;11274:34;11342:6;11331:9;11327:22;11317:32;;11387:7;11380:4;11376:2;11372:13;11368:27;11358:55;;11409:1;11406;11399:12;11358:55;11449:2;11436:16;11475:2;11467:6;11464:14;11461:34;;;11491:1;11488;11481:12;11461:34;11546:7;11539:4;11529:6;11526:1;11522:14;11518:2;11514:23;11510:34;11507:47;11504:67;;;11567:1;11564;11557:12;11504:67;11598:4;11590:13;;;;-1:-1:-1;11622:6:1;-1:-1:-1;11666:20:1;;;11653:34;;11699:16;;;11696:36;;;11728:1;11725;11718:12;12159:416;12252:6;12260;12313:2;12301:9;12292:7;12288:23;12284:32;12281:52;;;12329:1;12326;12319:12;12281:52;12369:9;12356:23;-1:-1:-1;;;;;12394:6:1;12391:30;12388:50;;;12434:1;12431;12424:12;12388:50;12457:61;12510:7;12501:6;12490:9;12486:22;12457:61;:::i;:::-;12447:71;12565:2;12550:18;;;;12537:32;;-1:-1:-1;;;;12159:416:1:o;12580:382::-;12645:6;12653;12706:2;12694:9;12685:7;12681:23;12677:32;12674:52;;;12722:1;12719;12712:12;12674:52;12761:9;12748:23;12780:31;12805:5;12780:31;:::i;:::-;12830:5;-1:-1:-1;12887:2:1;12872:18;;12859:32;12900:30;12859:32;12900:30;:::i;:::-;12949:7;12939:17;;;12580:382;;;;;:::o;12967:388::-;13035:6;13043;13096:2;13084:9;13075:7;13071:23;13067:32;13064:52;;;13112:1;13109;13102:12;13064:52;13151:9;13138:23;13170:31;13195:5;13170:31;:::i;:::-;13220:5;-1:-1:-1;13277:2:1;13262:18;;13249:32;13290:33;13249:32;13290:33;:::i;13360:309::-;13425:6;13433;13486:2;13474:9;13465:7;13461:23;13457:32;13454:52;;;13502:1;13499;13492:12;13454:52;13541:9;13528:23;13560:28;13582:5;13560:28;:::i;13674:734::-;13778:6;13786;13794;13802;13810;13863:3;13851:9;13842:7;13838:23;13834:33;13831:53;;;13880:1;13877;13870:12;13831:53;13919:9;13906:23;13938:31;13963:5;13938:31;:::i;:::-;13988:5;-1:-1:-1;14045:2:1;14030:18;;14017:32;14058:33;14017:32;14058:33;:::i;:::-;14110:7;-1:-1:-1;14164:2:1;14149:18;;14136:32;;-1:-1:-1;14215:2:1;14200:18;;14187:32;;-1:-1:-1;14270:3:1;14255:19;;14242:33;-1:-1:-1;;;;;14287:30:1;;14284:50;;;14330:1;14327;14320:12;14284:50;14353:49;14394:7;14385:6;14374:9;14370:22;14353:49;:::i;14413:383::-;14490:6;14498;14506;14559:2;14547:9;14538:7;14534:23;14530:32;14527:52;;;14575:1;14572;14565:12;14527:52;14614:9;14601:23;14633:31;14658:5;14633:31;:::i;:::-;14683:5;14735:2;14720:18;;14707:32;;-1:-1:-1;14786:2:1;14771:18;;;14758:32;;14413:383;-1:-1:-1;;;14413:383:1:o;15212:380::-;15291:1;15287:12;;;;15334;;;15355:61;;15409:4;15401:6;15397:17;15387:27;;15355:61;15462:2;15454:6;15451:14;15431:18;15428:38;15425:161;;15508:10;15503:3;15499:20;15496:1;15489:31;15543:4;15540:1;15533:15;15571:4;15568:1;15561:15;15723:545;15825:2;15820:3;15817:11;15814:448;;;15861:1;15886:5;15882:2;15875:17;15931:4;15927:2;15917:19;16001:2;15989:10;15985:19;15982:1;15978:27;15972:4;15968:38;16037:4;16025:10;16022:20;16019:47;;;-1:-1:-1;16060:4:1;16019:47;16115:2;16110:3;16106:12;16103:1;16099:20;16093:4;16089:31;16079:41;;16170:82;16188:2;16181:5;16178:13;16170:82;;;16233:17;;;16214:1;16203:13;16170:82;;16444:1352;16570:3;16564:10;-1:-1:-1;;;;;16589:6:1;16586:30;16583:56;;;16619:18;;:::i;:::-;16648:97;16738:6;16698:38;16730:4;16724:11;16698:38;:::i;:::-;16692:4;16648:97;:::i;:::-;16800:4;;16864:2;16853:14;;16881:1;16876:663;;;;17583:1;17600:6;17597:89;;;-1:-1:-1;17652:19:1;;;17646:26;17597:89;-1:-1:-1;;16401:1:1;16397:11;;;16393:24;16389:29;16379:40;16425:1;16421:11;;;16376:57;17699:81;;16846:944;;16876:663;15670:1;15663:14;;;15707:4;15694:18;;-1:-1:-1;;16912:20:1;;;17030:236;17044:7;17041:1;17038:14;17030:236;;;17133:19;;;17127:26;17112:42;;17225:27;;;;17193:1;17181:14;;;;17060:19;;17030:236;;;17034:3;17294:6;17285:7;17282:19;17279:201;;;17355:19;;;17349:26;-1:-1:-1;;17438:1:1;17434:14;;;17450:3;17430:24;17426:37;17422:42;17407:58;17392:74;;17279:201;-1:-1:-1;;;;;17526:1:1;17510:14;;;17506:22;17493:36;;-1:-1:-1;16444:1352:1:o;18161:496::-;18340:3;18378:6;18372:13;18394:66;18453:6;18448:3;18441:4;18433:6;18429:17;18394:66;:::i;:::-;18523:13;;18482:16;;;;18545:70;18523:13;18482:16;18592:4;18580:17;;18545:70;:::i;:::-;18631:20;;18161:496;-1:-1:-1;;;;18161:496:1:o;18662:127::-;18723:10;18718:3;18714:20;18711:1;18704:31;18754:4;18751:1;18744:15;18778:4;18775:1;18768:15;18794:112;18826:1;18852;18842:35;;18857:18;;:::i;:::-;-1:-1:-1;18891:9:1;;18794:112::o;18911:127::-;18972:10;18967:3;18963:20;18960:1;18953:31;19003:4;19000:1;18993:15;19027:4;19024:1;19017:15;19043:125;19108:9;;;19129:10;;;19126:36;;;19142:18;;:::i;19944:127::-;20005:10;20000:3;19996:20;19993:1;19986:31;20036:4;20033:1;20026:15;20060:4;20057:1;20050:15;20076:135;20115:3;20136:17;;;20133:43;;20156:18;;:::i;:::-;-1:-1:-1;20203:1:1;20192:13;;20076:135::o;21275:168::-;21348:9;;;21379;;21396:15;;;21390:22;;21376:37;21366:71;;21417:18;;:::i;21790:422::-;21879:1;21922:5;21879:1;21936:270;21957:7;21947:8;21944:21;21936:270;;;22016:4;22012:1;22008:6;22004:17;21998:4;21995:27;21992:53;;;22025:18;;:::i;:::-;22075:7;22065:8;22061:22;22058:55;;;22095:16;;;;22058:55;22174:22;;;;22134:15;;;;21936:270;;;21940:3;21790:422;;;;;:::o;22217:806::-;22266:5;22296:8;22286:80;;-1:-1:-1;22337:1:1;22351:5;;22286:80;22385:4;22375:76;;-1:-1:-1;22422:1:1;22436:5;;22375:76;22467:4;22485:1;22480:59;;;;22553:1;22548:130;;;;22460:218;;22480:59;22510:1;22501:10;;22524:5;;;22548:130;22585:3;22575:8;22572:17;22569:43;;;22592:18;;:::i;:::-;-1:-1:-1;;22648:1:1;22634:16;;22663:5;;22460:218;;22762:2;22752:8;22749:16;22743:3;22737:4;22734:13;22730:36;22724:2;22714:8;22711:16;22706:2;22700:4;22697:12;22693:35;22690:77;22687:159;;;-1:-1:-1;22799:19:1;;;22831:5;;22687:159;22878:34;22903:8;22897:4;22878:34;:::i;:::-;22948:6;22944:1;22940:6;22936:19;22927:7;22924:32;22921:58;;;22959:18;;:::i;:::-;22997:20;;22217:806;-1:-1:-1;;;22217:806:1:o;23028:131::-;23088:5;23117:36;23144:8;23138:4;23117:36;:::i;24924:410::-;25126:2;25108:21;;;25165:2;25145:18;;;25138:30;25204:34;25199:2;25184:18;;25177:62;-1:-1:-1;;;25270:2:1;25255:18;;25248:44;25324:3;25309:19;;24924:410::o;25339:128::-;25406:9;;;25427:11;;;25424:37;;;25441:18;;:::i;28465:251::-;28535:6;28588:2;28576:9;28567:7;28563:23;28559:32;28556:52;;;28604:1;28601;28594:12;28556:52;28636:9;28630:16;28655:31;28680:5;28655:31;:::i;31008:347::-;31210:2;31192:21;;;31249:2;31229:18;;;31222:30;31288:25;31283:2;31268:18;;31261:53;31346:2;31331:18;;31008:347::o;33335:184::-;33405:6;33458:2;33446:9;33437:7;33433:23;33429:32;33426:52;;;33474:1;33471;33464:12;33426:52;-1:-1:-1;33497:16:1;;33335:184;-1:-1:-1;33335:184:1:o;34687:120::-;34727:1;34753;34743:35;;34758:18;;:::i;:::-;-1:-1:-1;34792:9:1;;34687:120::o;35658:245::-;35725:6;35778:2;35766:9;35757:7;35753:23;35749:32;35746:52;;;35794:1;35791;35784:12;35746:52;35826:9;35820:16;35845:28;35867:5;35845:28;:::i;36676:399::-;36878:2;36860:21;;;36917:2;36897:18;;;36890:30;36956:34;36951:2;36936:18;;36929:62;-1:-1:-1;;;37022:2:1;37007:18;;37000:33;37065:3;37050:19;;36676:399::o;37080:400::-;37282:2;37264:21;;;37321:2;37301:18;;;37294:30;37360:34;37355:2;37340:18;;37333:62;-1:-1:-1;;;37426:2:1;37411:18;;37404:34;37470:3;37455:19;;37080:400::o;38140:404::-;38342:2;38324:21;;;38381:2;38361:18;;;38354:30;38420:34;38415:2;38400:18;;38393:62;-1:-1:-1;;;38486:2:1;38471:18;;38464:38;38534:3;38519:19;;38140:404::o;38549:401::-;38751:2;38733:21;;;38790:2;38770:18;;;38763:30;38829:34;38824:2;38809:18;;38802:62;-1:-1:-1;;;38895:2:1;38880:18;;38873:35;38940:3;38925:19;;38549:401::o;38955:406::-;39157:2;39139:21;;;39196:2;39176:18;;;39169:30;39235:34;39230:2;39215:18;;39208:62;-1:-1:-1;;;39301:2:1;39286:18;;39279:40;39351:3;39336:19;;38955:406::o;39366:465::-;39623:2;39612:9;39605:21;39586:4;39649:56;39701:2;39690:9;39686:18;39678:6;39649:56;:::i;:::-;39753:9;39745:6;39741:22;39736:2;39725:9;39721:18;39714:50;39781:44;39818:6;39810;39781:44;:::i;40246:561::-;-1:-1:-1;;;;;40543:15:1;;;40525:34;;40595:15;;40590:2;40575:18;;40568:43;40642:2;40627:18;;40620:34;;;40685:2;40670:18;;40663:34;;;40505:3;40728;40713:19;;40706:32;;;40468:4;;40755:46;;40781:19;;40773:6;40755:46;:::i;:::-;40747:54;40246:561;-1:-1:-1;;;;;;;40246:561:1:o;40812:249::-;40881:6;40934:2;40922:9;40913:7;40909:23;40905:32;40902:52;;;40950:1;40947;40940:12;40902:52;40982:9;40976:16;41001:30;41025:5;41001:30;:::i;41066:179::-;41101:3;41143:1;41125:16;41122:23;41119:120;;;41189:1;41186;41183;41168:23;-1:-1:-1;41226:1:1;41220:8;41215:3;41211:18;41066:179;:::o;41250:671::-;41289:3;41331:4;41313:16;41310:26;41307:39;;;41250:671;:::o;41307:39::-;41373:2;41367:9;-1:-1:-1;;41438:16:1;41434:25;;41431:1;41367:9;41410:50;41489:4;41483:11;41513:16;-1:-1:-1;;;;;41619:2:1;41612:4;41604:6;41600:17;41597:25;41592:2;41584:6;41581:14;41578:45;41575:58;;;41626:5;;;;;41250:671;:::o;41575:58::-;41663:6;41657:4;41653:17;41642:28;;41699:3;41693:10;41726:2;41718:6;41715:14;41712:27;;;41732:5;;;;;;41250:671;:::o;41712:27::-;41816:2;41797:16;41791:4;41787:27;41783:36;41776:4;41767:6;41762:3;41758:16;41754:27;41751:69;41748:82;;;41823:5;;;;;;41250:671;:::o;41748:82::-;41839:57;41890:4;41881:6;41873;41869:19;41865:30;41859:4;41839:57;:::i;:::-;-1:-1:-1;41912:3:1;;41250:671;-1:-1:-1;;;;;41250:671:1:o;42347:404::-;42549:2;42531:21;;;42588:2;42568:18;;;42561:30;42627:34;42622:2;42607:18;;42600:62;-1:-1:-1;;;42693:2:1;42678:18;;42671:38;42741:3;42726:19;;42347:404::o;42756:827::-;-1:-1:-1;;;;;43153:15:1;;;43135:34;;43205:15;;43200:2;43185:18;;43178:43;43115:3;43252:2;43237:18;;43230:31;;;43078:4;;43284:57;;43321:19;;43313:6;43284:57;:::i;:::-;43389:9;43381:6;43377:22;43372:2;43361:9;43357:18;43350:50;43423:44;43460:6;43452;43423:44;:::i;:::-;43409:58;;43516:9;43508:6;43504:22;43498:3;43487:9;43483:19;43476:51;43544:33;43570:6;43562;43544:33;:::i;:::-;43536:41;42756:827;-1:-1:-1;;;;;;;;42756:827:1:o
Swarm Source
ipfs://bc880ca4f81a287e32893b5cbb770f6924d6f78bdbea3d59c5f64434745a976b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.