Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
Arcana
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2024-02-06 */ /////////////////////////////////////////////////SOCIALS/////////////////////////////////////////////////////// ///////////////////////////////// Telegram: t.me/arcanaERC404 ////////////////////////////////// ///////////////////////////////// Twitter: twitter.com/arcanaERC404 ///////////////////////////////// /////////////////////////////////////////////////SOCIALS//////////////////////////////////////////////////// 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: contracts/ERC404/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(); // 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; } // 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; } } // File: contracts/arcana.sol pragma solidity ^0.8.0; contract Arcana is ERC404 { string public dataURI; string public baseTokenURI; bool public mysteryEnabled = true; string public mysteryURI; constructor( address _owner ) ERC404("Arcana", "ARCANA", 18, 8888, _owner) { balanceOf[_owner] = 8888 * 10 ** 18; } function setDataURI(string memory _dataURI) public onlyOwner { dataURI = _dataURI; } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function setMysteryEnabled(bool _mysteryEnabled) public onlyOwner { mysteryEnabled = _mysteryEnabled; } function setMysteryURI(string memory _mysteryURI) public onlyOwner { mysteryURI = _mysteryURI; } 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 arcanaTrait; if (seed <= 100) { image = "1"; arcanaTrait = "Labyrinth"; } else if (seed <= 160) { image = "2"; arcanaTrait = "Cipher"; } else if (seed <= 210) { image = "3"; arcanaTrait = "Mirage"; } else if (seed <= 240) { image = "4"; arcanaTrait = "Paradox"; } else if (seed <= 255) { image = "5"; arcanaTrait = "Mystery"; } string memory jsonPreImage = string.concat( string.concat( string.concat('{"name": "ARCANA #', Strings.toString(id)), '","description":"A collection of 8888 Mysterious NFTs enabled by ERC404, an experimental token standard.","external_url":"https://t.me/arcanaERC404","image":"' ), string.concat(mysteryEnabled? mysteryURI : dataURI, image) ); string memory jsonPostImage = string.concat( '","attributes":[{"trait_type":"Arcana","value":"', arcanaTrait ); 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
Contract ABI
API[{"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":"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":"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":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mysteryEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mysteryURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"bool","name":"_mysteryEnabled","type":"bool"}],"name":"setMysteryEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_mysteryURI","type":"string"}],"name":"setMysteryURI","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":"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":[],"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
60c06040526001600e5f6101000a81548160ff0219169083151502179055503480156200002a575f80fd5b50604051620048c1380380620048c18339818101604052810190620000509190620002d7565b6040518060400160405280600681526020017f417263616e6100000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f415243414e41000000000000000000000000000000000000000000000000000081525060126122b884805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000129576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508460019081620001d491906200056b565b508360029081620001e691906200056b565b508260ff1660808160ff1681525050608051600a620002069190620007d8565b8262000213919062000828565b60a0818152505050505050506901e1d1c72d5b97e0000060045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505062000872565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620002a18262000276565b9050919050565b620002b38162000295565b8114620002be575f80fd5b50565b5f81519050620002d181620002a8565b92915050565b5f60208284031215620002ef57620002ee62000272565b5b5f620002fe84828501620002c1565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200038357607f821691505b6020821081036200039957620003986200033e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620003fd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003c0565b620004098683620003c0565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004536200044d620004478462000421565b6200042a565b62000421565b9050919050565b5f819050919050565b6200046e8362000433565b620004866200047d826200045a565b848454620003cc565b825550505050565b5f90565b6200049c6200048e565b620004a981848462000463565b505050565b5b81811015620004d057620004c45f8262000492565b600181019050620004af565b5050565b601f8211156200051f57620004e9816200039f565b620004f484620003b1565b8101602085101562000504578190505b6200051c6200051385620003b1565b830182620004ae565b50505b505050565b5f82821c905092915050565b5f620005415f198460080262000524565b1980831691505092915050565b5f6200055b838362000530565b9150826002028217905092915050565b620005768262000307565b67ffffffffffffffff81111562000592576200059162000311565b5b6200059e82546200036b565b620005ab828285620004d4565b5f60209050601f831160018114620005e1575f8415620005cc578287015190505b620005d885826200054e565b86555062000647565b601f198416620005f1866200039f565b5f5b828110156200061a57848901518255600182019150602085019450602081019050620005f3565b868310156200063a578489015162000636601f89168262000530565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620006d957808604811115620006b157620006b06200064f565b5b6001851615620006c15780820291505b8081029050620006d1856200067c565b945062000691565b94509492505050565b5f82620006f35760019050620007c5565b8162000702575f9050620007c5565b81600181146200071b576002811462000726576200075c565b6001915050620007c5565b60ff8411156200073b576200073a6200064f565b5b8360020a9150848211156200075557620007546200064f565b5b50620007c5565b5060208310610133831016604e8410600b8410161715620007965782820a90508381111562000790576200078f6200064f565b5b620007c5565b620007a5848484600162000688565b92509050818404811115620007bf57620007be6200064f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620007e48262000421565b9150620007f183620007cc565b9250620008207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006e2565b905092915050565b5f620008348262000421565b9150620008418362000421565b9250828202620008518162000421565b915082820484148315176200086b576200086a6200064f565b5b5092915050565b60805160a0516140266200089b5f395f6109a601525f818161137701526123c001526140265ff3fe608060405234801561000f575f80fd5b50600436106101e3575f3560e01c80638da5cb5b1161010d578063d44f1290116100a0578063e72be68a1161006f578063e72be68a1461057b578063e985e9c514610597578063f28ca1dd146105c7578063f2fde38b146105e5576101e3565b8063d44f1290146104f3578063d547cfb714610511578063dd62ed3e1461052f578063e0df5b6f1461055f576101e3565b8063a9059cbb116100dc578063a9059cbb14610459578063b88d4fde14610489578063c87b56dd146104a5578063d034291d146104d5576101e3565b80638da5cb5b146103d157806395d89b41146103ef5780639b19251a1461040d578063a22cb4651461043d576101e3565b8063313ce56711610185578063504334c211610154578063504334c21461033957806353d6fd59146103555780636352211e1461037157806370a08231146103a1576101e3565b8063313ce567146102c55780633b681ba7146102e357806342842e0e146102ff5780634f02c4201461031b576101e3565b806318160ddd116101c157806318160ddd1461026557806318d217c31461028357806323b872dd1461029f5780632b968958146102bb576101e3565b806306fdde03146101e7578063081812fc14610205578063095ea7b314610235575b5f80fd5b6101ef610601565b6040516101fc9190612ed0565b60405180910390f35b61021f600480360381019061021a9190612f34565b61068d565b60405161022c9190612f9e565b60405180910390f35b61024f600480360381019061024a9190612fe1565b6106bd565b60405161025c9190613039565b60405180910390f35b61026d6109a4565b60405161027a9190613061565b60405180910390f35b61029d600480360381019061029891906131a6565b6109c8565b005b6102b960048036038101906102b491906131ed565b610a5f565b005b6102c3611256565b005b6102cd611375565b6040516102da9190613258565b60405180910390f35b6102fd60048036038101906102f8919061329b565b611399565b005b610319600480360381019061031491906131ed565b611439565b005b610323611568565b6040516103309190613061565b60405180910390f35b610353600480360381019061034e91906132c6565b61156e565b005b61036f600480360381019061036a919061333c565b611600565b005b61038b60048036038101906103869190612f34565b6116dc565b6040516103989190612f9e565b60405180910390f35b6103bb60048036038101906103b6919061337a565b61177a565b6040516103c89190613061565b60405180910390f35b6103d961178f565b6040516103e69190612f9e565b60405180910390f35b6103f76117b2565b6040516104049190612ed0565b60405180910390f35b6104276004803603810190610422919061337a565b61183e565b6040516104349190613039565b60405180910390f35b6104576004803603810190610452919061333c565b61185b565b005b610473600480360381019061046e9190612fe1565b611953565b6040516104809190613039565b60405180910390f35b6104a3600480360381019061049e9190613402565b611967565b005b6104bf60048036038101906104ba9190612f34565b611a9c565b6040516104cc9190612ed0565b60405180910390f35b6104dd611f0a565b6040516104ea9190612ed0565b60405180910390f35b6104fb611f96565b6040516105089190613039565b60405180910390f35b610519611fa8565b6040516105269190612ed0565b60405180910390f35b61054960048036038101906105449190613486565b612034565b6040516105569190613061565b60405180910390f35b610579600480360381019061057491906131a6565b612054565b005b610595600480360381019061059091906131a6565b6120eb565b005b6105b160048036038101906105ac9190613486565b612182565b6040516105be9190613039565b60405180910390f35b6105cf6121ac565b6040516105dc9190612ed0565b60405180910390f35b6105ff60048036038101906105fa919061337a565b612238565b005b6001805461060e906134f1565b80601f016020809104026020016040519081016040528092919081815260200182805461063a906134f1565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60035482111580156106cf57505f82115b156108b7575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107c6575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156107fd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108a99190613061565b60405180910390a35061099a565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109919190613061565b60405180910390a35b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c9081610a5b91906136be565b5050565b60035481116111175760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610afd576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b62576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610c20575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610c88575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610cbf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc76123bd565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d1291906137ba565b92505081905550610d216123bd565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610e7791906137ba565b81548110610e8857610e876137ed565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110610ef457610ef36137ed565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610f4d57610f4c61381a565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061103591906137ba565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876110fc6123bd565b6040516111099190613061565b60405180910390a350611251565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112435781816111c691906137ba565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61124e8484846123f0565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112da576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461141d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b611444838383610a5f565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561152c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016114ca9392919061387a565b6020604051808303815f875af11580156114e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150a9190613917565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611563576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8282612740565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611684576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611775576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280546117bf906134f1565b80601f01602080910402602001604051908101604052809291908181526020018280546117eb906134f1565b80156118365780601f1061180d57610100808354040283529160200191611836565b820191905f5260205f20905b81548152906001019060200180831161181957829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119479190613039565b60405180910390a35050565b5f61195f3384846123f0565b905092915050565b611972858585610a5f565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611a5e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016119fc95949392919061396e565b6020604051808303815f875af1158015611a18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613917565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a95576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f600d8054611aac906134f1565b90501115611ae657600d611abf83612764565b604051602001611ad0929190613a74565b6040516020818303038152906040529050611f05565b5f82604051602001611af89190613ab7565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611611b96576040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600981526020017f4c61627972696e746800000000000000000000000000000000000000000000008152509050611d96565b60a08360ff1611611c16576040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f43697068657200000000000000000000000000000000000000000000000000008152509050611d95565b60d28360ff1611611c96576040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f4d697261676500000000000000000000000000000000000000000000000000008152509050611d94565b60f08360ff1611611d16576040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600781526020017f50617261646f78000000000000000000000000000000000000000000000000008152509050611d93565b60ff8360ff1611611d92576040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600781526020017f4d7973746572790000000000000000000000000000000000000000000000000081525090505b5b5b5b5b5f611da086612764565b604051602001611db09190613af7565b604051602081830303815290604052604051602001611dcf9190613bfe565b604051602081830303815290604052600e5f9054906101000a900460ff16611df857600c611dfb565b600f5b84604051602001611e0d929190613cb1565b604051602081830303815290604052604051602001611e2d929190613cd4565b60405160208183030381529060405290505f82604051602001611e509190613d67565b60405160208183030381529060405290505f6040518060400160405280600481526020017f227d5d7d0000000000000000000000000000000000000000000000000000000081525090508282604051602001611ead929190613cd4565b60405160208183030381529060405281604051602001611ece929190613cd4565b604051602081830303815290604052604051602001611eed9190613dae565b60405160208183030381529060405296505050505050505b919050565b600f8054611f17906134f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f43906134f1565b8015611f8e5780601f10611f6557610100808354040283529160200191611f8e565b820191905f5260205f20905b815481529060010190602001808311611f7157829003601f168201915b505050505081565b600e5f9054906101000a900460ff1681565b600d8054611fb5906134f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe1906134f1565b801561202c5780601f106120035761010080835404028352916020019161202c565b820191905f5260205f20905b81548152906001019060200180831161200f57829003601f168201915b505050505081565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90816120e791906136be565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461216f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f908161217e91906136be565b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600c80546121b9906134f1565b80601f01602080910402602001604051908101604052809291908181526020018280546121e5906134f1565b80156122305780601f1061220757610100808354040283529160200191612230565b820191905f5260205f20905b81548152906001019060200180831161221357829003601f168201915b505050505081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612321576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000000600a6123eb9190613f02565b905090565b5f806123fa6123bd565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124ca91906137ba565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125f4575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b39190613f79565b84846125bf9190613f79565b6125c991906137ba565b90505f5b818110156125f1576125de8961282e565b80806125e990613fa9565b9150506125cd565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126cd575f838261264f9190613f79565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126989190613f79565b6126a291906137ba565b90505f5b818110156126ca576126b788612a73565b80806126c290613fa9565b9150506126a6565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161272a9190613061565b60405180910390a3600193505050509392505050565b816001908161274f91906136be565b50806002908161275f91906136be565b505050565b60605f600161277284612cf5565b0190505f8167ffffffffffffffff8111156127905761278f613082565b5b6040519080825280601f01601f1916602001820160405280156127c25781602001600182028036833780820191505090505b5090505f82602001820190505b600115612823578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161281857612817613f4c565b5b0494505f85036127cf575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612893576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061291e91906137ba565b8154811061292f5761292e6137ed565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806129875761298661381a565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ad8576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b84576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050612c8191906137ba565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d51577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612d4757612d46613f4c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d8e576d04ee2d6d415b85acef81000000008381612d8457612d83613f4c565b5b0492506020810190505b662386f26fc100008310612dbd57662386f26fc100008381612db357612db2613f4c565b5b0492506010810190505b6305f5e1008310612de6576305f5e1008381612ddc57612ddb613f4c565b5b0492506008810190505b6127108310612e0b576127108381612e0157612e00613f4c565b5b0492506004810190505b60648310612e2e5760648381612e2457612e23613f4c565b5b0492506002810190505b600a8310612e3d576001810190505b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e7d578082015181840152602081019050612e62565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612ea282612e46565b612eac8185612e50565b9350612ebc818560208601612e60565b612ec581612e88565b840191505092915050565b5f6020820190508181035f830152612ee88184612e98565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612f1381612f01565b8114612f1d575f80fd5b50565b5f81359050612f2e81612f0a565b92915050565b5f60208284031215612f4957612f48612ef9565b5b5f612f5684828501612f20565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f8882612f5f565b9050919050565b612f9881612f7e565b82525050565b5f602082019050612fb15f830184612f8f565b92915050565b612fc081612f7e565b8114612fca575f80fd5b50565b5f81359050612fdb81612fb7565b92915050565b5f8060408385031215612ff757612ff6612ef9565b5b5f61300485828601612fcd565b925050602061301585828601612f20565b9150509250929050565b5f8115159050919050565b6130338161301f565b82525050565b5f60208201905061304c5f83018461302a565b92915050565b61305b81612f01565b82525050565b5f6020820190506130745f830184613052565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130b882612e88565b810181811067ffffffffffffffff821117156130d7576130d6613082565b5b80604052505050565b5f6130e9612ef0565b90506130f582826130af565b919050565b5f67ffffffffffffffff82111561311457613113613082565b5b61311d82612e88565b9050602081019050919050565b828183375f83830152505050565b5f61314a613145846130fa565b6130e0565b9050828152602081018484840111156131665761316561307e565b5b61317184828561312a565b509392505050565b5f82601f83011261318d5761318c61307a565b5b813561319d848260208601613138565b91505092915050565b5f602082840312156131bb576131ba612ef9565b5b5f82013567ffffffffffffffff8111156131d8576131d7612efd565b5b6131e484828501613179565b91505092915050565b5f805f6060848603121561320457613203612ef9565b5b5f61321186828701612fcd565b935050602061322286828701612fcd565b925050604061323386828701612f20565b9150509250925092565b5f60ff82169050919050565b6132528161323d565b82525050565b5f60208201905061326b5f830184613249565b92915050565b61327a8161301f565b8114613284575f80fd5b50565b5f8135905061329581613271565b92915050565b5f602082840312156132b0576132af612ef9565b5b5f6132bd84828501613287565b91505092915050565b5f80604083850312156132dc576132db612ef9565b5b5f83013567ffffffffffffffff8111156132f9576132f8612efd565b5b61330585828601613179565b925050602083013567ffffffffffffffff81111561332657613325612efd565b5b61333285828601613179565b9150509250929050565b5f806040838503121561335257613351612ef9565b5b5f61335f85828601612fcd565b925050602061337085828601613287565b9150509250929050565b5f6020828403121561338f5761338e612ef9565b5b5f61339c84828501612fcd565b91505092915050565b5f80fd5b5f80fd5b5f8083601f8401126133c2576133c161307a565b5b8235905067ffffffffffffffff8111156133df576133de6133a5565b5b6020830191508360018202830111156133fb576133fa6133a9565b5b9250929050565b5f805f805f6080868803121561341b5761341a612ef9565b5b5f61342888828901612fcd565b955050602061343988828901612fcd565b945050604061344a88828901612f20565b935050606086013567ffffffffffffffff81111561346b5761346a612efd565b5b613477888289016133ad565b92509250509295509295909350565b5f806040838503121561349c5761349b612ef9565b5b5f6134a985828601612fcd565b92505060206134ba85828601612fcd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061350857607f821691505b60208210810361351b5761351a6134c4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261357d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613542565b6135878683613542565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135c26135bd6135b884612f01565b61359f565b612f01565b9050919050565b5f819050919050565b6135db836135a8565b6135ef6135e7826135c9565b84845461354e565b825550505050565b5f90565b6136036135f7565b61360e8184846135d2565b505050565b5b81811015613631576136265f826135fb565b600181019050613614565b5050565b601f8211156136765761364781613521565b61365084613533565b8101602085101561365f578190505b61367361366b85613533565b830182613613565b50505b505050565b5f82821c905092915050565b5f6136965f198460080261367b565b1980831691505092915050565b5f6136ae8383613687565b9150826002028217905092915050565b6136c782612e46565b67ffffffffffffffff8111156136e0576136df613082565b5b6136ea82546134f1565b6136f5828285613635565b5f60209050601f831160018114613726575f8415613714578287015190505b61371e85826136a3565b865550613785565b601f19841661373486613521565b5f5b8281101561375b57848901518255600182019150602085019450602081019050613736565b868310156137785784890151613774601f891682613687565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137c482612f01565b91506137cf83612f01565b92508282039050818111156137e7576137e661378d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f6138655f83613847565b915061387082613857565b5f82019050919050565b5f60808201905061388d5f830186612f8f565b61389a6020830185612f8f565b6138a76040830184613052565b81810360608301526138b88161385a565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138f6816138c2565b8114613900575f80fd5b50565b5f81519050613911816138ed565b92915050565b5f6020828403121561392c5761392b612ef9565b5b5f61393984828501613903565b91505092915050565b5f61394d8385613847565b935061395a83858461312a565b61396383612e88565b840190509392505050565b5f6080820190506139815f830188612f8f565b61398e6020830187612f8f565b61399b6040830186613052565b81810360608301526139ae818486613942565b90509695505050505050565b5f81905092915050565b5f81546139d0816134f1565b6139da81866139ba565b9450600182165f81146139f45760018114613a0957613a3b565b60ff1983168652811515820286019350613a3b565b613a1285613521565b5f5b83811015613a3357815481890152600182019150602081019050613a14565b838801955050505b50505092915050565b5f613a4e82612e46565b613a5881856139ba565b9350613a68818560208601612e60565b80840191505092915050565b5f613a7f82856139c4565b9150613a8b8284613a44565b91508190509392505050565b5f819050919050565b613ab1613aac82612f01565b613a97565b82525050565b5f613ac28284613aa0565b60208201915081905092915050565b7f7b226e616d65223a2022415243414e4120230000000000000000000000000000815250565b5f613b0182613ad1565b601282019150613b118284613a44565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f665f8201527f2038383838204d7973746572696f7573204e46547320656e61626c656420627960208201527f204552433430342c20616e206578706572696d656e74616c20746f6b656e207360408201527f74616e646172642e222c2265787465726e616c5f75726c223a2268747470733a60608201527f2f2f742e6d652f617263616e61455243343034222c22696d616765223a220000608082015250565b5f613be8609e836139ba565b9150613bf382613b1c565b609e82019050919050565b5f613c098284613a44565b9150613c1482613bdc565b915081905092915050565b5f819050815f5260205f209050919050565b5f8154613c3d816134f1565b613c4781866139ba565b9450600182165f8114613c615760018114613c7657613ca8565b60ff1983168652811515820286019350613ca8565b613c7f85613c1f565b5f5b83811015613ca057815481890152600182019150602081019050613c81565b838801955050505b50505092915050565b5f613cbc8285613c31565b9150613cc88284613a44565b91508190509392505050565b5f613cdf8285613a44565b9150613ceb8284613a44565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a22415f8201527f7263616e61222c2276616c7565223a2200000000000000000000000000000000602082015250565b5f613d516030836139ba565b9150613d5c82613cf7565b603082019050919050565b5f613d7182613d45565b9150613d7d8284613a44565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b5f613db882613d88565b601b82019150613dc88284613a44565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613e2857808604811115613e0457613e0361378d565b5b6001851615613e135780820291505b8081029050613e2185613dd3565b9450613de8565b94509492505050565b5f82613e405760019050613efb565b81613e4d575f9050613efb565b8160018114613e635760028114613e6d57613e9c565b6001915050613efb565b60ff841115613e7f57613e7e61378d565b5b8360020a915084821115613e9657613e9561378d565b5b50613efb565b5060208310610133831016604e8410600b8410161715613ed15782820a905083811115613ecc57613ecb61378d565b5b613efb565b613ede8484846001613ddf565b92509050818404811115613ef557613ef461378d565b5b81810290505b9392505050565b5f613f0c82612f01565b9150613f178361323d565b9250613f447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613e31565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f8382612f01565b9150613f8e83612f01565b925082613f9e57613f9d613f4c565b5b828204905092915050565b5f613fb382612f01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fe557613fe461378d565b5b60018201905091905056fea2646970667358221220a2e2eee07cbeca39f5c6b10395cb98bbd1fa2dff433e4909b4d449cabcea4ef864736f6c63430008140033000000000000000000000000ec84119141aab31746bc327e2aa6db7cabc8d08b
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101e3575f3560e01c80638da5cb5b1161010d578063d44f1290116100a0578063e72be68a1161006f578063e72be68a1461057b578063e985e9c514610597578063f28ca1dd146105c7578063f2fde38b146105e5576101e3565b8063d44f1290146104f3578063d547cfb714610511578063dd62ed3e1461052f578063e0df5b6f1461055f576101e3565b8063a9059cbb116100dc578063a9059cbb14610459578063b88d4fde14610489578063c87b56dd146104a5578063d034291d146104d5576101e3565b80638da5cb5b146103d157806395d89b41146103ef5780639b19251a1461040d578063a22cb4651461043d576101e3565b8063313ce56711610185578063504334c211610154578063504334c21461033957806353d6fd59146103555780636352211e1461037157806370a08231146103a1576101e3565b8063313ce567146102c55780633b681ba7146102e357806342842e0e146102ff5780634f02c4201461031b576101e3565b806318160ddd116101c157806318160ddd1461026557806318d217c31461028357806323b872dd1461029f5780632b968958146102bb576101e3565b806306fdde03146101e7578063081812fc14610205578063095ea7b314610235575b5f80fd5b6101ef610601565b6040516101fc9190612ed0565b60405180910390f35b61021f600480360381019061021a9190612f34565b61068d565b60405161022c9190612f9e565b60405180910390f35b61024f600480360381019061024a9190612fe1565b6106bd565b60405161025c9190613039565b60405180910390f35b61026d6109a4565b60405161027a9190613061565b60405180910390f35b61029d600480360381019061029891906131a6565b6109c8565b005b6102b960048036038101906102b491906131ed565b610a5f565b005b6102c3611256565b005b6102cd611375565b6040516102da9190613258565b60405180910390f35b6102fd60048036038101906102f8919061329b565b611399565b005b610319600480360381019061031491906131ed565b611439565b005b610323611568565b6040516103309190613061565b60405180910390f35b610353600480360381019061034e91906132c6565b61156e565b005b61036f600480360381019061036a919061333c565b611600565b005b61038b60048036038101906103869190612f34565b6116dc565b6040516103989190612f9e565b60405180910390f35b6103bb60048036038101906103b6919061337a565b61177a565b6040516103c89190613061565b60405180910390f35b6103d961178f565b6040516103e69190612f9e565b60405180910390f35b6103f76117b2565b6040516104049190612ed0565b60405180910390f35b6104276004803603810190610422919061337a565b61183e565b6040516104349190613039565b60405180910390f35b6104576004803603810190610452919061333c565b61185b565b005b610473600480360381019061046e9190612fe1565b611953565b6040516104809190613039565b60405180910390f35b6104a3600480360381019061049e9190613402565b611967565b005b6104bf60048036038101906104ba9190612f34565b611a9c565b6040516104cc9190612ed0565b60405180910390f35b6104dd611f0a565b6040516104ea9190612ed0565b60405180910390f35b6104fb611f96565b6040516105089190613039565b60405180910390f35b610519611fa8565b6040516105269190612ed0565b60405180910390f35b61054960048036038101906105449190613486565b612034565b6040516105569190613061565b60405180910390f35b610579600480360381019061057491906131a6565b612054565b005b610595600480360381019061059091906131a6565b6120eb565b005b6105b160048036038101906105ac9190613486565b612182565b6040516105be9190613039565b60405180910390f35b6105cf6121ac565b6040516105dc9190612ed0565b60405180910390f35b6105ff60048036038101906105fa919061337a565b612238565b005b6001805461060e906134f1565b80601f016020809104026020016040519081016040528092919081815260200182805461063a906134f1565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b505050505081565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60035482111580156106cf57505f82115b156108b7575f60085f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156107c6575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156107fd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360065f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516108a99190613061565b60405180910390a35061099a565b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109919190613061565b60405180910390a35b6001905092915050565b7f0000000000000000000000000000000000000000000001e1d1c72d5b97e0000081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600c9081610a5b91906136be565b5050565b60035481116111175760085f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610afd576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b62576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610c20575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610c88575060065f8281526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610cbf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cc76123bd565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d1291906137ba565b92505081905550610d216123bd565b60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050610e7791906137ba565b81548110610e8857610e876137ed565b5b905f5260205f20015490508060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600a5f8581526020019081526020015f205481548110610ef457610ef36137ed565b5b905f5260205f20018190555060095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610f4d57610f4c61381a565b5b600190038181905f5260205f20015f90559055600a5f8381526020019081526020015f2054600a5f8381526020019081526020015f208190555060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2082908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061103591906137ba565b600a5f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314876110fc6123bd565b6040516111099190613061565b60405180910390a350611251565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112435781816111c691906137ba565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b61124e8484846123f0565b50505b505050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112da576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b7f000000000000000000000000000000000000000000000000000000000000001281565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461141d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e5f6101000a81548160ff02191690831515021790555050565b611444838383610a5f565b5f8273ffffffffffffffffffffffffffffffffffffffff163b1415801561152c575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168273ffffffffffffffffffffffffffffffffffffffff1663150b7a023386856040518463ffffffff1660e01b81526004016114ca9392919061387a565b6020604051808303815f875af11580156114e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150a9190613917565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611563576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60035481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8282612740565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611684576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611775576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6004602052805f5260405f205f915090505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280546117bf906134f1565b80601f01602080910402602001604051908101604052809291908181526020018280546117eb906134f1565b80156118365780601f1061180d57610100808354040283529160200191611836565b820191905f5260205f20905b81548152906001019060200180831161181957829003601f168201915b505050505081565b600b602052805f5260405f205f915054906101000a900460ff1681565b8060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119479190613039565b60405180910390a35050565b5f61195f3384846123f0565b905092915050565b611972858585610a5f565b5f8473ffffffffffffffffffffffffffffffffffffffff163b14158015611a5e575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663150b7a0233888787876040518663ffffffff1660e01b81526004016119fc95949392919061396e565b6020604051808303815f875af1158015611a18573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3c9190613917565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614155b15611a95576040517f3da6393100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60605f600d8054611aac906134f1565b90501115611ae657600d611abf83612764565b604051602001611ad0929190613a74565b6040516020818303038152906040529050611f05565b5f82604051602001611af89190613ab7565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611611b96576040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600981526020017f4c61627972696e746800000000000000000000000000000000000000000000008152509050611d96565b60a08360ff1611611c16576040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f43697068657200000000000000000000000000000000000000000000000000008152509050611d95565b60d28360ff1611611c96576040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600681526020017f4d697261676500000000000000000000000000000000000000000000000000008152509050611d94565b60f08360ff1611611d16576040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600781526020017f50617261646f78000000000000000000000000000000000000000000000000008152509050611d93565b60ff8360ff1611611d92576040518060400160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525091506040518060400160405280600781526020017f4d7973746572790000000000000000000000000000000000000000000000000081525090505b5b5b5b5b5f611da086612764565b604051602001611db09190613af7565b604051602081830303815290604052604051602001611dcf9190613bfe565b604051602081830303815290604052600e5f9054906101000a900460ff16611df857600c611dfb565b600f5b84604051602001611e0d929190613cb1565b604051602081830303815290604052604051602001611e2d929190613cd4565b60405160208183030381529060405290505f82604051602001611e509190613d67565b60405160208183030381529060405290505f6040518060400160405280600481526020017f227d5d7d0000000000000000000000000000000000000000000000000000000081525090508282604051602001611ead929190613cd4565b60405160208183030381529060405281604051602001611ece929190613cd4565b604051602081830303815290604052604051602001611eed9190613dae565b60405160208183030381529060405296505050505050505b919050565b600f8054611f17906134f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f43906134f1565b8015611f8e5780601f10611f6557610100808354040283529160200191611f8e565b820191905f5260205f20905b815481529060010190602001808311611f7157829003601f168201915b505050505081565b600e5f9054906101000a900460ff1681565b600d8054611fb5906134f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe1906134f1565b801561202c5780601f106120035761010080835404028352916020019161202c565b820191905f5260205f20905b81548152906001019060200180831161200f57829003601f168201915b505050505081565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120d8576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90816120e791906136be565b5050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461216f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f908161217e91906136be565b5050565b6007602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600c80546121b9906134f1565b80601f01602080910402602001604051908101604052809291908181526020018280546121e5906134f1565b80156122305780601f1061220757610100808354040283529160200191612230565b820191905f5260205f20905b81548152906001019060200180831161221357829003601f168201915b505050505081565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612321576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f7f0000000000000000000000000000000000000000000000000000000000000012600a6123eb9190613f02565b905090565b5f806123fa6123bd565b90505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508460045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124ca91906137ba565b925050819055508460045f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540192505081905550600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125f4575f8360045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125b39190613f79565b84846125bf9190613f79565b6125c991906137ba565b90505f5b818110156125f1576125de8961282e565b80806125e990613fa9565b9150506125cd565b50505b600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166126cd575f838261264f9190613f79565b8460045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126989190613f79565b6126a291906137ba565b90505f5b818110156126ca576126b788612a73565b80806126c290613fa9565b9150506126a6565b50505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161272a9190613061565b60405180910390a3600193505050509392505050565b816001908161274f91906136be565b50806002908161275f91906136be565b505050565b60605f600161277284612cf5565b0190505f8167ffffffffffffffff8111156127905761278f613082565b5b6040519080825280601f01601f1916602001820160405280156127c25781602001600182028036833780820191505090505b5090505f82602001820190505b600115612823578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161281857612817613f4c565b5b0494505f85036127cf575b819350505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612893576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061291e91906137ba565b8154811061292f5761292e6137ed565b5b905f5260205f200154905060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806129875761298661381a565b5b600190038181905f5260205f20015f90559055600a5f8281526020019081526020015f205f905560085f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560065f8281526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055805f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612ad8576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f81548092919060010191905055505f60035490505f73ffffffffffffffffffffffffffffffffffffffff1660085f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b84576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160085f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081908060018154018082558091505060019003905f5260205f20015f9091909190915055600160095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050612c8191906137ba565b600a5f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612d51577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612d4757612d46613f4c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612d8e576d04ee2d6d415b85acef81000000008381612d8457612d83613f4c565b5b0492506020810190505b662386f26fc100008310612dbd57662386f26fc100008381612db357612db2613f4c565b5b0492506010810190505b6305f5e1008310612de6576305f5e1008381612ddc57612ddb613f4c565b5b0492506008810190505b6127108310612e0b576127108381612e0157612e00613f4c565b5b0492506004810190505b60648310612e2e5760648381612e2457612e23613f4c565b5b0492506002810190505b600a8310612e3d576001810190505b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e7d578082015181840152602081019050612e62565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612ea282612e46565b612eac8185612e50565b9350612ebc818560208601612e60565b612ec581612e88565b840191505092915050565b5f6020820190508181035f830152612ee88184612e98565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b612f1381612f01565b8114612f1d575f80fd5b50565b5f81359050612f2e81612f0a565b92915050565b5f60208284031215612f4957612f48612ef9565b5b5f612f5684828501612f20565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f8882612f5f565b9050919050565b612f9881612f7e565b82525050565b5f602082019050612fb15f830184612f8f565b92915050565b612fc081612f7e565b8114612fca575f80fd5b50565b5f81359050612fdb81612fb7565b92915050565b5f8060408385031215612ff757612ff6612ef9565b5b5f61300485828601612fcd565b925050602061301585828601612f20565b9150509250929050565b5f8115159050919050565b6130338161301f565b82525050565b5f60208201905061304c5f83018461302a565b92915050565b61305b81612f01565b82525050565b5f6020820190506130745f830184613052565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6130b882612e88565b810181811067ffffffffffffffff821117156130d7576130d6613082565b5b80604052505050565b5f6130e9612ef0565b90506130f582826130af565b919050565b5f67ffffffffffffffff82111561311457613113613082565b5b61311d82612e88565b9050602081019050919050565b828183375f83830152505050565b5f61314a613145846130fa565b6130e0565b9050828152602081018484840111156131665761316561307e565b5b61317184828561312a565b509392505050565b5f82601f83011261318d5761318c61307a565b5b813561319d848260208601613138565b91505092915050565b5f602082840312156131bb576131ba612ef9565b5b5f82013567ffffffffffffffff8111156131d8576131d7612efd565b5b6131e484828501613179565b91505092915050565b5f805f6060848603121561320457613203612ef9565b5b5f61321186828701612fcd565b935050602061322286828701612fcd565b925050604061323386828701612f20565b9150509250925092565b5f60ff82169050919050565b6132528161323d565b82525050565b5f60208201905061326b5f830184613249565b92915050565b61327a8161301f565b8114613284575f80fd5b50565b5f8135905061329581613271565b92915050565b5f602082840312156132b0576132af612ef9565b5b5f6132bd84828501613287565b91505092915050565b5f80604083850312156132dc576132db612ef9565b5b5f83013567ffffffffffffffff8111156132f9576132f8612efd565b5b61330585828601613179565b925050602083013567ffffffffffffffff81111561332657613325612efd565b5b61333285828601613179565b9150509250929050565b5f806040838503121561335257613351612ef9565b5b5f61335f85828601612fcd565b925050602061337085828601613287565b9150509250929050565b5f6020828403121561338f5761338e612ef9565b5b5f61339c84828501612fcd565b91505092915050565b5f80fd5b5f80fd5b5f8083601f8401126133c2576133c161307a565b5b8235905067ffffffffffffffff8111156133df576133de6133a5565b5b6020830191508360018202830111156133fb576133fa6133a9565b5b9250929050565b5f805f805f6080868803121561341b5761341a612ef9565b5b5f61342888828901612fcd565b955050602061343988828901612fcd565b945050604061344a88828901612f20565b935050606086013567ffffffffffffffff81111561346b5761346a612efd565b5b613477888289016133ad565b92509250509295509295909350565b5f806040838503121561349c5761349b612ef9565b5b5f6134a985828601612fcd565b92505060206134ba85828601612fcd565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061350857607f821691505b60208210810361351b5761351a6134c4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261357d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613542565b6135878683613542565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6135c26135bd6135b884612f01565b61359f565b612f01565b9050919050565b5f819050919050565b6135db836135a8565b6135ef6135e7826135c9565b84845461354e565b825550505050565b5f90565b6136036135f7565b61360e8184846135d2565b505050565b5b81811015613631576136265f826135fb565b600181019050613614565b5050565b601f8211156136765761364781613521565b61365084613533565b8101602085101561365f578190505b61367361366b85613533565b830182613613565b50505b505050565b5f82821c905092915050565b5f6136965f198460080261367b565b1980831691505092915050565b5f6136ae8383613687565b9150826002028217905092915050565b6136c782612e46565b67ffffffffffffffff8111156136e0576136df613082565b5b6136ea82546134f1565b6136f5828285613635565b5f60209050601f831160018114613726575f8415613714578287015190505b61371e85826136a3565b865550613785565b601f19841661373486613521565b5f5b8281101561375b57848901518255600182019150602085019450602081019050613736565b868310156137785784890151613774601f891682613687565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6137c482612f01565b91506137cf83612f01565b92508282039050818111156137e7576137e661378d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82825260208201905092915050565b50565b5f6138655f83613847565b915061387082613857565b5f82019050919050565b5f60808201905061388d5f830186612f8f565b61389a6020830185612f8f565b6138a76040830184613052565b81810360608301526138b88161385a565b9050949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138f6816138c2565b8114613900575f80fd5b50565b5f81519050613911816138ed565b92915050565b5f6020828403121561392c5761392b612ef9565b5b5f61393984828501613903565b91505092915050565b5f61394d8385613847565b935061395a83858461312a565b61396383612e88565b840190509392505050565b5f6080820190506139815f830188612f8f565b61398e6020830187612f8f565b61399b6040830186613052565b81810360608301526139ae818486613942565b90509695505050505050565b5f81905092915050565b5f81546139d0816134f1565b6139da81866139ba565b9450600182165f81146139f45760018114613a0957613a3b565b60ff1983168652811515820286019350613a3b565b613a1285613521565b5f5b83811015613a3357815481890152600182019150602081019050613a14565b838801955050505b50505092915050565b5f613a4e82612e46565b613a5881856139ba565b9350613a68818560208601612e60565b80840191505092915050565b5f613a7f82856139c4565b9150613a8b8284613a44565b91508190509392505050565b5f819050919050565b613ab1613aac82612f01565b613a97565b82525050565b5f613ac28284613aa0565b60208201915081905092915050565b7f7b226e616d65223a2022415243414e4120230000000000000000000000000000815250565b5f613b0182613ad1565b601282019150613b118284613a44565b915081905092915050565b7f222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f665f8201527f2038383838204d7973746572696f7573204e46547320656e61626c656420627960208201527f204552433430342c20616e206578706572696d656e74616c20746f6b656e207360408201527f74616e646172642e222c2265787465726e616c5f75726c223a2268747470733a60608201527f2f2f742e6d652f617263616e61455243343034222c22696d616765223a220000608082015250565b5f613be8609e836139ba565b9150613bf382613b1c565b609e82019050919050565b5f613c098284613a44565b9150613c1482613bdc565b915081905092915050565b5f819050815f5260205f209050919050565b5f8154613c3d816134f1565b613c4781866139ba565b9450600182165f8114613c615760018114613c7657613ca8565b60ff1983168652811515820286019350613ca8565b613c7f85613c1f565b5f5b83811015613ca057815481890152600182019150602081019050613c81565b838801955050505b50505092915050565b5f613cbc8285613c31565b9150613cc88284613a44565b91508190509392505050565b5f613cdf8285613a44565b9150613ceb8284613a44565b91508190509392505050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a22415f8201527f7263616e61222c2276616c7565223a2200000000000000000000000000000000602082015250565b5f613d516030836139ba565b9150613d5c82613cf7565b603082019050919050565b5f613d7182613d45565b9150613d7d8284613a44565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c0000000000815250565b5f613db882613d88565b601b82019150613dc88284613a44565b915081905092915050565b5f8160011c9050919050565b5f808291508390505b6001851115613e2857808604811115613e0457613e0361378d565b5b6001851615613e135780820291505b8081029050613e2185613dd3565b9450613de8565b94509492505050565b5f82613e405760019050613efb565b81613e4d575f9050613efb565b8160018114613e635760028114613e6d57613e9c565b6001915050613efb565b60ff841115613e7f57613e7e61378d565b5b8360020a915084821115613e9657613e9561378d565b5b50613efb565b5060208310610133831016604e8410600b8410161715613ed15782820a905083811115613ecc57613ecb61378d565b5b613efb565b613ede8484846001613ddf565b92509050818404811115613ef557613ef461378d565b5b81810290505b9392505050565b5f613f0c82612f01565b9150613f178361323d565b9250613f447fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613e31565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f8382612f01565b9150613f8e83612f01565b925082613f9e57613f9d613f4c565b5b828204905092915050565b5f613fb382612f01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613fe557613fe461378d565b5b60018201905091905056fea2646970667358221220a2e2eee07cbeca39f5c6b10395cb98bbd1fa2dff433e4909b4d449cabcea4ef864736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ec84119141aab31746bc327e2aa6db7cabc8d08b
-----Decoded View---------------
Arg [0] : _owner (address): 0xec84119141aaB31746BC327E2aa6dB7caBC8d08b
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000ec84119141aab31746bc327e2aa6db7cabc8d08b
Deployed Bytecode Sourcemap
32105:2702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23173:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23884:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25715:642;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23409:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32423:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26764:1716;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21170:151;;;:::i;:::-;;23309:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32809:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28776:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23544:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32643:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25044:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25227:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23650:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20611:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23227;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24495:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26408:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28539:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29276:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33052:1750;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32239:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32199:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32166:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23764:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32529:106;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32934:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23995:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32138:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20943:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23173:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23884:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;25715:642::-;25818:4;25853:6;;25839:10;:20;;:38;;;;;25876:1;25863:10;:14;25839:38;25835:491;;;25894:13;25910:8;:20;25919:10;25910:20;;;;;;;;;;;;;;;;;;;;;25894:36;;25965:5;25951:19;;:10;:19;;;;:59;;;;;25975:16;:23;25992:5;25975:23;;;;;;;;;;;;;;;:35;25999:10;25975:35;;;;;;;;;;;;;;;;;;;;;;;;;25974:36;25951:59;25947:121;;;26038:14;;;;;;;;;;;;;;25947:121;26110:7;26084:11;:23;26096:10;26084:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;26155:7;26139:36;;26148:5;26139:36;;;26164:10;26139:36;;;;;;:::i;:::-;;;;;;;;25879:308;25835:491;;;26241:10;26208:9;:21;26218:10;26208:21;;;;;;;;;;;;;;;:30;26230:7;26208:30;;;;;;;;;;;;;;;:43;;;;26294:7;26273:41;;26282:10;26273:41;;;26303:10;26273:41;;;;;;:::i;:::-;;;;;;;;25835:491;26345:4;26338:11;;25715:642;;;;:::o;23409:36::-;;;:::o;32423:98::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;32505:8:::1;32495:7;:18;;;;;;:::i;:::-;;32423:98:::0;:::o;26764:1716::-;26910:6;;26896:10;:20;26892:1581;;26945:8;:20;26954:10;26945:20;;;;;;;;;;;;;;;;;;;;;26937:28;;:4;:28;;;26933:91;;26993:15;;;;;;;;;;;;;;26933:91;27058:1;27044:16;;:2;:16;;;27040:82;;27088:18;;;;;;;;;;;;;;27040:82;27174:4;27160:18;;:10;:18;;;;:74;;;;;27200:16;:22;27217:4;27200:22;;;;;;;;;;;;;;;:34;27223:10;27200:34;;;;;;;;;;;;;;;;;;;;;;;;;27199:35;27160:74;:132;;;;;27269:11;:23;27281:10;27269:23;;;;;;;;;;;;;;;;;;;;;27255:37;;:10;:37;;;;27160:132;27138:226;;;27334:14;;;;;;;;;;;;;;27138:226;27399:10;:8;:10::i;:::-;27380:9;:15;27390:4;27380:15;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;27472:10;:8;:10::i;:::-;27455:9;:13;27465:2;27455:13;;;;;;;;;;;;;;;;:27;;;;;;;;;;;27537:2;27514:8;:20;27523:10;27514:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;27561:11;:23;27573:10;27561:23;;;;;;;;;;;;27554:30;;;;;;;;;;;27642:17;27662:6;:12;27669:4;27662:12;;;;;;;;;;;;;;;27697:1;27675:6;:12;27682:4;27675:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;27662:37;;;;;;;;:::i;:::-;;;;;;;;;;27642:57;;27754:9;27714:6;:12;27721:4;27714:12;;;;;;;;;;;;;;;27727:11;:23;27739:10;27727:23;;;;;;;;;;;;27714:37;;;;;;;;:::i;:::-;;;;;;;;;:49;;;;27798:6;:12;27805:4;27798:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27902:11;:23;27914:10;27902:23;;;;;;;;;;;;27877:11;:22;27889:9;27877:22;;;;;;;;;;;:48;;;;27979:6;:10;27986:2;27979:10;;;;;;;;;;;;;;;27995;27979:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28109:1;28089:6;:10;28096:2;28089:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;28063:11;:23;28075:10;28063:23;;;;;;;;;;;:47;;;;28151:10;28147:2;28132:30;;28141:4;28132:30;;;;;;;;;;;;28202:2;28182:35;;28196:4;28182:35;;;28206:10;:8;:10::i;:::-;28182:35;;;;;;:::i;:::-;;;;;;;;26918:1311;26892:1581;;;28250:15;28268:9;:15;28278:4;28268:15;;;;;;;;;;;;;;;:27;28284:10;28268:27;;;;;;;;;;;;;;;;28250:45;;28327:17;28316:7;:28;28312:101;;28403:10;28393:7;:20;;;;:::i;:::-;28363:9;:15;28373:4;28363:15;;;;;;;;;;;;;;;:27;28379:10;28363:27;;;;;;;;;;;;;;;:50;;;;28312:101;28430:31;28440:4;28446:2;28450:10;28430:9;:31::i;:::-;;28235:238;26892:1581;26764:1716;;;:::o;21170:151::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;21249:1:::1;21233:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;21310:1;21269:44;;21290:10;21269:44;;;;;;;;;;;;21170:151::o:0;23309:31::-;;;:::o;32809:117::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;32903:15:::1;32886:14;;:32;;;;;;;;;;;;;;;;;;32809:117:::0;:::o;28776:405::-;28900:26;28913:4;28919:2;28923;28900:12;:26::i;:::-;28975:1;28957:2;:14;;;:19;;:154;;;;;29071:40;;;28993:118;;;29008:2;28993:35;;;29029:10;29041:4;29047:2;28993:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:118;;;;;28957:154;28939:235;;;29145:17;;;;;;;;;;;;;;28939:235;28776:405;;;:::o;23544:21::-;;;;:::o;32643:158::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;32763:30:::1;32778:5;32785:7;32763:14;:30::i;:::-;32643:158:::0;;:::o;25044:111::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;25142:5:::1;25122:9;:17;25132:6;25122:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25044:111:::0;;:::o;25227:193::-;25285:13;25319:8;:12;25328:2;25319:12;;;;;;;;;;;;;;;;;;;;;25311:20;;25365:1;25348:19;;:5;:19;;;25344:69;;25391:10;;;;;;;;;;;;;;25344:69;25227:193;;;:::o;23650:44::-;;;;;;;;;;;;;;;;;:::o;20611:20::-;;;;;;;;;;;;:::o;23227:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24495:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;26408:207::-;26535:8;26494:16;:28;26511:10;26494:28;;;;;;;;;;;;;;;:38;26523:8;26494:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;26588:8;26561:46;;26576:10;26561:46;;;26598:8;26561:46;;;;;;:::i;:::-;;;;;;;;26408:207;;:::o;28539:160::-;28634:4;28658:33;28668:10;28680:2;28684:6;28658:9;:33::i;:::-;28651:40;;28539:160;;;;:::o;29276:437::-;29430:26;29443:4;29449:2;29453;29430:12;:26::i;:::-;29505:1;29487:2;:14;;;:19;;:156;;;;;29603:40;;;29523:120;;;29538:2;29523:35;;;29559:10;29571:4;29577:2;29581:4;;29523:63;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:120;;;;;29487:156;29469:237;;;29677:17;;;;;;;;;;;;;;29469:237;29276:437;;;;;:::o;33052:1750::-;33112:13;33167:1;33144:12;33138:26;;;;;:::i;:::-;;;:30;33134:1665;;;33202:12;33216:20;33233:2;33216:16;:20::i;:::-;33188:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33181:56;;;;33134:1665;33262:10;33315:2;33298:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;33288:31;;;;;;33275:46;;33262:59;;33332:19;33362:25;33412:3;33404:4;:11;;;33400:489;;33432:11;;;;;;;;;;;;;;;;;;;33458:25;;;;;;;;;;;;;;;;;;;33400:489;;;33513:3;33505:4;:11;;;33501:388;;33533:11;;;;;;;;;;;;;;;;;;;33559:22;;;;;;;;;;;;;;;;;;;33501:388;;;33611:3;33603:4;:11;;;33599:290;;33631:11;;;;;;;;;;;;;;;;;;;33657:22;;;;;;;;;;;;;;;;;;;33599:290;;;33709:3;33701:4;:11;;;33697:192;;33729:11;;;;;;;;;;;;;;;;;;;33755:23;;;;;;;;;;;;;;;;;;;33697:192;;;33808:3;33800:4;:11;;;33796:93;;33828:11;;;;;;;;;;;;;;;;;;;33854:23;;;;;;;;;;;;;;;;;;;33796:93;33697:192;33599:290;33501:388;33400:489;33901:26;34026:20;34043:2;34026:16;:20::i;:::-;33990:57;;;;;;;;:::i;:::-;;;;;;;;;;;;;33958:283;;;;;;;;:::i;:::-;;;;;;;;;;;;;34270:14;;;;;;;;;;;:36;;34299:7;34270:36;;;34286:10;34270:36;34308:5;34256:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33930:395;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33901:424;;34336:27;34459:11;34366:115;;;;;;;;:::i;:::-;;;;;;;;;;;;;34336:145;;34492:28;:37;;;;;;;;;;;;;;;;;;;34692:12;34706:13;34678:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34743:14;34642:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34562:229;;;;;;;;:::i;:::-;;;;;;;;;;;;;34542:249;;;;;;;;33052:1750;;;;:::o;32239:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32199:33::-;;;;;;;;;;;;;:::o;32166:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23764:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32529:106::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;32618:9:::1;32603:12;:24;;;;;;:::i;:::-;;32529:106:::0;:::o;32934:110::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;33025:11:::1;33012:10;:24;;;;;;:::i;:::-;;32934:110:::0;:::o;23995:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32138:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20943:219::-;20698:5;;;;;;;;;;20684:19;;:10;:19;;;20680:46;;20712:14;;;;;;;;;;;;;;20680:46;21044:1:::1;21026:20;;:6;:20;;::::0;21022:47:::1;;21055:14;;;;;;;;;;;;;;21022:47;21090:6;21082:5;::::0;:14:::1;;;;;;;;;;;;;;;;;;21147:6;21114:40;;21135:10;21114:40;;;;;;;;;;;;20943:219:::0;:::o;30913:92::-;30956:7;30989:8;30983:2;:14;;;;:::i;:::-;30976:21;;30913:92;:::o;29781:1093::-;29894:4;29911:12;29926:10;:8;:10::i;:::-;29911:25;;29947:27;29977:9;:15;29987:4;29977:15;;;;;;;;;;;;;;;;29947:45;;30003:29;30035:9;:13;30045:2;30035:13;;;;;;;;;;;;;;;;30003:45;;30080:6;30061:9;:15;30071:4;30061:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;30141:6;30124:9;:13;30134:2;30124:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;30232:9;:15;30242:4;30232:15;;;;;;;;;;;;;;;;;;;;;;;;;30227:251;;30264:22;30356:4;30338:9;:15;30348:4;30338:15;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;30312:4;30290:19;:26;;;;:::i;:::-;30289:72;;;;:::i;:::-;30264:97;;30381:9;30376:91;30400:14;30396:1;:18;30376:91;;;30440:11;30446:4;30440:5;:11::i;:::-;30416:3;;;;;:::i;:::-;;;;30376:91;;;;30249:229;30227:251;30554:9;:13;30564:2;30554:13;;;;;;;;;;;;;;;;;;;;;;;;;30549:247;;30584:22;30676:4;30652:21;:28;;;;:::i;:::-;30626:4;30610:9;:13;30620:2;30610:13;;;;;;;;;;;;;;;;:20;;;;:::i;:::-;30609:72;;;;:::i;:::-;30584:97;;30701:9;30696:89;30720:14;30716:1;:18;30696:89;;;30760:9;30766:2;30760:5;:9::i;:::-;30736:3;;;;;:::i;:::-;;;;30696:89;;;;30569:227;30549:247;30833:2;30813:31;;30827:4;30813:31;;;30837:6;30813:31;;;;;;:::i;:::-;;;;;;;;30862:4;30855:11;;;;;29781:1093;;;;;:::o;31876:160::-;31996:5;31989:4;:12;;;;;;:::i;:::-;;32021:7;32012:6;:16;;;;;;:::i;:::-;;31876:160;;:::o;17798:718::-;17854:13;17905:14;17942:1;17922:17;17933:5;17922:10;:17::i;:::-;:21;17905:38;;17958:20;17992:6;17981:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17958:41;;18014:11;18143:6;18139:2;18135:15;18127:6;18123:28;18116:35;;18180:290;18187:4;18180:290;;;18212:5;;;;;;;;18354:10;18349:2;18342:5;18338:14;18333:32;18328:3;18320:46;18412:2;18403:11;;;;;;:::i;:::-;;;;;18446:1;18437:5;:10;18180:290;18433:21;18180:290;18491:6;18484:13;;;;;17798:718;;;:::o;31495:373::-;31572:1;31556:18;;:4;:18;;;31552:73;;31598:15;;;;;;;;;;;;;;31552:73;31637:10;31650:6;:12;31657:4;31650:12;;;;;;;;;;;;;;;31685:1;31663:6;:12;31670:4;31663:12;;;;;;;;;;;;;;;:19;;;;:23;;;;:::i;:::-;31650:37;;;;;;;;:::i;:::-;;;;;;;;;;31637:50;;31698:6;:12;31705:4;31698:12;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31734:11;:15;31746:2;31734:15;;;;;;;;;;;31727:22;;;31767:8;:12;31776:2;31767:12;;;;;;;;;;;;31760:19;;;;;;;;;;;31797:11;:15;31809:2;31797:15;;;;;;;;;;;;31790:22;;;;;;;;;;;31857:2;31853:1;31830:30;;31839:4;31830:30;;;;;;;;;;;;31541:327;31495:373;:::o;31013:474::-;31086:1;31072:16;;:2;:16;;;31068:74;;31112:18;;;;;;;;;;;;;;31068:74;31179:6;;:8;;;;;;;;;;;;;31211:10;31224:6;;31211:19;;31271:1;31247:26;;:8;:12;31256:2;31247:12;;;;;;;;;;;;;;;;;;;;;:26;;;31243:81;;31297:15;;;;;;;;;;;;;;31243:81;31351:2;31336:8;:12;31345:2;31336:12;;;;;;;;;;;;:17;;;;;;;;;;;;;;;;;;31364:6;:10;31371:2;31364:10;;;;;;;;;;;;;;;31380:2;31364:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31432:1;31412:6;:10;31419:2;31412:10;;;;;;;;;;;;;;;:17;;;;:21;;;;:::i;:::-;31394:11;:15;31406:2;31394:15;;;;;;;;;;;:39;;;;31476:2;31472;31451:28;;31468:1;31451:28;;;;;;;;;;;;31057:430;31013:474;:::o;14202:948::-;14255:7;14275:14;14292:1;14275:18;;14342:8;14333:5;:17;14329:106;;14380:8;14371:17;;;;;;:::i;:::-;;;;;14417:2;14407:12;;;;14329:106;14462:8;14453:5;:17;14449:106;;14500:8;14491:17;;;;;;:::i;:::-;;;;;14537:2;14527:12;;;;14449:106;14582:8;14573:5;:17;14569:106;;14620:8;14611:17;;;;;;:::i;:::-;;;;;14657:2;14647:12;;;;14569:106;14702:7;14693:5;:16;14689:103;;14739:7;14730:16;;;;;;:::i;:::-;;;;;14775:1;14765:11;;;;14689:103;14819:7;14810:5;:16;14806:103;;14856:7;14847:16;;;;;;:::i;:::-;;;;;14892:1;14882:11;;;;14806:103;14936:7;14927:5;:16;14923:103;;14973:7;14964:16;;;;;;:::i;:::-;;;;;15009:1;14999:11;;;;14923:103;15053:7;15044:5;:16;15040:68;;15091:1;15081:11;;;;15040:68;15136:6;15129:13;;;14202:948;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:118::-;2688:24;2706:5;2688:24;:::i;:::-;2683:3;2676:37;2601:118;;:::o;2725:222::-;2818:4;2856:2;2845:9;2841:18;2833:26;;2869:71;2937:1;2926:9;2922:17;2913:6;2869:71;:::i;:::-;2725:222;;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::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:116::-;8236:21;8251:5;8236:21;:::i;:::-;8229:5;8226:32;8216:60;;8272:1;8269;8262:12;8216:60;8166:116;:::o;8288:133::-;8331:5;8369:6;8356:20;8347:29;;8385:30;8409:5;8385:30;:::i;:::-;8288:133;;;;:::o;8427:323::-;8483:6;8532:2;8520:9;8511:7;8507:23;8503:32;8500:119;;;8538:79;;:::i;:::-;8500:119;8658:1;8683:50;8725:7;8716:6;8705:9;8701:22;8683:50;:::i;:::-;8673:60;;8629:114;8427:323;;;;:::o;8756:834::-;8844:6;8852;8901:2;8889:9;8880:7;8876:23;8872:32;8869:119;;;8907:79;;:::i;:::-;8869:119;9055:1;9044:9;9040:17;9027:31;9085:18;9077:6;9074:30;9071:117;;;9107:79;;:::i;:::-;9071:117;9212:63;9267:7;9258:6;9247:9;9243:22;9212:63;:::i;:::-;9202:73;;8998:287;9352:2;9341:9;9337:18;9324:32;9383:18;9375:6;9372:30;9369:117;;;9405:79;;:::i;:::-;9369:117;9510:63;9565:7;9556:6;9545:9;9541:22;9510:63;:::i;:::-;9500:73;;9295:288;8756:834;;;;;:::o;9596:468::-;9661:6;9669;9718:2;9706:9;9697:7;9693:23;9689:32;9686:119;;;9724:79;;:::i;:::-;9686:119;9844:1;9869:53;9914:7;9905:6;9894:9;9890:22;9869:53;:::i;:::-;9859:63;;9815:117;9971:2;9997:50;10039:7;10030:6;10019:9;10015:22;9997:50;:::i;:::-;9987:60;;9942:115;9596:468;;;;;:::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:117::-;10514:1;10511;10504:12;10528:117;10637:1;10634;10627:12;10664:552;10721:8;10731:6;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10902:6;10889:20;10879:30;;10932:18;10924:6;10921:30;10918:117;;;10954:79;;:::i;:::-;10918:117;11068:4;11060:6;11056:17;11044:29;;11122:3;11114:4;11106:6;11102:17;11092:8;11088:32;11085:41;11082:128;;;11129:79;;:::i;:::-;11082:128;10664:552;;;;;:::o;11222:963::-;11319:6;11327;11335;11343;11351;11400:3;11388:9;11379:7;11375:23;11371:33;11368:120;;;11407:79;;:::i;:::-;11368:120;11527:1;11552:53;11597:7;11588:6;11577:9;11573:22;11552:53;:::i;:::-;11542:63;;11498:117;11654:2;11680:53;11725:7;11716:6;11705:9;11701:22;11680:53;:::i;:::-;11670:63;;11625:118;11782:2;11808:53;11853:7;11844:6;11833:9;11829:22;11808:53;:::i;:::-;11798:63;;11753:118;11938:2;11927:9;11923:18;11910:32;11969:18;11961:6;11958:30;11955:117;;;11991:79;;:::i;:::-;11955:117;12104:64;12160:7;12151:6;12140:9;12136:22;12104:64;:::i;:::-;12086:82;;;;11881:297;11222:963;;;;;;;;:::o;12191:474::-;12259:6;12267;12316:2;12304:9;12295:7;12291:23;12287:32;12284:119;;;12322:79;;:::i;:::-;12284:119;12442:1;12467:53;12512:7;12503:6;12492:9;12488:22;12467:53;:::i;:::-;12457:63;;12413:117;12569:2;12595:53;12640:7;12631:6;12620:9;12616:22;12595:53;:::i;:::-;12585:63;;12540:118;12191:474;;;;;:::o;12671:180::-;12719:77;12716:1;12709:88;12816:4;12813:1;12806:15;12840:4;12837:1;12830:15;12857:320;12901:6;12938:1;12932:4;12928:12;12918:22;;12985:1;12979:4;12975:12;13006:18;12996:81;;13062:4;13054:6;13050:17;13040:27;;12996:81;13124:2;13116:6;13113:14;13093:18;13090:38;13087:84;;13143:18;;:::i;:::-;13087:84;12908:269;12857:320;;;:::o;13183:141::-;13232:4;13255:3;13247:11;;13278:3;13275:1;13268:14;13312:4;13309:1;13299:18;13291:26;;13183:141;;;:::o;13330:93::-;13367:6;13414:2;13409;13402:5;13398:14;13394:23;13384:33;;13330:93;;;:::o;13429:107::-;13473:8;13523:5;13517:4;13513:16;13492:37;;13429:107;;;;:::o;13542:393::-;13611:6;13661:1;13649:10;13645:18;13684:97;13714:66;13703:9;13684:97;:::i;:::-;13802:39;13832:8;13821:9;13802:39;:::i;:::-;13790:51;;13874:4;13870:9;13863:5;13859:21;13850:30;;13923:4;13913:8;13909:19;13902:5;13899:30;13889:40;;13618:317;;13542:393;;;;;:::o;13941:60::-;13969:3;13990:5;13983:12;;13941:60;;;:::o;14007:142::-;14057:9;14090:53;14108:34;14117:24;14135:5;14117:24;:::i;:::-;14108:34;:::i;:::-;14090:53;:::i;:::-;14077:66;;14007:142;;;:::o;14155:75::-;14198:3;14219:5;14212:12;;14155:75;;;:::o;14236:269::-;14346:39;14377:7;14346:39;:::i;:::-;14407:91;14456:41;14480:16;14456:41;:::i;:::-;14448:6;14441:4;14435:11;14407:91;:::i;:::-;14401:4;14394:105;14312:193;14236:269;;;:::o;14511:73::-;14556:3;14511:73;:::o;14590:189::-;14667:32;;:::i;:::-;14708:65;14766:6;14758;14752:4;14708:65;:::i;:::-;14643:136;14590:189;;:::o;14785:186::-;14845:120;14862:3;14855:5;14852:14;14845:120;;;14916:39;14953:1;14946:5;14916:39;:::i;:::-;14889:1;14882:5;14878:13;14869:22;;14845:120;;;14785:186;;:::o;14977:543::-;15078:2;15073:3;15070:11;15067:446;;;15112:38;15144:5;15112:38;:::i;:::-;15196:29;15214:10;15196:29;:::i;:::-;15186:8;15182:44;15379:2;15367:10;15364:18;15361:49;;;15400:8;15385:23;;15361:49;15423:80;15479:22;15497:3;15479:22;:::i;:::-;15469:8;15465:37;15452:11;15423:80;:::i;:::-;15082:431;;15067:446;14977:543;;;:::o;15526:117::-;15580:8;15630:5;15624:4;15620:16;15599:37;;15526:117;;;;:::o;15649:169::-;15693:6;15726:51;15774:1;15770:6;15762:5;15759:1;15755:13;15726:51;:::i;:::-;15722:56;15807:4;15801;15797:15;15787:25;;15700:118;15649:169;;;;:::o;15823:295::-;15899:4;16045:29;16070:3;16064:4;16045:29;:::i;:::-;16037:37;;16107:3;16104:1;16100:11;16094:4;16091:21;16083:29;;15823:295;;;;:::o;16123:1395::-;16240:37;16273:3;16240:37;:::i;:::-;16342:18;16334:6;16331:30;16328:56;;;16364:18;;:::i;:::-;16328:56;16408:38;16440:4;16434:11;16408:38;:::i;:::-;16493:67;16553:6;16545;16539:4;16493:67;:::i;:::-;16587:1;16611:4;16598:17;;16643:2;16635:6;16632:14;16660:1;16655:618;;;;17317:1;17334:6;17331:77;;;17383:9;17378:3;17374:19;17368:26;17359:35;;17331:77;17434:67;17494:6;17487:5;17434:67;:::i;:::-;17428:4;17421:81;17290:222;16625:887;;16655:618;16707:4;16703:9;16695:6;16691:22;16741:37;16773:4;16741:37;:::i;:::-;16800:1;16814:208;16828:7;16825:1;16822:14;16814:208;;;16907:9;16902:3;16898:19;16892:26;16884:6;16877:42;16958:1;16950:6;16946:14;16936:24;;17005:2;16994:9;16990:18;16977:31;;16851:4;16848:1;16844:12;16839:17;;16814:208;;;17050:6;17041:7;17038:19;17035:179;;;17108:9;17103:3;17099:19;17093:26;17151:48;17193:4;17185:6;17181:17;17170:9;17151:48;:::i;:::-;17143:6;17136:64;17058:156;17035:179;17260:1;17256;17248:6;17244:14;17240:22;17234:4;17227:36;16662:611;;;16625:887;;16215:1303;;;16123:1395;;:::o;17524:180::-;17572:77;17569:1;17562:88;17669:4;17666:1;17659:15;17693:4;17690:1;17683:15;17710:194;17750:4;17770:20;17788:1;17770:20;:::i;:::-;17765:25;;17804:20;17822:1;17804:20;:::i;:::-;17799:25;;17848:1;17845;17841:9;17833:17;;17872:1;17866:4;17863:11;17860:37;;;17877:18;;:::i;:::-;17860:37;17710:194;;;;:::o;17910:180::-;17958:77;17955:1;17948:88;18055:4;18052:1;18045:15;18079:4;18076:1;18069:15;18096:180;18144:77;18141:1;18134:88;18241:4;18238:1;18231:15;18265:4;18262:1;18255:15;18282:168;18365:11;18399:6;18394:3;18387:19;18439:4;18434:3;18430:14;18415:29;;18282:168;;;;:::o;18456:114::-;;:::o;18576:362::-;18717:3;18738:65;18801:1;18796:3;18738:65;:::i;:::-;18731:72;;18812:93;18901:3;18812:93;:::i;:::-;18930:1;18925:3;18921:11;18914:18;;18576:362;;;:::o;18944:748::-;19193:4;19231:3;19220:9;19216:19;19208:27;;19245:71;19313:1;19302:9;19298:17;19289:6;19245:71;:::i;:::-;19326:72;19394:2;19383:9;19379:18;19370:6;19326:72;:::i;:::-;19408;19476:2;19465:9;19461:18;19452:6;19408:72;:::i;:::-;19527:9;19521:4;19517:20;19512:2;19501:9;19497:18;19490:48;19555:130;19680:4;19555:130;:::i;:::-;19547:138;;18944:748;;;;;;:::o;19698:149::-;19734:7;19774:66;19767:5;19763:78;19752:89;;19698:149;;;:::o;19853:120::-;19925:23;19942:5;19925:23;:::i;:::-;19918:5;19915:34;19905:62;;19963:1;19960;19953:12;19905:62;19853:120;:::o;19979:141::-;20035:5;20066:6;20060:13;20051:22;;20082:32;20108:5;20082:32;:::i;:::-;19979:141;;;;:::o;20126:349::-;20195:6;20244:2;20232:9;20223:7;20219:23;20215:32;20212:119;;;20250:79;;:::i;:::-;20212:119;20370:1;20395:63;20450:7;20441:6;20430:9;20426:22;20395:63;:::i;:::-;20385:73;;20341:127;20126:349;;;;:::o;20503:314::-;20599:3;20620:70;20683:6;20678:3;20620:70;:::i;:::-;20613:77;;20700:56;20749:6;20744:3;20737:5;20700:56;:::i;:::-;20781:29;20803:6;20781:29;:::i;:::-;20776:3;20772:39;20765:46;;20503:314;;;;;:::o;20823:660::-;21028:4;21066:3;21055:9;21051:19;21043:27;;21080:71;21148:1;21137:9;21133:17;21124:6;21080:71;:::i;:::-;21161:72;21229:2;21218:9;21214:18;21205:6;21161:72;:::i;:::-;21243;21311:2;21300:9;21296:18;21287:6;21243:72;:::i;:::-;21362:9;21356:4;21352:20;21347:2;21336:9;21332:18;21325:48;21390:86;21471:4;21462:6;21454;21390:86;:::i;:::-;21382:94;;20823:660;;;;;;;;:::o;21489:148::-;21591:11;21628:3;21613:18;;21489:148;;;;:::o;21667:874::-;21770:3;21807:5;21801:12;21836:36;21862:9;21836:36;:::i;:::-;21888:89;21970:6;21965:3;21888:89;:::i;:::-;21881:96;;22008:1;21997:9;21993:17;22024:1;22019:166;;;;22199:1;22194:341;;;;21986:549;;22019:166;22103:4;22099:9;22088;22084:25;22079:3;22072:38;22165:6;22158:14;22151:22;22143:6;22139:35;22134:3;22130:45;22123:52;;22019:166;;22194:341;22261:38;22293:5;22261:38;:::i;:::-;22321:1;22335:154;22349:6;22346:1;22343:13;22335:154;;;22423:7;22417:14;22413:1;22408:3;22404:11;22397:35;22473:1;22464:7;22460:15;22449:26;;22371:4;22368:1;22364:12;22359:17;;22335:154;;;22518:6;22513:3;22509:16;22502:23;;22201:334;;21986:549;;21774:767;;21667:874;;;;:::o;22547:390::-;22653:3;22681:39;22714:5;22681:39;:::i;:::-;22736:89;22818:6;22813:3;22736:89;:::i;:::-;22729:96;;22834:65;22892:6;22887:3;22880:4;22873:5;22869:16;22834:65;:::i;:::-;22924:6;22919:3;22915:16;22908:23;;22657:280;22547:390;;;;:::o;22943:429::-;23120:3;23142:92;23230:3;23221:6;23142:92;:::i;:::-;23135:99;;23251:95;23342:3;23333:6;23251:95;:::i;:::-;23244:102;;23363:3;23356:10;;22943:429;;;;;:::o;23378:79::-;23417:7;23446:5;23435:16;;23378:79;;;:::o;23463:157::-;23568:45;23588:24;23606:5;23588:24;:::i;:::-;23568:45;:::i;:::-;23563:3;23556:58;23463:157;;:::o;23626:256::-;23738:3;23753:75;23824:3;23815:6;23753:75;:::i;:::-;23853:2;23848:3;23844:12;23837:19;;23873:3;23866:10;;23626:256;;;;:::o;23888:242::-;24057:66;24052:3;24045:79;23888:242;:::o;24136:542::-;24359:3;24374:138;24508:3;24374:138;:::i;:::-;24537:2;24532:3;24528:12;24521:19;;24557:95;24648:3;24639:6;24557:95;:::i;:::-;24550:102;;24669:3;24662:10;;24136:542;;;;:::o;24684:555::-;24824:66;24820:1;24812:6;24808:14;24801:90;24925:34;24920:2;24912:6;24908:15;24901:59;24994:34;24989:2;24981:6;24977:15;24970:59;25063:66;25058:2;25050:6;25046:15;25039:91;25165:66;25159:3;25151:6;25147:16;25140:92;24684:555;:::o;25245:404::-;25405:3;25426:86;25508:3;25503;25426:86;:::i;:::-;25419:93;;25521;25610:3;25521:93;:::i;:::-;25639:3;25634;25630:13;25623:20;;25245:404;;;:::o;25655:541::-;25888:3;25910:95;26001:3;25992:6;25910:95;:::i;:::-;25903:102;;26022:148;26166:3;26022:148;:::i;:::-;26015:155;;26187:3;26180:10;;25655:541;;;;:::o;26202:145::-;26255:4;26278:3;26270:11;;26301:3;26298:1;26291:14;26335:4;26332:1;26322:18;26314:26;;26202:145;;;:::o;26377:882::-;26484:3;26521:5;26515:12;26550:36;26576:9;26550:36;:::i;:::-;26602:89;26684:6;26679:3;26602:89;:::i;:::-;26595:96;;26722:1;26711:9;26707:17;26738:1;26733:166;;;;26913:1;26908:345;;;;26700:553;;26733:166;26817:4;26813:9;26802;26798:25;26793:3;26786:38;26879:6;26872:14;26865:22;26857:6;26853:35;26848:3;26844:45;26837:52;;26733:166;;26908:345;26975:42;27011:5;26975:42;:::i;:::-;27039:1;27053:154;27067:6;27064:1;27061:13;27053:154;;;27141:7;27135:14;27131:1;27126:3;27122:11;27115:35;27191:1;27182:7;27178:15;27167:26;;27089:4;27086:1;27082:12;27077:17;;27053:154;;;27236:6;27231:3;27227:16;27220:23;;26915:338;;26700:553;;26488:771;;26377:882;;;;:::o;27265:437::-;27446:3;27468:96;27560:3;27551:6;27468:96;:::i;:::-;27461:103;;27581:95;27672:3;27663:6;27581:95;:::i;:::-;27574:102;;27693:3;27686:10;;27265:437;;;;;:::o;27708:435::-;27888:3;27910:95;28001:3;27992:6;27910:95;:::i;:::-;27903:102;;28022:95;28113:3;28104:6;28022:95;:::i;:::-;28015:102;;28134:3;28127:10;;27708:435;;;;;:::o;28149:315::-;28289:66;28285:1;28277:6;28273:14;28266:90;28390:66;28385:2;28377:6;28373:15;28366:91;28149:315;:::o;28470:402::-;28630:3;28651:85;28733:2;28728:3;28651:85;:::i;:::-;28644:92;;28745:93;28834:3;28745:93;:::i;:::-;28863:2;28858:3;28854:12;28847:19;;28470:402;;;:::o;28878:541::-;29111:3;29133:148;29277:3;29133:148;:::i;:::-;29126:155;;29298:95;29389:3;29380:6;29298:95;:::i;:::-;29291:102;;29410:3;29403:10;;28878:541;;;;:::o;29425:205::-;29594:29;29589:3;29582:42;29425:205;:::o;29636:542::-;29859:3;29874:138;30008:3;29874:138;:::i;:::-;30037:2;30032:3;30028:12;30021:19;;30057:95;30148:3;30139:6;30057:95;:::i;:::-;30050:102;;30169:3;30162:10;;29636:542;;;;:::o;30184:102::-;30226:8;30273:5;30270:1;30266:13;30245:34;;30184:102;;;:::o;30292:848::-;30353:5;30360:4;30384:6;30375:15;;30408:5;30399:14;;30422:712;30443:1;30433:8;30430:15;30422:712;;;30538:4;30533:3;30529:14;30523:4;30520:24;30517:50;;;30547:18;;:::i;:::-;30517:50;30597:1;30587:8;30583:16;30580:451;;;31012:4;31005:5;31001:16;30992:25;;30580:451;31062:4;31056;31052:15;31044:23;;31092:32;31115:8;31092:32;:::i;:::-;31080:44;;30422:712;;;30292:848;;;;;;;:::o;31146:1073::-;31200:5;31391:8;31381:40;;31412:1;31403:10;;31414:5;;31381:40;31440:4;31430:36;;31457:1;31448:10;;31459:5;;31430:36;31526:4;31574:1;31569:27;;;;31610:1;31605:191;;;;31519:277;;31569:27;31587:1;31578:10;;31589:5;;;31605:191;31650:3;31640:8;31637:17;31634:43;;;31657:18;;:::i;:::-;31634:43;31706:8;31703:1;31699:16;31690:25;;31741:3;31734:5;31731:14;31728:40;;;31748:18;;:::i;:::-;31728:40;31781:5;;;31519:277;;31905:2;31895:8;31892:16;31886:3;31880:4;31877:13;31873:36;31855:2;31845:8;31842:16;31837:2;31831:4;31828:12;31824:35;31808:111;31805:246;;;31961:8;31955:4;31951:19;31942:28;;31996:3;31989:5;31986:14;31983:40;;;32003:18;;:::i;:::-;31983:40;32036:5;;31805:246;32076:42;32114:3;32104:8;32098:4;32095:1;32076:42;:::i;:::-;32061:57;;;;32150:4;32145:3;32141:14;32134:5;32131:25;32128:51;;;32159:18;;:::i;:::-;32128:51;32208:4;32201:5;32197:16;32188:25;;31146:1073;;;;;;:::o;32225:281::-;32283:5;32307:23;32325:4;32307:23;:::i;:::-;32299:31;;32351:25;32367:8;32351:25;:::i;:::-;32339:37;;32395:104;32432:66;32422:8;32416:4;32395:104;:::i;:::-;32386:113;;32225:281;;;;:::o;32512:180::-;32560:77;32557:1;32550:88;32657:4;32654:1;32647:15;32681:4;32678:1;32671:15;32698:185;32738:1;32755:20;32773:1;32755:20;:::i;:::-;32750:25;;32789:20;32807:1;32789:20;:::i;:::-;32784:25;;32828:1;32818:35;;32833:18;;:::i;:::-;32818:35;32875:1;32872;32868:9;32863:14;;32698:185;;;;:::o;32889:233::-;32928:3;32951:24;32969:5;32951:24;:::i;:::-;32942:33;;32997:66;32990:5;32987:77;32984:103;;33067:18;;:::i;:::-;32984:103;33114:1;33107:5;33103:13;33096:20;;32889:233;;;:::o
Swarm Source
ipfs://a2e2eee07cbeca39f5c6b10395cb98bbd1fa2dff433e4909b4d449cabcea4ef8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
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.