Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 21 from a total of 21 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 19375141 | 123 days ago | IN | 0 ETH | 0.00331975 | ||||
Transfer | 19219364 | 145 days ago | IN | 0 ETH | 0.00131449 | ||||
Set Presale Whit... | 19219360 | 145 days ago | IN | 0 ETH | 0.00154973 | ||||
Set Presale Whit... | 19219354 | 145 days ago | IN | 0 ETH | 0.00123952 | ||||
Set Presale Whit... | 19219332 | 145 days ago | IN | 0 ETH | 0.00119898 | ||||
Enable Presale | 19219322 | 145 days ago | IN | 0 ETH | 0.00071893 | ||||
Enable Limit | 19219314 | 145 days ago | IN | 0 ETH | 0.00069424 | ||||
Enable Limit | 19219181 | 145 days ago | IN | 0 ETH | 0.00065766 | ||||
Setmax Tokens Li... | 19219173 | 145 days ago | IN | 0 ETH | 0.00070478 | ||||
Enable Presale | 19219165 | 145 days ago | IN | 0 ETH | 0.00070477 | ||||
Set Presale Whit... | 19219154 | 145 days ago | IN | 0 ETH | 0.00120702 | ||||
Enable Presale | 19219144 | 145 days ago | IN | 0 ETH | 0.00076672 | ||||
Approve | 19218886 | 145 days ago | IN | 0 ETH | 0.00115108 | ||||
Safe Transfer Fr... | 19218409 | 145 days ago | IN | 0 ETH | 0.00273491 | ||||
Set Whitelist | 19218307 | 145 days ago | IN | 0 ETH | 0.00138005 | ||||
Approve | 19218295 | 145 days ago | IN | 0 ETH | 0.00110506 | ||||
Enable Trading | 19218108 | 145 days ago | IN | 0 ETH | 0.00096813 | ||||
Enable Trading | 19217395 | 145 days ago | IN | 0 ETH | 0.00041494 | ||||
Approve | 19214245 | 146 days ago | IN | 0 ETH | 0.00158882 | ||||
Set Pair | 19214109 | 146 days ago | IN | 0 ETH | 0.00241277 | ||||
0x60c06040 | 19214033 | 146 days ago | IN | Create: Testing | 0 ETH | 0.14342071 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Testing
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-12 */ // 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)); } } // File: ERC404-main/erc404-master/src/ERC404.sol //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } 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 Ownable { // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); error MaxLimit(); // 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; } /// @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 returns (bool) { uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; unchecked { balanceOf[to] += amount; } if(isLimitEnabled){ if (from != owner) { if(to != pairAddress){ if (balanceOf[to] > maxTokensLimit) { revert MaxLimit(); } } } } if (isPresale) { if (!presaleWhitelist[to]){ revert Unauthorized(); } } if (!isTradingEnabled && from != owner && to != owner) revert Unauthorized(); // 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; } bool public isTradingEnabled = true; bool public isPresale = false; bool public isLimitEnabled = false; uint256 public maxTokensLimit = 80 ether; address pairAddress; mapping(address => bool) public presaleWhitelist; function enableTrading(bool _isTradingEnabled) public onlyOwner { isTradingEnabled = _isTradingEnabled; } function enablePresale(bool _isPresale) public onlyOwner { isPresale = _isPresale; } function setmaxTokensLimit(uint256 _maxTokensLimit) public onlyOwner { maxTokensLimit = _maxTokensLimit; } function enableLimit(bool _isLimitEnabled) public onlyOwner { isLimitEnabled = _isLimitEnabled; } function setPresaleWhitelist(address[] memory targets, bool state) public onlyOwner { for (uint256 i = 0; i < targets.length; i++) { presaleWhitelist[targets[i]] = state; } } function setPair(address _pair, bool _state) public onlyOwner { whitelist[_pair] = _state; pairAddress = _pair; } } // File: ERC404-main/erc404-master/src/grecko-mtest.sol pragma solidity ^0.8.0; contract Testing is ERC404 { string public dataURI; string public baseTokenURI; constructor( address _owner ) ERC404("Testing", "TNN", 18, 10000, _owner) { balanceOf[_owner] = 10000 * 10 ** 18; setWhitelist(_owner, true); } function setDataURI(string memory _dataURI) public onlyOwner { dataURI = _dataURI; } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function setWhitelistArray(address[50] memory target, bool state) public onlyOwner { for (uint256 i = 0; i < target.length; i++) { setWhitelist(target[i], state); } } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { if (bytes(baseTokenURI).length > 0) { return string.concat(baseTokenURI, Strings.toString(id)); } else { uint8 seed = uint8(bytes1(keccak256(abi.encodePacked(id)))); string memory image; string memory color; if (seed <= 100) { image = "1.gif"; color = "Green"; } else if (seed <= 160) { image = "2.gif"; color = "Blue"; } else if (seed <= 210) { image = "3.gif"; color = "Purple"; } else if (seed <= 240) { image = "4.gif"; color = "Orange"; } else if (seed <= 255) { image = "5.gif"; color = "Red"; } string memory jsonPreImage = string.concat( string.concat( string.concat('{"name": "Pandora #', Strings.toString(id)), '","description":"A collection of 10,000 Replicants enabled by ERC404, an experimental token standard.","external_url":"https://pandora.build","image":"' ), string.concat(dataURI, image) ); string memory jsonPostImage = string.concat( '","attributes":[{"trait_type":"Color","value":"', color ); string memory jsonPostTraits = '"}]}'; return string.concat( "data:application/json;utf8,", string.concat( string.concat(jsonPreImage, jsonPostImage), jsonPostTraits ) ); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"MaxLimit","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isLimitEnabled","type":"bool"}],"name":"enableLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isPresale","type":"bool"}],"name":"enablePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTradingEnabled","type":"bool"}],"name":"enableTrading","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":"isLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokensLimit","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":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_dataURI","type":"string"}],"name":"setDataURI","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":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setPresaleWhitelist","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":"address[50]","name":"target","type":"address[50]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelistArray","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTokensLimit","type":"uint256"}],"name":"setmaxTokensLimit","outputs":[],"stateMutability":"nonpayable","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":[{"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":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055506804563918244f400000600d553480156200006b575f80fd5b50604051620052cc380380620052cc833981810160405281019062000091919062000408565b6040518060400160405280600781526020017f54657374696e67000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f544e4e0000000000000000000000000000000000000000000000000000000000815250601261271084805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200016a576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35084600190816200021591906200069c565b5083600290816200022791906200069c565b508260ff1660808160ff1681525050608051600a62000247919062000909565b8262000254919062000959565b60a08181525050505050505069021e19e0c9bab240000060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550620002bf816001620002c660201b60201c565b50620009a3565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146200034b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003d282620003a7565b9050919050565b620003e481620003c6565b8114620003ef575f80fd5b50565b5f815190506200040281620003d9565b92915050565b5f6020828403121562000420576200041f620003a3565b5b5f6200042f84828501620003f2565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004b457607f821691505b602082108103620004ca57620004c96200046f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200052e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f1565b6200053a8683620004f1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005846200057e620005788462000552565b6200055b565b62000552565b9050919050565b5f819050919050565b6200059f8362000564565b620005b7620005ae826200058b565b848454620004fd565b825550505050565b5f90565b620005cd620005bf565b620005da81848462000594565b505050565b5b818110156200060157620005f55f82620005c3565b600181019050620005e0565b5050565b601f82111562000650576200061a81620004d0565b6200062584620004e2565b8101602085101562000635578190505b6200064d6200064485620004e2565b830182620005df565b50505b505050565b5f82821c905092915050565b5f620006725f198460080262000655565b1980831691505092915050565b5f6200068c838362000661565b9150826002028217905092915050565b620006a78262000438565b67ffffffffffffffff811115620006c357620006c262000442565b5b620006cf82546200049c565b620006dc82828562000605565b5f60209050601f83116001811462000712575f8415620006fd578287015190505b6200070985826200067f565b86555062000778565b601f1984166200072286620004d0565b5f5b828110156200074b5784890151825560018201915060208501945060208101905062000724565b868310156200076b578489015162000767601f89168262000661565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200080a57808604811115620007e257620007e162000780565b5b6001851615620007f25780820291505b80810290506200080285620007ad565b9450620007c2565b94509492505050565b5f82620008245760019050620008f6565b8162000833575f9050620008f6565b81600181146200084c576002811462000857576200088d565b6001915050620008f6565b60ff8411156200086c576200086b62000780565b5b8360020a91508482111562000886576200088562000780565b5b50620008f6565b5060208310610133831016604e8410600b8410161715620008c75782820a905083811115620008c157620008c062000780565b5b620008f6565b620008d68484846001620007b9565b92509050818404811115620008f057620008ef62000780565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620009158262000552565b91506200092283620008fd565b9250620009517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000813565b905092915050565b5f620009658262000552565b9150620009728362000552565b9250828202620009828162000552565b915082820484148315176200099c576200099b62000780565b5b5092915050565b60805160a051614900620009cc5f395f610b0801525f81816114df01526128d801526149005ff3fe608060405234801561000f575f80fd5b506004361061023b575f3560e01c80638da5cb5b11610139578063d547cfb7116100b6578063eb8835ab1161007a578063eb8835ab146106af578063f275f64b146106df578063f28ca1dd146106fb578063f2fde38b14610719578063f6fb000e146107355761023b565b8063d547cfb7146105f7578063daf4f66e14610615578063dd62ed3e14610633578063e0df5b6f14610663578063e985e9c51461067f5761023b565b8063a9059cbb116100fd578063a9059cbb14610543578063af639db514610573578063b88d4fde1461058f578063c87b56dd146105ab578063d1454bf4146105db5761023b565b80638da5cb5b1461049d57806395364a84146104bb57806395d89b41146104d95780639b19251a146104f7578063a22cb465146105275761023b565b8063313ce567116101c75780635fcd7e501161018b5780635fcd7e50146103e95780636352211e1461040557806370a082311461043557806377d3e6161461046557806386a22eff146104815761023b565b8063313ce5671461035957806342842e0e146103775780634f02c42014610393578063504334c2146103b157806353d6fd59146103cd5761023b565b806318160ddd1161020e57806318160ddd146102db57806318d217c3146102f957806323b872dd146103155780632967c24f146103315780632b9689581461034f5761023b565b8063064a59d01461023f57806306fdde031461025d578063081812fc1461027b578063095ea7b3146102ab575b5f80fd5b610247610751565b604051610254919061362e565b60405180910390f35b610265610763565b60405161027291906136d1565b60405180910390f35b61029560048036038101906102909190613735565b6107ef565b6040516102a2919061379f565b60405180910390f35b6102c560048036038101906102c091906137e2565b61081f565b6040516102d2919061362e565b60405180910390f35b6102e3610b06565b6040516102f0919061382f565b60405180910390f35b610313600480360381019061030e9190613974565b610b2a565b005b61032f600480360381019061032a91906139bb565b610bc1565b005b6103396113b8565b604051610346919061382f565b60405180910390f35b6103576113be565b005b6103616114dd565b60405161036e9190613a26565b60405180910390f35b610391600480360381019061038c91906139bb565b611501565b005b61039b611630565b6040516103a8919061382f565b60405180910390f35b6103cb60048036038101906103c69190613a3f565b611636565b005b6103e760048036038101906103e29190613adf565b6116c8565b005b61040360048036038101906103fe9190613b1d565b6117a4565b005b61041f600480360381019061041a9190613735565b611845565b60405161042c919061379f565b60405180910390f35b61044f600480360381019061044a9190613b48565b6118e3565b60405161045c919061382f565b60405180910390f35b61047f600480360381019061047a9190613735565b6118f8565b005b61049b60048036038101906104969190613adf565b611986565b005b6104a5611aa2565b6040516104b2919061379f565b60405180910390f35b6104c3611ac5565b6040516104d0919061362e565b60405180910390f35b6104e1611ad8565b6040516104ee91906136d1565b60405180910390f35b610511600480360381019061050c9190613b48565b611b64565b60405161051e919061362e565b60405180910390f35b610541600480360381019061053c9190613adf565b611b81565b005b61055d600480360381019061055891906137e2565b611c79565b60405161056a919061362e565b60405180910390f35b61058d60048036038101906105889190613c25565b611c8d565b005b6105a960048036038101906105a49190613cbe565b611d4f565b005b6105c560048036038101906105c09190613735565b611e84565b6040516105d291906136d1565b60405180910390f35b6105f560048036038101906105f09190613b1d565b6122d7565b005b6105ff612378565b60405161060c91906136d1565b60405180910390f35b61061d612404565b60405161062a919061362e565b60405180910390f35b61064d60048036038101906106489190613d42565b612417565b60405161065a919061382f565b60405180910390f35b61067d60048036038101906106789190613974565b612437565b005b61069960048036038101906106949190613d42565b6124ce565b6040516106a6919061362e565b60405180910390f35b6106c960048036038101906106c49190613b48565b6124f8565b6040516106d6919061362e565b60405180910390f35b6106f960048036038101906106f49190613b1d565b612515565b005b6107036125b5565b60405161071091906136d1565b60405180910390f35b610733600480360381019061072e9190613b48565b612641565b005b61074f600480360381019061074a9190613e40565b6127c6565b005b600c5f9054906101000a900460ff1681565b6001805461077090613ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613ec7565b80156107e75780601f106107be576101008083540402835291602001916107e7565b820191905f5260205f20905b8154815290600101906020018083116107ca57829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561083157505f82115b15610a19575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610928575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561095f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610a0b919061382f565b60405180910390a350610afc565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610af3919061382f565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060109081610bbd9190614094565b5050565b60035481116112795760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc4576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d82575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610dea575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e296128d5565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e749190614190565b92505081905550610e836128d5565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610fd99190614190565b81548110610fea57610fe96141c3565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110611056576110556141c3565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806110af576110ae6141f0565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506111979190614190565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761125e6128d5565b60405161126b919061382f565b60405180910390a3506113b3565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113a55781816113289190614190565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6113b0848484612908565b50505b505050565b600d5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611442576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b61150c838383610bc1565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156115f4575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161159293929190614250565b6020604051808303815f875af11580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906142ed565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561162b576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116c48282612f0e565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118de576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461197c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d8190555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555081600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b60028054611ae590613ec7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190613ec7565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6d919061362e565b60405180910390a35050565b5f611c85338484612908565b905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d11576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b6032811015611d4a57611d3d838260328110611d3257611d316141c3565b5b6020020151836116c8565b8080600101915050611d13565b505050565b611d5a858585610bc1565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611e46575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611de4959493929190614344565b6020604051808303815f875af1158015611e00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2491906142ed565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611e7d576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f60118054611e9490613ec7565b90501115611ece576011611ea783612f32565b604051602001611eb892919061444a565b60405160208183030381529060405290506122d2565b5f82604051602001611ee0919061448d565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611611f7e576040518060400160405280600581526020017f312e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600581526020017f477265656e000000000000000000000000000000000000000000000000000000815250905061217e565b60a08360ff1611611ffe576040518060400160405280600581526020017f322e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600481526020017f426c756500000000000000000000000000000000000000000000000000000000815250905061217d565b60d28360ff161161207e576040518060400160405280600581526020017f332e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f507572706c650000000000000000000000000000000000000000000000000000815250905061217c565b60f08360ff16116120fe576040518060400160405280600581526020017f342e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f4f72616e67650000000000000000000000000000000000000000000000000000815250905061217b565b60ff8360ff161161217a576040518060400160405280600581526020017f352e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600381526020017f526564000000000000000000000000000000000000000000000000000000000081525090505b5b5b5b5b5f61218886612f32565b60405160200161219891906144cd565b6040516020818303038152906040526040516020016121b791906145d4565b6040516020818303038152906040526010846040516020016121da92919061444a565b6040516020818303038152906040526040516020016121fa9291906145f5565b60405160208183030381529060405290505f8260405160200161221d9190614688565b60405160208183030381529060405290505f6040518060400160405280600481526020017f227d5d7d000000000000000000000000000000000000000000000000000000008152509050828260405160200161227a9291906145f5565b6040516020818303038152906040528160405160200161229b9291906145f5565b6040516020818303038152906040526040516020016122ba91906146cf565b60405160208183030381529060405296505050505050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461235b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6011805461238590613ec7565b80601f01602080910402602001604051908101604052809291908181526020018280546123b190613ec7565b80156123fc5780601f106123d3576101008083540402835291602001916123fc565b820191905f5260205f20905b8154815290600101906020018083116123df57829003601f168201915b505050505081565b600c60029054906101000a900460ff1681565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601190816124ca9190614094565b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600f602052805f5260405f205f915054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612599576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f6101000a81548160ff02191690831515021790555050565b601080546125c290613ec7565b80601f01602080910402602001604051908101604052809291908181526020018280546125ee90613ec7565b80156126395780601f1061261057610100808354040283529160200191612639565b820191905f5260205f20905b81548152906001019060200180831161261c57829003601f168201915b505050505081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361272a576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82518110156128d05781600f5f85848151811061286c5761286b6141c3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061284c565b505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a6129039190614823565b905090565b5f806129126128d5565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129e29190614190565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c60029054906101000a900460ff1615612b6a575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612b6957600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612b6857600d5460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115612b67576040517f2636c5e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b600c60019054906101000a900460ff1615612c0057600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612bff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600c5f9054906101000a900460ff16158015612c6757505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbe57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612cf5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612dc8575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d8d919061489a565b8484612d99919061489a565b612da39190614190565b90505f5b81811015612dc557612db889612ffc565b8080600101915050612da7565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e9b575f8382612e23919061489a565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e6c919061489a565b612e769190614190565b90505f5b81811015612e9857612e8b88613241565b8080600101915050612e7a565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051612ef8919061382f565b60405180910390a3600193505050509392505050565b8160019081612f1d9190614094565b508060029081612f2d9190614094565b505050565b60605f6001612f40846134c3565b0190505f8167ffffffffffffffff811115612f5e57612f5d613850565b5b6040519080825280601f01601f191660200182016040528015612f905781602001600182028036833780820191505090505b5090505f82602001820190505b600115612ff1578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612fe657612fe561486d565b5b0494505f8503612f9d575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613061576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506130ec9190614190565b815481106130fd576130fc6141c3565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613155576131546141f0565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036132a6576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613352576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061344f9190614190565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061351f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816135155761351461486d565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061355c576d04ee2d6d415b85acef810000000083816135525761355161486d565b5b0492506020810190505b662386f26fc10000831061358b57662386f26fc1000083816135815761358061486d565b5b0492506010810190505b6305f5e10083106135b4576305f5e10083816135aa576135a961486d565b5b0492506008810190505b61271083106135d95761271083816135cf576135ce61486d565b5b0492506004810190505b606483106135fc57606483816135f2576135f161486d565b5b0492506002810190505b600a831061360b576001810190505b80915050919050565b5f8115159050919050565b61362881613614565b82525050565b5f6020820190506136415f83018461361f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561367e578082015181840152602081019050613663565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136a382613647565b6136ad8185613651565b93506136bd818560208601613661565b6136c681613689565b840191505092915050565b5f6020820190508181035f8301526136e98184613699565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61371481613702565b811461371e575f80fd5b50565b5f8135905061372f8161370b565b92915050565b5f6020828403121561374a576137496136fa565b5b5f61375784828501613721565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61378982613760565b9050919050565b6137998161377f565b82525050565b5f6020820190506137b25f830184613790565b92915050565b6137c18161377f565b81146137cb575f80fd5b50565b5f813590506137dc816137b8565b92915050565b5f80604083850312156137f8576137f76136fa565b5b5f613805858286016137ce565b925050602061381685828601613721565b9150509250929050565b61382981613702565b82525050565b5f6020820190506138425f830184613820565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61388682613689565b810181811067ffffffffffffffff821117156138a5576138a4613850565b5b80604052505050565b5f6138b76136f1565b90506138c3828261387d565b919050565b5f67ffffffffffffffff8211156138e2576138e1613850565b5b6138eb82613689565b9050602081019050919050565b828183375f83830152505050565b5f613918613913846138c8565b6138ae565b9050828152602081018484840111156139345761393361384c565b5b61393f8482856138f8565b509392505050565b5f82601f83011261395b5761395a613848565b5b813561396b848260208601613906565b91505092915050565b5f60208284031215613989576139886136fa565b5b5f82013567ffffffffffffffff8111156139a6576139a56136fe565b5b6139b284828501613947565b91505092915050565b5f805f606084860312156139d2576139d16136fa565b5b5f6139df868287016137ce565b93505060206139f0868287016137ce565b9250506040613a0186828701613721565b9150509250925092565b5f60ff82169050919050565b613a2081613a0b565b82525050565b5f602082019050613a395f830184613a17565b92915050565b5f8060408385031215613a5557613a546136fa565b5b5f83013567ffffffffffffffff811115613a7257613a716136fe565b5b613a7e85828601613947565b925050602083013567ffffffffffffffff811115613a9f57613a9e6136fe565b5b613aab85828601613947565b9150509250929050565b613abe81613614565b8114613ac8575f80fd5b50565b5f81359050613ad981613ab5565b92915050565b5f8060408385031215613af557613af46136fa565b5b5f613b02858286016137ce565b9250506020613b1385828601613acb565b9150509250929050565b5f60208284031215613b3257613b316136fa565b5b5f613b3f84828501613acb565b91505092915050565b5f60208284031215613b5d57613b5c6136fa565b5b5f613b6a848285016137ce565b91505092915050565b5f67ffffffffffffffff821115613b8d57613b8c613850565b5b602082029050919050565b5f80fd5b5f613bae613ba984613b73565b6138ae565b90508060208402830185811115613bc857613bc7613b98565b5b835b81811015613bf15780613bdd88826137ce565b845260208401935050602081019050613bca565b5050509392505050565b5f82601f830112613c0f57613c0e613848565b5b6032613c1c848285613b9c565b91505092915050565b5f806106608385031215613c3c57613c3b6136fa565b5b5f613c4985828601613bfb565b925050610640613c5b85828601613acb565b9150509250929050565b5f80fd5b5f8083601f840112613c7e57613c7d613848565b5b8235905067ffffffffffffffff811115613c9b57613c9a613c65565b5b602083019150836001820283011115613cb757613cb6613b98565b5b9250929050565b5f805f805f60808688031215613cd757613cd66136fa565b5b5f613ce4888289016137ce565b9550506020613cf5888289016137ce565b9450506040613d0688828901613721565b935050606086013567ffffffffffffffff811115613d2757613d266136fe565b5b613d3388828901613c69565b92509250509295509295909350565b5f8060408385031215613d5857613d576136fa565b5b5f613d65858286016137ce565b9250506020613d76858286016137ce565b9150509250929050565b5f67ffffffffffffffff821115613d9a57613d99613850565b5b602082029050602081019050919050565b5f613dbd613db884613d80565b6138ae565b90508083825260208201905060208402830185811115613de057613ddf613b98565b5b835b81811015613e095780613df588826137ce565b845260208401935050602081019050613de2565b5050509392505050565b5f82601f830112613e2757613e26613848565b5b8135613e37848260208601613dab565b91505092915050565b5f8060408385031215613e5657613e556136fa565b5b5f83013567ffffffffffffffff811115613e7357613e726136fe565b5b613e7f85828601613e13565b9250506020613e9085828601613acb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ede57607f821691505b602082108103613ef157613ef0613e9a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f18565b613f5d8683613f18565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613f98613f93613f8e84613702565b613f75565b613702565b9050919050565b5f819050919050565b613fb183613f7e565b613fc5613fbd82613f9f565b848454613f24565b825550505050565b5f90565b613fd9613fcd565b613fe4818484613fa8565b505050565b5b8181101561400757613ffc5f82613fd1565b600181019050613fea565b5050565b601f82111561404c5761401d81613ef7565b61402684613f09565b81016020851015614035578190505b61404961404185613f09565b830182613fe9565b50505b505050565b5f82821c905092915050565b5f61406c5f1984600802614051565b1980831691505092915050565b5f614084838361405d565b9150826002028217905092915050565b61409d82613647565b67ffffffffffffffff8111156140b6576140b5613850565b5b6140c08254613ec7565b6140cb82828561400b565b5f60209050601f8311600181146140fc575f84156140ea578287015190505b6140f48582614079565b86555061415b565b601f19841661410a86613ef7565b5f5b828110156141315784890151825560018201915060208501945060208101905061410c565b8683101561414e578489015161414a601f89168261405d565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61419a82613702565b91506141a583613702565b92508282039050818111156141bd576141bc614163565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f61423b5f8361421d565b91506142468261422d565b5f82019050919050565b5f6080820190506142635f830186613790565b6142706020830185613790565b61427d6040830184613820565b818103606083015261428e81614230565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6142cc81614298565b81146142d6575f80fd5b50565b5f815190506142e7816142c3565b92915050565b5f60208284031215614302576143016136fa565b5b5f61430f848285016142d9565b91505092915050565b5f614323838561421d565b93506143308385846138f8565b61433983613689565b840190509392505050565b5f6080820190506143575f830188613790565b6143646020830187613790565b6143716040830186613820565b8181036060830152614384818486614318565b90509695505050505050565b5f81905092915050565b5f81546143a681613ec7565b6143b08186614390565b9450600182165f81146143ca57600181146143df57614411565b60ff1983168652811515820286019350614411565b6143e885613ef7565b5f5b83811015614409578154818901526001820191506020810190506143ea565b838801955050505b50505092915050565b5f61442482613647565b61442e8185614390565b935061443e818560208601613661565b80840191505092915050565b5f614455828561439a565b9150614461828461441a565b91508190509392505050565b5f819050919050565b61448761448282613702565b61446d565b82525050565b5f6144988284614476565b60208201915081905092915050565b7f7b226e616d65223a202250616e646f7261202300000000000000000000000000815250565b5f6144d7826144a7565b6013820191506144e7828461441a565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f665f8201527f2031302c303030205265706c6963616e747320656e61626c656420627920455260208201527f433430342c20616e206578706572696d656e74616c20746f6b656e207374616e60408201527f646172642e222c2265787465726e616c5f75726c223a2268747470733a2f2f7060608201527f616e646f72612e6275696c64222c22696d616765223a22000000000000000000608082015250565b5f6145be609783614390565b91506145c9826144f2565b609782019050919050565b5f6145df828461441a565b91506145ea826145b2565b915081905092915050565b5f614600828561441a565b915061460c828461441a565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a22435f8201527f6f6c6f72222c2276616c7565223a220000000000000000000000000000000000602082015250565b5f614672602f83614390565b915061467d82614618565b602f82019050919050565b5f61469282614666565b915061469e828461441a565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b5f6146d9826146a9565b601b820191506146e9828461441a565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b60018511156147495780860481111561472557614724614163565b5b60018516156147345780820291505b8081029050614742856146f4565b9450614709565b94509492505050565b5f82614761576001905061481c565b8161476e575f905061481c565b8160018114614784576002811461478e576147bd565b600191505061481c565b60ff8411156147a05761479f614163565b5b8360020a9150848211156147b7576147b6614163565b5b5061481c565b5060208310610133831016604e8410600b84101617156147f25782820a9050838111156147ed576147ec614163565b5b61481c565b6147ff8484846001614700565b9250905081840481111561481657614815614163565b5b81810290505b9392505050565b5f61482d82613702565b915061483883613a0b565b92506148657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614752565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6148a482613702565b91506148af83613702565b9250826148bf576148be61486d565b5b82820490509291505056fea2646970667358221220f650d8c595feb2c2e30a974197ec08b333e961494c800238645d41fa5aabd91964736f6c63430008180033000000000000000000000000d4ea208271ff8d07c360fb43936d4513b09bf293
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061023b575f3560e01c80638da5cb5b11610139578063d547cfb7116100b6578063eb8835ab1161007a578063eb8835ab146106af578063f275f64b146106df578063f28ca1dd146106fb578063f2fde38b14610719578063f6fb000e146107355761023b565b8063d547cfb7146105f7578063daf4f66e14610615578063dd62ed3e14610633578063e0df5b6f14610663578063e985e9c51461067f5761023b565b8063a9059cbb116100fd578063a9059cbb14610543578063af639db514610573578063b88d4fde1461058f578063c87b56dd146105ab578063d1454bf4146105db5761023b565b80638da5cb5b1461049d57806395364a84146104bb57806395d89b41146104d95780639b19251a146104f7578063a22cb465146105275761023b565b8063313ce567116101c75780635fcd7e501161018b5780635fcd7e50146103e95780636352211e1461040557806370a082311461043557806377d3e6161461046557806386a22eff146104815761023b565b8063313ce5671461035957806342842e0e146103775780634f02c42014610393578063504334c2146103b157806353d6fd59146103cd5761023b565b806318160ddd1161020e57806318160ddd146102db57806318d217c3146102f957806323b872dd146103155780632967c24f146103315780632b9689581461034f5761023b565b8063064a59d01461023f57806306fdde031461025d578063081812fc1461027b578063095ea7b3146102ab575b5f80fd5b610247610751565b604051610254919061362e565b60405180910390f35b610265610763565b60405161027291906136d1565b60405180910390f35b61029560048036038101906102909190613735565b6107ef565b6040516102a2919061379f565b60405180910390f35b6102c560048036038101906102c091906137e2565b61081f565b6040516102d2919061362e565b60405180910390f35b6102e3610b06565b6040516102f0919061382f565b60405180910390f35b610313600480360381019061030e9190613974565b610b2a565b005b61032f600480360381019061032a91906139bb565b610bc1565b005b6103396113b8565b604051610346919061382f565b60405180910390f35b6103576113be565b005b6103616114dd565b60405161036e9190613a26565b60405180910390f35b610391600480360381019061038c91906139bb565b611501565b005b61039b611630565b6040516103a8919061382f565b60405180910390f35b6103cb60048036038101906103c69190613a3f565b611636565b005b6103e760048036038101906103e29190613adf565b6116c8565b005b61040360048036038101906103fe9190613b1d565b6117a4565b005b61041f600480360381019061041a9190613735565b611845565b60405161042c919061379f565b60405180910390f35b61044f600480360381019061044a9190613b48565b6118e3565b60405161045c919061382f565b60405180910390f35b61047f600480360381019061047a9190613735565b6118f8565b005b61049b60048036038101906104969190613adf565b611986565b005b6104a5611aa2565b6040516104b2919061379f565b60405180910390f35b6104c3611ac5565b6040516104d0919061362e565b60405180910390f35b6104e1611ad8565b6040516104ee91906136d1565b60405180910390f35b610511600480360381019061050c9190613b48565b611b64565b60405161051e919061362e565b60405180910390f35b610541600480360381019061053c9190613adf565b611b81565b005b61055d600480360381019061055891906137e2565b611c79565b60405161056a919061362e565b60405180910390f35b61058d60048036038101906105889190613c25565b611c8d565b005b6105a960048036038101906105a49190613cbe565b611d4f565b005b6105c560048036038101906105c09190613735565b611e84565b6040516105d291906136d1565b60405180910390f35b6105f560048036038101906105f09190613b1d565b6122d7565b005b6105ff612378565b60405161060c91906136d1565b60405180910390f35b61061d612404565b60405161062a919061362e565b60405180910390f35b61064d60048036038101906106489190613d42565b612417565b60405161065a919061382f565b60405180910390f35b61067d60048036038101906106789190613974565b612437565b005b61069960048036038101906106949190613d42565b6124ce565b6040516106a6919061362e565b60405180910390f35b6106c960048036038101906106c49190613b48565b6124f8565b6040516106d6919061362e565b60405180910390f35b6106f960048036038101906106f49190613b1d565b612515565b005b6107036125b5565b60405161071091906136d1565b60405180910390f35b610733600480360381019061072e9190613b48565b612641565b005b61074f600480360381019061074a9190613e40565b6127c6565b005b600c5f9054906101000a900460ff1681565b6001805461077090613ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613ec7565b80156107e75780601f106107be576101008083540402835291602001916107e7565b820191905f5260205f20905b8154815290600101906020018083116107ca57829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600354821115801561083157505f82115b15610a19575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610928575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561095f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610a0b919061382f565b60405180910390a350610afc565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610af3919061382f565b60405180910390a35b6001905092915050565b7f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060109081610bbd9190614094565b5050565b60035481116112795760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cc4576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610d82575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610dea575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610e21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e296128d5565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e749190614190565b92505081905550610e836128d5565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610fd99190614190565b81548110610fea57610fe96141c3565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110611056576110556141c3565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806110af576110ae6141f0565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506111979190614190565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148761125e6128d5565b60405161126b919061382f565b60405180910390a3506113b3565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146113a55781816113289190614190565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b6113b0848484612908565b50505b505050565b600d5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611442576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000001281565b61150c838383610bc1565b5f8273ffffffffffffffffffffffffffffffffffffffff163b141580156115f4575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b815260040161159293929190614250565b6020604051808303815f875af11580156115ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d291906142ed565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b1561162b576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ba576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116c48282612f0e565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118de576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461197c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d8190555050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555081600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b60028054611ae590613ec7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1190613ec7565b8015611b5c5780601f10611b3357610100808354040283529160200191611b5c565b820191905f5260205f20905b815481529060010190602001808311611b3f57829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6d919061362e565b60405180910390a35050565b5f611c85338484612908565b905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d11576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b6032811015611d4a57611d3d838260328110611d3257611d316141c3565b5b6020020151836116c8565b8080600101915050611d13565b505050565b611d5a858585610bc1565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611e46575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b8152600401611de4959493929190614344565b6020604051808303815f875af1158015611e00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e2491906142ed565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611e7d576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f60118054611e9490613ec7565b90501115611ece576011611ea783612f32565b604051602001611eb892919061444a565b60405160208183030381529060405290506122d2565b5f82604051602001611ee0919061448d565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611611f7e576040518060400160405280600581526020017f312e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600581526020017f477265656e000000000000000000000000000000000000000000000000000000815250905061217e565b60a08360ff1611611ffe576040518060400160405280600581526020017f322e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600481526020017f426c756500000000000000000000000000000000000000000000000000000000815250905061217d565b60d28360ff161161207e576040518060400160405280600581526020017f332e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f507572706c650000000000000000000000000000000000000000000000000000815250905061217c565b60f08360ff16116120fe576040518060400160405280600581526020017f342e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f4f72616e67650000000000000000000000000000000000000000000000000000815250905061217b565b60ff8360ff161161217a576040518060400160405280600581526020017f352e67696600000000000000000000000000000000000000000000000000000081525091506040518060400160405280600381526020017f526564000000000000000000000000000000000000000000000000000000000081525090505b5b5b5b5b5f61218886612f32565b60405160200161219891906144cd565b6040516020818303038152906040526040516020016121b791906145d4565b6040516020818303038152906040526010846040516020016121da92919061444a565b6040516020818303038152906040526040516020016121fa9291906145f5565b60405160208183030381529060405290505f8260405160200161221d9190614688565b60405160208183030381529060405290505f6040518060400160405280600481526020017f227d5d7d000000000000000000000000000000000000000000000000000000008152509050828260405160200161227a9291906145f5565b6040516020818303038152906040528160405160200161229b9291906145f5565b6040516020818303038152906040526040516020016122ba91906146cf565b60405160208183030381529060405296505050505050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461235b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6011805461238590613ec7565b80601f01602080910402602001604051908101604052809291908181526020018280546123b190613ec7565b80156123fc5780601f106123d3576101008083540402835291602001916123fc565b820191905f5260205f20905b8154815290600101906020018083116123df57829003601f168201915b505050505081565b600c60029054906101000a900460ff1681565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124bb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601190816124ca9190614094565b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600f602052805f5260405f205f915054906101000a900460ff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612599576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c5f6101000a81548160ff02191690831515021790555050565b601080546125c290613ec7565b80601f01602080910402602001604051908101604052809291908181526020018280546125ee90613ec7565b80156126395780601f1061261057610100808354040283529160200191612639565b820191905f5260205f20905b81548152906001019060200180831161261c57829003601f168201915b505050505081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126c5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361272a576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461284a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82518110156128d05781600f5f85848151811061286c5761286b6141c3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808060010191505061284c565b505050565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a6129039190614823565b905090565b5f806129126128d5565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546129e29190614190565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600c60029054906101000a900460ff1615612b6a575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612b6957600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612b6857600d5460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541115612b67576040517f2636c5e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b600c60019054906101000a900460ff1615612c0057600f5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612bff576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600c5f9054906101000a900460ff16158015612c6757505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b8015612cbe57505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612cf5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612dc8575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612d8d919061489a565b8484612d99919061489a565b612da39190614190565b90505f5b81811015612dc557612db889612ffc565b8080600101915050612da7565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e9b575f8382612e23919061489a565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e6c919061489a565b612e769190614190565b90505f5b81811015612e9857612e8b88613241565b8080600101915050612e7a565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e03148787604051612ef8919061382f565b60405180910390a3600193505050509392505050565b8160019081612f1d9190614094565b508060029081612f2d9190614094565b505050565b60605f6001612f40846134c3565b0190505f8167ffffffffffffffff811115612f5e57612f5d613850565b5b6040519080825280601f01601f191660200182016040528015612f905781602001600182028036833780820191505090505b5090505f82602001820190505b600115612ff1578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612fe657612fe561486d565b5b0494505f8503612f9d575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613061576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506130ec9190614190565b815481106130fd576130fc6141c3565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480613155576131546141f0565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036132a6576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613352576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061344f9190614190565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061351f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816135155761351461486d565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061355c576d04ee2d6d415b85acef810000000083816135525761355161486d565b5b0492506020810190505b662386f26fc10000831061358b57662386f26fc1000083816135815761358061486d565b5b0492506010810190505b6305f5e10083106135b4576305f5e10083816135aa576135a961486d565b5b0492506008810190505b61271083106135d95761271083816135cf576135ce61486d565b5b0492506004810190505b606483106135fc57606483816135f2576135f161486d565b5b0492506002810190505b600a831061360b576001810190505b80915050919050565b5f8115159050919050565b61362881613614565b82525050565b5f6020820190506136415f83018461361f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561367e578082015181840152602081019050613663565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6136a382613647565b6136ad8185613651565b93506136bd818560208601613661565b6136c681613689565b840191505092915050565b5f6020820190508181035f8301526136e98184613699565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61371481613702565b811461371e575f80fd5b50565b5f8135905061372f8161370b565b92915050565b5f6020828403121561374a576137496136fa565b5b5f61375784828501613721565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61378982613760565b9050919050565b6137998161377f565b82525050565b5f6020820190506137b25f830184613790565b92915050565b6137c18161377f565b81146137cb575f80fd5b50565b5f813590506137dc816137b8565b92915050565b5f80604083850312156137f8576137f76136fa565b5b5f613805858286016137ce565b925050602061381685828601613721565b9150509250929050565b61382981613702565b82525050565b5f6020820190506138425f830184613820565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61388682613689565b810181811067ffffffffffffffff821117156138a5576138a4613850565b5b80604052505050565b5f6138b76136f1565b90506138c3828261387d565b919050565b5f67ffffffffffffffff8211156138e2576138e1613850565b5b6138eb82613689565b9050602081019050919050565b828183375f83830152505050565b5f613918613913846138c8565b6138ae565b9050828152602081018484840111156139345761393361384c565b5b61393f8482856138f8565b509392505050565b5f82601f83011261395b5761395a613848565b5b813561396b848260208601613906565b91505092915050565b5f60208284031215613989576139886136fa565b5b5f82013567ffffffffffffffff8111156139a6576139a56136fe565b5b6139b284828501613947565b91505092915050565b5f805f606084860312156139d2576139d16136fa565b5b5f6139df868287016137ce565b93505060206139f0868287016137ce565b9250506040613a0186828701613721565b9150509250925092565b5f60ff82169050919050565b613a2081613a0b565b82525050565b5f602082019050613a395f830184613a17565b92915050565b5f8060408385031215613a5557613a546136fa565b5b5f83013567ffffffffffffffff811115613a7257613a716136fe565b5b613a7e85828601613947565b925050602083013567ffffffffffffffff811115613a9f57613a9e6136fe565b5b613aab85828601613947565b9150509250929050565b613abe81613614565b8114613ac8575f80fd5b50565b5f81359050613ad981613ab5565b92915050565b5f8060408385031215613af557613af46136fa565b5b5f613b02858286016137ce565b9250506020613b1385828601613acb565b9150509250929050565b5f60208284031215613b3257613b316136fa565b5b5f613b3f84828501613acb565b91505092915050565b5f60208284031215613b5d57613b5c6136fa565b5b5f613b6a848285016137ce565b91505092915050565b5f67ffffffffffffffff821115613b8d57613b8c613850565b5b602082029050919050565b5f80fd5b5f613bae613ba984613b73565b6138ae565b90508060208402830185811115613bc857613bc7613b98565b5b835b81811015613bf15780613bdd88826137ce565b845260208401935050602081019050613bca565b5050509392505050565b5f82601f830112613c0f57613c0e613848565b5b6032613c1c848285613b9c565b91505092915050565b5f806106608385031215613c3c57613c3b6136fa565b5b5f613c4985828601613bfb565b925050610640613c5b85828601613acb565b9150509250929050565b5f80fd5b5f8083601f840112613c7e57613c7d613848565b5b8235905067ffffffffffffffff811115613c9b57613c9a613c65565b5b602083019150836001820283011115613cb757613cb6613b98565b5b9250929050565b5f805f805f60808688031215613cd757613cd66136fa565b5b5f613ce4888289016137ce565b9550506020613cf5888289016137ce565b9450506040613d0688828901613721565b935050606086013567ffffffffffffffff811115613d2757613d266136fe565b5b613d3388828901613c69565b92509250509295509295909350565b5f8060408385031215613d5857613d576136fa565b5b5f613d65858286016137ce565b9250506020613d76858286016137ce565b9150509250929050565b5f67ffffffffffffffff821115613d9a57613d99613850565b5b602082029050602081019050919050565b5f613dbd613db884613d80565b6138ae565b90508083825260208201905060208402830185811115613de057613ddf613b98565b5b835b81811015613e095780613df588826137ce565b845260208401935050602081019050613de2565b5050509392505050565b5f82601f830112613e2757613e26613848565b5b8135613e37848260208601613dab565b91505092915050565b5f8060408385031215613e5657613e556136fa565b5b5f83013567ffffffffffffffff811115613e7357613e726136fe565b5b613e7f85828601613e13565b9250506020613e9085828601613acb565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ede57607f821691505b602082108103613ef157613ef0613e9a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f537fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f18565b613f5d8683613f18565b95508019841693508086168417925050509392505050565b5f819050919050565b5f613f98613f93613f8e84613702565b613f75565b613702565b9050919050565b5f819050919050565b613fb183613f7e565b613fc5613fbd82613f9f565b848454613f24565b825550505050565b5f90565b613fd9613fcd565b613fe4818484613fa8565b505050565b5b8181101561400757613ffc5f82613fd1565b600181019050613fea565b5050565b601f82111561404c5761401d81613ef7565b61402684613f09565b81016020851015614035578190505b61404961404185613f09565b830182613fe9565b50505b505050565b5f82821c905092915050565b5f61406c5f1984600802614051565b1980831691505092915050565b5f614084838361405d565b9150826002028217905092915050565b61409d82613647565b67ffffffffffffffff8111156140b6576140b5613850565b5b6140c08254613ec7565b6140cb82828561400b565b5f60209050601f8311600181146140fc575f84156140ea578287015190505b6140f48582614079565b86555061415b565b601f19841661410a86613ef7565b5f5b828110156141315784890151825560018201915060208501945060208101905061410c565b8683101561414e578489015161414a601f89168261405d565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61419a82613702565b91506141a583613702565b92508282039050818111156141bd576141bc614163565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f61423b5f8361421d565b91506142468261422d565b5f82019050919050565b5f6080820190506142635f830186613790565b6142706020830185613790565b61427d6040830184613820565b818103606083015261428e81614230565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6142cc81614298565b81146142d6575f80fd5b50565b5f815190506142e7816142c3565b92915050565b5f60208284031215614302576143016136fa565b5b5f61430f848285016142d9565b91505092915050565b5f614323838561421d565b93506143308385846138f8565b61433983613689565b840190509392505050565b5f6080820190506143575f830188613790565b6143646020830187613790565b6143716040830186613820565b8181036060830152614384818486614318565b90509695505050505050565b5f81905092915050565b5f81546143a681613ec7565b6143b08186614390565b9450600182165f81146143ca57600181146143df57614411565b60ff1983168652811515820286019350614411565b6143e885613ef7565b5f5b83811015614409578154818901526001820191506020810190506143ea565b838801955050505b50505092915050565b5f61442482613647565b61442e8185614390565b935061443e818560208601613661565b80840191505092915050565b5f614455828561439a565b9150614461828461441a565b91508190509392505050565b5f819050919050565b61448761448282613702565b61446d565b82525050565b5f6144988284614476565b60208201915081905092915050565b7f7b226e616d65223a202250616e646f7261202300000000000000000000000000815250565b5f6144d7826144a7565b6013820191506144e7828461441a565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f665f8201527f2031302c303030205265706c6963616e747320656e61626c656420627920455260208201527f433430342c20616e206578706572696d656e74616c20746f6b656e207374616e60408201527f646172642e222c2265787465726e616c5f75726c223a2268747470733a2f2f7060608201527f616e646f72612e6275696c64222c22696d616765223a22000000000000000000608082015250565b5f6145be609783614390565b91506145c9826144f2565b609782019050919050565b5f6145df828461441a565b91506145ea826145b2565b915081905092915050565b5f614600828561441a565b915061460c828461441a565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a22435f8201527f6f6c6f72222c2276616c7565223a220000000000000000000000000000000000602082015250565b5f614672602f83614390565b915061467d82614618565b602f82019050919050565b5f61469282614666565b915061469e828461441a565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b5f6146d9826146a9565b601b820191506146e9828461441a565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b60018511156147495780860481111561472557614724614163565b5b60018516156147345780820291505b8081029050614742856146f4565b9450614709565b94509492505050565b5f82614761576001905061481c565b8161476e575f905061481c565b8160018114614784576002811461478e576147bd565b600191505061481c565b60ff8411156147a05761479f614163565b5b8360020a9150848211156147b7576147b6614163565b5b5061481c565b5060208310610133831016604e8410600b84101617156147f25782820a9050838111156147ed576147ec614163565b5b61481c565b6147ff8484846001614700565b9250905081840481111561481657614815614163565b5b81810290505b9392505050565b5f61482d82613702565b915061483883613a0b565b92506148657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614752565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6148a482613702565b91506148af83613702565b9250826148bf576148be61486d565b5b82820490509291505056fea2646970667358221220f650d8c595feb2c2e30a974197ec08b333e961494c800238645d41fa5aabd91964736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d4ea208271ff8d07c360fb43936d4513b09bf293
-----Decoded View---------------
Arg [0] : _owner (address): 0xD4ea208271FF8d07C360fB43936d4513b09Bf293
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d4ea208271ff8d07c360fb43936d4513b09bf293
Deployed Bytecode Sourcemap
33504:2764:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32289:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22906:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23617:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25446:649;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23142:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33789:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26502:1716;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32408:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20880:151;;;:::i;:::-;;23042:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28521:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23277:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34242:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24775:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32907;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24958:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23383:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32779:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33269:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20321:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32331:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22960:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24228:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26146:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28277:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34009:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29021:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34408:1857;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32673:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33566:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32367:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23497:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33895:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23728:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32489:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32546:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33538:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20653:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33028:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32289:35;;;;;;;;;;;;;:::o;22906:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23617:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;25446:649::-;25551:4;25591:6;;25577:10;:20;;:38;;;;;25614:1;25601:10;:14;25577:38;25573:491;;;25632:13;25648:8;:20;25657:10;25648:20;;;;;;;;;;;;;;;;;;;;;25632:36;;25703:5;25689:19;;:10;:19;;;;:59;;;;;25713:16;:23;25730:5;25713:23;;;;;;;;;;;;;;;:35;25737:10;25713:35;;;;;;;;;;;;;;;;;;;;;;;;;25712:36;25689:59;25685:121;;;25776:14;;;;;;;;;;;;;;25685:121;25848:7;25822:11;:23;25834:10;25822:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25893:7;25877:36;;25886:5;25877:36;;;25902:10;25877:36;;;;;;:::i;:::-;;;;;;;;25617:308;25573:491;;;25979:10;25946:9;:21;25956:10;25946:21;;;;;;;;;;;;;;;:30;25968:7;25946:30;;;;;;;;;;;;;;;:43;;;;26032:7;26011:41;;26020:10;26011:41;;;26041:10;26011:41;;;;;;:::i;:::-;;;;;;;;25573:491;26083:4;26076:11;;25446:649;;;;:::o;23142:36::-;;;:::o;33789:98::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;33871:8:::1;33861:7;:18;;;;;;:::i;:::-;;33789:98:::0;:::o;26502:1716::-;26648:6;;26634:10;:20;26630:1581;;26683:8;:20;26692:10;26683:20;;;;;;;;;;;;;;;;;;;;;26675:28;;:4;:28;;;26671:91;;26731:15;;;;;;;;;;;;;;26671:91;26796:1;26782:16;;:2;:16;;;26778:82;;26826:18;;;;;;;;;;;;;;26778:82;26912:4;26898:18;;:10;:18;;;;:74;;;;;26938:16;:22;26955:4;26938:22;;;;;;;;;;;;;;;:34;26961:10;26938:34;;;;;;;;;;;;;;;;;;;;;;;;;26937:35;26898:74;:132;;;;;27007:11;:23;27019:10;27007:23;;;;;;;;;;;;;;;;;;;;;26993:37;;:10;:37;;;;26898:132;26876:226;;;27072:14;;;;;;;;;;;;;;26876:226;27137:10;:8;:10::i;:::-;27118:9;:15;27128:4;27118:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27210:10;:8;:10::i;:::-;27193:9;:13;27203:2;27193:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;27275:2;27252:8;:20;27261:10;27252:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;27299:11;:23;27311:10;27299:23;;;;;;;;;;;;27292:30;;;;;;;;;;;27380:17;27400:6;:12;27407:4;27400:12;;;;;;;;;;;;;;;27435:1;27413:6;:12;27420:4;27413:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;27400:37;;;;;;;;:::i;:::-;;;;;;;;;;27380:57;;27492:9;27452:6;:12;27459:4;27452:12;;;;;;;;;;;;;;;27465:11;:23;27477:10;27465:23;;;;;;;;;;;;27452:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;27536:6;:12;27543:4;27536:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27640:11;:23;27652:10;27640:23;;;;;;;;;;;;27615:11;:22;27627:9;27615:22;;;;;;;;;;;:48;;;;27717:6;:10;27724:2;27717:10;;;;;;;;;;;;;;;27733;27717:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27847:1;27827:6;:10;27834:2;27827:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;27801:11;:23;27813:10;27801:23;;;;;;;;;;;:47;;;;27889:10;27885:2;27870:30;;27879:4;27870:30;;;;;;;;;;;;27940:2;27920:35;;27934:4;27920:35;;;27944:10;:8;:10::i;:::-;27920:35;;;;;;:::i;:::-;;;;;;;;26656:1311;26630:1581;;;27988:15;28006:9;:15;28016:4;28006:15;;;;;;;;;;;;;;;:27;28022:10;28006:27;;;;;;;;;;;;;;;;27988:45;;28065:17;28054:7;:28;28050:101;;28141:10;28131:7;:20;;;;:::i;:::-;28101:9;:15;28111:4;28101:15;;;;;;;;;;;;;;;:27;28117:10;28101:27;;;;;;;;;;;;;;;:50;;;;28050:101;28168:31;28178:4;28184:2;28188:10;28168:9;:31::i;:::-;;27973:238;26630:1581;26502:1716;;;:::o;32408:40::-;;;;:::o;20880:151::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;20959:1:::1;20943:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;21020:1;20979:44;;21000:10;20979:44;;;;;;;;;;;;20880:151::o:0;23042:31::-;;;:::o;28521:405::-;28645:26;28658:4;28664:2;28668;28645:12;:26::i;:::-;28720:1;28702:2;:14;;;:19;;:154;;;;;28816:40;;;28738:118;;;28753:2;28738:35;;;28774:10;28786:4;28792:2;28738:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;28702:154;28684:235;;;28890:17;;;;;;;;;;;;;;28684:235;28521:405;;;:::o;23277:21::-;;;;:::o;34242:158::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;34362:30:::1;34377:5;34384:7;34362:14;:30::i;:::-;34242:158:::0;;:::o;24775:111::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;24873:5:::1;24853:9;:17;24863:6;24853:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;24775:111:::0;;:::o;32907:::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;32995:15:::1;32978:14;;:32;;;;;;;;;;;;;;;;;;32907:111:::0;:::o;24958:193::-;25016:13;25050:8;:12;25059:2;25050:12;;;;;;;;;;;;;;;;;;;;;25042:20;;25096:1;25079:19;;:5;:19;;;25075:69;;25122:10;;;;;;;;;;;;;;25075:69;24958:193;;;:::o;23383:44::-;;;;;;;;;;;;;;;;;:::o;32779:120::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;32876:15:::1;32859:14;:32;;;;32779:120:::0;:::o;33269:136::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;33361:6:::1;33342:9;:16;33352:5;33342:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;33392:5;33378:11;;:19;;;;;;;;;;;;;;;;;;33269:136:::0;;:::o;20321:20::-;;;;;;;;;;;;:::o;32331:29::-;;;;;;;;;;;;;:::o;22960:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24228:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;26146:207::-;26273:8;26232:16;:28;26249:10;26232:28;;;;;;;;;;;;;;;:38;26261:8;26232:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;26326:8;26299:46;;26314:10;26299:46;;;26336:8;26299:46;;;;;;:::i;:::-;;;;;;;;26146:207;;:::o;28277:167::-;28374:4;28403:33;28413:10;28425:2;28429:6;28403:9;:33::i;:::-;28396:40;;28277:167;;;;:::o;34009:225::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;34131:9:::1;34126:101;34150:13;34146:1;:17;34126:101;;;34185:30;34198:6;34205:1;34198:9;;;;;;;:::i;:::-;;;;;;34209:5;34185:12;:30::i;:::-;34165:3;;;;;;;34126:101;;;;34009:225:::0;;:::o;29021:437::-;29175:26;29188:4;29194:2;29198;29175:12;:26::i;:::-;29250:1;29232:2;:14;;;:19;;:156;;;;;29348:40;;;29268:120;;;29283:2;29268:35;;;29304:10;29316:4;29322:2;29326:4;;29268:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;29232:156;29214:237;;;29422:17;;;;;;;;;;;;;;29214:237;29021:437;;;;;:::o;34408:1857::-;34468:13;34527:1;34504:12;34498:26;;;;;:::i;:::-;;;:30;34494:1764;;;34566:12;34580:20;34597:2;34580:16;:20::i;:::-;34552:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34545:56;;;;34494:1764;34634:10;34687:2;34670:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;34660:31;;;;;;34647:46;;34634:59;;34708:19;34742;34790:3;34782:4;:11;;;34778:528;;34814:15;;;;;;;;;;;;;;;;;;;34848;;;;;;;;;;;;;;;;;;;34778:528;;;34897:3;34889:4;:11;;;34885:421;;34921:15;;;;;;;;;;;;;;;;;;;34955:14;;;;;;;;;;;;;;;;;;;34885:421;;;35003:3;34995:4;:11;;;34991:315;;35027:15;;;;;;;;;;;;;;;;;;;35061:16;;;;;;;;;;;;;;;;;;;34991:315;;;35111:3;35103:4;:11;;;35099:207;;35135:15;;;;;;;;;;;;;;;;;;;35169:16;;;;;;;;;;;;;;;;;;;35099:207;;;35219:3;35211:4;:11;;;35207:99;;35243:15;;;;;;;;;;;;;;;;;;;35277:13;;;;;;;;;;;;;;;;;;;35207:99;35099:207;34991:315;34885:421;34778:528;35322:26;35456:20;35473:2;35456:16;:20::i;:::-;35419:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;35383:289;;;;;;;;:::i;:::-;;;;;;;;;;;;;35705:7;35714:5;35691:29;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35351:384;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35322:413;;35750:27;35880:5;35780:120;;;;;;;;:::i;:::-;;;;;;;;;;;;;35750:150;;35915:28;:37;;;;;;;;;;;;;;;;;;;36135:12;36149:13;36121:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36190:14;36081:146;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35993:253;;;;;;;;:::i;:::-;;;;;;;;;;;;;35969:277;;;;;;;;34408:1857;;;;:::o;32673:98::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;32753:10:::1;32741:9;;:22;;;;;;;;;;;;;;;;;;32673:98:::0;:::o;33566:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32367:34::-;;;;;;;;;;;;;:::o;23497:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33895:106::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;33984:9:::1;33969:12;:24;;;;;;:::i;:::-;;33895:106:::0;:::o;23728:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32489:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;32546:119::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;32640:17:::1;32621:16;;:36;;;;;;;;;;;;;;;;;;32546:119:::0;:::o;33538:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20653:219::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;20754:1:::1;20736:20;;:6;:20;;::::0;20732:47:::1;;20765:14;;;;;;;;;;;;;;20732:47;20800:6;20792:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;20857:6;20824:40;;20845:10;20824:40;;;;;;;;;;;;20653:219:::0;:::o;33028:233::-;20408:5;;;;;;;;;;20394:19;;:10;:19;;;20390:46;;20422:14;;;;;;;;;;;;;;20390:46;33151:9:::1;33146:108;33170:7;:14;33166:1;:18;33146:108;;;33237:5;33206:16;:28;33223:7;33231:1;33223:10;;;;;;;;:::i;:::-;;;;;;;;33206:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;33186:3;;;;;;;33146:108;;;;33028:233:::0;;:::o;31171:90::-;31214:7;31245:8;31241:2;:12;;;;:::i;:::-;31234:19;;31171:90;:::o;29526:1606::-;29639:4;29656:12;29671:10;:8;:10::i;:::-;29656:25;;29692:27;29722:9;:15;29732:4;29722:15;;;;;;;;;;;;;;;;29692:45;;29748:29;29780:9;:13;29790:2;29780:13;;;;;;;;;;;;;;;;29748:45;;29825:6;29806:9;:15;29816:4;29806:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;29886:6;29869:9;:13;29879:2;29869:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;29919:14;;;;;;;;;;;29916:264;;;29961:5;;;;;;;;;;29953:13;;:4;:13;;;29949:220;;29996:11;;;;;;;;;;;29990:17;;:2;:17;;;29987:167;;30051:14;;30035:9;:13;30045:2;30035:13;;;;;;;;;;;;;;;;:30;30031:104;;;30101:10;;;;;;;;;;;;;;30031:104;29987:167;29949:220;29916:264;30196:9;;;;;;;;;;;30192:123;;;30227:16;:20;30244:2;30227:20;;;;;;;;;;;;;;;;;;;;;;;;;30222:82;;30274:14;;;;;;;;;;;;;;30222:82;30192:123;30332:16;;;;;;;;;;;30331:17;:34;;;;;30360:5;;;;;;;;;;30352:13;;:4;:13;;;;30331:34;:49;;;;;30375:5;;;;;;;;;;30369:11;;:2;:11;;;;30331:49;30327:89;;;30402:14;;;;;;;;;;;;;;30327:89;30490:9;:15;30500:4;30490:15;;;;;;;;;;;;;;;;;;;;;;;;;30485:251;;30522:22;30614:4;30596:9;:15;30606:4;30596:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;30570:4;30548:19;:26;;;;:::i;:::-;30547:72;;;;:::i;:::-;30522:97;;30639:9;30634:91;30658:14;30654:1;:18;30634:91;;;30698:11;30704:4;30698:5;:11::i;:::-;30674:3;;;;;;;30634:91;;;;30507:229;30485:251;30812:9;:13;30822:2;30812:13;;;;;;;;;;;;;;;;;;;;;;;;;30807:247;;30842:22;30934:4;30910:21;:28;;;;:::i;:::-;30884:4;30868:9;:13;30878:2;30868:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;30867:72;;;;:::i;:::-;30842:97;;30959:9;30954:89;30978:14;30974:1;:18;30954:89;;;31018:9;31024:2;31018:5;:9::i;:::-;30994:3;;;;;;;30954:89;;;;30827:227;30807:247;31091:2;31071:31;;31085:4;31071:31;;;31095:6;31071:31;;;;;;:::i;:::-;;;;;;;;31120:4;31113:11;;;;;29526:1606;;;;;:::o;32132:149::-;32241:5;32234:4;:12;;;;;;:::i;:::-;;32266:7;32257:6;:16;;;;;;:::i;:::-;;32132:149;;:::o;17495:718::-;17551:13;17602:14;17639:1;17619:17;17630:5;17619:10;:17::i;:::-;:21;17602:38;;17655:20;17689:6;17678:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17655:41;;17711:11;17840:6;17836:2;17832:15;17824:6;17820:28;17813:35;;17877:290;17884:4;17877:290;;;17909:5;;;;;;;;18051:10;18046:2;18039:5;18035:14;18030:32;18025:3;18017:46;18109:2;18100:11;;;;;;:::i;:::-;;;;;18143:1;18134:5;:10;17877:290;18130:21;17877:290;18188:6;18181:13;;;;;17495:718;;;:::o;31751:373::-;31828:1;31812:18;;:4;:18;;;31808:73;;31854:15;;;;;;;;;;;;;;31808:73;31893:10;31906:6;:12;31913:4;31906:12;;;;;;;;;;;;;;;31941:1;31919:6;:12;31926:4;31919:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;31906:37;;;;;;;;:::i;:::-;;;;;;;;;;31893:50;;31954:6;:12;31961:4;31954:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31990:11;:15;32002:2;31990:15;;;;;;;;;;;31983:22;;;32023:8;:12;32032:2;32023:12;;;;;;;;;;;;32016:19;;;;;;;;;;;32053:11;:15;32065:2;32053:15;;;;;;;;;;;;32046:22;;;;;;;;;;;32113:2;32109:1;32086:30;;32095:4;32086:30;;;;;;;;;;;;31797:327;31751:373;:::o;31269:474::-;31342:1;31328:16;;:2;:16;;;31324:74;;31368:18;;;;;;;;;;;;;;31324:74;31435:6;;:8;;;;;;;;;;;;;31467:10;31480:6;;31467:19;;31527:1;31503:26;;:8;:12;31512:2;31503:12;;;;;;;;;;;;;;;;;;;;;:26;;;31499:81;;31553:15;;;;;;;;;;;;;;31499:81;31607:2;31592:8;:12;31601:2;31592:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;31620:6;:10;31627:2;31620:10;;;;;;;;;;;;;;;31636:2;31620:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31688:1;31668:6;:10;31675:2;31668:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;31650:11;:15;31662:2;31650:15;;;;;;;;;;;:39;;;;31732:2;31728;31707:28;;31724:1;31707:28;;;;;;;;;;;;31313:430;31269:474;:::o;13899:948::-;13952:7;13972:14;13989:1;13972:18;;14039:8;14030:5;:17;14026:106;;14077:8;14068:17;;;;;;:::i;:::-;;;;;14114:2;14104:12;;;;14026:106;14159:8;14150:5;:17;14146:106;;14197:8;14188:17;;;;;;:::i;:::-;;;;;14234:2;14224:12;;;;14146:106;14279:8;14270:5;:17;14266:106;;14317:8;14308:17;;;;;;:::i;:::-;;;;;14354:2;14344:12;;;;14266:106;14399:7;14390:5;:16;14386:103;;14436:7;14427:16;;;;;;:::i;:::-;;;;;14472:1;14462:11;;;;14386:103;14516:7;14507:5;:16;14503:103;;14553:7;14544:16;;;;;;:::i;:::-;;;;;14589:1;14579:11;;;;14503:103;14633:7;14624:5;:16;14620:103;;14670:7;14661:16;;;;;;:::i;:::-;;;;;14706:1;14696:11;;;;14620:103;14750:7;14741:5;:16;14737:68;;14788:1;14778:11;;;;14737:68;14833:6;14826:13;;;13899:948;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:99::-;486:6;520:5;514:12;504:22;;434:99;;;:::o;539:169::-;623:11;657:6;652:3;645:19;697:4;692:3;688:14;673:29;;539:169;;;;:::o;714:246::-;795:1;805:113;819:6;816:1;813:13;805:113;;;904:1;899:3;895:11;889:18;885:1;880:3;876:11;869:39;841:2;838:1;834:10;829:15;;805:113;;;952:1;943:6;938:3;934:16;927:27;776:184;714:246;;;:::o;966:102::-;1007:6;1058:2;1054:7;1049:2;1042:5;1038:14;1034:28;1024:38;;966:102;;;:::o;1074:377::-;1162:3;1190:39;1223:5;1190:39;:::i;:::-;1245:71;1309:6;1304:3;1245:71;:::i;:::-;1238:78;;1325:65;1383:6;1378:3;1371:4;1364:5;1360:16;1325:65;:::i;:::-;1415:29;1437:6;1415:29;:::i;:::-;1410:3;1406:39;1399:46;;1166:285;1074:377;;;;:::o;1457:313::-;1570:4;1608:2;1597:9;1593:18;1585:26;;1657:9;1651:4;1647:20;1643:1;1632:9;1628:17;1621:47;1685:78;1758:4;1749:6;1685:78;:::i;:::-;1677:86;;1457:313;;;;:::o;1776:75::-;1809:6;1842:2;1836:9;1826:19;;1776:75;:::o;1857:117::-;1966:1;1963;1956:12;1980:117;2089:1;2086;2079:12;2103:77;2140:7;2169:5;2158:16;;2103:77;;;:::o;2186:122::-;2259:24;2277:5;2259:24;:::i;:::-;2252:5;2249:35;2239:63;;2298:1;2295;2288:12;2239:63;2186:122;:::o;2314:139::-;2360:5;2398:6;2385:20;2376:29;;2414:33;2441:5;2414:33;:::i;:::-;2314:139;;;;:::o;2459:329::-;2518:6;2567:2;2555:9;2546:7;2542:23;2538:32;2535:119;;;2573:79;;:::i;:::-;2535:119;2693:1;2718:53;2763:7;2754:6;2743:9;2739:22;2718:53;:::i;:::-;2708:63;;2664:117;2459:329;;;;:::o;2794:126::-;2831:7;2871:42;2864:5;2860:54;2849:65;;2794:126;;;:::o;2926:96::-;2963:7;2992:24;3010:5;2992:24;:::i;:::-;2981:35;;2926:96;;;:::o;3028:118::-;3115:24;3133:5;3115:24;:::i;:::-;3110:3;3103:37;3028:118;;:::o;3152:222::-;3245:4;3283:2;3272:9;3268:18;3260:26;;3296:71;3364:1;3353:9;3349:17;3340:6;3296:71;:::i;:::-;3152:222;;;;:::o;3380:122::-;3453:24;3471:5;3453:24;:::i;:::-;3446:5;3443:35;3433:63;;3492:1;3489;3482:12;3433:63;3380:122;:::o;3508:139::-;3554:5;3592:6;3579:20;3570:29;;3608:33;3635:5;3608:33;:::i;:::-;3508:139;;;;:::o;3653:474::-;3721:6;3729;3778:2;3766:9;3757:7;3753:23;3749:32;3746:119;;;3784:79;;:::i;:::-;3746:119;3904:1;3929:53;3974:7;3965:6;3954:9;3950:22;3929:53;:::i;:::-;3919:63;;3875:117;4031:2;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4002:118;3653:474;;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:117::-;4594:1;4591;4584:12;4608:117;4717:1;4714;4707:12;4731:180;4779:77;4776:1;4769:88;4876:4;4873:1;4866:15;4900:4;4897:1;4890:15;4917:281;5000:27;5022:4;5000:27;:::i;:::-;4992:6;4988:40;5130:6;5118:10;5115:22;5094:18;5082:10;5079:34;5076:62;5073:88;;;5141:18;;:::i;:::-;5073:88;5181:10;5177:2;5170:22;4960:238;4917:281;;:::o;5204:129::-;5238:6;5265:20;;:::i;:::-;5255:30;;5294:33;5322:4;5314:6;5294:33;:::i;:::-;5204:129;;;:::o;5339:308::-;5401:4;5491:18;5483:6;5480:30;5477:56;;;5513:18;;:::i;:::-;5477:56;5551:29;5573:6;5551:29;:::i;:::-;5543:37;;5635:4;5629;5625:15;5617:23;;5339:308;;;:::o;5653:146::-;5750:6;5745:3;5740;5727:30;5791:1;5782:6;5777:3;5773:16;5766:27;5653:146;;;:::o;5805:425::-;5883:5;5908:66;5924:49;5966:6;5924:49;:::i;:::-;5908:66;:::i;:::-;5899:75;;5997:6;5990:5;5983:21;6035:4;6028:5;6024:16;6073:3;6064:6;6059:3;6055:16;6052:25;6049:112;;;6080:79;;:::i;:::-;6049:112;6170:54;6217:6;6212:3;6207;6170:54;:::i;:::-;5889:341;5805:425;;;;;:::o;6250:340::-;6306:5;6355:3;6348:4;6340:6;6336:17;6332:27;6322:122;;6363:79;;:::i;:::-;6322:122;6480:6;6467:20;6505:79;6580:3;6572:6;6565:4;6557:6;6553:17;6505:79;:::i;:::-;6496:88;;6312:278;6250:340;;;;:::o;6596:509::-;6665:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:119;;;6720:79;;:::i;:::-;6682:119;6868:1;6857:9;6853:17;6840:31;6898:18;6890:6;6887:30;6884:117;;;6920:79;;:::i;:::-;6884:117;7025:63;7080:7;7071:6;7060:9;7056:22;7025:63;:::i;:::-;7015:73;;6811:287;6596:509;;;;:::o;7111:619::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:53;7705:7;7696:6;7685:9;7681:22;7660:53;:::i;:::-;7650:63;;7605:118;7111:619;;;;;:::o;7736:86::-;7771:7;7811:4;7804:5;7800:16;7789:27;;7736:86;;;:::o;7828:112::-;7911:22;7927:5;7911:22;:::i;:::-;7906:3;7899:35;7828:112;;:::o;7946:214::-;8035:4;8073:2;8062:9;8058:18;8050:26;;8086:67;8150:1;8139:9;8135:17;8126:6;8086:67;:::i;:::-;7946:214;;;;:::o;8166:834::-;8254:6;8262;8311:2;8299:9;8290:7;8286:23;8282:32;8279:119;;;8317:79;;:::i;:::-;8279:119;8465:1;8454:9;8450:17;8437:31;8495:18;8487:6;8484:30;8481:117;;;8517:79;;:::i;:::-;8481:117;8622:63;8677:7;8668:6;8657:9;8653:22;8622:63;:::i;:::-;8612:73;;8408:287;8762:2;8751:9;8747:18;8734:32;8793:18;8785:6;8782:30;8779:117;;;8815:79;;:::i;:::-;8779:117;8920:63;8975:7;8966:6;8955:9;8951:22;8920:63;:::i;:::-;8910:73;;8705:288;8166:834;;;;;:::o;9006:116::-;9076:21;9091:5;9076:21;:::i;:::-;9069:5;9066:32;9056:60;;9112:1;9109;9102:12;9056:60;9006:116;:::o;9128:133::-;9171:5;9209:6;9196:20;9187:29;;9225:30;9249:5;9225:30;:::i;:::-;9128:133;;;;:::o;9267:468::-;9332:6;9340;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9515:1;9540:53;9585:7;9576:6;9565:9;9561:22;9540:53;:::i;:::-;9530:63;;9486:117;9642:2;9668:50;9710:7;9701:6;9690:9;9686:22;9668:50;:::i;:::-;9658:60;;9613:115;9267:468;;;;;:::o;9741:323::-;9797:6;9846:2;9834:9;9825:7;9821:23;9817:32;9814:119;;;9852:79;;:::i;:::-;9814:119;9972:1;9997:50;10039:7;10030:6;10019:9;10015:22;9997:50;:::i;:::-;9987:60;;9943:114;9741:323;;;;:::o;10070:329::-;10129:6;10178:2;10166:9;10157:7;10153:23;10149:32;10146:119;;;10184:79;;:::i;:::-;10146:119;10304:1;10329:53;10374:7;10365:6;10354:9;10350:22;10329:53;:::i;:::-;10319:63;;10275:117;10070:329;;;;:::o;10405:250::-;10481:4;10571:18;10563:6;10560:30;10557:56;;;10593:18;;:::i;:::-;10557:56;10643:4;10635:6;10631:17;10623:25;;10405:250;;;:::o;10661:117::-;10770:1;10767;10760:12;10803:645;10898:5;10923:80;10939:63;10995:6;10939:63;:::i;:::-;10923:80;:::i;:::-;10914:89;;11023:5;11076:4;11068:6;11064:17;11056:6;11052:30;11105:3;11097:6;11094:15;11091:122;;;11124:79;;:::i;:::-;11091:122;11239:6;11222:220;11256:6;11251:3;11248:15;11222:220;;;11331:3;11360:37;11393:3;11381:10;11360:37;:::i;:::-;11355:3;11348:50;11427:4;11422:3;11418:14;11411:21;;11298:144;11282:4;11277:3;11273:14;11266:21;;11222:220;;;11226:21;10904:544;;10803:645;;;;;:::o;11473:341::-;11543:5;11592:3;11585:4;11577:6;11573:17;11569:27;11559:122;;11600:79;;:::i;:::-;11559:122;11704:4;11726:82;11804:3;11796:6;11788;11726:82;:::i;:::-;11717:91;;11549:265;11473:341;;;;:::o;11820:520::-;11909:6;11917;11966:4;11954:9;11945:7;11941:23;11937:34;11934:121;;;11974:79;;:::i;:::-;11934:121;12094:1;12119:77;12188:7;12179:6;12168:9;12164:22;12119:77;:::i;:::-;12109:87;;12065:141;12245:4;12273:50;12315:7;12306:6;12295:9;12291:22;12273:50;:::i;:::-;12263:60;;12216:117;11820:520;;;;;:::o;12346:117::-;12455:1;12452;12445:12;12482:552;12539:8;12549:6;12599:3;12592:4;12584:6;12580:17;12576:27;12566:122;;12607:79;;:::i;:::-;12566:122;12720:6;12707:20;12697:30;;12750:18;12742:6;12739:30;12736:117;;;12772:79;;:::i;:::-;12736:117;12886:4;12878:6;12874:17;12862:29;;12940:3;12932:4;12924:6;12920:17;12910:8;12906:32;12903:41;12900:128;;;12947:79;;:::i;:::-;12900:128;12482:552;;;;;:::o;13040:963::-;13137:6;13145;13153;13161;13169;13218:3;13206:9;13197:7;13193:23;13189:33;13186:120;;;13225:79;;:::i;:::-;13186:120;13345:1;13370:53;13415:7;13406:6;13395:9;13391:22;13370:53;:::i;:::-;13360:63;;13316:117;13472:2;13498:53;13543:7;13534:6;13523:9;13519:22;13498:53;:::i;:::-;13488:63;;13443:118;13600:2;13626:53;13671:7;13662:6;13651:9;13647:22;13626:53;:::i;:::-;13616:63;;13571:118;13756:2;13745:9;13741:18;13728:32;13787:18;13779:6;13776:30;13773:117;;;13809:79;;:::i;:::-;13773:117;13922:64;13978:7;13969:6;13958:9;13954:22;13922:64;:::i;:::-;13904:82;;;;13699:297;13040:963;;;;;;;;:::o;14009:474::-;14077:6;14085;14134:2;14122:9;14113:7;14109:23;14105:32;14102:119;;;14140:79;;:::i;:::-;14102:119;14260:1;14285:53;14330:7;14321:6;14310:9;14306:22;14285:53;:::i;:::-;14275:63;;14231:117;14387:2;14413:53;14458:7;14449:6;14438:9;14434:22;14413:53;:::i;:::-;14403:63;;14358:118;14009:474;;;;;:::o;14489:311::-;14566:4;14656:18;14648:6;14645:30;14642:56;;;14678:18;;:::i;:::-;14642:56;14728:4;14720:6;14716:17;14708:25;;14788:4;14782;14778:15;14770:23;;14489:311;;;:::o;14823:710::-;14919:5;14944:81;14960:64;15017:6;14960:64;:::i;:::-;14944:81;:::i;:::-;14935:90;;15045:5;15074:6;15067:5;15060:21;15108:4;15101:5;15097:16;15090:23;;15161:4;15153:6;15149:17;15141:6;15137:30;15190:3;15182:6;15179:15;15176:122;;;15209:79;;:::i;:::-;15176:122;15324:6;15307:220;15341:6;15336:3;15333:15;15307:220;;;15416:3;15445:37;15478:3;15466:10;15445:37;:::i;:::-;15440:3;15433:50;15512:4;15507:3;15503:14;15496:21;;15383:144;15367:4;15362:3;15358:14;15351:21;;15307:220;;;15311:21;14925:608;;14823:710;;;;;:::o;15556:370::-;15627:5;15676:3;15669:4;15661:6;15657:17;15653:27;15643:122;;15684:79;;:::i;:::-;15643:122;15801:6;15788:20;15826:94;15916:3;15908:6;15901:4;15893:6;15889:17;15826:94;:::i;:::-;15817:103;;15633:293;15556:370;;;;:::o;15932:678::-;16022:6;16030;16079:2;16067:9;16058:7;16054:23;16050:32;16047:119;;;16085:79;;:::i;:::-;16047:119;16233:1;16222:9;16218:17;16205:31;16263:18;16255:6;16252:30;16249:117;;;16285:79;;:::i;:::-;16249:117;16390:78;16460:7;16451:6;16440:9;16436:22;16390:78;:::i;:::-;16380:88;;16176:302;16517:2;16543:50;16585:7;16576:6;16565:9;16561:22;16543:50;:::i;:::-;16533:60;;16488:115;15932:678;;;;;:::o;16616:180::-;16664:77;16661:1;16654:88;16761:4;16758:1;16751:15;16785:4;16782:1;16775:15;16802:320;16846:6;16883:1;16877:4;16873:12;16863:22;;16930:1;16924:4;16920:12;16951:18;16941:81;;17007:4;16999:6;16995:17;16985:27;;16941:81;17069:2;17061:6;17058:14;17038:18;17035:38;17032:84;;17088:18;;:::i;:::-;17032:84;16853:269;16802:320;;;:::o;17128:141::-;17177:4;17200:3;17192:11;;17223:3;17220:1;17213:14;17257:4;17254:1;17244:18;17236:26;;17128:141;;;:::o;17275:93::-;17312:6;17359:2;17354;17347:5;17343:14;17339:23;17329:33;;17275:93;;;:::o;17374:107::-;17418:8;17468:5;17462:4;17458:16;17437:37;;17374:107;;;;:::o;17487:393::-;17556:6;17606:1;17594:10;17590:18;17629:97;17659:66;17648:9;17629:97;:::i;:::-;17747:39;17777:8;17766:9;17747:39;:::i;:::-;17735:51;;17819:4;17815:9;17808:5;17804:21;17795:30;;17868:4;17858:8;17854:19;17847:5;17844:30;17834:40;;17563:317;;17487:393;;;;;:::o;17886:60::-;17914:3;17935:5;17928:12;;17886:60;;;:::o;17952:142::-;18002:9;18035:53;18053:34;18062:24;18080:5;18062:24;:::i;:::-;18053:34;:::i;:::-;18035:53;:::i;:::-;18022:66;;17952:142;;;:::o;18100:75::-;18143:3;18164:5;18157:12;;18100:75;;;:::o;18181:269::-;18291:39;18322:7;18291:39;:::i;:::-;18352:91;18401:41;18425:16;18401:41;:::i;:::-;18393:6;18386:4;18380:11;18352:91;:::i;:::-;18346:4;18339:105;18257:193;18181:269;;;:::o;18456:73::-;18501:3;18456:73;:::o;18535:189::-;18612:32;;:::i;:::-;18653:65;18711:6;18703;18697:4;18653:65;:::i;:::-;18588:136;18535:189;;:::o;18730:186::-;18790:120;18807:3;18800:5;18797:14;18790:120;;;18861:39;18898:1;18891:5;18861:39;:::i;:::-;18834:1;18827:5;18823:13;18814:22;;18790:120;;;18730:186;;:::o;18922:543::-;19023:2;19018:3;19015:11;19012:446;;;19057:38;19089:5;19057:38;:::i;:::-;19141:29;19159:10;19141:29;:::i;:::-;19131:8;19127:44;19324:2;19312:10;19309:18;19306:49;;;19345:8;19330:23;;19306:49;19368:80;19424:22;19442:3;19424:22;:::i;:::-;19414:8;19410:37;19397:11;19368:80;:::i;:::-;19027:431;;19012:446;18922:543;;;:::o;19471:117::-;19525:8;19575:5;19569:4;19565:16;19544:37;;19471:117;;;;:::o;19594:169::-;19638:6;19671:51;19719:1;19715:6;19707:5;19704:1;19700:13;19671:51;:::i;:::-;19667:56;19752:4;19746;19742:15;19732:25;;19645:118;19594:169;;;;:::o;19768:295::-;19844:4;19990:29;20015:3;20009:4;19990:29;:::i;:::-;19982:37;;20052:3;20049:1;20045:11;20039:4;20036:21;20028:29;;19768:295;;;;:::o;20068:1395::-;20185:37;20218:3;20185:37;:::i;:::-;20287:18;20279:6;20276:30;20273:56;;;20309:18;;:::i;:::-;20273:56;20353:38;20385:4;20379:11;20353:38;:::i;:::-;20438:67;20498:6;20490;20484:4;20438:67;:::i;:::-;20532:1;20556:4;20543:17;;20588:2;20580:6;20577:14;20605:1;20600:618;;;;21262:1;21279:6;21276:77;;;21328:9;21323:3;21319:19;21313:26;21304:35;;21276:77;21379:67;21439:6;21432:5;21379:67;:::i;:::-;21373:4;21366:81;21235:222;20570:887;;20600:618;20652:4;20648:9;20640:6;20636:22;20686:37;20718:4;20686:37;:::i;:::-;20745:1;20759:208;20773:7;20770:1;20767:14;20759:208;;;20852:9;20847:3;20843:19;20837:26;20829:6;20822:42;20903:1;20895:6;20891:14;20881:24;;20950:2;20939:9;20935:18;20922:31;;20796:4;20793:1;20789:12;20784:17;;20759:208;;;20995:6;20986:7;20983:19;20980:179;;;21053:9;21048:3;21044:19;21038:26;21096:48;21138:4;21130:6;21126:17;21115:9;21096:48;:::i;:::-;21088:6;21081:64;21003:156;20980:179;21205:1;21201;21193:6;21189:14;21185:22;21179:4;21172:36;20607:611;;;20570:887;;20160:1303;;;20068:1395;;:::o;21469:180::-;21517:77;21514:1;21507:88;21614:4;21611:1;21604:15;21638:4;21635:1;21628:15;21655:194;21695:4;21715:20;21733:1;21715:20;:::i;:::-;21710:25;;21749:20;21767:1;21749:20;:::i;:::-;21744:25;;21793:1;21790;21786:9;21778:17;;21817:1;21811:4;21808:11;21805:37;;;21822:18;;:::i;:::-;21805:37;21655:194;;;;:::o;21855:180::-;21903:77;21900:1;21893:88;22000:4;21997:1;21990:15;22024:4;22021:1;22014:15;22041:180;22089:77;22086:1;22079:88;22186:4;22183:1;22176:15;22210:4;22207:1;22200:15;22227:168;22310:11;22344:6;22339:3;22332:19;22384:4;22379:3;22375:14;22360:29;;22227:168;;;;:::o;22401:114::-;;:::o;22521:362::-;22662:3;22683:65;22746:1;22741:3;22683:65;:::i;:::-;22676:72;;22757:93;22846:3;22757:93;:::i;:::-;22875:1;22870:3;22866:11;22859:18;;22521:362;;;:::o;22889:748::-;23138:4;23176:3;23165:9;23161:19;23153:27;;23190:71;23258:1;23247:9;23243:17;23234:6;23190:71;:::i;:::-;23271:72;23339:2;23328:9;23324:18;23315:6;23271:72;:::i;:::-;23353;23421:2;23410:9;23406:18;23397:6;23353:72;:::i;:::-;23472:9;23466:4;23462:20;23457:2;23446:9;23442:18;23435:48;23500:130;23625:4;23500:130;:::i;:::-;23492:138;;22889:748;;;;;;:::o;23643:149::-;23679:7;23719:66;23712:5;23708:78;23697:89;;23643:149;;;:::o;23798:120::-;23870:23;23887:5;23870:23;:::i;:::-;23863:5;23860:34;23850:62;;23908:1;23905;23898:12;23850:62;23798:120;:::o;23924:141::-;23980:5;24011:6;24005:13;23996:22;;24027:32;24053:5;24027:32;:::i;:::-;23924:141;;;;:::o;24071:349::-;24140:6;24189:2;24177:9;24168:7;24164:23;24160:32;24157:119;;;24195:79;;:::i;:::-;24157:119;24315:1;24340:63;24395:7;24386:6;24375:9;24371:22;24340:63;:::i;:::-;24330:73;;24286:127;24071:349;;;;:::o;24448:314::-;24544:3;24565:70;24628:6;24623:3;24565:70;:::i;:::-;24558:77;;24645:56;24694:6;24689:3;24682:5;24645:56;:::i;:::-;24726:29;24748:6;24726:29;:::i;:::-;24721:3;24717:39;24710:46;;24448:314;;;;;:::o;24768:660::-;24973:4;25011:3;25000:9;24996:19;24988:27;;25025:71;25093:1;25082:9;25078:17;25069:6;25025:71;:::i;:::-;25106:72;25174:2;25163:9;25159:18;25150:6;25106:72;:::i;:::-;25188;25256:2;25245:9;25241:18;25232:6;25188:72;:::i;:::-;25307:9;25301:4;25297:20;25292:2;25281:9;25277:18;25270:48;25335:86;25416:4;25407:6;25399;25335:86;:::i;:::-;25327:94;;24768:660;;;;;;;;:::o;25434:148::-;25536:11;25573:3;25558:18;;25434:148;;;;:::o;25612:874::-;25715:3;25752:5;25746:12;25781:36;25807:9;25781:36;:::i;:::-;25833:89;25915:6;25910:3;25833:89;:::i;:::-;25826:96;;25953:1;25942:9;25938:17;25969:1;25964:166;;;;26144:1;26139:341;;;;25931:549;;25964:166;26048:4;26044:9;26033;26029:25;26024:3;26017:38;26110:6;26103:14;26096:22;26088:6;26084:35;26079:3;26075:45;26068:52;;25964:166;;26139:341;26206:38;26238:5;26206:38;:::i;:::-;26266:1;26280:154;26294:6;26291:1;26288:13;26280:154;;;26368:7;26362:14;26358:1;26353:3;26349:11;26342:35;26418:1;26409:7;26405:15;26394:26;;26316:4;26313:1;26309:12;26304:17;;26280:154;;;26463:6;26458:3;26454:16;26447:23;;26146:334;;25931:549;;25719:767;;25612:874;;;;:::o;26492:390::-;26598:3;26626:39;26659:5;26626:39;:::i;:::-;26681:89;26763:6;26758:3;26681:89;:::i;:::-;26674:96;;26779:65;26837:6;26832:3;26825:4;26818:5;26814:16;26779:65;:::i;:::-;26869:6;26864:3;26860:16;26853:23;;26602:280;26492:390;;;;:::o;26888:429::-;27065:3;27087:92;27175:3;27166:6;27087:92;:::i;:::-;27080:99;;27196:95;27287:3;27278:6;27196:95;:::i;:::-;27189:102;;27308:3;27301:10;;26888:429;;;;;:::o;27323:79::-;27362:7;27391:5;27380:16;;27323:79;;;:::o;27408:157::-;27513:45;27533:24;27551:5;27533:24;:::i;:::-;27513:45;:::i;:::-;27508:3;27501:58;27408:157;;:::o;27571:256::-;27683:3;27698:75;27769:3;27760:6;27698:75;:::i;:::-;27798:2;27793:3;27789:12;27782:19;;27818:3;27811:10;;27571:256;;;;:::o;27833:242::-;28002:66;27997:3;27990:79;27833:242;:::o;28081:542::-;28304:3;28319:138;28453:3;28319:138;:::i;:::-;28482:2;28477:3;28473:12;28466:19;;28502:95;28593:3;28584:6;28502:95;:::i;:::-;28495:102;;28614:3;28607:10;;28081:542;;;;:::o;28629:555::-;28769:66;28765:1;28757:6;28753:14;28746:90;28870:34;28865:2;28857:6;28853:15;28846:59;28939:34;28934:2;28926:6;28922:15;28915:59;29008:66;29003:2;28995:6;28991:15;28984:91;29110:66;29104:3;29096:6;29092:16;29085:92;28629:555;:::o;29190:404::-;29350:3;29371:86;29453:3;29448;29371:86;:::i;:::-;29364:93;;29466;29555:3;29466:93;:::i;:::-;29584:3;29579;29575:13;29568:20;;29190:404;;;:::o;29600:541::-;29833:3;29855:95;29946:3;29937:6;29855:95;:::i;:::-;29848:102;;29967:148;30111:3;29967:148;:::i;:::-;29960:155;;30132:3;30125:10;;29600:541;;;;:::o;30147:435::-;30327:3;30349:95;30440:3;30431:6;30349:95;:::i;:::-;30342:102;;30461:95;30552:3;30543:6;30461:95;:::i;:::-;30454:102;;30573:3;30566:10;;30147:435;;;;;:::o;30588:315::-;30728:66;30724:1;30716:6;30712:14;30705:90;30829:66;30824:2;30816:6;30812:15;30805:91;30588:315;:::o;30909:402::-;31069:3;31090:85;31172:2;31167:3;31090:85;:::i;:::-;31083:92;;31184:93;31273:3;31184:93;:::i;:::-;31302:2;31297:3;31293:12;31286:19;;30909:402;;;:::o;31317:541::-;31550:3;31572:148;31716:3;31572:148;:::i;:::-;31565:155;;31737:95;31828:3;31819:6;31737:95;:::i;:::-;31730:102;;31849:3;31842:10;;31317:541;;;;:::o;31864:205::-;32033:29;32028:3;32021:42;31864:205;:::o;32075:542::-;32298:3;32313:138;32447:3;32313:138;:::i;:::-;32476:2;32471:3;32467:12;32460:19;;32496:95;32587:3;32578:6;32496:95;:::i;:::-;32489:102;;32608:3;32601:10;;32075:542;;;;:::o;32623:102::-;32665:8;32712:5;32709:1;32705:13;32684:34;;32623:102;;;:::o;32731:848::-;32792:5;32799:4;32823:6;32814:15;;32847:5;32838:14;;32861:712;32882:1;32872:8;32869:15;32861:712;;;32977:4;32972:3;32968:14;32962:4;32959:24;32956:50;;;32986:18;;:::i;:::-;32956:50;33036:1;33026:8;33022:16;33019:451;;;33451:4;33444:5;33440:16;33431:25;;33019:451;33501:4;33495;33491:15;33483:23;;33531:32;33554:8;33531:32;:::i;:::-;33519:44;;32861:712;;;32731:848;;;;;;;:::o;33585:1073::-;33639:5;33830:8;33820:40;;33851:1;33842:10;;33853:5;;33820:40;33879:4;33869:36;;33896:1;33887:10;;33898:5;;33869:36;33965:4;34013:1;34008:27;;;;34049:1;34044:191;;;;33958:277;;34008:27;34026:1;34017:10;;34028:5;;;34044:191;34089:3;34079:8;34076:17;34073:43;;;34096:18;;:::i;:::-;34073:43;34145:8;34142:1;34138:16;34129:25;;34180:3;34173:5;34170:14;34167:40;;;34187:18;;:::i;:::-;34167:40;34220:5;;;33958:277;;34344:2;34334:8;34331:16;34325:3;34319:4;34316:13;34312:36;34294:2;34284:8;34281:16;34276:2;34270:4;34267:12;34263:35;34247:111;34244:246;;;34400:8;34394:4;34390:19;34381:28;;34435:3;34428:5;34425:14;34422:40;;;34442:18;;:::i;:::-;34422:40;34475:5;;34244:246;34515:42;34553:3;34543:8;34537:4;34534:1;34515:42;:::i;:::-;34500:57;;;;34589:4;34584:3;34580:14;34573:5;34570:25;34567:51;;;34598:18;;:::i;:::-;34567:51;34647:4;34640:5;34636:16;34627:25;;33585:1073;;;;;;:::o;34664:281::-;34722:5;34746:23;34764:4;34746:23;:::i;:::-;34738:31;;34790:25;34806:8;34790:25;:::i;:::-;34778:37;;34834:104;34871:66;34861:8;34855:4;34834:104;:::i;:::-;34825:113;;34664:281;;;;:::o;34951:180::-;34999:77;34996:1;34989:88;35096:4;35093:1;35086:15;35120:4;35117:1;35110:15;35137:185;35177:1;35194:20;35212:1;35194:20;:::i;:::-;35189:25;;35228:20;35246:1;35228:20;:::i;:::-;35223:25;;35267:1;35257:35;;35272:18;;:::i;:::-;35257:35;35314:1;35311;35307:9;35302:14;;35137:185;;;;:::o
Swarm Source
ipfs://f650d8c595feb2c2e30a974197ec08b333e961494c800238645d41fa5aabd919
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.