Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 240 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21336859 | 39 days ago | IN | 0 ETH | 0.00146993 | ||||
Approve | 20984689 | 89 days ago | IN | 0 ETH | 0.0003881 | ||||
Approve | 20900348 | 100 days ago | IN | 0 ETH | 0.00018718 | ||||
Approve | 20447125 | 164 days ago | IN | 0 ETH | 0.00006797 | ||||
Approve | 20447103 | 164 days ago | IN | 0 ETH | 0.00007086 | ||||
Approve | 20407529 | 169 days ago | IN | 0 ETH | 0.00008877 | ||||
Approve | 20019158 | 223 days ago | IN | 0 ETH | 0.0006735 | ||||
Transfer | 19917910 | 238 days ago | IN | 0 ETH | 0.00722037 | ||||
Approve | 19917492 | 238 days ago | IN | 0 ETH | 0.00037779 | ||||
Approve | 19917482 | 238 days ago | IN | 0 ETH | 0.00047648 | ||||
Approve | 19917479 | 238 days ago | IN | 0 ETH | 0.00047742 | ||||
Approve | 19852686 | 247 days ago | IN | 0 ETH | 0.00022566 | ||||
Approve | 19604463 | 281 days ago | IN | 0 ETH | 0.00082993 | ||||
Approve | 19482019 | 299 days ago | IN | 0 ETH | 0.00085479 | ||||
Approve | 19330492 | 320 days ago | IN | 0 ETH | 0.00199263 | ||||
Approve | 19307982 | 323 days ago | IN | 0 ETH | 0.00132538 | ||||
Approve | 19241403 | 332 days ago | IN | 0 ETH | 0.0018327 | ||||
Approve | 19232654 | 334 days ago | IN | 0 ETH | 0.00086134 | ||||
Approve | 19225674 | 335 days ago | IN | 0 ETH | 0.00094457 | ||||
Set Approval For... | 19224563 | 335 days ago | IN | 0 ETH | 0.00085297 | ||||
Approve | 19223072 | 335 days ago | IN | 0 ETH | 0.00103079 | ||||
Approve | 19222330 | 335 days ago | IN | 0 ETH | 0.00120038 | ||||
Safe Transfer Fr... | 19220439 | 335 days ago | IN | 0 ETH | 0.00481618 | ||||
Approve | 19219039 | 336 days ago | IN | 0 ETH | 0.00128774 | ||||
Approve | 19219026 | 336 days ago | IN | 0 ETH | 0.00118673 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20597746 | 143 days ago | 0.03940208 ETH | ||||
20597746 | 143 days ago | 0.03940208 ETH | ||||
20447127 | 164 days ago | 0.04103601 ETH | ||||
20447127 | 164 days ago | 0.04103601 ETH | ||||
20447105 | 164 days ago | 0.04277378 ETH | ||||
20447105 | 164 days ago | 0.04277378 ETH | ||||
20207438 | 197 days ago | 0.04344899 ETH | ||||
20207438 | 197 days ago | 0.04344899 ETH | ||||
19917910 | 238 days ago | 0.0443874 ETH | ||||
19917910 | 238 days ago | 0.0443874 ETH | ||||
19852682 | 247 days ago | 0.04536574 ETH | ||||
19852682 | 247 days ago | 0.04536574 ETH | ||||
19604469 | 281 days ago | 0.04625099 ETH | ||||
19604469 | 281 days ago | 0.04625099 ETH | ||||
19502963 | 296 days ago | 0.04703454 ETH | ||||
19502963 | 296 days ago | 0.04703454 ETH | ||||
19307990 | 323 days ago | 0.0480816 ETH | ||||
19307990 | 323 days ago | 0.0480816 ETH | ||||
19268234 | 329 days ago | 0.04914385 ETH | ||||
19268234 | 329 days ago | 0.04914385 ETH | ||||
19256734 | 330 days ago | 0.06560632 ETH | ||||
19256734 | 330 days ago | 0.06560632 ETH | ||||
19237233 | 333 days ago | 0.0700505 ETH | ||||
19237233 | 333 days ago | 0.0700505 ETH | ||||
19235555 | 333 days ago | 0.07142913 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Bermuda
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-10 */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or * denominator == 0. * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by * Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. // Always >= 1. See https://cs.stackexchange.com/q/138556/92363. uint256 twos = denominator & (0 - denominator); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also // works in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded * towards zero. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } ////// src/IUniswapV2Router02.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ interface IUniswapV2Router02 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/utils/Pausable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @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 { bool private _paused; /** * @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); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @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 { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @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 v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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: @openzeppelin/contracts/access/Ownable2Step.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } } // File: contracts/ERC404.sol pragma solidity ^0.8.0; abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } /// @notice ERC404 /// A gas-efficient, mixed ERC20 / ERC721 implementation /// with native liquidity and fractionalization. /// /// This is an experimental standard designed to integrate /// with pre-existing ERC20 / ERC721 support as smoothly as /// possible. /// /// @dev In order to support full functionality of ERC20 and ERC721 /// supply assumptions are made that slightly constraint usage. /// Ensure decimals are sufficiently large (standard 18 recommended) /// as ids are effectively encoded in the lowest range of amounts. /// /// NFTs are spent on ERC20 functions in a FILO queue, this is by /// design. /// abstract contract ERC404 is Ownable2Step { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); error Unauthorized(); error InvalidOwner(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); allowance[owner][spender] = amount; emit Approval(owner, spender, amount); } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amountOrId ) public virtual { if (amountOrId <= minted) { if (from != _ownerOf[amountOrId]) { revert InvalidSender(); } if (to == address(0)) { revert InvalidRecipient(); } if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; // update _owned for sender uint256 updatedId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[amountOrId]] = updatedId; // pop _owned[from].pop(); // update index for the moved id _ownedIndex[updatedId] = _ownedIndex[amountOrId]; // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, _getUnit()); } else { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal virtual returns (bool) { uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas if (!whitelist[from]) { uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < tokens_to_burn; i++) { _burn(from); } } // Skip minting for certain addresses to save gas if (!whitelist[to]) { uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } emit ERC20Transfer(from, to, amount); return true; } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mint(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } unchecked { minted++; } uint256 id = minted; if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; emit Transfer(address(0), to, id); } function _burn(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; emit Transfer(from, address(0), id); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } } contract Bermuda is ERC404, Pausable, ReentrancyGuard { string public baseTokenURI; using Strings for uint256; bool public applyTxLimit; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; mapping(uint256 => uint256) private swapInBlock; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; bool public revealNFT = false; uint256 public buyTotalFees; uint256 private buyMarketingFee; uint256 public sellTotalFees; uint256 private sellMarketingFee; uint256 private tokensForMarketing; // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; constructor( address _owner, uint256 _initialSupply, uint8 _decimal, address _wallet1 ) ERC404("Bermuda", "BMDA", _decimal, _initialSupply, _owner) { balanceOf[_owner] = _initialSupply * 10 ** _decimal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); maxTransactionAmount = 4_044 * 1e18; maxWallet = 4_044 * 1e18; swapTokensAtAmount = 1 * 1e18; buyMarketingFee = 20; buyTotalFees = buyMarketingFee; sellMarketingFee = 20; sellTotalFees = sellMarketingFee; marketingWallet = _wallet1; // set as marketing wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); } receive() external payable {} // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } function stfu(uint256 openingFee) external onlyOwner { buyMarketingFee = openingFee; buyTotalFees = buyMarketingFee; sellMarketingFee = openingFee; sellTotalFees = sellMarketingFee; tradingActive = true; swapEnabled = true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateBuyFees( uint256 _marketingFee ) external onlyOwner { buyMarketingFee = _marketingFee; buyTotalFees = buyMarketingFee; require(buyTotalFees <= 50, "Must keep fees at 30% or less"); } function updateSellFees( uint256 _marketingFee ) external onlyOwner { sellMarketingFee = _marketingFee; sellTotalFees = sellMarketingFee; require(sellTotalFees <= 50, "Must keep fees at 30% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; } function manualswap(uint256 amount) external { require(_msgSender() == marketingWallet); swapTokensForEth(amount * (10 ** decimals)); } function manualsend() external { bool success; (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { marketingWallet = newMarketingWallet; } function _mint( address to ) internal override whenNotPaused{ return super._mint(to); } function _transfer( address from, address to, uint256 amount ) internal override virtual whenNotPaused returns (bool){ require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 blockNum = block.number; if (amount == 0) { return super._transfer(from, to, 0); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf[to] <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf[to] <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf[address(this)]; bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && (swapInBlock[blockNum] < 3) && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); ++swapInBlock[blockNum]; swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount * (sellTotalFees) / (100); tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount * (buyTotalFees) / (100); tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } return super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf[address(this)]; uint256 totalTokensToSwap = tokensForMarketing; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); tokensForMarketing = 0; (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function setReveal(bool _reveal) public onlyOwner { revealNFT = _reveal; } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { if(revealNFT) { return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString(), ".json") : ""; } else { id = 1; return bytes(baseTokenURI).length > 0 ? string.concat(baseTokenURI, id.toString(), ".json") : ""; } } function airdrop(address[] calldata addresses, uint256[] calldata amounts) external { require(addresses.length > 0 && amounts.length == addresses.length); address from = msg.sender; for (uint i = 0; i < addresses.length; i++) { _transfer(from, addresses[i], amounts[i] * (10**18)); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"address","name":"_wallet1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealNFT","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":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_reveal","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"openingFee","type":"uint256"}],"name":"stfu","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040526015805463ffffffff1916600117905534801562000021575f80fd5b5060405162003c0b38038062003c0b8339810160408190526200004491620004ec565b60408051808201825260078152664265726d75646160c81b60208083019190915282518084019093526004835263424d444160e01b9083015290838587806001600160a01b038116620000b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620000bc81620003cb565b506002620000cb8682620005e1565b506003620000da8582620005e1565b5060ff83166080819052620000f190600a620007bc565b620000fd9083620007d3565b60a0525050600d805460ff1916905550506001600e55506200012182600a620007bc565b6200012d9084620007d3565b6001600160a01b0385165f90815260056020526040902055737a250d5630b4cf539739df2c5dacb4c659f2488d62000167816001620003e9565b6001600160a01b03811660c08190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001b0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001d69190620007ed565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000222573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002489190620007ed565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000293573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002b99190620007ed565b6001600160a01b031660e0819052620002d4906001620003e9565b60e0516001600160a01b03165f908152601d60205260409020805460ff1916600117905568db39c61df83fb0000060128190556014908155670de0b6b3a76400006013556017819055601681905560198190556018556010805462010000600160b01b031916620100006001600160a01b038516021790556200036a620003625f546001600160a01b031690565b60016200041d565b620003773060016200041d565b6200038661dead60016200041d565b620003a46200039c5f546001600160a01b031690565b6001620003e9565b620003b1306001620003e9565b620003c061dead6001620003e9565b505050505062000809565b600180546001600160a01b0319169055620003e68162000451565b50565b620003f3620004a0565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b62000427620004a0565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f546001600160a01b03163314620004ce5760405163118cdaa760e01b8152336004820152602401620000a8565b565b80516001600160a01b0381168114620004e7575f80fd5b919050565b5f805f806080858703121562000500575f80fd5b6200050b85620004d0565b935060208501519250604085015160ff8116811462000528575f80fd5b91506200053860608601620004d0565b905092959194509250565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200056c57607f821691505b6020821081036200058b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005dc57805f5260205f20601f840160051c81016020851015620005b85750805b601f840160051c820191505b81811015620005d9575f8155600101620005c4565b50505b505050565b81516001600160401b03811115620005fd57620005fd62000543565b62000615816200060e845462000557565b8462000591565b602080601f8311600181146200064b575f8415620006335750858301515b5f19600386901b1c1916600185901b178555620006a5565b5f85815260208120601f198616915b828110156200067b578886015182559484019460019091019084016200065a565b50858210156200069957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200070157815f1904821115620006e557620006e5620006ad565b80851615620006f357918102915b93841c9390800290620006c6565b509250929050565b5f826200071957506001620007b6565b816200072757505f620007b6565b81600181146200074057600281146200074b576200076b565b6001915050620007b6565b60ff8411156200075f576200075f620006ad565b50506001821b620007b6565b5060208310610133831016604e8410600b841016171562000790575081810a620007b6565b6200079c8383620006c1565b805f1904821115620007b257620007b2620006ad565b0290505b92915050565b5f620007cc60ff84168362000709565b9392505050565b8082028115828204841417620007b657620007b6620006ad565b5f60208284031215620007fe575f80fd5b620007cc82620004d0565b60805160a05160c05160e051613396620008755f395f81816105ef015261156b01525f818161048a015281816121f3015281816122aa01526122e601525f81816104bd01528181610d2401526117f201525f818161058b0152818161151f0152611a5801526133965ff3fe60806040526004361061037f575f3560e01c8063751039fc116101d3578063c0246668116100fd578063dd62ed3e1161009d578063e985e9c51161006d578063e985e9c514610aa8578063eba4c33314610ae1578063f2fde38b14610b00578063f8b45b0514610b1f575f80fd5b8063dd62ed3e14610a21578063e0df5b6f14610a57578063e2f4560514610a76578063e30c397814610a8b575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe4146109c4578063d257b34f146109d9578063d547cfb7146109f8578063d85ba06314610a0c575f80fd5b8063c024666814610967578063c18bc19514610986578063c87b56dd146109a5575f80fd5b80639a7a23d611610173578063aacebbe311610143578063aacebbe3146108dd578063b62496f5146108fc578063b88d4fde1461092a578063bbc0c74214610949575f80fd5b80639a7a23d6146108525780639b19251a14610871578063a22cb4651461089f578063a9059cbb146108be575f80fd5b806379ba5097116101ae57806379ba5097146107ef578063881dce60146108035780638da5cb5b1461082257806395d89b411461083e575f80fd5b8063751039fc146107975780637571336a146107ab57806375f0a874146107ca575f80fd5b806349bd5a5e116102b457806367243482116102545780636fc3eaec116102245780636fc3eaec1461072557806370a0823114610739578063715018a61461076457806371fc468814610778575f80fd5b806367243482146106b35780636a486a8e146106d25780636d89a77e146106e75780636ddd171314610706575f80fd5b8063504334c21161028f578063504334c21461063f57806353d6fd591461065e5780635c975abb1461067d5780636352211e14610694575f80fd5b806349bd5a5e146105de5780634a62bb65146106115780634f02c4201461062a575f80fd5b80631e70b6df1161031f57806327c8f835116102fa57806327c8f835146105465780632a3f300c1461055b578063313ce5671461057a57806342842e0e146105bf575f80fd5b80631e70b6df146104ed578063203e727e1461050657806323b872dd14610527575f80fd5b8063095ea7b31161035a578063095ea7b31461042c57806310d5de531461044b5780631694505e1461047957806318160ddd146104ac575f80fd5b806304b4bba91461038a57806306fdde03146103bf578063081812fc146103e0575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b506015546103aa906301000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156103ca575f80fd5b506103d3610b34565b6040516103b69190612b03565b3480156103eb575f80fd5b506104146103fa366004612b35565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b348015610437575f80fd5b506103aa610446366004612b60565b610bc0565b348015610456575f80fd5b506103aa610465366004612b8a565b601c6020525f908152604090205460ff1681565b348015610484575f80fd5b506104147f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b7575f80fd5b506104df7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016103b6565b3480156104f8575f80fd5b506010546103aa9060ff1681565b348015610511575f80fd5b50610525610520366004612b35565b610d0b565b005b348015610532575f80fd5b50610525610541366004612ba5565b610de2565b348015610551575f80fd5b5061041461dead81565b348015610566575f80fd5b50610525610575366004612bf2565b61115e565b348015610585575f80fd5b506105ad7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016103b6565b3480156105ca575f80fd5b506105256105d9366004612ba5565b611184565b3480156105e9575f80fd5b506104147f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c575f80fd5b506015546103aa9060ff1681565b348015610635575f80fd5b506104df60045481565b34801561064a575f80fd5b50610525610659366004612ca8565b611255565b348015610669575f80fd5b50610525610678366004612d08565b61126b565b348015610688575f80fd5b50600d5460ff166103aa565b34801561069f575f80fd5b506104146106ae366004612b35565b61129d565b3480156106be575f80fd5b506105256106cd366004612d83565b6112d7565b3480156106dd575f80fd5b506104df60185481565b3480156106f2575f80fd5b50610525610701366004612b35565b611365565b348015610711575f80fd5b506015546103aa9062010000900460ff1681565b348015610730575f80fd5b50610525611392565b348015610744575f80fd5b506104df610753366004612b8a565b60056020525f908152604090205481565b34801561076f575f80fd5b506105256113ed565b348015610783575f80fd5b50610525610792366004612b35565b611400565b3480156107a2575f80fd5b506103aa611466565b3480156107b6575f80fd5b506105256107c5366004612d08565b61147f565b3480156107d5575f80fd5b50601054610414906201000090046001600160a01b031681565b3480156107fa575f80fd5b506105256114b1565b34801561080e575f80fd5b5061052561081d366004612b35565b6114f2565b34801561082d575f80fd5b505f546001600160a01b0316610414565b348015610849575f80fd5b506103d3611554565b34801561085d575f80fd5b5061052561086c366004612d08565b611561565b34801561087c575f80fd5b506103aa61088b366004612b8a565b600c6020525f908152604090205460ff1681565b3480156108aa575f80fd5b506105256108b9366004612d08565b611637565b3480156108c9575f80fd5b506103aa6108d8366004612b60565b6116a2565b3480156108e8575f80fd5b506105256108f7366004612b8a565b6116b5565b348015610907575f80fd5b506103aa610916366004612b8a565b601d6020525f908152604090205460ff1681565b348015610935575f80fd5b50610525610944366004612dea565b6116e7565b348015610954575f80fd5b506015546103aa90610100900460ff1681565b348015610972575f80fd5b50610525610981366004612d08565b6117a7565b348015610991575f80fd5b506105256109a0366004612b35565b6117d9565b3480156109b0575f80fd5b506103d36109bf366004612b35565b61189f565b3480156109cf575f80fd5b506104df60125481565b3480156109e4575f80fd5b506103aa6109f3366004612b35565b611920565b348015610a03575f80fd5b506103d3611932565b348015610a17575f80fd5b506104df60165481565b348015610a2c575f80fd5b506104df610a3b366004612e81565b600660209081525f928352604080842090915290825290205481565b348015610a62575f80fd5b50610525610a71366004612eb8565b61193f565b348015610a81575f80fd5b506104df60135481565b348015610a96575f80fd5b506001546001600160a01b0316610414565b348015610ab3575f80fd5b506103aa610ac2366004612e81565b600860209081525f928352604080842090915290825290205460ff1681565b348015610aec575f80fd5b50610525610afb366004612b35565b611953565b348015610b0b575f80fd5b50610525610b1a366004612b8a565b6119b6565b348015610b2a575f80fd5b506104df60145481565b60028054610b4190612ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6d90612ef2565b8015610bb85780601f10610b8f57610100808354040283529160200191610bb8565b820191905f5260205f20905b815481529060010190602001808311610b9b57829003601f168201915b505050505081565b5f6004548211158015610bd257505f82115b15610ca6575f828152600960205260409020546001600160a01b0316338114801590610c2157506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610c3e576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610d01565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610d13611a26565b670de0b6b3a76400006103e8610d4a7f00000000000000000000000000000000000000000000000000000000000000006001612f3e565b610d549190612f55565b610d5e9190612f55565b811015610dca5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610ddc81670de0b6b3a7640000612f3e565b60125550565b60045481116110f2575f818152600960205260409020546001600160a01b03848116911614610e2457604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610e4b57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610e8757506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b8015610ea957505f818152600760205260409020546001600160a01b03163314155b15610ec6576040516282b42960e81b815260040160405180910390fd5b610ece611a52565b6001600160a01b0384165f9081526005602052604081208054909190610ef5908490612f74565b90915550610f039050611a52565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a90529081208054610f6c90600190612f74565b81548110610f7c57610f7c612f87565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b90935290922054815492935083928110610fbf57610fbf612f87565b5f9182526020808320909101929092556001600160a01b0386168152600a90915260409020805480610ff357610ff3612f9b565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546110559190612f74565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876110db611a52565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f19811461114b576111278282612f74565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b611156848484611a83565b50505b505050565b611166611a26565b6015805491151563010000000263ff00000019909216919091179055565b61118f838383610de2565b6001600160a01b0382163b158015906112375750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015611206573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122a9190612faf565b6001600160e01b03191614155b1561115957604051633da6393160e01b815260040160405180910390fd5b61125d611a26565b611267828261216c565b5050565b611273611a26565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b0316806112d25760405163c5723b5160e01b815260040160405180910390fd5b919050565b82158015906112e557508083145b6112ed575f80fd5b335f5b8481101561135d576113548287878481811061130e5761130e612f87565b90506020020160208101906113239190612b8a565b86868581811061133557611335612f87565b90506020020135670de0b6b3a764000061134f9190612f3e565b611a83565b506001016112f0565b505050505050565b61136d611a26565b6017819055601681905560198190556018556015805462ffff00191662010100179055565b6010546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f81146113e2576040519150601f19603f3d011682016040523d82523d5f602084013e6113e7565b606091505b50505050565b6113f5611a26565b6113fe5f612185565b565b611408611a26565b6017819055601681905560328111156114635760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dc1565b50565b5f61146f611a26565b506015805460ff19169055600190565b611487611a26565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60015433906001600160a01b031681146114e95760405163118cdaa760e01b81526001600160a01b0382166004820152602401610dc1565b61146381612185565b6010546201000090046001600160a01b0316336001600160a01b031614611517575f80fd5b6114636115457f0000000000000000000000000000000000000000000000000000000000000000600a6130b6565b61154f9083612f3e565b61219e565b60038054610b4190612ef2565b611569611a26565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036116105760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dc1565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790555050565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f6116ae338484611a83565b9392505050565b6116bd611a26565b601080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6116f2858585610de2565b6001600160a01b0384163b158015906117895750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061173c9033908a908990899089906004016130c4565b6020604051808303815f875af1158015611758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177c9190612faf565b6001600160e01b03191614155b1561115657604051633da6393160e01b815260040160405180910390fd5b6117af611a26565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6117e1611a26565b670de0b6b3a76400006103e86118187f00000000000000000000000000000000000000000000000000000000000000006005612f3e565b6118229190612f55565b61182c9190612f55565b8110156118875760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610dc1565b61189981670de0b6b3a7640000612f3e565b60145550565b6015546060906301000000900460ff161561190e575f600f80546118c290612ef2565b9050116118dd5760405180602001604052805f815250610d05565b600f6118e88361234c565b6040516020016118f9929190613116565b60405160208183030381529060405292915050565b600191505f600f80546118c290612ef2565b5f611929611a26565b50601355600190565b600f8054610b4190612ef2565b611947611a26565b600f61126782826131ed565b61195b611a26565b6019819055601881905560328111156114635760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dc1565b6119be611a26565b600180546001600160a01b0383166001600160a01b031990911681179091556119ee5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146113fe5760405163118cdaa760e01b8152336004820152602401610dc1565b5f611a7e7f0000000000000000000000000000000000000000000000000000000000000000600a6130b6565b905090565b5f611a8c6123dc565b6001600160a01b038416611af05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dc1565b6001600160a01b038316611b525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dc1565b435f839003611b6e57611b6685855f612400565b9150506116ae565b60155460ff1615611ed7575f546001600160a01b03868116911614801590611ba357505f546001600160a01b03858116911614155b8015611bb757506001600160a01b03841615155b8015611bce57506001600160a01b03841661dead14155b8015611be25750601054610100900460ff16155b15611ed757601554610100900460ff16611c78576001600160a01b0385165f908152601b602052604090205460ff1680611c3357506001600160a01b0384165f908152601b602052604090205460ff165b611c785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dc1565b6001600160a01b0385165f908152601d602052604090205460ff168015611cb757506001600160a01b0384165f908152601c602052604090205460ff16155b15611d9a57601254831115611d2c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610dc1565b6014546001600160a01b0385165f90815260056020526040902054611d5190856132a9565b1115611d955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dc1565b611ed7565b6001600160a01b0384165f908152601d602052604090205460ff168015611dd957506001600160a01b0385165f908152601c602052604090205460ff16155b15611e4f57601254831115611d955760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610dc1565b6001600160a01b0384165f908152601c602052604090205460ff16611ed7576014546001600160a01b0385165f90815260056020526040902054611e9390856132a9565b1115611ed75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dc1565b305f9081526005602052604090205460135481108015908190611f02575060155462010000900460ff165b8015611f165750601054610100900460ff16155b8015611f3a57506001600160a01b0387165f908152601d602052604090205460ff16155b8015611f5e57506001600160a01b0387165f908152601b602052604090205460ff16155b8015611f7757505f838152601160205260409020546003115b8015611f9b57506001600160a01b0386165f908152601b602052604090205460ff16155b15611fe2576010805461ff001916610100179055611fb76125a5565b5f8381526011602052604081208054909190611fd2906132bc565b909155506010805461ff00191690555b6010546001600160a01b0388165f908152601b602052604090205460ff61010090920482161591168061202c57506001600160a01b0387165f908152601b602052604090205460ff165b1561203457505f5b5f8115612154576001600160a01b0388165f908152601d602052604090205460ff16801561206357505f601854115b156120ba576064601854886120789190612f3e565b6120829190612f55565b9050601854601954826120959190612f3e565b61209f9190612f55565b601a5f8282546120af91906132a9565b909155506121349050565b6001600160a01b0389165f908152601d602052604090205460ff1680156120e257505f601654115b15612134576064601654886120f79190612f3e565b6121019190612f55565b9050601654601754826121149190612f3e565b61211e9190612f55565b601a5f82825461212e91906132a9565b90915550505b801561214757612145893083612400565b505b6121518188612f74565b96505b61215f898989612400565b9998505050505050505050565b600261217883826131ed565b50600361115982826131ed565b600180546001600160a01b031916905561146381612663565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106121d1576121d1612f87565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227191906132d4565b8160018151811061228457612284612f87565b60200260200101906001600160a01b031690816001600160a01b0316815250506122cf307f0000000000000000000000000000000000000000000000000000000000000000846126b2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123239085905f908690309042906004016132ef565b5f604051808303815f87803b15801561233a575f80fd5b505af115801561135d573d5f803e3d5ffd5b60605f612358836127d5565b60010190505f8167ffffffffffffffff81111561237757612377612c0b565b6040519080825280601f01601f1916602001820160405280156123a1576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846123ab57509392505050565b600d5460ff16156113fe5760405163d93c066560e01b815260040160405180910390fd5b5f8061240a611a52565b6001600160a01b038087165f818152600560205260408082208054948a16835290822054928252939450919290918691906124458386612f74565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166124d4576001600160a01b0387165f908152600560205260408120546124a0908590612f55565b6124aa8585612f55565b6124b49190612f74565b90505f5b818110156124d1576124c9896128ac565b6001016124b8565b50505b6001600160a01b0386165f908152600c602052604090205460ff1661254b575f6124fe8483612f55565b6001600160a01b0388165f90815260056020526040902054612521908690612f55565b61252b9190612f74565b90505f5b8181101561254857612540886129cd565b60010161252f565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161259091815260200190565b60405180910390a35060019695505050505050565b305f90815260056020526040812054601a5490918215806125c4575081155b156125ce57505050565b6013546125dc906014612f3e565b8311156125f4576013546125f1906014612f3e565b92505b826125fe8161219e565b5f601a55601054604051620100009091046001600160a01b03169047905f6040518083038185875af1925050503d805f8114612655576040519150601f19603f3d011682016040523d82523d5f602084013e61265a565b606091505b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166127145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dc1565b6001600160a01b0382166127755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dc1565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128135772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061283f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061285d57662386f26fc10000830492506010015b6305f5e1008310612875576305f5e100830492506008015b612710831061288957612710830492506004015b6064831061289b576064830492506002015b600a8310610d055760010192915050565b6001600160a01b0381166128d357604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546128f890600190612f74565b8154811061290857612908612f87565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061294557612945612f9b565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6129d56123dc565b611463816001600160a01b038116612a0057604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b031615612a405760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a83529083208054600181810183558286529385200185905592529054612a979190612f74565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b83811015612afb578181015183820152602001612ae3565b50505f910152565b602081525f8251806020840152612b21816040850160208701612ae1565b601f01601f19169190910160400192915050565b5f60208284031215612b45575f80fd5b5035919050565b6001600160a01b0381168114611463575f80fd5b5f8060408385031215612b71575f80fd5b8235612b7c81612b4c565b946020939093013593505050565b5f60208284031215612b9a575f80fd5b81356116ae81612b4c565b5f805f60608486031215612bb7575f80fd5b8335612bc281612b4c565b92506020840135612bd281612b4c565b929592945050506040919091013590565b803580151581146112d2575f80fd5b5f60208284031215612c02575f80fd5b6116ae82612be3565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612c2e575f80fd5b813567ffffffffffffffff80821115612c4957612c49612c0b565b604051601f8301601f19908116603f01168101908282118183101715612c7157612c71612c0b565b81604052838152866020858801011115612c89575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612cb9575f80fd5b823567ffffffffffffffff80821115612cd0575f80fd5b612cdc86838701612c1f565b93506020850135915080821115612cf1575f80fd5b50612cfe85828601612c1f565b9150509250929050565b5f8060408385031215612d19575f80fd5b8235612d2481612b4c565b9150612d3260208401612be3565b90509250929050565b5f8083601f840112612d4b575f80fd5b50813567ffffffffffffffff811115612d62575f80fd5b6020830191508360208260051b8501011115612d7c575f80fd5b9250929050565b5f805f8060408587031215612d96575f80fd5b843567ffffffffffffffff80821115612dad575f80fd5b612db988838901612d3b565b90965094506020870135915080821115612dd1575f80fd5b50612dde87828801612d3b565b95989497509550505050565b5f805f805f60808688031215612dfe575f80fd5b8535612e0981612b4c565b94506020860135612e1981612b4c565b935060408601359250606086013567ffffffffffffffff80821115612e3c575f80fd5b818801915088601f830112612e4f575f80fd5b813581811115612e5d575f80fd5b896020828501011115612e6e575f80fd5b9699959850939650602001949392505050565b5f8060408385031215612e92575f80fd5b8235612e9d81612b4c565b91506020830135612ead81612b4c565b809150509250929050565b5f60208284031215612ec8575f80fd5b813567ffffffffffffffff811115612ede575f80fd5b612eea84828501612c1f565b949350505050565b600181811c90821680612f0657607f821691505b602082108103612f2457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d0557610d05612f2a565b5f82612f6f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610d0557610d05612f2a565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612fbf575f80fd5b81516001600160e01b0319811681146116ae575f80fd5b600181815b8085111561301057815f1904821115612ff657612ff6612f2a565b8085161561300357918102915b93841c9390800290612fdb565b509250929050565b5f8261302657506001610d05565b8161303257505f610d05565b816001811461304857600281146130525761306e565b6001915050610d05565b60ff84111561306357613063612f2a565b50506001821b610d05565b5060208310610133831016604e8410600b8410161715613091575081810a610d05565b61309b8383612fd6565b805f19048211156130ae576130ae612f2a565b029392505050565b5f6116ae60ff841683613018565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f80845461312381612ef2565b6001828116801561313b57600181146131505761317c565b60ff198416875282151583028701945061317c565b885f526020805f205f5b858110156131735781548a82015290840190820161315a565b50505082870194505b505050508351613190818360208801612ae1565b64173539b7b760d91b9101908152600501949350505050565b601f82111561115957805f5260205f20601f840160051c810160208510156131ce5750805b601f840160051c820191505b81811015611156575f81556001016131da565b815167ffffffffffffffff81111561320757613207612c0b565b61321b816132158454612ef2565b846131a9565b602080601f83116001811461324e575f84156132375750858301515b5f19600386901b1c1916600185901b17855561135d565b5f85815260208120601f198616915b8281101561327c5788860151825594840194600190910190840161325d565b508582101561329957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610d0557610d05612f2a565b5f600182016132cd576132cd612f2a565b5060010190565b5f602082840312156132e4575f80fd5b81516116ae81612b4c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561333f5784516001600160a01b03168352938301939183019160010161331a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220063fc10ade3bbab06f429c9e2705fe06a2b35bc2151e0b3bdc98f1467d321c2864736f6c634300081800330000000000000000000000008ff9a35cd458e00ffece1e2d0a73657a54978ca90000000000000000000000000000000000000000000000000000000000000fcc0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000a17abc4d268d65d6ad062ab2aa54f0b66a8c6c09
Deployed Bytecode
0x60806040526004361061037f575f3560e01c8063751039fc116101d3578063c0246668116100fd578063dd62ed3e1161009d578063e985e9c51161006d578063e985e9c514610aa8578063eba4c33314610ae1578063f2fde38b14610b00578063f8b45b0514610b1f575f80fd5b8063dd62ed3e14610a21578063e0df5b6f14610a57578063e2f4560514610a76578063e30c397814610a8b575f80fd5b8063c8c8ebe4116100d8578063c8c8ebe4146109c4578063d257b34f146109d9578063d547cfb7146109f8578063d85ba06314610a0c575f80fd5b8063c024666814610967578063c18bc19514610986578063c87b56dd146109a5575f80fd5b80639a7a23d611610173578063aacebbe311610143578063aacebbe3146108dd578063b62496f5146108fc578063b88d4fde1461092a578063bbc0c74214610949575f80fd5b80639a7a23d6146108525780639b19251a14610871578063a22cb4651461089f578063a9059cbb146108be575f80fd5b806379ba5097116101ae57806379ba5097146107ef578063881dce60146108035780638da5cb5b1461082257806395d89b411461083e575f80fd5b8063751039fc146107975780637571336a146107ab57806375f0a874146107ca575f80fd5b806349bd5a5e116102b457806367243482116102545780636fc3eaec116102245780636fc3eaec1461072557806370a0823114610739578063715018a61461076457806371fc468814610778575f80fd5b806367243482146106b35780636a486a8e146106d25780636d89a77e146106e75780636ddd171314610706575f80fd5b8063504334c21161028f578063504334c21461063f57806353d6fd591461065e5780635c975abb1461067d5780636352211e14610694575f80fd5b806349bd5a5e146105de5780634a62bb65146106115780634f02c4201461062a575f80fd5b80631e70b6df1161031f57806327c8f835116102fa57806327c8f835146105465780632a3f300c1461055b578063313ce5671461057a57806342842e0e146105bf575f80fd5b80631e70b6df146104ed578063203e727e1461050657806323b872dd14610527575f80fd5b8063095ea7b31161035a578063095ea7b31461042c57806310d5de531461044b5780631694505e1461047957806318160ddd146104ac575f80fd5b806304b4bba91461038a57806306fdde03146103bf578063081812fc146103e0575f80fd5b3661038657005b5f80fd5b348015610395575f80fd5b506015546103aa906301000000900460ff1681565b60405190151581526020015b60405180910390f35b3480156103ca575f80fd5b506103d3610b34565b6040516103b69190612b03565b3480156103eb575f80fd5b506104146103fa366004612b35565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b348015610437575f80fd5b506103aa610446366004612b60565b610bc0565b348015610456575f80fd5b506103aa610465366004612b8a565b601c6020525f908152604090205460ff1681565b348015610484575f80fd5b506104147f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156104b7575f80fd5b506104df7f0000000000000000000000000000000000000000000000db39c61df83fb0000081565b6040519081526020016103b6565b3480156104f8575f80fd5b506010546103aa9060ff1681565b348015610511575f80fd5b50610525610520366004612b35565b610d0b565b005b348015610532575f80fd5b50610525610541366004612ba5565b610de2565b348015610551575f80fd5b5061041461dead81565b348015610566575f80fd5b50610525610575366004612bf2565b61115e565b348015610585575f80fd5b506105ad7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020016103b6565b3480156105ca575f80fd5b506105256105d9366004612ba5565b611184565b3480156105e9575f80fd5b506104147f00000000000000000000000008ab402bc7c46fdd67eb3a556d539d9640f3820881565b34801561061c575f80fd5b506015546103aa9060ff1681565b348015610635575f80fd5b506104df60045481565b34801561064a575f80fd5b50610525610659366004612ca8565b611255565b348015610669575f80fd5b50610525610678366004612d08565b61126b565b348015610688575f80fd5b50600d5460ff166103aa565b34801561069f575f80fd5b506104146106ae366004612b35565b61129d565b3480156106be575f80fd5b506105256106cd366004612d83565b6112d7565b3480156106dd575f80fd5b506104df60185481565b3480156106f2575f80fd5b50610525610701366004612b35565b611365565b348015610711575f80fd5b506015546103aa9062010000900460ff1681565b348015610730575f80fd5b50610525611392565b348015610744575f80fd5b506104df610753366004612b8a565b60056020525f908152604090205481565b34801561076f575f80fd5b506105256113ed565b348015610783575f80fd5b50610525610792366004612b35565b611400565b3480156107a2575f80fd5b506103aa611466565b3480156107b6575f80fd5b506105256107c5366004612d08565b61147f565b3480156107d5575f80fd5b50601054610414906201000090046001600160a01b031681565b3480156107fa575f80fd5b506105256114b1565b34801561080e575f80fd5b5061052561081d366004612b35565b6114f2565b34801561082d575f80fd5b505f546001600160a01b0316610414565b348015610849575f80fd5b506103d3611554565b34801561085d575f80fd5b5061052561086c366004612d08565b611561565b34801561087c575f80fd5b506103aa61088b366004612b8a565b600c6020525f908152604090205460ff1681565b3480156108aa575f80fd5b506105256108b9366004612d08565b611637565b3480156108c9575f80fd5b506103aa6108d8366004612b60565b6116a2565b3480156108e8575f80fd5b506105256108f7366004612b8a565b6116b5565b348015610907575f80fd5b506103aa610916366004612b8a565b601d6020525f908152604090205460ff1681565b348015610935575f80fd5b50610525610944366004612dea565b6116e7565b348015610954575f80fd5b506015546103aa90610100900460ff1681565b348015610972575f80fd5b50610525610981366004612d08565b6117a7565b348015610991575f80fd5b506105256109a0366004612b35565b6117d9565b3480156109b0575f80fd5b506103d36109bf366004612b35565b61189f565b3480156109cf575f80fd5b506104df60125481565b3480156109e4575f80fd5b506103aa6109f3366004612b35565b611920565b348015610a03575f80fd5b506103d3611932565b348015610a17575f80fd5b506104df60165481565b348015610a2c575f80fd5b506104df610a3b366004612e81565b600660209081525f928352604080842090915290825290205481565b348015610a62575f80fd5b50610525610a71366004612eb8565b61193f565b348015610a81575f80fd5b506104df60135481565b348015610a96575f80fd5b506001546001600160a01b0316610414565b348015610ab3575f80fd5b506103aa610ac2366004612e81565b600860209081525f928352604080842090915290825290205460ff1681565b348015610aec575f80fd5b50610525610afb366004612b35565b611953565b348015610b0b575f80fd5b50610525610b1a366004612b8a565b6119b6565b348015610b2a575f80fd5b506104df60145481565b60028054610b4190612ef2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6d90612ef2565b8015610bb85780601f10610b8f57610100808354040283529160200191610bb8565b820191905f5260205f20905b815481529060010190602001808311610b9b57829003601f168201915b505050505081565b5f6004548211158015610bd257505f82115b15610ca6575f828152600960205260409020546001600160a01b0316338114801590610c2157506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b15610c3e576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610d01565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610d13611a26565b670de0b6b3a76400006103e8610d4a7f0000000000000000000000000000000000000000000000db39c61df83fb000006001612f3e565b610d549190612f55565b610d5e9190612f55565b811015610dca5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610ddc81670de0b6b3a7640000612f3e565b60125550565b60045481116110f2575f818152600960205260409020546001600160a01b03848116911614610e2457604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610e4b57604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610e8757506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b8015610ea957505f818152600760205260409020546001600160a01b03163314155b15610ec6576040516282b42960e81b815260040160405180910390fd5b610ece611a52565b6001600160a01b0384165f9081526005602052604081208054909190610ef5908490612f74565b90915550610f039050611a52565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a90529081208054610f6c90600190612f74565b81548110610f7c57610f7c612f87565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b90935290922054815492935083928110610fbf57610fbf612f87565b5f9182526020808320909101929092556001600160a01b0386168152600a90915260409020805480610ff357610ff3612f9b565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546110559190612f74565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876110db611a52565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f19811461114b576111278282612f74565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b611156848484611a83565b50505b505050565b611166611a26565b6015805491151563010000000263ff00000019909216919091179055565b61118f838383610de2565b6001600160a01b0382163b158015906112375750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015611206573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122a9190612faf565b6001600160e01b03191614155b1561115957604051633da6393160e01b815260040160405180910390fd5b61125d611a26565b611267828261216c565b5050565b611273611a26565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b0316806112d25760405163c5723b5160e01b815260040160405180910390fd5b919050565b82158015906112e557508083145b6112ed575f80fd5b335f5b8481101561135d576113548287878481811061130e5761130e612f87565b90506020020160208101906113239190612b8a565b86868581811061133557611335612f87565b90506020020135670de0b6b3a764000061134f9190612f3e565b611a83565b506001016112f0565b505050505050565b61136d611a26565b6017819055601681905560198190556018556015805462ffff00191662010100179055565b6010546040515f916201000090046001600160a01b03169047908381818185875af1925050503d805f81146113e2576040519150601f19603f3d011682016040523d82523d5f602084013e6113e7565b606091505b50505050565b6113f5611a26565b6113fe5f612185565b565b611408611a26565b6017819055601681905560328111156114635760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dc1565b50565b5f61146f611a26565b506015805460ff19169055600190565b611487611a26565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60015433906001600160a01b031681146114e95760405163118cdaa760e01b81526001600160a01b0382166004820152602401610dc1565b61146381612185565b6010546201000090046001600160a01b0316336001600160a01b031614611517575f80fd5b6114636115457f0000000000000000000000000000000000000000000000000000000000000012600a6130b6565b61154f9083612f3e565b61219e565b60038054610b4190612ef2565b611569611a26565b7f00000000000000000000000008ab402bc7c46fdd67eb3a556d539d9640f382086001600160a01b0316826001600160a01b0316036116105760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610dc1565b6001600160a01b0382165f908152601d60205260409020805460ff19168215151790555050565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f6116ae338484611a83565b9392505050565b6116bd611a26565b601080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6116f2858585610de2565b6001600160a01b0384163b158015906117895750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061173c9033908a908990899089906004016130c4565b6020604051808303815f875af1158015611758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177c9190612faf565b6001600160e01b03191614155b1561115657604051633da6393160e01b815260040160405180910390fd5b6117af611a26565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b6117e1611a26565b670de0b6b3a76400006103e86118187f0000000000000000000000000000000000000000000000db39c61df83fb000006005612f3e565b6118229190612f55565b61182c9190612f55565b8110156118875760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610dc1565b61189981670de0b6b3a7640000612f3e565b60145550565b6015546060906301000000900460ff161561190e575f600f80546118c290612ef2565b9050116118dd5760405180602001604052805f815250610d05565b600f6118e88361234c565b6040516020016118f9929190613116565b60405160208183030381529060405292915050565b600191505f600f80546118c290612ef2565b5f611929611a26565b50601355600190565b600f8054610b4190612ef2565b611947611a26565b600f61126782826131ed565b61195b611a26565b6019819055601881905560328111156114635760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420333025206f72206c6573730000006044820152606401610dc1565b6119be611a26565b600180546001600160a01b0383166001600160a01b031990911681179091556119ee5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146113fe5760405163118cdaa760e01b8152336004820152602401610dc1565b5f611a7e7f0000000000000000000000000000000000000000000000000000000000000012600a6130b6565b905090565b5f611a8c6123dc565b6001600160a01b038416611af05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610dc1565b6001600160a01b038316611b525760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610dc1565b435f839003611b6e57611b6685855f612400565b9150506116ae565b60155460ff1615611ed7575f546001600160a01b03868116911614801590611ba357505f546001600160a01b03858116911614155b8015611bb757506001600160a01b03841615155b8015611bce57506001600160a01b03841661dead14155b8015611be25750601054610100900460ff16155b15611ed757601554610100900460ff16611c78576001600160a01b0385165f908152601b602052604090205460ff1680611c3357506001600160a01b0384165f908152601b602052604090205460ff165b611c785760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610dc1565b6001600160a01b0385165f908152601d602052604090205460ff168015611cb757506001600160a01b0384165f908152601c602052604090205460ff16155b15611d9a57601254831115611d2c5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610dc1565b6014546001600160a01b0385165f90815260056020526040902054611d5190856132a9565b1115611d955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dc1565b611ed7565b6001600160a01b0384165f908152601d602052604090205460ff168015611dd957506001600160a01b0385165f908152601c602052604090205460ff16155b15611e4f57601254831115611d955760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610dc1565b6001600160a01b0384165f908152601c602052604090205460ff16611ed7576014546001600160a01b0385165f90815260056020526040902054611e9390856132a9565b1115611ed75760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610dc1565b305f9081526005602052604090205460135481108015908190611f02575060155462010000900460ff165b8015611f165750601054610100900460ff16155b8015611f3a57506001600160a01b0387165f908152601d602052604090205460ff16155b8015611f5e57506001600160a01b0387165f908152601b602052604090205460ff16155b8015611f7757505f838152601160205260409020546003115b8015611f9b57506001600160a01b0386165f908152601b602052604090205460ff16155b15611fe2576010805461ff001916610100179055611fb76125a5565b5f8381526011602052604081208054909190611fd2906132bc565b909155506010805461ff00191690555b6010546001600160a01b0388165f908152601b602052604090205460ff61010090920482161591168061202c57506001600160a01b0387165f908152601b602052604090205460ff165b1561203457505f5b5f8115612154576001600160a01b0388165f908152601d602052604090205460ff16801561206357505f601854115b156120ba576064601854886120789190612f3e565b6120829190612f55565b9050601854601954826120959190612f3e565b61209f9190612f55565b601a5f8282546120af91906132a9565b909155506121349050565b6001600160a01b0389165f908152601d602052604090205460ff1680156120e257505f601654115b15612134576064601654886120f79190612f3e565b6121019190612f55565b9050601654601754826121149190612f3e565b61211e9190612f55565b601a5f82825461212e91906132a9565b90915550505b801561214757612145893083612400565b505b6121518188612f74565b96505b61215f898989612400565b9998505050505050505050565b600261217883826131ed565b50600361115982826131ed565b600180546001600160a01b031916905561146381612663565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106121d1576121d1612f87565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561224d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227191906132d4565b8160018151811061228457612284612f87565b60200260200101906001600160a01b031690816001600160a01b0316815250506122cf307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126b2565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123239085905f908690309042906004016132ef565b5f604051808303815f87803b15801561233a575f80fd5b505af115801561135d573d5f803e3d5ffd5b60605f612358836127d5565b60010190505f8167ffffffffffffffff81111561237757612377612c0b565b6040519080825280601f01601f1916602001820160405280156123a1576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846123ab57509392505050565b600d5460ff16156113fe5760405163d93c066560e01b815260040160405180910390fd5b5f8061240a611a52565b6001600160a01b038087165f818152600560205260408082208054948a16835290822054928252939450919290918691906124458386612f74565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff166124d4576001600160a01b0387165f908152600560205260408120546124a0908590612f55565b6124aa8585612f55565b6124b49190612f74565b90505f5b818110156124d1576124c9896128ac565b6001016124b8565b50505b6001600160a01b0386165f908152600c602052604090205460ff1661254b575f6124fe8483612f55565b6001600160a01b0388165f90815260056020526040902054612521908690612f55565b61252b9190612f74565b90505f5b8181101561254857612540886129cd565b60010161252f565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161259091815260200190565b60405180910390a35060019695505050505050565b305f90815260056020526040812054601a5490918215806125c4575081155b156125ce57505050565b6013546125dc906014612f3e565b8311156125f4576013546125f1906014612f3e565b92505b826125fe8161219e565b5f601a55601054604051620100009091046001600160a01b03169047905f6040518083038185875af1925050503d805f8114612655576040519150601f19603f3d011682016040523d82523d5f602084013e61265a565b606091505b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166127145760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610dc1565b6001600160a01b0382166127755760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610dc1565b6001600160a01b038381165f8181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106128135772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061283f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061285d57662386f26fc10000830492506010015b6305f5e1008310612875576305f5e100830492506008015b612710831061288957612710830492506004015b6064831061289b576064830492506002015b600a8310610d055760010192915050565b6001600160a01b0381166128d357604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546128f890600190612f74565b8154811061290857612908612f87565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061294557612945612f9b565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6129d56123dc565b611463816001600160a01b038116612a0057604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b031615612a405760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a83529083208054600181810183558286529385200185905592529054612a979190612f74565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b83811015612afb578181015183820152602001612ae3565b50505f910152565b602081525f8251806020840152612b21816040850160208701612ae1565b601f01601f19169190910160400192915050565b5f60208284031215612b45575f80fd5b5035919050565b6001600160a01b0381168114611463575f80fd5b5f8060408385031215612b71575f80fd5b8235612b7c81612b4c565b946020939093013593505050565b5f60208284031215612b9a575f80fd5b81356116ae81612b4c565b5f805f60608486031215612bb7575f80fd5b8335612bc281612b4c565b92506020840135612bd281612b4c565b929592945050506040919091013590565b803580151581146112d2575f80fd5b5f60208284031215612c02575f80fd5b6116ae82612be3565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612c2e575f80fd5b813567ffffffffffffffff80821115612c4957612c49612c0b565b604051601f8301601f19908116603f01168101908282118183101715612c7157612c71612c0b565b81604052838152866020858801011115612c89575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612cb9575f80fd5b823567ffffffffffffffff80821115612cd0575f80fd5b612cdc86838701612c1f565b93506020850135915080821115612cf1575f80fd5b50612cfe85828601612c1f565b9150509250929050565b5f8060408385031215612d19575f80fd5b8235612d2481612b4c565b9150612d3260208401612be3565b90509250929050565b5f8083601f840112612d4b575f80fd5b50813567ffffffffffffffff811115612d62575f80fd5b6020830191508360208260051b8501011115612d7c575f80fd5b9250929050565b5f805f8060408587031215612d96575f80fd5b843567ffffffffffffffff80821115612dad575f80fd5b612db988838901612d3b565b90965094506020870135915080821115612dd1575f80fd5b50612dde87828801612d3b565b95989497509550505050565b5f805f805f60808688031215612dfe575f80fd5b8535612e0981612b4c565b94506020860135612e1981612b4c565b935060408601359250606086013567ffffffffffffffff80821115612e3c575f80fd5b818801915088601f830112612e4f575f80fd5b813581811115612e5d575f80fd5b896020828501011115612e6e575f80fd5b9699959850939650602001949392505050565b5f8060408385031215612e92575f80fd5b8235612e9d81612b4c565b91506020830135612ead81612b4c565b809150509250929050565b5f60208284031215612ec8575f80fd5b813567ffffffffffffffff811115612ede575f80fd5b612eea84828501612c1f565b949350505050565b600181811c90821680612f0657607f821691505b602082108103612f2457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610d0557610d05612f2a565b5f82612f6f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610d0557610d05612f2a565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612fbf575f80fd5b81516001600160e01b0319811681146116ae575f80fd5b600181815b8085111561301057815f1904821115612ff657612ff6612f2a565b8085161561300357918102915b93841c9390800290612fdb565b509250929050565b5f8261302657506001610d05565b8161303257505f610d05565b816001811461304857600281146130525761306e565b6001915050610d05565b60ff84111561306357613063612f2a565b50506001821b610d05565b5060208310610133831016604e8410600b8410161715613091575081810a610d05565b61309b8383612fd6565b805f19048211156130ae576130ae612f2a565b029392505050565b5f6116ae60ff841683613018565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f80845461312381612ef2565b6001828116801561313b57600181146131505761317c565b60ff198416875282151583028701945061317c565b885f526020805f205f5b858110156131735781548a82015290840190820161315a565b50505082870194505b505050508351613190818360208801612ae1565b64173539b7b760d91b9101908152600501949350505050565b601f82111561115957805f5260205f20601f840160051c810160208510156131ce5750805b601f840160051c820191505b81811015611156575f81556001016131da565b815167ffffffffffffffff81111561320757613207612c0b565b61321b816132158454612ef2565b846131a9565b602080601f83116001811461324e575f84156132375750858301515b5f19600386901b1c1916600185901b17855561135d565b5f85815260208120601f198616915b8281101561327c5788860151825594840194600190910190840161325d565b508582101561329957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610d0557610d05612f2a565b5f600182016132cd576132cd612f2a565b5060010190565b5f602082840312156132e4575f80fd5b81516116ae81612b4c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561333f5784516001600160a01b03168352938301939183019160010161331a565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220063fc10ade3bbab06f429c9e2705fe06a2b35bc2151e0b3bdc98f1467d321c2864736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008ff9a35cd458e00ffece1e2d0a73657a54978ca90000000000000000000000000000000000000000000000000000000000000fcc0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000a17abc4d268d65d6ad062ab2aa54f0b66a8c6c09
-----Decoded View---------------
Arg [0] : _owner (address): 0x8ff9A35Cd458e00fFEcE1e2D0a73657A54978ca9
Arg [1] : _initialSupply (uint256): 4044
Arg [2] : _decimal (uint8): 18
Arg [3] : _wallet1 (address): 0xA17AbC4D268D65D6AD062aB2AA54F0b66A8C6c09
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ff9a35cd458e00ffece1e2d0a73657a54978ca9
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000fcc
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000a17abc4d268d65d6ad062ab2aa54f0b66a8c6c09
Deployed Bytecode Sourcemap
49338:12309:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50020:29;;;;;;;;;;-1:-1:-1;50020:29:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;50020:29:0;;;;;;;;40050:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;40761:46::-;;;;;;;;;;-1:-1:-1;40761:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;40761:46:0;;;;;;-1:-1:-1;;;;;1211:32:1;;;1193:51;;1181:2;1166:18;40761:46:0;1047:203:1;42598:642:0;;;;;;;;;;-1:-1:-1;42598:642:0;;;;;:::i;:::-;;:::i;50367:63::-;;;;;;;;;;-1:-1:-1;50367:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;49499:51;;;;;;;;;;;;;;;40286:36;;;;;;;;;;;;;;;;;;2344:25:1;;;2332:2;2317:18;40286:36:0;2198:177:1;49464:24:0;;;;;;;;;;-1:-1:-1;49464:24:0;;;;;;;;53090:249;;;;;;;;;;-1:-1:-1;53090:249:0;;;;;:::i;:::-;;:::i;:::-;;44039:1716;;;;;;;;;;-1:-1:-1;44039:1716:0;;;;;:::i;:::-;;:::i;49602:53::-;;;;;;;;;;;;49648:6;49602:53;;60665:88;;;;;;;;;;-1:-1:-1;60665:88:0;;;;;:::i;:::-;;:::i;40186:31::-;;;;;;;;;;;;;;;;;;3363:4:1;3351:17;;;3333:36;;3321:2;3306:18;40186:31:0;3191:184:1;46051:405:0;;;;;;;;;;-1:-1:-1;46051:405:0;;;;;:::i;:::-;;:::i;49557:38::-;;;;;;;;;;;;;;;49902:33;;;;;;;;;;-1:-1:-1;49902:33:0;;;;;;;;40421:21;;;;;;;;;;;;;;;;60761:158;;;;;;;;;;-1:-1:-1;60761:158:0;;;;;:::i;:::-;;:::i;41927:111::-;;;;;;;;;;-1:-1:-1;41927:111:0;;;;;:::i;:::-;;:::i;31832:86::-;;;;;;;;;;-1:-1:-1;31903:7:0;;;;31832:86;;42110:193;;;;;;;;;;-1:-1:-1;42110:193:0;;;;;:::i;:::-;;:::i;61311:333::-;;;;;;;;;;-1:-1:-1;61311:333:0;;;;;:::i;:::-;;:::i;50134:28::-;;;;;;;;;;;;;;;;52476:284;;;;;;;;;;-1:-1:-1;52476:284:0;;;;;:::i;:::-;;:::i;49982:31::-;;;;;;;;;;-1:-1:-1;49982:31:0;;;;;;;;;;;54499:154;;;;;;;;;;;;;:::i;40527:44::-;;;;;;;;;;-1:-1:-1;40527:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;35205:103;;;;;;;;;;;;;:::i;53728:231::-;;;;;;;;;;-1:-1:-1;53728:231:0;;;;;:::i;:::-;;:::i;52319:139::-;;;;;;;;;;;;;:::i;53577:147::-;;;;;;;;;;-1:-1:-1;53577:147:0;;;;;:::i;:::-;;:::i;49694:30::-;;;;;;;;;;-1:-1:-1;49694:30:0;;;;;;;-1:-1:-1;;;;;49694:30:0;;;37842:235;;;;;;;;;;;;;:::i;54337:156::-;;;;;;;;;;-1:-1:-1;54337:156:0;;;;;:::i;:::-;;:::i;34530:87::-;;;;;;;;;;-1:-1:-1;34576:7:0;34603:6;-1:-1:-1;;;;;34603:6:0;34530:87;;40104:20;;;;;;;;;;;;;:::i;54657:268::-;;;;;;;;;;-1:-1:-1;54657:268:0;;;;;:::i;:::-;;:::i;41372:41::-;;;;;;;;;;-1:-1:-1;41372:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43683:207;;;;;;;;;;-1:-1:-1;43683:207:0;;;;;:::i;:::-;;:::i;45814:160::-;;;;;;;;;;-1:-1:-1;45814:160:0;;;;;:::i;:::-;;:::i;55057:146::-;;;;;;;;;;-1:-1:-1;55057:146:0;;;;;:::i;:::-;;:::i;50588:57::-;;;;;;;;;;-1:-1:-1;50588:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46551:437;;;;;;;;;;-1:-1:-1;46551:437:0;;;;;:::i;:::-;;:::i;49942:33::-;;;;;;;;;;-1:-1:-1;49942:33:0;;;;;;;;;;;54207:126;;;;;;;;;;-1:-1:-1;54207:126:0;;;;;:::i;:::-;;:::i;53343:230::-;;;;;;;;;;-1:-1:-1;53343:230:0;;;;;:::i;:::-;;:::i;60927:376::-;;;;;;;;;;-1:-1:-1;60927:376:0;;;;;:::i;:::-;;:::i;49787:35::-;;;;;;;;;;;;;;;;52844:232;;;;;;;;;;-1:-1:-1;52844:232:0;;;;;:::i;:::-;;:::i;49399:26::-;;;;;;;;;;;;;:::i;50060:27::-;;;;;;;;;;;;;;;;40641:64;;;;;;;;;;-1:-1:-1;40641:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;60553:106;;;;;;;;;;-1:-1:-1;60553:106:0;;;;;:::i;:::-;;:::i;49829:33::-;;;;;;;;;;;;;;;;36930:101;;;;;;;;;;-1:-1:-1;37010:13:0;;-1:-1:-1;;;;;37010:13:0;36930:101;;40872:68;;;;;;;;;;-1:-1:-1;40872:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;53965:236;;;;;;;;;;-1:-1:-1;53965:236:0;;;;;:::i;:::-;;:::i;37230:181::-;;;;;;;;;;-1:-1:-1;37230:181:0;;;;;:::i;:::-;;:::i;49869:24::-;;;;;;;;;;;;;;;;40050:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42598:642::-;42701:4;42736:6;;42722:10;:20;;:38;;;;;42759:1;42746:10;:14;42722:38;42718:491;;;42777:13;42793:20;;;:8;:20;;;;;;-1:-1:-1;;;;;42793:20:0;42834:10;:19;;;;;:59;;-1:-1:-1;;;;;;42858:23:0;;;;;;:16;:23;;;;;;;;42882:10;42858:35;;;;;;;;;;42857:36;42834:59;42830:121;;;42921:14;;-1:-1:-1;;;42921:14:0;;;;;;;;;;;42830:121;42967:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;42967:33:0;-1:-1:-1;;;;;42967:33:0;;;;;;;;;43022:36;;2344:25:1;;;43022:36:0;;;;;;2317:18:1;43022:36:0;;;;;;;42762:308;42718:491;;;43101:10;43091:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;43091:30:0;;;;;;;;;;;;:43;;;43156:41;2344:25:1;;;43091:30:0;;43101:10;43156:41;;2317:18:1;43156:41:0;;;;;;;42718:491;-1:-1:-1;43228:4:0;42598:642;;;;;:::o;53090:249::-;34416:13;:11;:13::i;:::-;53217:4:::1;53209;53190:15;:11;53204:1;53190:15;:::i;:::-;53189:24;;;;:::i;:::-;53188:33;;;;:::i;:::-;53178:6;:43;;53160:128;;;::::0;-1:-1:-1;;;53160:128:0;;9161:2:1;53160:128:0::1;::::0;::::1;9143:21:1::0;9200:2;9180:18;;;9173:30;9239:34;9219:18;;;9212:62;-1:-1:-1;;;9290:18:1;;;9283:45;9345:19;;53160:128:0::1;;;;;;;;;53318:17;:6:::0;53328::::1;53318:17;:::i;:::-;53295:20;:40:::0;-1:-1:-1;53090:249:0:o;44039:1716::-;44185:6;;44171:10;:20;44167:1581;;44220:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;44212:28:0;;;44220:20;;44212:28;44208:91;;44268:15;;-1:-1:-1;;;44268:15:0;;;;;;;;;;;44208:91;-1:-1:-1;;;;;44319:16:0;;44315:82;;44363:18;;-1:-1:-1;;;44363:18:0;;;;;;;;;;;44315:82;44435:10;-1:-1:-1;;;;;44435:18:0;;;;;;:74;;-1:-1:-1;;;;;;44475:22:0;;;;;;:16;:22;;;;;;;;44498:10;44475:34;;;;;;;;;;44474:35;44435:74;:132;;;;-1:-1:-1;44544:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;44544:23:0;44530:10;:37;;44435:132;44413:226;;;44609:14;;-1:-1:-1;;;44609:14:0;;;;;;;;;;;44413:226;44674:10;:8;:10::i;:::-;-1:-1:-1;;;;;44655:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;44747:10:0;;-1:-1:-1;44747:8:0;:10::i;:::-;-1:-1:-1;;;;;44730:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;44789:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;44789:25:0;;;;;;;;44836:11;:23;;;;;44829:30;;;;;;;;44937:12;;;;;:6;:12;;;;;44950:19;;:23;;-1:-1:-1;;44950:23:0;:::i;:::-;44937:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;44989:12:0;;;;:6;:12;;;;;;45002:23;;;:11;:23;;;;;;;44989:37;;44937;;-1:-1:-1;44937:37:0;;44989;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;45073:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;45073:18:0;;;;;;;;;;;;45177:23;;;:11;:23;;;;;;;45152:22;;;;;;:48;-1:-1:-1;;;;;45254:10:0;;;;;:6;:10;;;;;:27;;45073:18;45254:27;;;;;;;;;;;;;;;45364:10;;:17;;:21;;45073:18;45364:21;:::i;:::-;45338:23;;;;:11;:23;;;;;;:47;;;;45407:30;;45350:10;;-1:-1:-1;;;;;45407:30:0;;;;;;;;;;;45477:2;-1:-1:-1;;;;;45457:35:0;45471:4;-1:-1:-1;;;;;45457:35:0;;45481:10;:8;:10::i;:::-;45457:35;;2344:25:1;;;2332:2;2317:18;45457:35:0;;;;;;;44193:1311;44039:1716;;;:::o;44167:1581::-;-1:-1:-1;;;;;45543:15:0;;45525;45543;;;:9;:15;;;;;;;;45559:10;45543:27;;;;;;;;-1:-1:-1;;45591:28:0;;45587:101;;45668:20;45678:10;45668:7;:20;:::i;:::-;-1:-1:-1;;;;;45638:15:0;;;;;;:9;:15;;;;;;;;45654:10;45638:27;;;;;;;:50;45587:101;45705:31;45715:4;45721:2;45725:10;45705:9;:31::i;:::-;;45510:238;44167:1581;44039:1716;;;:::o;60665:88::-;34416:13;:11;:13::i;:::-;60726:9:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;60726:19:0;;::::1;::::0;;;::::1;::::0;;60665:88::o;46051:405::-;46175:26;46188:4;46194:2;46198;46175:12;:26::i;:::-;-1:-1:-1;;;;;46232:14:0;;;:19;;;;:154;;-1:-1:-1;46268:61:0;;-1:-1:-1;;;46268:61:0;;;46304:10;46268:61;;;10077:34:1;-1:-1:-1;;;;;10147:15:1;;;10127:18;;;10120:43;10179:18;;;10172:34;;;10242:3;10222:18;;;10215:31;-1:-1:-1;10262:19:1;;;10255:30;46346:40:0;;46268:35;;;;46346:40;;10302:19:1;;46268:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;46268:118:0;;;46232:154;46214:235;;;46420:17;;-1:-1:-1;;;46420:17:0;;;;;;;;;;;60761:158;34416:13;:11;:13::i;:::-;60881:30:::1;60896:5;60903:7;60881:14;:30::i;:::-;60761:158:::0;;:::o;41927:111::-;34416:13;:11;:13::i;:::-;-1:-1:-1;;;;;42005:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;42005:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41927:111::o;42110:193::-;42168:13;42202:12;;;:8;:12;;;;;;-1:-1:-1;;;;;42202:12:0;;42227:69;;42274:10;;-1:-1:-1;;;42274:10:0;;;;;;;;;;;42227:69;42110:193;;;:::o;61311:333::-;61412:20;;;;;:58;;-1:-1:-1;61436:34:0;;;61412:58;61404:67;;;;;;61495:10;61480:12;61516:121;61533:20;;;61516:121;;;61573:52;61583:4;61589:9;;61599:1;61589:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;61603:7;;61611:1;61603:10;;;;;;;:::i;:::-;;;;;;;61617:6;61603:21;;;;:::i;:::-;61573:9;:52::i;:::-;-1:-1:-1;61555:3:0;;61516:121;;;;61395:249;61311:333;;;;:::o;52476:284::-;34416:13;:11;:13::i;:::-;52540:15:::1;:28:::0;;;52579:12:::1;:30:::0;;;52620:16:::1;:29:::0;;;52660:13:::1;:32:::0;52703:13:::1;:20:::0;;-1:-1:-1;;52734:18:0;;;;;52476:284::o;54499:154::-;54578:15;;54570:79;;54537:12;;54578:15;;;-1:-1:-1;;;;;54578:15:0;;54617:21;;54537:12;54570:79;54537:12;54570:79;54617:21;54578:15;54570:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;54499:154:0:o;35205:103::-;34416:13;:11;:13::i;:::-;35270:30:::1;35297:1;35270:18;:30::i;:::-;35205:103::o:0;53728:231::-;34416:13;:11;:13::i;:::-;53814:15:::1;:31:::0;;;53854:12:::1;:30:::0;;;53917:2:::1;53901:18:::0;::::1;;53893:60;;;::::0;-1:-1:-1;;;53893:60:0;;11039:2:1;53893:60:0::1;::::0;::::1;11021:21:1::0;11078:2;11058:18;;;11051:30;11117:31;11097:18;;;11090:59;11166:18;;53893:60:0::1;10837:353:1::0;53893:60:0::1;53728:231:::0;:::o;52319:139::-;52371:4;34416:13;:11;:13::i;:::-;-1:-1:-1;52394:14:0::1;:22:::0;;-1:-1:-1;;52394:22:0::1;::::0;;;52319:139;:::o;53577:147::-;34416:13;:11;:13::i;:::-;-1:-1:-1;;;;;53674:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;53674:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;53577:147::o;37842:235::-;37010:13;;29691:10;;-1:-1:-1;;;;;37010:13:0;37939:24;;37935:98;;37987:34;;-1:-1:-1;;;37987:34:0;;-1:-1:-1;;;;;1211:32:1;;37987:34:0;;;1193:51:1;1166:18;;37987:34:0;1047:203:1;37935:98:0;38043:26;38062:6;38043:18;:26::i;54337:156::-;54415:15;;;;;-1:-1:-1;;;;;54415:15:0;29691:10;-1:-1:-1;;;;;54399:31:0;;54391:40;;;;;;54442:43;54469:14;54475:8;54469:2;:14;:::i;:::-;54459:25;;:6;:25;:::i;:::-;54442:16;:43::i;40104:20::-;;;;;;;:::i;54657:268::-;34416:13;:11;:13::i;:::-;54781::::1;-1:-1:-1::0;;;;;54773:21:0::1;:4;-1:-1:-1::0;;;;;54773:21:0::1;::::0;54755:116:::1;;;::::0;-1:-1:-1;;;54755:116:0;;12774:2:1;54755:116:0::1;::::0;::::1;12756:21:1::0;12813:2;12793:18;;;12786:30;12852:34;12832:18;;;12825:62;12923:27;12903:18;;;12896:55;12968:19;;54755:116:0::1;12572:421:1::0;54755:116:0::1;-1:-1:-1::0;;;;;55008:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;55008:39:0;;;;;;;60761:158;;:::o;43683:207::-;43786:10;43769:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;43769:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;43769:49:0;;;;;;;;;;43836:46;;154:41:1;;;43769:38:0;;43786:10;43836:46;;127:18:1;43836:46:0;;;;;;;43683:207;;:::o;45814:160::-;45909:4;45933:33;45943:10;45955:2;45959:6;45933:9;:33::i;:::-;45926:40;45814:160;-1:-1:-1;;;45814:160:0:o;55057:146::-;34416:13;:11;:13::i;:::-;55161:15:::1;:36:::0;;-1:-1:-1;;;;;55161:36:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;55161:36:0;;::::1;::::0;;;::::1;::::0;;55057:146::o;46551:437::-;46705:26;46718:4;46724:2;46728;46705:12;:26::i;:::-;-1:-1:-1;;;;;46762:14:0;;;:19;;;;:156;;-1:-1:-1;46798:63:0;;-1:-1:-1;;;46798:63:0;;;46878:40;-1:-1:-1;;;;;46798:35:0;;;46878:40;;46798:63;;46834:10;;46846:4;;46852:2;;46856:4;;;;46798:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;46798:120:0;;;46762:156;46744:237;;;46952:17;;-1:-1:-1;;;46952:17:0;;;;;;;;;;;54207:126;34416:13;:11;:13::i;:::-;-1:-1:-1;;;;;54288:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;54288:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54207:126::o;53343:230::-;34416:13;:11;:13::i;:::-;53473:4:::1;53465;53446:15;:11;53460:1;53446:15;:::i;:::-;53445:24;;;;:::i;:::-;53444:33;;;;:::i;:::-;53434:6;:43;;53416:117;;;::::0;-1:-1:-1;;;53416:117:0;;13867:2:1;53416:117:0::1;::::0;::::1;13849:21:1::0;13906:2;13886:18;;;13879:30;13945:34;13925:18;;;13918:62;-1:-1:-1;;;13996:18:1;;;13989:34;14040:19;;53416:117:0::1;13665:400:1::0;53416:117:0::1;53552:17;:6:::0;53562::::1;53552:17;:::i;:::-;53540:9;:29:::0;-1:-1:-1;53343:230:0:o;60927:376::-;61014:9;;60987:13;;61014:9;;;;;61011:285;;;61079:1;61056:12;61050:26;;;;;:::i;:::-;;;:30;:89;;;;;;;;;;;;;;;;;61097:12;61111:13;:2;:11;:13::i;:::-;61083:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;61043:96;60927:376;-1:-1:-1;;60927:376:0:o;61011:285::-;61178:1;61173:6;;61226:1;61203:12;61197:26;;;;;:::i;52844:232::-;52970:4;34416:13;:11;:13::i;:::-;-1:-1:-1;53004:18:0::1;:30:::0;53058:4:::1;::::0;52844:232::o;49399:26::-;;;;;;;:::i;60553:106::-;34416:13;:11;:13::i;:::-;60627:12:::1;:24;60642:9:::0;60627:12;:24:::1;:::i;53965:236::-:0;34416:13;:11;:13::i;:::-;54052:16:::1;:32:::0;;;54093:13:::1;:32:::0;;;54159:2:::1;54142:19:::0;::::1;;54134:61;;;::::0;-1:-1:-1;;;54134:61:0;;11039:2:1;54134:61:0::1;::::0;::::1;11021:21:1::0;11078:2;11058:18;;;11051:30;11117:31;11097:18;;;11090:59;11166:18;;54134:61:0::1;10837:353:1::0;37230:181:0;34416:13;:11;:13::i;:::-;37320::::1;:24:::0;;-1:-1:-1;;;;;37320:24:0;::::1;-1:-1:-1::0;;;;;;37320:24:0;;::::1;::::0;::::1;::::0;;;37385:7:::1;34576::::0;34603:6;-1:-1:-1;;;;;34603:6:0;;34530:87;37385:7:::1;-1:-1:-1::0;;;;;37360:43:0::1;;;;;;;;;;;37230:181:::0;:::o;34695:166::-;34576:7;34603:6;-1:-1:-1;;;;;34603:6:0;29691:10;34755:23;34751:103;;34802:40;;-1:-1:-1;;;34802:40:0;;29691:10;34802:40;;;1193:51:1;1166:18;;34802:40:0;1047:203:1;48196:92:0;48239:7;48266:14;48272:8;48266:2;:14;:::i;:::-;48259:21;;48196:92;:::o;55336:3954::-;55480:4;31437:19;:17;:19::i;:::-;-1:-1:-1;;;;;55502:18:0;::::1;55494:68;;;::::0;-1:-1:-1;;;55494:68:0;;17624:2:1;55494:68:0::1;::::0;::::1;17606:21:1::0;17663:2;17643:18;;;17636:30;17702:34;17682:18;;;17675:62;-1:-1:-1;;;17753:18:1;;;17746:35;17798:19;;55494:68:0::1;17422:401:1::0;55494:68:0::1;-1:-1:-1::0;;;;;55583:16:0;::::1;55575:64;;;::::0;-1:-1:-1;;;55575:64:0;;18030:2:1;55575:64:0::1;::::0;::::1;18012:21:1::0;18069:2;18049:18;;;18042:30;18108:34;18088:18;;;18081:62;-1:-1:-1;;;18159:18:1;;;18152:33;18202:19;;55575:64:0::1;17828:399:1::0;55575:64:0::1;55673:12;55654:16;55704:11:::0;;;55700:82:::1;;55740:28;55756:4;55762:2;55766:1;55740:15;:28::i;:::-;55733:35;;;;;55700:82;55800:14;::::0;::::1;;55796:1782;;;34576:7:::0;34603:6;-1:-1:-1;;;;;55857:15:0;;::::1;34603:6:::0;;55857:15:::1;::::0;::::1;::::0;:51:::1;;-1:-1:-1::0;34576:7:0;34603:6;-1:-1:-1;;;;;55895:13:0;;::::1;34603:6:::0;;55895:13:::1;;55857:51;:90;;;;-1:-1:-1::0;;;;;;55931:16:0;::::1;::::0;::::1;55857:90;:134;;;;-1:-1:-1::0;;;;;;55970:21:0;::::1;55984:6;55970:21;;55857:134;:166;;;;-1:-1:-1::0;56015:8:0::1;::::0;::::1;::::0;::::1;;;56014:9;55857:166;55833:1732;;;56067:13;::::0;::::1;::::0;::::1;;;56062:233;;-1:-1:-1::0;;;;;56143:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;::::0;:52:::1;;-1:-1:-1::0;;;;;;56172:23:0;::::1;;::::0;;;:19:::1;:23;::::0;;;;;::::1;;56143:52;56107:166;;;::::0;-1:-1:-1;;;56107:166:0;;18434:2:1;56107:166:0::1;::::0;::::1;18416:21:1::0;18473:2;18453:18;;;18446:30;-1:-1:-1;;;18492:18:1;;;18485:52;18554:18;;56107:166:0::1;18232:346:1::0;56107:166:0::1;-1:-1:-1::0;;;;;56375:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;:94:::0;::::1;;;-1:-1:-1::0;;;;;;56434:35:0;::::1;;::::0;;;:31:::1;:35;::::0;;;;;::::1;;56433:36;56375:94;56347:1201;;;56562:20;;56552:6;:30;;56516:175;;;::::0;-1:-1:-1;;;56516:175:0;;18785:2:1;56516:175:0::1;::::0;::::1;18767:21:1::0;18824:2;18804:18;;;18797:30;18863:34;18843:18;;;18836:62;-1:-1:-1;;;18914:18:1;;;18907:51;18975:19;;56516:175:0::1;18583:417:1::0;56516:175:0::1;56778:9;::::0;-1:-1:-1;;;;;56761:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;56752:22:::1;::::0;:6;:22:::1;:::i;:::-;:35;;56716:146;;;::::0;-1:-1:-1;;;56716:146:0;;19337:2:1;56716:146:0::1;::::0;::::1;19319:21:1::0;19376:2;19356:18;;;19349:30;-1:-1:-1;;;19395:18:1;;;19388:49;19454:18;;56716:146:0::1;19135:343:1::0;56716:146:0::1;56347:1201;;;-1:-1:-1::0;;;;;56968:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;:94:::0;::::1;;;-1:-1:-1::0;;;;;;57025:37:0;::::1;;::::0;;;:31:::1;:37;::::0;;;;;::::1;;57024:38;56968:94;56940:608;;;57155:20;;57145:6;:30;;57109:176;;;::::0;-1:-1:-1;;;57109:176:0;;19685:2:1;57109:176:0::1;::::0;::::1;19667:21:1::0;19724:2;19704:18;;;19697:30;19763:34;19743:18;;;19736:62;-1:-1:-1;;;19814:18:1;;;19807:52;19876:19;;57109:176:0::1;19483:418:1::0;56940:608:0::1;-1:-1:-1::0;;;;;57318:35:0;::::1;;::::0;;;:31:::1;:35;::::0;;;;;::::1;;57313:235;;57442:9;::::0;-1:-1:-1;;;;;57425:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;57416:22:::1;::::0;:6;:22:::1;:::i;:::-;:35;;57380:146;;;::::0;-1:-1:-1;;;57380:146:0;;19337:2:1;57380:146:0::1;::::0;::::1;19319:21:1::0;19376:2;19356:18;;;19349:30;-1:-1:-1;;;19395:18:1;;;19388:49;19454:18;;57380:146:0::1;19135:343:1::0;57380:146:0::1;57641:4;57592:28;57623:24:::0;;;:9:::1;:24;::::0;;;;;57701:18:::1;::::0;57677:42;::::1;::::0;::::1;::::0;;;57754:37:::1;;-1:-1:-1::0;57780:11:0::1;::::0;;;::::1;;;57754:37;:65;;;;-1:-1:-1::0;57811:8:0::1;::::0;::::1;::::0;::::1;;;57810:9;57754:65;:116;;;;-1:-1:-1::0;;;;;;57839:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;57838:32;57754:116;:161;;;;-1:-1:-1::0;;;;;;57890:25:0;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;57889:26;57754:161;:207;;;;-1:-1:-1::0;57935:21:0::1;::::0;;;:11:::1;:21;::::0;;;;;57959:1:::1;-1:-1:-1::0;57754:207:0::1;:250;;;;-1:-1:-1::0;;;;;;57981:23:0;::::1;;::::0;;;:19:::1;:23;::::0;;;;;::::1;;57980:24;57754:250;57734:436;;;58035:8;:15:::0;;-1:-1:-1;;58035:15:0::1;;;::::0;;58069:10:::1;:8;:10::i;:::-;58100:21;::::0;;;:11:::1;:21;::::0;;;;58098:23;;58100:21;;;58098:23:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;58140:8:0::1;:16:::0;;-1:-1:-1;;58140:16:0::1;::::0;;57734:436:::1;58200:8;::::0;-1:-1:-1;;;;;58314:25:0;::::1;58184:12;58314:25:::0;;;:19:::1;:25;::::0;;;;;58200:8:::1;;::::0;;::::1;::::0;::::1;58199:9;::::0;58314:25:::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;58343:23:0;::::1;;::::0;;;:19:::1;:23;::::0;;;;;::::1;;58314:52;58310:104;;;-1:-1:-1::0;58395:5:0::1;58310:104;58428:12;58537:7;58533:695;;;-1:-1:-1::0;;;;;58593:29:0;::::1;;::::0;;;:25:::1;:29;::::0;;;;;::::1;;:50:::0;::::1;;;;58642:1;58626:13;;:17;58593:50;58589:480;;;58701:3;58683:13;;58673:6;:24;;;;:::i;:::-;:32;;;;:::i;:::-;58666:39;;58776:13;;58756:16;;58749:4;:23;;;;:::i;:::-;58748:41;;;;:::i;:::-;58726:18;;:63;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;58589:480:0::1;::::0;-1:-1:-1;58589:480:0::1;;-1:-1:-1::0;;;;;58857:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;::::1;;:51:::0;::::1;;;;58907:1;58892:12;;:16;58857:51;58853:216;;;58965:3;58948:12;;58938:6;:23;;;;:::i;:::-;:31;;;;:::i;:::-;58931:38;;59039:12;;59020:15;;59013:4;:22;;;;:::i;:::-;59012:39;;;;:::i;:::-;58990:18;;:61;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;58853:216:0::1;59091:8:::0;;59087:95:::1;;59122:42;59138:4;59152;59159;59122:15;:42::i;:::-;;59087:95;59200:14;59210:4:::0;59200:14;::::1;:::i;:::-;;;58533:695;59249:33;59265:4;59271:2;59275:6;59249:15;:33::i;:::-;59242:40:::0;55336:3954;-1:-1:-1;;;;;;;;;55336:3954:0:o;49159:160::-;49272:4;:12;49279:5;49272:4;:12;:::i;:::-;-1:-1:-1;49295:6:0;:16;49304:7;49295:6;:16;:::i;37601:156::-;37691:13;37684:20;;-1:-1:-1;;;;;;37684:20:0;;;37715:34;37740:8;37715:24;:34::i;59298:589::-;59448:16;;;59462:1;59448:16;;;;;;;;59424:21;;59448:16;;;;;;;;;;-1:-1:-1;59448:16:0;59424:40;;59493:4;59475;59480:1;59475:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;59475:23:0;;;-1:-1:-1;;;;;59475:23:0;;;;;59519:15;-1:-1:-1;;;;;59519:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59509:4;59514:1;59509:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;59509:32:0;;;-1:-1:-1;;;;;59509:32:0;;;;;59554:62;59571:4;59586:15;59604:11;59554:8;:62::i;:::-;59655:224;;-1:-1:-1;;;59655:224:0;;-1:-1:-1;;;;;59655:15:0;:66;;;;:224;;59736:11;;59762:1;;59806:4;;59833;;59853:15;;59655:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20911:718;20967:13;21018:14;21035:17;21046:5;21035:10;:17::i;:::-;21055:1;21035:21;21018:38;;21071:20;21105:6;21094:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21094:18:0;-1:-1:-1;21071:41:0;-1:-1:-1;21236:28:0;;;21252:2;21236:28;21293:290;-1:-1:-1;;21325:5:0;-1:-1:-1;;;21462:2:0;21451:14;;21446:32;21325:5;21433:46;21525:2;21516:11;;;-1:-1:-1;21546:21:0;21293:290;21546:21;-1:-1:-1;21604:6:0;20911:718;-1:-1:-1;;;20911:718:0:o;31991:132::-;31903:7;;;;32053:63;;;32089:15;;-1:-1:-1;;;32089:15:0;;;;;;;;;;;47056:1101;47177:4;47194:12;47209:10;:8;:10::i;:::-;-1:-1:-1;;;;;47260:15:0;;;47230:27;47260:15;;;:9;:15;;;;;;;;47318:13;;;;;;;;;47344:15;;;47194:25;;-1:-1:-1;47260:15:0;;47318:13;;47363:6;;47260:15;47344:25;47363:6;47260:15;47344:25;:::i;:::-;;;;-1:-1:-1;;;;;;;47407:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;47515:15;;;;;:9;:15;;;;;;47510:251;;-1:-1:-1;;;;;47621:15:0;;47547:22;47621:15;;;:9;:15;;;;;;:22;;47639:4;;47621:22;:::i;:::-;47573:26;47595:4;47573:19;:26;:::i;:::-;47572:72;;;;:::i;:::-;47547:97;;47664:9;47659:91;47683:14;47679:1;:18;47659:91;;;47723:11;47729:4;47723:5;:11::i;:::-;47699:3;;47659:91;;;;47532:229;47510:251;-1:-1:-1;;;;;47837:13:0;;;;;;:9;:13;;;;;;;;47832:247;;47867:22;47935:28;47959:4;47935:21;:28;:::i;:::-;-1:-1:-1;;;;;47893:13:0;;;;;;:9;:13;;;;;;:20;;47909:4;;47893:20;:::i;:::-;47892:72;;;;:::i;:::-;47867:97;;47984:9;47979:89;48003:14;47999:1;:18;47979:89;;;48043:9;48049:2;48043:5;:9::i;:::-;48019:3;;47979:89;;;;47852:227;47832:247;48116:2;-1:-1:-1;;;;;48096:31:0;48110:4;-1:-1:-1;;;;;48096:31:0;;48120:6;48096:31;;;;2344:25:1;;2332:2;2317:18;;2198:177;48096:31:0;;;;;;;;-1:-1:-1;48145:4:0;;47056:1101;-1:-1:-1;;;;;;47056:1101:0:o;59895:650::-;59974:4;59930:23;59956:24;;;:9;:24;;;;;;60024:18;;59956:24;;60074:20;;;:46;;-1:-1:-1;60098:22:0;;60074:46;60070:77;;;60133:7;;;59895:650::o;60070:77::-;60177:18;;:23;;60198:2;60177:23;:::i;:::-;60159:15;:41;60155:107;;;60231:18;;:23;;60252:2;60231:23;:::i;:::-;60213:41;;60155:107;60346:15;60370:36;60346:15;60370:16;:36::i;:::-;60436:1;60415:18;:22;60470:15;;60462:79;;60470:15;;;;-1:-1:-1;;;;;60470:15:0;;60509:21;;60462:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;59895:650:0:o;35843:191::-;35917:16;35936:6;;-1:-1:-1;;;;;35953:17:0;;;-1:-1:-1;;;;;;35953:17:0;;;;;;35986:40;;35936:6;;;;;;;35986:40;;35917:16;35986:40;35906:128;35843:191;:::o;43252:378::-;-1:-1:-1;;;;;43388:19:0;;43380:68;;;;-1:-1:-1;;;43380:68:0;;21489:2:1;43380:68:0;;;21471:21:1;21528:2;21508:18;;;21501:30;21567:34;21547:18;;;21540:62;-1:-1:-1;;;21618:18:1;;;21611:34;21662:19;;43380:68:0;21287:400:1;43380:68:0;-1:-1:-1;;;;;43467:21:0;;43459:68;;;;-1:-1:-1;;;43459:68:0;;21894:2:1;43459:68:0;;;21876:21:1;21933:2;21913:18;;;21906:30;21972:34;21952:18;;;21945:62;-1:-1:-1;;;22023:18:1;;;22016:32;22065:19;;43459:68:0;21692:398:1;43459:68:0;-1:-1:-1;;;;;43540:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:34;;;43590:32;;2344:25:1;;;43590:32:0;;2317:18:1;43590:32:0;;;;;;;43252:378;;;:::o;17315:948::-;17368:7;;-1:-1:-1;;;17446:17:0;;17442:106;;-1:-1:-1;;;17484:17:0;;;-1:-1:-1;17530:2:0;17520:12;17442:106;17575:8;17566:5;:17;17562:106;;17613:8;17604:17;;;-1:-1:-1;17650:2:0;17640:12;17562:106;17695:8;17686:5;:17;17682:106;;17733:8;17724:17;;;-1:-1:-1;17770:2:0;17760:12;17682:106;17815:7;17806:5;:16;17802:103;;17852:7;17843:16;;;-1:-1:-1;17888:1:0;17878:11;17802:103;17932:7;17923:5;:16;17919:103;;17969:7;17960:16;;;-1:-1:-1;18005:1:0;17995:11;17919:103;18049:7;18040:5;:16;18036:103;;18086:7;18077:16;;;-1:-1:-1;18122:1:0;18112:11;18036:103;18166:7;18157:5;:16;18153:68;;18204:1;18194:11;18249:6;17315:948;-1:-1:-1;;17315:948:0:o;48778:373::-;-1:-1:-1;;;;;48839:18:0;;48835:73;;48881:15;;-1:-1:-1;;;48881:15:0;;;;;;;;;;;48835:73;-1:-1:-1;;;;;48933:12:0;;48920:10;48933:12;;;:6;:12;;;;;48946:19;;:23;;48968:1;;48946:23;:::i;:::-;48933:37;;;;;;;;:::i;:::-;;;;;;;;;48920:50;;48981:6;:12;48988:4;-1:-1:-1;;;;;48981:12:0;-1:-1:-1;;;;;48981:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;48981:18:0;;;;;;;;;;;;49017:15;;;:11;:15;;;;;;49010:22;;;49050:8;:12;;;;;49043:19;;-1:-1:-1;;;;;;49043:19:0;;;;;;49080:11;:15;;;;;;49073:22;;;;;;;;49113:30;49029:2;;48981:18;-1:-1:-1;;;;;49113:30:0;;;;;48981:18;;49113:30;48824:327;48778:373;:::o;55213:115::-;31437:19;:17;:19::i;:::-;55305:15:::1;55317:2;-1:-1:-1::0;;;;;48355:16:0;;48351:74;;48395:18;;-1:-1:-1;;;48395:18:0;;;;;;;;;;;48351:74;48462:6;:8;;;;;;;;:6;48530:12;;;:8;:12;;;;;;-1:-1:-1;;;;;48530:12:0;:26;48526:81;;48580:15;;-1:-1:-1;;;48580:15:0;;;;;;;;;;;48526:81;48619:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;48619:17:0;-1:-1:-1;;;;;48619:17:0;;;;;;;;48647:10;;;:6;:10;;;;;:19;;-1:-1:-1;48647:19:0;;;;;;;;;;;;;;;48695:10;;:17;;:21;;-1:-1:-1;48695:21:0;:::i;:::-;48677:15;;;;:11;:15;;;;;;:39;;;;48734:28;;48689:2;;-1:-1:-1;;;;;48734:28:0;;;;;48677:15;;48734:28;48340:430;48296:474;:::o;206:250:1:-;291:1;301:113;315:6;312:1;309:13;301:113;;;391:11;;;385:18;372:11;;;365:39;337:2;330:10;301:113;;;-1:-1:-1;;448:1:1;430:16;;423:27;206:250::o;461:396::-;610:2;599:9;592:21;573:4;642:6;636:13;685:6;680:2;669:9;665:18;658:34;701:79;773:6;768:2;757:9;753:18;748:2;740:6;736:15;701:79;:::i;:::-;841:2;820:15;-1:-1:-1;;816:29:1;801:45;;;;848:2;797:54;;461:396;-1:-1:-1;;461:396:1:o;862:180::-;921:6;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;-1:-1:-1;1013:23:1;;862:180;-1:-1:-1;862:180:1:o;1255:131::-;-1:-1:-1;;;;;1330:31:1;;1320:42;;1310:70;;1376:1;1373;1366:12;1391:315;1459:6;1467;1520:2;1508:9;1499:7;1495:23;1491:32;1488:52;;;1536:1;1533;1526:12;1488:52;1575:9;1562:23;1594:31;1619:5;1594:31;:::i;:::-;1644:5;1696:2;1681:18;;;;1668:32;;-1:-1:-1;;;1391:315:1:o;1711:247::-;1770:6;1823:2;1811:9;1802:7;1798:23;1794:32;1791:52;;;1839:1;1836;1829:12;1791:52;1878:9;1865:23;1897:31;1922:5;1897:31;:::i;2380:456::-;2457:6;2465;2473;2526:2;2514:9;2505:7;2501:23;2497:32;2494:52;;;2542:1;2539;2532:12;2494:52;2581:9;2568:23;2600:31;2625:5;2600:31;:::i;:::-;2650:5;-1:-1:-1;2707:2:1;2692:18;;2679:32;2720:33;2679:32;2720:33;:::i;:::-;2380:456;;2772:7;;-1:-1:-1;;;2826:2:1;2811:18;;;;2798:32;;2380:456::o;2841:160::-;2906:20;;2962:13;;2955:21;2945:32;;2935:60;;2991:1;2988;2981:12;3006:180;3062:6;3115:2;3103:9;3094:7;3090:23;3086:32;3083:52;;;3131:1;3128;3121:12;3083:52;3154:26;3170:9;3154:26;:::i;3380:127::-;3441:10;3436:3;3432:20;3429:1;3422:31;3472:4;3469:1;3462:15;3496:4;3493:1;3486:15;3512:719;3555:5;3608:3;3601:4;3593:6;3589:17;3585:27;3575:55;;3626:1;3623;3616:12;3575:55;3662:6;3649:20;3688:18;3725:2;3721;3718:10;3715:36;;;3731:18;;:::i;:::-;3806:2;3800:9;3774:2;3860:13;;-1:-1:-1;;3856:22:1;;;3880:2;3852:31;3848:40;3836:53;;;3904:18;;;3924:22;;;3901:46;3898:72;;;3950:18;;:::i;:::-;3990:10;3986:2;3979:22;4025:2;4017:6;4010:18;4071:3;4064:4;4059:2;4051:6;4047:15;4043:26;4040:35;4037:55;;;4088:1;4085;4078:12;4037:55;4152:2;4145:4;4137:6;4133:17;4126:4;4118:6;4114:17;4101:54;4199:1;4192:4;4187:2;4179:6;4175:15;4171:26;4164:37;4219:6;4210:15;;;;;;3512:719;;;;:::o;4236:543::-;4324:6;4332;4385:2;4373:9;4364:7;4360:23;4356:32;4353:52;;;4401:1;4398;4391:12;4353:52;4441:9;4428:23;4470:18;4511:2;4503:6;4500:14;4497:34;;;4527:1;4524;4517:12;4497:34;4550:50;4592:7;4583:6;4572:9;4568:22;4550:50;:::i;:::-;4540:60;;4653:2;4642:9;4638:18;4625:32;4609:48;;4682:2;4672:8;4669:16;4666:36;;;4698:1;4695;4688:12;4666:36;;4721:52;4765:7;4754:8;4743:9;4739:24;4721:52;:::i;:::-;4711:62;;;4236:543;;;;;:::o;4784:315::-;4849:6;4857;4910:2;4898:9;4889:7;4885:23;4881:32;4878:52;;;4926:1;4923;4916:12;4878:52;4965:9;4952:23;4984:31;5009:5;4984:31;:::i;:::-;5034:5;-1:-1:-1;5058:35:1;5089:2;5074:18;;5058:35;:::i;:::-;5048:45;;4784:315;;;;;:::o;5104:367::-;5167:8;5177:6;5231:3;5224:4;5216:6;5212:17;5208:27;5198:55;;5249:1;5246;5239:12;5198:55;-1:-1:-1;5272:20:1;;5315:18;5304:30;;5301:50;;;5347:1;5344;5337:12;5301:50;5384:4;5376:6;5372:17;5360:29;;5444:3;5437:4;5427:6;5424:1;5420:14;5412:6;5408:27;5404:38;5401:47;5398:67;;;5461:1;5458;5451:12;5398:67;5104:367;;;;;:::o;5476:773::-;5598:6;5606;5614;5622;5675:2;5663:9;5654:7;5650:23;5646:32;5643:52;;;5691:1;5688;5681:12;5643:52;5731:9;5718:23;5760:18;5801:2;5793:6;5790:14;5787:34;;;5817:1;5814;5807:12;5787:34;5856:70;5918:7;5909:6;5898:9;5894:22;5856:70;:::i;:::-;5945:8;;-1:-1:-1;5830:96:1;-1:-1:-1;6033:2:1;6018:18;;6005:32;;-1:-1:-1;6049:16:1;;;6046:36;;;6078:1;6075;6068:12;6046:36;;6117:72;6181:7;6170:8;6159:9;6155:24;6117:72;:::i;:::-;5476:773;;;;-1:-1:-1;6208:8:1;-1:-1:-1;;;;5476:773:1:o;6254:936::-;6351:6;6359;6367;6375;6383;6436:3;6424:9;6415:7;6411:23;6407:33;6404:53;;;6453:1;6450;6443:12;6404:53;6492:9;6479:23;6511:31;6536:5;6511:31;:::i;:::-;6561:5;-1:-1:-1;6618:2:1;6603:18;;6590:32;6631:33;6590:32;6631:33;:::i;:::-;6683:7;-1:-1:-1;6737:2:1;6722:18;;6709:32;;-1:-1:-1;6792:2:1;6777:18;;6764:32;6815:18;6845:14;;;6842:34;;;6872:1;6869;6862:12;6842:34;6910:6;6899:9;6895:22;6885:32;;6955:7;6948:4;6944:2;6940:13;6936:27;6926:55;;6977:1;6974;6967:12;6926:55;7017:2;7004:16;7043:2;7035:6;7032:14;7029:34;;;7059:1;7056;7049:12;7029:34;7104:7;7099:2;7090:6;7086:2;7082:15;7078:24;7075:37;7072:57;;;7125:1;7122;7115:12;7072:57;6254:936;;;;-1:-1:-1;6254:936:1;;-1:-1:-1;7156:2:1;7148:11;;7178:6;6254:936;-1:-1:-1;;;6254:936:1:o;7195:388::-;7263:6;7271;7324:2;7312:9;7303:7;7299:23;7295:32;7292:52;;;7340:1;7337;7330:12;7292:52;7379:9;7366:23;7398:31;7423:5;7398:31;:::i;:::-;7448:5;-1:-1:-1;7505:2:1;7490:18;;7477:32;7518:33;7477:32;7518:33;:::i;:::-;7570:7;7560:17;;;7195:388;;;;;:::o;7588:322::-;7657:6;7710:2;7698:9;7689:7;7685:23;7681:32;7678:52;;;7726:1;7723;7716:12;7678:52;7766:9;7753:23;7799:18;7791:6;7788:30;7785:50;;;7831:1;7828;7821:12;7785:50;7854;7896:7;7887:6;7876:9;7872:22;7854:50;:::i;:::-;7844:60;7588:322;-1:-1:-1;;;;7588:322:1:o;7915:380::-;7994:1;7990:12;;;;8037;;;8058:61;;8112:4;8104:6;8100:17;8090:27;;8058:61;8165:2;8157:6;8154:14;8134:18;8131:38;8128:161;;8211:10;8206:3;8202:20;8199:1;8192:31;8246:4;8243:1;8236:15;8274:4;8271:1;8264:15;8128:161;;7915:380;;;:::o;8300:127::-;8361:10;8356:3;8352:20;8349:1;8342:31;8392:4;8389:1;8382:15;8416:4;8413:1;8406:15;8432:168;8505:9;;;8536;;8553:15;;;8547:22;;8533:37;8523:71;;8574:18;;:::i;8737:217::-;8777:1;8803;8793:132;;8847:10;8842:3;8838:20;8835:1;8828:31;8882:4;8879:1;8872:15;8910:4;8907:1;8900:15;8793:132;-1:-1:-1;8939:9:1;;8737:217::o;9375:128::-;9442:9;;;9463:11;;;9460:37;;;9477:18;;:::i;9508:127::-;9569:10;9564:3;9560:20;9557:1;9550:31;9600:4;9597:1;9590:15;9624:4;9621:1;9614:15;9640:127;9701:10;9696:3;9692:20;9689:1;9682:31;9732:4;9729:1;9722:15;9756:4;9753:1;9746:15;10332:290;10401:6;10454:2;10442:9;10433:7;10429:23;10425:32;10422:52;;;10470:1;10467;10460:12;10422:52;10496:16;;-1:-1:-1;;;;;;10541:32:1;;10531:43;;10521:71;;10588:1;10585;10578:12;11195:416;11284:1;11321:5;11284:1;11335:270;11356:7;11346:8;11343:21;11335:270;;;11415:4;11411:1;11407:6;11403:17;11397:4;11394:27;11391:53;;;11424:18;;:::i;:::-;11474:7;11464:8;11460:22;11457:55;;;11494:16;;;;11457:55;11573:22;;;;11533:15;;;;11335:270;;;11339:3;11195:416;;;;;:::o;11616:806::-;11665:5;11695:8;11685:80;;-1:-1:-1;11736:1:1;11750:5;;11685:80;11784:4;11774:76;;-1:-1:-1;11821:1:1;11835:5;;11774:76;11866:4;11884:1;11879:59;;;;11952:1;11947:130;;;;11859:218;;11879:59;11909:1;11900:10;;11923:5;;;11947:130;11984:3;11974:8;11971:17;11968:43;;;11991:18;;:::i;:::-;-1:-1:-1;;12047:1:1;12033:16;;12062:5;;11859:218;;12161:2;12151:8;12148:16;12142:3;12136:4;12133:13;12129:36;12123:2;12113:8;12110:16;12105:2;12099:4;12096:12;12092:35;12089:77;12086:159;;;-1:-1:-1;12198:19:1;;;12230:5;;12086:159;12277:34;12302:8;12296:4;12277:34;:::i;:::-;12347:6;12343:1;12339:6;12335:19;12326:7;12323:32;12320:58;;;12358:18;;:::i;:::-;12396:20;;11616:806;-1:-1:-1;;;11616:806:1:o;12427:140::-;12485:5;12514:47;12555:4;12545:8;12541:19;12535:4;12514:47;:::i;12998:662::-;-1:-1:-1;;;;;13277:15:1;;;13259:34;;13329:15;;13324:2;13309:18;;13302:43;13376:2;13361:18;;13354:34;;;13424:3;13419:2;13404:18;;13397:31;;;13444:19;;13437:35;;;13202:4;13465:6;13515;13239:3;13494:19;;13481:49;13580:1;13574:3;13565:6;13554:9;13550:22;13546:32;13539:43;13650:3;13643:2;13639:7;13634:2;13626:6;13622:15;13618:29;13607:9;13603:45;13599:55;13591:63;;12998:662;;;;;;;;:::o;14196:1177::-;14462:3;14491:1;14524:6;14518:13;14554:36;14580:9;14554:36;:::i;:::-;14609:1;14626:17;;;14652:133;;;;14799:1;14794:358;;;;14619:533;;14652:133;-1:-1:-1;;14685:24:1;;14673:37;;14758:14;;14751:22;14739:35;;14730:45;;;-1:-1:-1;14652:133:1;;14794:358;14825:6;14822:1;14815:17;14855:4;14900;14897:1;14887:18;14927:1;14941:165;14955:6;14952:1;14949:13;14941:165;;;15033:14;;15020:11;;;15013:35;15076:16;;;;14970:10;;14941:165;;;14945:3;;;15135:6;15130:3;15126:16;15119:23;;14619:533;;;;;15183:6;15177:13;15199:68;15258:8;15253:3;15246:4;15238:6;15234:17;15199:68;:::i;:::-;-1:-1:-1;;;15289:18:1;;15316:22;;;15365:1;15354:13;;14196:1177;-1:-1:-1;;;;14196:1177:1:o;15378:518::-;15480:2;15475:3;15472:11;15469:421;;;15516:5;15513:1;15506:16;15560:4;15557:1;15547:18;15630:2;15618:10;15614:19;15611:1;15607:27;15601:4;15597:38;15666:4;15654:10;15651:20;15648:47;;;-1:-1:-1;15689:4:1;15648:47;15744:2;15739:3;15735:12;15732:1;15728:20;15722:4;15718:31;15708:41;;15799:81;15817:2;15810:5;15807:13;15799:81;;;15876:1;15862:16;;15843:1;15832:13;15799:81;;16072:1345;16198:3;16192:10;16225:18;16217:6;16214:30;16211:56;;;16247:18;;:::i;:::-;16276:97;16366:6;16326:38;16358:4;16352:11;16326:38;:::i;:::-;16320:4;16276:97;:::i;:::-;16428:4;;16485:2;16474:14;;16502:1;16497:663;;;;17204:1;17221:6;17218:89;;;-1:-1:-1;17273:19:1;;;17267:26;17218:89;-1:-1:-1;;16029:1:1;16025:11;;;16021:24;16017:29;16007:40;16053:1;16049:11;;;16004:57;17320:81;;16467:944;;16497:663;14143:1;14136:14;;;14180:4;14167:18;;-1:-1:-1;;16533:20:1;;;16651:236;16665:7;16662:1;16659:14;16651:236;;;16754:19;;;16748:26;16733:42;;16846:27;;;;16814:1;16802:14;;;;16681:19;;16651:236;;;16655:3;16915:6;16906:7;16903:19;16900:201;;;16976:19;;;16970:26;-1:-1:-1;;17059:1:1;17055:14;;;17071:3;17051:24;17047:37;17043:42;17028:58;17013:74;;16900:201;-1:-1:-1;;;;;17147:1:1;17131:14;;;17127:22;17114:36;;-1:-1:-1;16072:1345:1:o;19005:125::-;19070:9;;;19091:10;;;19088:36;;;19104:18;;:::i;19906:135::-;19945:3;19966:17;;;19963:43;;19986:18;;:::i;:::-;-1:-1:-1;20033:1:1;20022:13;;19906:135::o;20046:251::-;20116:6;20169:2;20157:9;20148:7;20144:23;20140:32;20137:52;;;20185:1;20182;20175:12;20137:52;20217:9;20211:16;20236:31;20261:5;20236:31;:::i;20302:980::-;20564:4;20612:3;20601:9;20597:19;20643:6;20632:9;20625:25;20669:2;20707:6;20702:2;20691:9;20687:18;20680:34;20750:3;20745:2;20734:9;20730:18;20723:31;20774:6;20809;20803:13;20840:6;20832;20825:22;20878:3;20867:9;20863:19;20856:26;;20917:2;20909:6;20905:15;20891:29;;20938:1;20948:195;20962:6;20959:1;20956:13;20948:195;;;21027:13;;-1:-1:-1;;;;;21023:39:1;21011:52;;21118:15;;;;21083:12;;;;21059:1;20977:9;20948:195;;;-1:-1:-1;;;;;;;21199:32:1;;;;21194:2;21179:18;;21172:60;-1:-1:-1;;;21263:3:1;21248:19;21241:35;21160:3;20302:980;-1:-1:-1;;;20302:980:1:o
Swarm Source
ipfs://063fc10ade3bbab06f429c9e2705fe06a2b35bc2151e0b3bdc98f1467d321c28
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.