Overview
ETH Balance
1.104232861792563836 ETH
Eth Value
$2,550.37 (@ $2,309.63/ETH)More Info
Private Name Tags
ContractCreator
Latest 11 from a total of 11 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw MEV | 17981924 | 390 days ago | IN | 0 ETH | 0.00113599 | ||||
Withdraw MEV | 17932927 | 397 days ago | IN | 0 ETH | 0.00134093 | ||||
Withdraw MEV | 17749061 | 422 days ago | IN | 0 ETH | 0.00186921 | ||||
Transfer | 17683351 | 432 days ago | IN | 1.37117866 ETH | 0.0004211 | ||||
Withdraw MEV | 17426550 | 468 days ago | IN | 0 ETH | 0.0017224 | ||||
Withdraw MEV | 17236392 | 494 days ago | IN | 0 ETH | 0.0070394 | ||||
Transfer | 17229763 | 495 days ago | IN | 1 ETH | 0.00147385 | ||||
Withdraw MEV | 17114948 | 512 days ago | IN | 0 ETH | 0.00403693 | ||||
Transfer | 17114769 | 512 days ago | IN | 0.49 ETH | 0.00085054 | ||||
Transfer | 17114445 | 512 days ago | IN | 0.35016795 ETH | 0.00094467 | ||||
0x60806040 | 17042739 | 522 days ago | IN | 0 ETH | 0.07273447 |
Loading...
Loading
Contract Name:
WithdrawMEV
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-14 */ // SPDX-License-Identifier: MIT // Sources flattened with hardhat v2.13.0 https://hardhat.org // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/utils/cryptography/[email protected] // OpenZeppelin Contracts (last updated v4.7.3) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ 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. * * _Available since v3.4._ */ 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. * * _Available since v3.4._ */ 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. * * _Available since v3.4._ */ 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. * * _Available since v3.4._ */ 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 addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/security/[email protected] // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/Staking/common/Security.sol pragma solidity ^0.8.0; contract Security is Pausable, ReentrancyGuard, AccessControl { bytes32 public constant OWNER_ROLE = keccak256("OWNER_ROLE"); constructor(address owner) { require(owner != address(0), "contract owner is the zero address"); _grantRole(OWNER_ROLE, owner); } function pause() public whenNotPaused onlyRole(OWNER_ROLE) { _pause(); } function unpause() public whenPaused onlyRole(OWNER_ROLE) { _unpause(); } } // File contracts/Staking/common/VerifySig.sol pragma solidity ^0.8.0; contract VerifySig { // 50 years = 1576800000, 100 years = 3153600000, 2**32 = 4294967296, cur_time = 1654578626 uint256 public constant MAX_YEAR_NUM_SEC = 50 * 365 * 24 * 60 * 60; // Public fields address public operateSigner; // The address that can co-sign transactions on the wallet // record all operation hash use state mapping(bytes32 => bool) public operationHashHistory; event AuthTxExecuted(bytes32 indexed hash, string name); constructor(address signer) { require(signer != address(0), "signer address is the zero address"); operateSigner = signer; } function verifySignature( string memory name, bytes32 operationHash, uint256 expireTime, bytes memory signature ) internal returns (address) { require(expireTime > block.timestamp, "transaction expired."); require( !operationHashHistory[operationHash], "Transaction has been executed." ); address signer = recoverAddressFromSignature(operationHash, signature); require(signer == operateSigner, "invalid signer"); // Try to insert operationHash operationHashHistory[operationHash] = true; emit AuthTxExecuted(operationHash, name); return signer; } function recoverAddressFromSignature( bytes32 operationHash, bytes memory signature ) private pure returns (address) { if (signature.length != 65) { revert("invalid signature length"); } bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 prefixedProof = keccak256( abi.encodePacked(prefix, operationHash) ); return ECDSA.recover(prefixedProof, signature); } } // File contracts/Staking/common/CtrlBase.sol pragma solidity ^0.8.0; contract CtrlBase is VerifySig, Security { using SafeMath for uint256; using Address for address; uint256 public constant BUNDLE_MAXIMUM = 100; constructor(address owner, address signer) VerifySig(signer) Security(owner) {} function ownerCallTxs( address[] memory callAddresses, bytes[] memory datas, uint256[] memory values ) external whenNotPaused onlyRole(OWNER_ROLE) { require( callAddresses.length <= BUNDLE_MAXIMUM && values.length <= BUNDLE_MAXIMUM && datas.length <= BUNDLE_MAXIMUM, "Exceed limit" ); require( callAddresses.length == datas.length && callAddresses.length == values.length, "addresses length error" ); for (uint256 i = 0; i < datas.length; i++) { if (callAddresses[i].isContract()) { callAddresses[i].functionCallWithValue(datas[i], values[i]); } else { Address.sendValue(payable(callAddresses[i]), values[i]); } } } } // File contracts/Staking/WithdrawMEV.sol pragma solidity ^0.8.0; contract WithdrawMEV is CtrlBase { using Address for address payable; using SafeMath for uint256; event LogWithdrawMEV(address indexed from, uint256 amount); uint256 public totalWithdrawed; constructor( address owner, address signer ) CtrlBase(owner, signer) { } receive() external payable {} function withdrawMEV( address to, uint256 amount, uint256 orderId, uint256 expireTime, bytes memory signature ) external nonReentrant whenNotPaused { bytes32 operationHash = keccak256( abi.encodePacked("WITHDRAWMEV", to, amount, orderId, expireTime) ); verifySignature( "withdrawMEV", operationHash, expireTime, signature ); emit LogWithdrawMEV(to, amount); totalWithdrawed = totalWithdrawed.add(amount); payable(to).sendValue(amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"AuthTxExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawMEV","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BUNDLE_MAXIMUM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_YEAR_NUM_SEC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operateSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"operationHashHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"callAddresses","type":"address[]"},{"internalType":"bytes[]","name":"datas","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"ownerCallTxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"orderId","type":"uint256"},{"internalType":"uint256","name":"expireTime","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"withdrawMEV","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620037813803806200378183398181016040528101906200003791906200033e565b81818181600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620003ef565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000600260006101000a81548160ff0219169083151502179055506001600381905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000185576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017c90620003cd565b60405180910390fd5b620001b77fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e82620001c260201b60201c565b50505050506200050e565b620001d48282620002b460201b60201c565b620002b05760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002556200031f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b6000815190506200033881620004f4565b92915050565b600080604083850312156200035257600080fd5b6000620003628582860162000327565b9250506020620003758582860162000327565b9150509250929050565b60006200038e60228362000411565b91506200039b8262000456565b604082019050919050565b6000620003b560228362000411565b9150620003c282620004a5565b604082019050919050565b60006020820190508181036000830152620003e8816200037f565b9050919050565b600060208201905081810360008301526200040a81620003a6565b9050919050565b600082825260208201905092915050565b60006200042f8262000436565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b7f636f6e7472616374206f776e657220697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f7369676e6572206164647265737320697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b620004ff8162000422565b81146200050b57600080fd5b50565b613263806200051e6000396000f3fe60806040526004361061010d5760003560e01c806391d1485411610095578063ae3c11f411610064578063ae3c11f414610360578063aed2994b1461038b578063b74126cc146103b6578063d547741f146103e1578063e58378bb1461040a57610114565b806391d14854146102925780639b8d9f9c146102cf578063a217fddf1461030c578063a75a2c841461033757610114565b80633f4ba83a116100dc5780633f4ba83a146101e557806346acc627146101fc5780635c975abb146102275780636ebcf9b3146102525780638456cb591461027b57610114565b806301ffc9a714610119578063248a9ca3146101565780632f2ff15d1461019357806336568abe146101bc57610114565b3661011457005b600080fd5b34801561012557600080fd5b50610140600480360381019061013b91906120e2565b610435565b60405161014d919061265d565b60405180910390f35b34801561016257600080fd5b5061017d6004803603810190610178919061207d565b6104af565b60405161018a9190612678565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b591906120a6565b6104cf565b005b3480156101c857600080fd5b506101e360048036038101906101de91906120a6565b6104f0565b005b3480156101f157600080fd5b506101fa610573565b005b34801561020857600080fd5b506102116105b0565b60405161021e919061295a565b60405180910390f35b34801561023357600080fd5b5061023c6105b5565b604051610249919061265d565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190611fe6565b6105cc565b005b34801561028757600080fd5b506102906108b6565b005b34801561029e57600080fd5b506102b960048036038101906102b491906120a6565b6108f3565b6040516102c6919061265d565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061207d565b61095e565b604051610303919061265d565b60405180910390f35b34801561031857600080fd5b5061032161097e565b60405161032e9190612678565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190611f57565b610985565b005b34801561036c57600080fd5b50610375610af0565b6040516103829190612642565b60405180910390f35b34801561039757600080fd5b506103a0610b14565b6040516103ad919061295a565b60405180910390f35b3480156103c257600080fd5b506103cb610b1c565b6040516103d8919061295a565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906120a6565b610b22565b005b34801561041657600080fd5b5061041f610b43565b60405161042c9190612678565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782610b67565b5b9050919050565b600060046000838152602001908152602001600020600101549050919050565b6104d8826104af565b6104e181610bd1565b6104eb8383610be5565b505050565b6104f8610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055c9061293a565b60405180910390fd5b61056f8282610cce565b5050565b61057b610db0565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6105a581610bd1565b6105ad610df9565b50565b606481565b6000600260009054906101000a900460ff16905090565b6105d4610e5c565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6105fe81610bd1565b606484511115801561061257506064825111155b801561062057506064835111155b61065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106569061287a565b60405180910390fd5b82518451148015610671575081518451145b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906128da565b60405180910390fd5b60005b83518110156108af5761071b8582815181106106f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16610ea6565b156108115761080b84828151811061075c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184838151811061079d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518784815181106107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16610ec99092919063ffffffff16565b5061089c565b61089b85828151811061084d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184838151811061088e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ef8565b5b80806108a790612c64565b9150506106b3565b5050505050565b6108be610e5c565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6108e881610bd1565b6108f0610fec565b50565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000801b81565b600260035414156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061291a565b60405180910390fd5b60026003819055506109db610e5c565b6000858585856040516020016109f4949392919061259a565b604051602081830303815290604052805190602001209050610a4d6040518060400160405280600b81526020017f77697468647261774d455600000000000000000000000000000000000000000081525082858561104f565b508573ffffffffffffffffffffffffffffffffffffffff167f20938277a673b7399d3d203ae53a42bc2b7b14890a61d7f36642b27c7e26417486604051610a94919061295a565b60405180910390a2610ab1856005546111ff90919063ffffffff16565b600581905550610ae0858773ffffffffffffffffffffffffffffffffffffffff16610ef890919063ffffffff16565b5060016003819055505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b635dfc0f0081565b60055481565b610b2b826104af565b610b3481610bd1565b610b3e8383610cce565b505050565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610be281610bdd610cc6565b611215565b50565b610bef82826108f3565b610cc25760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610c67610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610cd882826108f3565b15610dac5760006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d51610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b610db86105b5565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061273a565b60405180910390fd5b565b610e01610db0565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e45610cc6565b604051610e529190612642565b60405180910390a1565b610e646105b5565b15610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b9061283a565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060610eef848484604051806060016040528060298152602001613205602991396112b2565b90509392505050565b80471015610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906127fa565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610f61906125f3565b60006040518083038185875af1925050503d8060008114610f9e576040519150601f19603f3d011682016040523d82523d6000602084013e610fa3565b606091505b5050905080610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde906127ba565b60405180910390fd5b505050565b610ff4610e5c565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611038610cc6565b6040516110459190612642565b60405180910390a1565b6000428311611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a9061279a565b60405180910390fd5b6001600085815260200190815260200160002060009054906101000a900460ff16156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061289a565b60405180910390fd5b600061110085846113c6565b905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111879061277a565b60405180910390fd5b600180600087815260200190815260200160002060006101000a81548160ff021916908315150217905550847f870d2bee5bc8bf8ae0d860f1ff419a008e7ff3056f35e13a81117814e140e009876040516111eb91906126d8565b60405180910390a280915050949350505050565b6000818361120d9190612a8c565b905092915050565b61121f82826108f3565b6112ae576112448173ffffffffffffffffffffffffffffffffffffffff166014611487565b6112528360001c6020611487565b604051602001611263929190612608565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a591906126d8565b60405180910390fd5b5050565b6060824710156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee9061281a565b60405180910390fd5b61130085610ea6565b61133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906128ba565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611368919061255b565b60006040518083038185875af1925050503d80600081146113a5576040519150601f19603f3d011682016040523d82523d6000602084013e6113aa565b606091505b50915091506113ba828286611781565b92505050949350505050565b6000604182511461140c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611403906128fa565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818560405160200161145b929190612572565b60405160208183030381529060405280519060200120905061147d81856117e8565b9250505092915050565b60606000600283600261149a9190612ae2565b6114a49190612a8c565b67ffffffffffffffff8111156114e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115155781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106115fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261163d9190612ae2565b6116479190612a8c565b90505b6001811115611733577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106116af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106116ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061172c90612c09565b905061164a565b5060008414611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e9061271a565b60405180910390fd5b8091505092915050565b60608315611791578290506117e1565b6000835111156117a45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d891906126d8565b60405180910390fd5b9392505050565b60008060006117f7858561180f565b9150915061180481611861565b819250505092915050565b6000806041835114156118515760008060006020860151925060408601519150606086015160001a905061184587828585611bb2565b9450945050505061185a565b60006002915091505b9250929050565b6000600481111561189b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156118d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156118df57611baf565b60016004811115611919577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611952577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a906126fa565b60405180910390fd5b600260048111156119cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611a06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061275a565b60405180910390fd5b60036004811115611a81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906127da565b60405180910390fd5b600480811115611b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba59061285a565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611bed576000600391509150611cb6565b601b8560ff1614158015611c055750601c8560ff1614155b15611c17576000600491509150611cb6565b600060018787878760405160008152602001604052604051611c3c9493929190612693565b6020604051602081039080840390855afa158015611c5e573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cad57600060019250925050611cb6565b80600092509250505b94509492505050565b6000611cd2611ccd8461299a565b612975565b90508083825260208201905082856020860282011115611cf157600080fd5b60005b85811015611d215781611d078882611e5b565b845260208401935060208301925050600181019050611cf4565b5050509392505050565b6000611d3e611d39846129c6565b612975565b90508083825260208201905082856020860282011115611d5d57600080fd5b60005b85811015611da757813567ffffffffffffffff811115611d7f57600080fd5b808601611d8c8982611f18565b85526020850194506020840193505050600181019050611d60565b5050509392505050565b6000611dc4611dbf846129f2565b612975565b90508083825260208201905082856020860282011115611de357600080fd5b60005b85811015611e135781611df98882611f42565b845260208401935060208301925050600181019050611de6565b5050509392505050565b6000611e30611e2b84612a1e565b612975565b905082815260208101848484011115611e4857600080fd5b611e53848285612bc7565b509392505050565b600081359050611e6a816131a8565b92915050565b600082601f830112611e8157600080fd5b8135611e91848260208601611cbf565b91505092915050565b600082601f830112611eab57600080fd5b8135611ebb848260208601611d2b565b91505092915050565b600082601f830112611ed557600080fd5b8135611ee5848260208601611db1565b91505092915050565b600081359050611efd816131bf565b92915050565b600081359050611f12816131d6565b92915050565b600082601f830112611f2957600080fd5b8135611f39848260208601611e1d565b91505092915050565b600081359050611f51816131ed565b92915050565b600080600080600060a08688031215611f6f57600080fd5b6000611f7d88828901611e5b565b9550506020611f8e88828901611f42565b9450506040611f9f88828901611f42565b9350506060611fb088828901611f42565b925050608086013567ffffffffffffffff811115611fcd57600080fd5b611fd988828901611f18565b9150509295509295909350565b600080600060608486031215611ffb57600080fd5b600084013567ffffffffffffffff81111561201557600080fd5b61202186828701611e70565b935050602084013567ffffffffffffffff81111561203e57600080fd5b61204a86828701611e9a565b925050604084013567ffffffffffffffff81111561206757600080fd5b61207386828701611ec4565b9150509250925092565b60006020828403121561208f57600080fd5b600061209d84828501611eee565b91505092915050565b600080604083850312156120b957600080fd5b60006120c785828601611eee565b92505060206120d885828601611e5b565b9150509250929050565b6000602082840312156120f457600080fd5b600061210284828501611f03565b91505092915050565b61211481612b3c565b82525050565b61212b61212682612b3c565b612cad565b82525050565b61213a81612b4e565b82525050565b61214981612b5a565b82525050565b61216061215b82612b5a565b612cbf565b82525050565b600061217182612a4f565b61217b8185612a65565b935061218b818560208601612bd6565b80840191505092915050565b60006121a282612a5a565b6121ac8185612a70565b93506121bc818560208601612bd6565b6121c581612d43565b840191505092915050565b60006121db82612a5a565b6121e58185612a81565b93506121f5818560208601612bd6565b80840191505092915050565b600061220e601883612a70565b915061221982612d61565b602082019050919050565b6000612231602083612a70565b915061223c82612d8a565b602082019050919050565b6000612254600b83612a81565b915061225f82612db3565b600b82019050919050565b6000612277601483612a70565b915061228282612ddc565b602082019050919050565b600061229a601f83612a70565b91506122a582612e05565b602082019050919050565b60006122bd600e83612a70565b91506122c882612e2e565b602082019050919050565b60006122e0601483612a70565b91506122eb82612e57565b602082019050919050565b6000612303603a83612a70565b915061230e82612e80565b604082019050919050565b6000612326602283612a70565b915061233182612ecf565b604082019050919050565b6000612349601d83612a70565b915061235482612f1e565b602082019050919050565b600061236c602683612a70565b915061237782612f47565b604082019050919050565b600061238f601083612a70565b915061239a82612f96565b602082019050919050565b60006123b2602283612a70565b91506123bd82612fbf565b604082019050919050565b60006123d5600c83612a70565b91506123e08261300e565b602082019050919050565b60006123f8601e83612a70565b915061240382613037565b602082019050919050565b600061241b600083612a65565b915061242682613060565b600082019050919050565b600061243e601d83612a70565b915061244982613063565b602082019050919050565b6000612461601683612a70565b915061246c8261308c565b602082019050919050565b6000612484601783612a81565b915061248f826130b5565b601782019050919050565b60006124a7601883612a70565b91506124b2826130de565b602082019050919050565b60006124ca601f83612a70565b91506124d582613107565b602082019050919050565b60006124ed601183612a81565b91506124f882613130565b601182019050919050565b6000612510602f83612a70565b915061251b82613159565b604082019050919050565b61252f81612bb0565b82525050565b61254661254182612bb0565b612cdb565b82525050565b61255581612bba565b82525050565b60006125678284612166565b915081905092915050565b600061257e8285612166565b915061258a828461214f565b6020820191508190509392505050565b60006125a582612247565b91506125b1828761211a565b6014820191506125c18286612535565b6020820191506125d18285612535565b6020820191506125e18284612535565b60208201915081905095945050505050565b60006125fe8261240e565b9150819050919050565b600061261382612477565b915061261f82856121d0565b915061262a826124e0565b915061263682846121d0565b91508190509392505050565b6000602082019050612657600083018461210b565b92915050565b60006020820190506126726000830184612131565b92915050565b600060208201905061268d6000830184612140565b92915050565b60006080820190506126a86000830187612140565b6126b5602083018661254c565b6126c26040830185612140565b6126cf6060830184612140565b95945050505050565b600060208201905081810360008301526126f28184612197565b905092915050565b6000602082019050818103600083015261271381612201565b9050919050565b6000602082019050818103600083015261273381612224565b9050919050565b600060208201905081810360008301526127538161226a565b9050919050565b600060208201905081810360008301526127738161228d565b9050919050565b60006020820190508181036000830152612793816122b0565b9050919050565b600060208201905081810360008301526127b3816122d3565b9050919050565b600060208201905081810360008301526127d3816122f6565b9050919050565b600060208201905081810360008301526127f381612319565b9050919050565b600060208201905081810360008301526128138161233c565b9050919050565b600060208201905081810360008301526128338161235f565b9050919050565b6000602082019050818103600083015261285381612382565b9050919050565b60006020820190508181036000830152612873816123a5565b9050919050565b60006020820190508181036000830152612893816123c8565b9050919050565b600060208201905081810360008301526128b3816123eb565b9050919050565b600060208201905081810360008301526128d381612431565b9050919050565b600060208201905081810360008301526128f381612454565b9050919050565b600060208201905081810360008301526129138161249a565b9050919050565b60006020820190508181036000830152612933816124bd565b9050919050565b6000602082019050818103600083015261295381612503565b9050919050565b600060208201905061296f6000830184612526565b92915050565b600061297f612990565b905061298b8282612c33565b919050565b6000604051905090565b600067ffffffffffffffff8211156129b5576129b4612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156129e1576129e0612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a0d57612a0c612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a3957612a38612d14565b5b612a4282612d43565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a9782612bb0565b9150612aa283612bb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ad757612ad6612ce5565b5b828201905092915050565b6000612aed82612bb0565b9150612af883612bb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b3157612b30612ce5565b5b828202905092915050565b6000612b4782612b90565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612bf4578082015181840152602081019050612bd9565b83811115612c03576000848401525b50505050565b6000612c1482612bb0565b91506000821415612c2857612c27612ce5565b5b600182039050919050565b612c3c82612d43565b810181811067ffffffffffffffff82111715612c5b57612c5a612d14565b5b80604052505050565b6000612c6f82612bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ca257612ca1612ce5565b5b600182019050919050565b6000612cb882612cc9565b9050919050565b6000819050919050565b6000612cd482612d54565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f57495448445241574d4556000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f696e76616c6964207369676e6572000000000000000000000000000000000000600082015250565b7f7472616e73616374696f6e20657870697265642e000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206c696d69740000000000000000000000000000000000000000600082015250565b7f5472616e73616374696f6e20686173206265656e2065786563757465642e0000600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f616464726573736573206c656e677468206572726f7200000000000000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6131b181612b3c565b81146131bc57600080fd5b50565b6131c881612b5a565b81146131d357600080fd5b50565b6131df81612b64565b81146131ea57600080fd5b50565b6131f681612bb0565b811461320157600080fd5b5056fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a264697066735822122031e8a6569c67c01b0e503d5fcbf2eaae1994ca59e04804bfa3f0599e7ed6c39a64736f6c634300080400330000000000000000000000003d6b146626f158391984acbac89e6c63100482b8000000000000000000000000229efe6dee75a478cd2b8ae7092c3697c05d4b6c
Deployed Bytecode
0x60806040526004361061010d5760003560e01c806391d1485411610095578063ae3c11f411610064578063ae3c11f414610360578063aed2994b1461038b578063b74126cc146103b6578063d547741f146103e1578063e58378bb1461040a57610114565b806391d14854146102925780639b8d9f9c146102cf578063a217fddf1461030c578063a75a2c841461033757610114565b80633f4ba83a116100dc5780633f4ba83a146101e557806346acc627146101fc5780635c975abb146102275780636ebcf9b3146102525780638456cb591461027b57610114565b806301ffc9a714610119578063248a9ca3146101565780632f2ff15d1461019357806336568abe146101bc57610114565b3661011457005b600080fd5b34801561012557600080fd5b50610140600480360381019061013b91906120e2565b610435565b60405161014d919061265d565b60405180910390f35b34801561016257600080fd5b5061017d6004803603810190610178919061207d565b6104af565b60405161018a9190612678565b60405180910390f35b34801561019f57600080fd5b506101ba60048036038101906101b591906120a6565b6104cf565b005b3480156101c857600080fd5b506101e360048036038101906101de91906120a6565b6104f0565b005b3480156101f157600080fd5b506101fa610573565b005b34801561020857600080fd5b506102116105b0565b60405161021e919061295a565b60405180910390f35b34801561023357600080fd5b5061023c6105b5565b604051610249919061265d565b60405180910390f35b34801561025e57600080fd5b5061027960048036038101906102749190611fe6565b6105cc565b005b34801561028757600080fd5b506102906108b6565b005b34801561029e57600080fd5b506102b960048036038101906102b491906120a6565b6108f3565b6040516102c6919061265d565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f1919061207d565b61095e565b604051610303919061265d565b60405180910390f35b34801561031857600080fd5b5061032161097e565b60405161032e9190612678565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190611f57565b610985565b005b34801561036c57600080fd5b50610375610af0565b6040516103829190612642565b60405180910390f35b34801561039757600080fd5b506103a0610b14565b6040516103ad919061295a565b60405180910390f35b3480156103c257600080fd5b506103cb610b1c565b6040516103d8919061295a565b60405180910390f35b3480156103ed57600080fd5b50610408600480360381019061040391906120a6565b610b22565b005b34801561041657600080fd5b5061041f610b43565b60405161042c9190612678565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104a857506104a782610b67565b5b9050919050565b600060046000838152602001908152602001600020600101549050919050565b6104d8826104af565b6104e181610bd1565b6104eb8383610be5565b505050565b6104f8610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055c9061293a565b60405180910390fd5b61056f8282610cce565b5050565b61057b610db0565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6105a581610bd1565b6105ad610df9565b50565b606481565b6000600260009054906101000a900460ff16905090565b6105d4610e5c565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6105fe81610bd1565b606484511115801561061257506064825111155b801561062057506064835111155b61065f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106569061287a565b60405180910390fd5b82518451148015610671575081518451145b6106b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a7906128da565b60405180910390fd5b60005b83518110156108af5761071b8582815181106106f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16610ea6565b156108115761080b84828151811061075c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184838151811061079d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518784815181106107de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16610ec99092919063ffffffff16565b5061089c565b61089b85828151811061084d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015184838151811061088e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ef8565b5b80806108a790612c64565b9150506106b3565b5050505050565b6108be610e5c565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e6108e881610bd1565b6108f0610fec565b50565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000801b81565b600260035414156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c29061291a565b60405180910390fd5b60026003819055506109db610e5c565b6000858585856040516020016109f4949392919061259a565b604051602081830303815290604052805190602001209050610a4d6040518060400160405280600b81526020017f77697468647261774d455600000000000000000000000000000000000000000081525082858561104f565b508573ffffffffffffffffffffffffffffffffffffffff167f20938277a673b7399d3d203ae53a42bc2b7b14890a61d7f36642b27c7e26417486604051610a94919061295a565b60405180910390a2610ab1856005546111ff90919063ffffffff16565b600581905550610ae0858773ffffffffffffffffffffffffffffffffffffffff16610ef890919063ffffffff16565b5060016003819055505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b635dfc0f0081565b60055481565b610b2b826104af565b610b3481610bd1565b610b3e8383610cce565b505050565b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e81565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610be281610bdd610cc6565b611215565b50565b610bef82826108f3565b610cc25760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610c67610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b610cd882826108f3565b15610dac5760006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610d51610cc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b610db86105b5565b610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee9061273a565b60405180910390fd5b565b610e01610db0565b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610e45610cc6565b604051610e529190612642565b60405180910390a1565b610e646105b5565b15610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b9061283a565b60405180910390fd5b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060610eef848484604051806060016040528060298152602001613205602991396112b2565b90509392505050565b80471015610f3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f32906127fa565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610f61906125f3565b60006040518083038185875af1925050503d8060008114610f9e576040519150601f19603f3d011682016040523d82523d6000602084013e610fa3565b606091505b5050905080610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde906127ba565b60405180910390fd5b505050565b610ff4610e5c565b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611038610cc6565b6040516110459190612642565b60405180910390a1565b6000428311611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a9061279a565b60405180910390fd5b6001600085815260200190815260200160002060009054906101000a900460ff16156110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb9061289a565b60405180910390fd5b600061110085846113c6565b905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111879061277a565b60405180910390fd5b600180600087815260200190815260200160002060006101000a81548160ff021916908315150217905550847f870d2bee5bc8bf8ae0d860f1ff419a008e7ff3056f35e13a81117814e140e009876040516111eb91906126d8565b60405180910390a280915050949350505050565b6000818361120d9190612a8c565b905092915050565b61121f82826108f3565b6112ae576112448173ffffffffffffffffffffffffffffffffffffffff166014611487565b6112528360001c6020611487565b604051602001611263929190612608565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a591906126d8565b60405180910390fd5b5050565b6060824710156112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee9061281a565b60405180910390fd5b61130085610ea6565b61133f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611336906128ba565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611368919061255b565b60006040518083038185875af1925050503d80600081146113a5576040519150601f19603f3d011682016040523d82523d6000602084013e6113aa565b606091505b50915091506113ba828286611781565b92505050949350505050565b6000604182511461140c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611403906128fa565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506000818560405160200161145b929190612572565b60405160208183030381529060405280519060200120905061147d81856117e8565b9250505092915050565b60606000600283600261149a9190612ae2565b6114a49190612a8c565b67ffffffffffffffff8111156114e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115155781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611573577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106115fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261163d9190612ae2565b6116479190612a8c565b90505b6001811115611733577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106116af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106116ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061172c90612c09565b905061164a565b5060008414611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e9061271a565b60405180910390fd5b8091505092915050565b60608315611791578290506117e1565b6000835111156117a45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d891906126d8565b60405180910390fd5b9392505050565b60008060006117f7858561180f565b9150915061180481611861565b819250505092915050565b6000806041835114156118515760008060006020860151925060408601519150606086015160001a905061184587828585611bb2565b9450945050505061185a565b60006002915091505b9250929050565b6000600481111561189b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156118d4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156118df57611baf565b60016004811115611919577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611952577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a906126fa565b60405180910390fd5b600260048111156119cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611a06577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061275a565b60405180910390fd5b60036004811115611a81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611aba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906127da565b60405180910390fd5b600480811115611b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611b6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba59061285a565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611bed576000600391509150611cb6565b601b8560ff1614158015611c055750601c8560ff1614155b15611c17576000600491509150611cb6565b600060018787878760405160008152602001604052604051611c3c9493929190612693565b6020604051602081039080840390855afa158015611c5e573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cad57600060019250925050611cb6565b80600092509250505b94509492505050565b6000611cd2611ccd8461299a565b612975565b90508083825260208201905082856020860282011115611cf157600080fd5b60005b85811015611d215781611d078882611e5b565b845260208401935060208301925050600181019050611cf4565b5050509392505050565b6000611d3e611d39846129c6565b612975565b90508083825260208201905082856020860282011115611d5d57600080fd5b60005b85811015611da757813567ffffffffffffffff811115611d7f57600080fd5b808601611d8c8982611f18565b85526020850194506020840193505050600181019050611d60565b5050509392505050565b6000611dc4611dbf846129f2565b612975565b90508083825260208201905082856020860282011115611de357600080fd5b60005b85811015611e135781611df98882611f42565b845260208401935060208301925050600181019050611de6565b5050509392505050565b6000611e30611e2b84612a1e565b612975565b905082815260208101848484011115611e4857600080fd5b611e53848285612bc7565b509392505050565b600081359050611e6a816131a8565b92915050565b600082601f830112611e8157600080fd5b8135611e91848260208601611cbf565b91505092915050565b600082601f830112611eab57600080fd5b8135611ebb848260208601611d2b565b91505092915050565b600082601f830112611ed557600080fd5b8135611ee5848260208601611db1565b91505092915050565b600081359050611efd816131bf565b92915050565b600081359050611f12816131d6565b92915050565b600082601f830112611f2957600080fd5b8135611f39848260208601611e1d565b91505092915050565b600081359050611f51816131ed565b92915050565b600080600080600060a08688031215611f6f57600080fd5b6000611f7d88828901611e5b565b9550506020611f8e88828901611f42565b9450506040611f9f88828901611f42565b9350506060611fb088828901611f42565b925050608086013567ffffffffffffffff811115611fcd57600080fd5b611fd988828901611f18565b9150509295509295909350565b600080600060608486031215611ffb57600080fd5b600084013567ffffffffffffffff81111561201557600080fd5b61202186828701611e70565b935050602084013567ffffffffffffffff81111561203e57600080fd5b61204a86828701611e9a565b925050604084013567ffffffffffffffff81111561206757600080fd5b61207386828701611ec4565b9150509250925092565b60006020828403121561208f57600080fd5b600061209d84828501611eee565b91505092915050565b600080604083850312156120b957600080fd5b60006120c785828601611eee565b92505060206120d885828601611e5b565b9150509250929050565b6000602082840312156120f457600080fd5b600061210284828501611f03565b91505092915050565b61211481612b3c565b82525050565b61212b61212682612b3c565b612cad565b82525050565b61213a81612b4e565b82525050565b61214981612b5a565b82525050565b61216061215b82612b5a565b612cbf565b82525050565b600061217182612a4f565b61217b8185612a65565b935061218b818560208601612bd6565b80840191505092915050565b60006121a282612a5a565b6121ac8185612a70565b93506121bc818560208601612bd6565b6121c581612d43565b840191505092915050565b60006121db82612a5a565b6121e58185612a81565b93506121f5818560208601612bd6565b80840191505092915050565b600061220e601883612a70565b915061221982612d61565b602082019050919050565b6000612231602083612a70565b915061223c82612d8a565b602082019050919050565b6000612254600b83612a81565b915061225f82612db3565b600b82019050919050565b6000612277601483612a70565b915061228282612ddc565b602082019050919050565b600061229a601f83612a70565b91506122a582612e05565b602082019050919050565b60006122bd600e83612a70565b91506122c882612e2e565b602082019050919050565b60006122e0601483612a70565b91506122eb82612e57565b602082019050919050565b6000612303603a83612a70565b915061230e82612e80565b604082019050919050565b6000612326602283612a70565b915061233182612ecf565b604082019050919050565b6000612349601d83612a70565b915061235482612f1e565b602082019050919050565b600061236c602683612a70565b915061237782612f47565b604082019050919050565b600061238f601083612a70565b915061239a82612f96565b602082019050919050565b60006123b2602283612a70565b91506123bd82612fbf565b604082019050919050565b60006123d5600c83612a70565b91506123e08261300e565b602082019050919050565b60006123f8601e83612a70565b915061240382613037565b602082019050919050565b600061241b600083612a65565b915061242682613060565b600082019050919050565b600061243e601d83612a70565b915061244982613063565b602082019050919050565b6000612461601683612a70565b915061246c8261308c565b602082019050919050565b6000612484601783612a81565b915061248f826130b5565b601782019050919050565b60006124a7601883612a70565b91506124b2826130de565b602082019050919050565b60006124ca601f83612a70565b91506124d582613107565b602082019050919050565b60006124ed601183612a81565b91506124f882613130565b601182019050919050565b6000612510602f83612a70565b915061251b82613159565b604082019050919050565b61252f81612bb0565b82525050565b61254661254182612bb0565b612cdb565b82525050565b61255581612bba565b82525050565b60006125678284612166565b915081905092915050565b600061257e8285612166565b915061258a828461214f565b6020820191508190509392505050565b60006125a582612247565b91506125b1828761211a565b6014820191506125c18286612535565b6020820191506125d18285612535565b6020820191506125e18284612535565b60208201915081905095945050505050565b60006125fe8261240e565b9150819050919050565b600061261382612477565b915061261f82856121d0565b915061262a826124e0565b915061263682846121d0565b91508190509392505050565b6000602082019050612657600083018461210b565b92915050565b60006020820190506126726000830184612131565b92915050565b600060208201905061268d6000830184612140565b92915050565b60006080820190506126a86000830187612140565b6126b5602083018661254c565b6126c26040830185612140565b6126cf6060830184612140565b95945050505050565b600060208201905081810360008301526126f28184612197565b905092915050565b6000602082019050818103600083015261271381612201565b9050919050565b6000602082019050818103600083015261273381612224565b9050919050565b600060208201905081810360008301526127538161226a565b9050919050565b600060208201905081810360008301526127738161228d565b9050919050565b60006020820190508181036000830152612793816122b0565b9050919050565b600060208201905081810360008301526127b3816122d3565b9050919050565b600060208201905081810360008301526127d3816122f6565b9050919050565b600060208201905081810360008301526127f381612319565b9050919050565b600060208201905081810360008301526128138161233c565b9050919050565b600060208201905081810360008301526128338161235f565b9050919050565b6000602082019050818103600083015261285381612382565b9050919050565b60006020820190508181036000830152612873816123a5565b9050919050565b60006020820190508181036000830152612893816123c8565b9050919050565b600060208201905081810360008301526128b3816123eb565b9050919050565b600060208201905081810360008301526128d381612431565b9050919050565b600060208201905081810360008301526128f381612454565b9050919050565b600060208201905081810360008301526129138161249a565b9050919050565b60006020820190508181036000830152612933816124bd565b9050919050565b6000602082019050818103600083015261295381612503565b9050919050565b600060208201905061296f6000830184612526565b92915050565b600061297f612990565b905061298b8282612c33565b919050565b6000604051905090565b600067ffffffffffffffff8211156129b5576129b4612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156129e1576129e0612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a0d57612a0c612d14565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612a3957612a38612d14565b5b612a4282612d43565b9050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612a9782612bb0565b9150612aa283612bb0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ad757612ad6612ce5565b5b828201905092915050565b6000612aed82612bb0565b9150612af883612bb0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b3157612b30612ce5565b5b828202905092915050565b6000612b4782612b90565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612bf4578082015181840152602081019050612bd9565b83811115612c03576000848401525b50505050565b6000612c1482612bb0565b91506000821415612c2857612c27612ce5565b5b600182039050919050565b612c3c82612d43565b810181811067ffffffffffffffff82111715612c5b57612c5a612d14565b5b80604052505050565b6000612c6f82612bb0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ca257612ca1612ce5565b5b600182019050919050565b6000612cb882612cc9565b9050919050565b6000819050919050565b6000612cd482612d54565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f57495448445241574d4556000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f696e76616c6964207369676e6572000000000000000000000000000000000000600082015250565b7f7472616e73616374696f6e20657870697265642e000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564206c696d69740000000000000000000000000000000000000000600082015250565b7f5472616e73616374696f6e20686173206265656e2065786563757465642e0000600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f616464726573736573206c656e677468206572726f7200000000000000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f696e76616c6964207369676e6174757265206c656e6774680000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6131b181612b3c565b81146131bc57600080fd5b50565b6131c881612b5a565b81146131d357600080fd5b50565b6131df81612b64565b81146131ea57600080fd5b50565b6131f681612bb0565b811461320157600080fd5b5056fe416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564a264697066735822122031e8a6569c67c01b0e503d5fcbf2eaae1994ca59e04804bfa3f0599e7ed6c39a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003d6b146626f158391984acbac89e6c63100482b8000000000000000000000000229efe6dee75a478cd2b8ae7092c3697c05d4b6c
-----Decoded View---------------
Arg [0] : owner (address): 0x3d6B146626f158391984AcbAc89E6c63100482b8
Arg [1] : signer (address): 0x229efE6DEE75A478Cd2B8ae7092c3697C05D4B6c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003d6b146626f158391984acbac89e6c63100482b8
Arg [1] : 000000000000000000000000229efe6dee75a478cd2b8ae7092c3697c05d4b6c
Deployed Bytecode Sourcemap
50611:993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11094:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12930:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13371:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14515:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47269:87;;;;;;;;;;;;;:::i;:::-;;49477:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18455:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49640:884;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47175:86;;;;;;;;;;;;;:::i;:::-;;11390:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47802:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10495:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50981:620;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47664:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47567:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50793:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13811:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46946:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11094:204;11179:4;11218:32;11203:47;;;:11;:47;;;;:87;;;;11254:36;11278:11;11254:23;:36::i;:::-;11203:87;11196:94;;11094:204;;;:::o;12930:131::-;13004:7;13031:6;:12;13038:4;13031:12;;;;;;;;;;;:22;;;13024:29;;12930:131;;;:::o;13371:147::-;13454:18;13467:4;13454:12;:18::i;:::-;10986:16;10997:4;10986:10;:16::i;:::-;13485:25:::1;13496:4;13502:7;13485:10;:25::i;:::-;13371:147:::0;;;:::o;14515:218::-;14622:12;:10;:12::i;:::-;14611:23;;:7;:23;;;14603:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;14699:26;14711:4;14717:7;14699:11;:26::i;:::-;14515:218;;:::o;47269:87::-;18319:16;:14;:16::i;:::-;46983:23:::1;10986:16;10997:4;10986:10;:16::i;:::-;47338:10:::2;:8;:10::i;:::-;18346:1:::1;47269:87::o:0;49477:44::-;49518:3;49477:44;:::o;18455:86::-;18502:4;18526:7;;;;;;;;;;;18519:14;;18455:86;:::o;49640:884::-;18060:19;:17;:19::i;:::-;46983:23:::1;10986:16;10997:4;10986:10;:16::i;:::-;49518:3:::2;49852:13;:20;:38;;:90;;;;;49518:3;49911:6;:13;:31;;49852:90;:141;;;;;49518:3;49963:5;:12;:30;;49852:141;49830:203;;;;;;;;;;;;:::i;:::-;;;;;;;;;50090:5;:12;50066:13;:20;:36;:94;;;;;50147:6;:13;50123;:20;:37;50066:94;50044:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;50228:9;50223:294;50247:5;:12;50243:1;:16;50223:294;;;50285:29;:13;50299:1;50285:16;;;;;;;;;;;;;;;;;;;;;;:27;;;:29::i;:::-;50281:225;;;50335:59;50374:5;50380:1;50374:8;;;;;;;;;;;;;;;;;;;;;;50384:6;50391:1;50384:9;;;;;;;;;;;;;;;;;;;;;;50335:13;50349:1;50335:16;;;;;;;;;;;;;;;;;;;;;;:38;;;;:59;;;;;:::i;:::-;;50281:225;;;50435:55;50461:13;50475:1;50461:16;;;;;;;;;;;;;;;;;;;;;;50480:6;50487:1;50480:9;;;;;;;;;;;;;;;;;;;;;;50435:17;:55::i;:::-;50281:225;50261:3;;;;;:::i;:::-;;;;50223:294;;;;18090:1:::1;49640:884:::0;;;:::o;47175:86::-;18060:19;:17;:19::i;:::-;46983:23:::1;10986:16;10997:4;10986:10;:16::i;:::-;47245:8:::2;:6;:8::i;:::-;18090:1:::1;47175:86::o:0;11390:147::-;11476:4;11500:6;:12;11507:4;11500:12;;;;;;;;;;;:20;;:29;11521:7;11500:29;;;;;;;;;;;;;;;;;;;;;;;;;11493:36;;11390:147;;;;:::o;47802:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;10495:49::-;10540:4;10495:49;;;:::o;50981:620::-;45846:1;46444:7;;:19;;46436:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45846:1;46577:7;:18;;;;18060:19:::1;:17;:19::i;:::-;51190:21:::2;51270:2;51274:6;51282:7;51291:10;51238:64;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51214:99;;;;;;51190:123;;51324:131;;;;;;;;;;;;;;;;;::::0;51382:13:::2;51410:10;51435:9;51324:15;:131::i;:::-;;51486:2;51471:26;;;51490:6;51471:26;;;;;;:::i;:::-;;;;;;;;51526:27;51546:6;51526:15;;:19;;:27;;;;:::i;:::-;51508:15;:45;;;;51564:29;51586:6;51572:2;51564:21;;;;:29;;;;:::i;:::-;18090:1;45802::::0;46756:7;:22;;;;50981:620;;;;;:::o;47664:28::-;;;;;;;;;;;;:::o;47567:66::-;47610:23;47567:66;:::o;50793:30::-;;;;:::o;13811:149::-;13895:18;13908:4;13895:12;:18::i;:::-;10986:16;10997:4;10986:10;:16::i;:::-;13926:26:::1;13938:4;13944:7;13926:11;:26::i;:::-;13811:149:::0;;;:::o;46946:60::-;46983:23;46946:60;:::o;5842:157::-;5927:4;5966:25;5951:40;;;:11;:40;;;;5944:47;;5842:157;;;:::o;11841:105::-;11908:30;11919:4;11925:12;:10;:12::i;:::-;11908:10;:30::i;:::-;11841:105;:::o;16112:238::-;16196:22;16204:4;16210:7;16196;:22::i;:::-;16191:152;;16267:4;16235:6;:12;16242:4;16235:12;;;;;;;;;;;:20;;:29;16256:7;16235:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;16318:12;:10;:12::i;:::-;16291:40;;16309:7;16291:40;;16303:4;16291:40;;;;;;;;;;16191:152;16112:238;;:::o;3832:98::-;3885:7;3912:10;3905:17;;3832:98;:::o;16530:239::-;16614:22;16622:4;16628:7;16614;:22::i;:::-;16610:152;;;16685:5;16653:6;:12;16660:4;16653:12;;;;;;;;;;;:20;;:29;16674:7;16653:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;16737:12;:10;:12::i;:::-;16710:40;;16728:7;16710:40;;16722:4;16710:40;;;;;;;;;;16610:152;16530:239;;:::o;18799:108::-;18866:8;:6;:8::i;:::-;18858:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:108::o;19310:120::-;18319:16;:14;:16::i;:::-;19379:5:::1;19369:7;;:15;;;;;;;;;;;;;;;;;;19400:22;19409:12;:10;:12::i;:::-;19400:22;;;;;;:::i;:::-;;;;;;;;19310:120::o:0;18614:108::-;18685:8;:6;:8::i;:::-;18684:9;18676:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18614:108::o;29657:326::-;29717:4;29974:1;29952:7;:19;;;:23;29945:30;;29657:326;;;:::o;33006:260::-;33139:12;33171:87;33193:6;33201:4;33207:5;33171:87;;;;;;;;;;;;;;;;;:21;:87::i;:::-;33164:94;;33006:260;;;;;:::o;30918:317::-;31033:6;31008:21;:31;;31000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31087:12;31105:9;:14;;31127:6;31105:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31086:52;;;31157:7;31149:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;30918:317;;;:::o;19051:118::-;18060:19;:17;:19::i;:::-;19121:4:::1;19111:7;;:14;;;;;;;;;;;;;;;;;;19141:20;19148:12;:10;:12::i;:::-;19141:20;;;;;;:::i;:::-;;;;;;;;19051:118::o:0;48082:699::-;48255:7;48296:15;48283:10;:28;48275:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48370:20;:35;48391:13;48370:35;;;;;;;;;;;;;;;;;;;;;48369:36;48347:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;48474:14;48491:53;48519:13;48534:9;48491:27;:53::i;:::-;48474:70;;48573:13;;;;;;;;;;48563:23;;:6;:23;;;48555:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48694:4;48656:20;:35;48677:13;48656:35;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;48729:13;48714:35;48744:4;48714:35;;;;;;:::i;:::-;;;;;;;;48767:6;48760:13;;;48082:699;;;;;;:::o;39861:98::-;39919:7;39950:1;39946;:5;;;;:::i;:::-;39939:12;;39861:98;;;;:::o;12236:505::-;12325:22;12333:4;12339:7;12325;:22::i;:::-;12320:414;;12513:41;12541:7;12513:41;;12551:2;12513:19;:41::i;:::-;12627:38;12655:4;12647:13;;12662:2;12627:19;:38::i;:::-;12418:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12364:358;;;;;;;;;;;:::i;:::-;;;;;;;;12320:414;12236:505;;:::o;33522:510::-;33692:12;33750:5;33725:21;:30;;33717:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33817:18;33828:6;33817:10;:18::i;:::-;33809:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:12;33897:23;33924:6;:11;;33943:5;33950:4;33924:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33882:73;;;;33973:51;33990:7;33999:10;34011:12;33973:16;:51::i;:::-;33966:58;;;;33522:510;;;;;;:::o;48789:480::-;48920:7;48964:2;48944:9;:16;:22;48940:89;;48983:34;;;;;;;;;;:::i;:::-;;;;;;;;48940:89;49039:19;:56;;;;;;;;;;;;;;;;;;;49106:21;49171:6;49179:13;49154:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49130:74;;;;;;49106:98;;49222:39;49236:13;49251:9;49222:13;:39::i;:::-;49215:46;;;;48789:480;;;;:::o;7745:451::-;7820:13;7846:19;7891:1;7882:6;7878:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7868:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7846:47;;7904:15;:6;7911:1;7904:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;7930;:6;7937:1;7930:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;7961:9;7986:1;7977:6;7973:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;7961:26;;7956:135;7993:1;7989;:5;7956:135;;;8028:12;8049:3;8041:5;:11;8028:25;;;;;;;;;;;;;;;;;;8016:6;8023:1;8016:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;8078:1;8068:11;;;;;7996:3;;;;:::i;:::-;;;7956:135;;;;8118:1;8109:5;:10;8101:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;8181:6;8167:21;;;7745:451;;;;:::o;36208:762::-;36358:12;36387:7;36383:580;;;36418:10;36411:17;;;;36383:580;36552:1;36532:10;:17;:21;36528:424;;;36780:10;36774:17;36841:15;36828:10;36824:2;36820:19;36813:44;36728:148;36923:12;36916:20;;;;;;;;;;;:::i;:::-;;;;;;;;36208:762;;;;;;:::o;23299:231::-;23377:7;23398:17;23417:18;23439:27;23450:4;23456:9;23439:10;:27::i;:::-;23397:69;;;;23477:18;23489:5;23477:11;:18::i;:::-;23513:9;23506:16;;;;23299:231;;;;:::o;21750:747::-;21831:7;21840:12;21889:2;21869:9;:16;:22;21865:625;;;21908:9;21932;21956:7;22213:4;22202:9;22198:20;22192:27;22187:32;;22263:4;22252:9;22248:20;22242:27;22237:32;;22321:4;22310:9;22306:20;22300:27;22297:1;22292:36;22287:41;;22364:25;22375:4;22381:1;22384;22387;22364:10;:25::i;:::-;22357:32;;;;;;;;;21865:625;22438:1;22442:35;22422:56;;;;21750:747;;;;;;:::o;20021:643::-;20099:20;20090:29;;;;;;;;;;;;;;;;:5;:29;;;;;;;;;;;;;;;;;20086:571;;;20136:7;;20086:571;20197:29;20188:38;;;;;;;;;;;;;;;;:5;:38;;;;;;;;;;;;;;;;;20184:473;;;20243:34;;;;;;;;;;:::i;:::-;;;;;;;;20184:473;20308:35;20299:44;;;;;;;;;;;;;;;;:5;:44;;;;;;;;;;;;;;;;;20295:362;;;20360:41;;;;;;;;;;:::i;:::-;;;;;;;;20295:362;20432:30;20423:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;20419:238;;;20479:44;;;;;;;;;;:::i;:::-;;;;;;;;20419:238;20554:30;20545:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;20541:116;;;20601:44;;;;;;;;;;:::i;:::-;;;;;;;;20541:116;20021:643;;:::o;24751:1632::-;24882:7;24891:12;25816:66;25811:1;25803:10;;:79;25799:163;;;25915:1;25919:30;25899:51;;;;;;25799:163;25981:2;25976:1;:7;;;;:18;;;;;25992:2;25987:1;:7;;;;25976:18;25972:102;;;26027:1;26031:30;26011:51;;;;;;25972:102;26171:14;26188:24;26198:4;26204:1;26207;26210;26188:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26171:41;;26245:1;26227:20;;:6;:20;;;26223:103;;;26280:1;26284:29;26264:50;;;;;;;26223:103;26346:6;26354:20;26338:37;;;;;24751:1632;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;700:820::-;805:5;830:90;846:73;912:6;846:73;:::i;:::-;830:90;:::i;:::-;821:99;;940:5;969:6;962:5;955:21;1003:4;996:5;992:16;985:23;;1029:6;1079:3;1071:4;1063:6;1059:17;1054:3;1050:27;1047:36;1044:2;;;1108:1;1105;1098:12;1044:2;1144:1;1129:385;1154:6;1151:1;1148:13;1129:385;;;1236:3;1223:17;1272:18;1259:11;1256:35;1253:2;;;1304:1;1301;1294:12;1253:2;1351:11;1343:6;1339:24;1389:46;1431:3;1419:10;1389:46;:::i;:::-;1384:3;1377:59;1465:4;1460:3;1456:14;1449:21;;1499:4;1494:3;1490:14;1483:21;;1189:325;;1176:1;1173;1169:9;1164:14;;1129:385;;;1133:14;811:709;;;;;;;:::o;1543:655::-;1639:5;1664:81;1680:64;1737:6;1680:64;:::i;:::-;1664:81;:::i;:::-;1655:90;;1765:5;1794:6;1787:5;1780:21;1828:4;1821:5;1817:16;1810:23;;1854:6;1904:3;1896:4;1888:6;1884:17;1879:3;1875:27;1872:36;1869:2;;;1933:1;1930;1923:12;1869:2;1969:1;1954:238;1979:6;1976:1;1973:13;1954:238;;;2047:3;2076:37;2109:3;2097:10;2076:37;:::i;:::-;2071:3;2064:50;2143:4;2138:3;2134:14;2127:21;;2177:4;2172:3;2168:14;2161:21;;2014:178;2001:1;1998;1994:9;1989:14;;1954:238;;;1958:14;1645:553;;;;;;;:::o;2204:343::-;2281:5;2306:65;2322:48;2363:6;2322:48;:::i;:::-;2306:65;:::i;:::-;2297:74;;2394:6;2387:5;2380:21;2432:4;2425:5;2421:16;2470:3;2461:6;2456:3;2452:16;2449:25;2446:2;;;2487:1;2484;2477:12;2446:2;2500:41;2534:6;2529:3;2524;2500:41;:::i;:::-;2287:260;;;;;;:::o;2553:139::-;2599:5;2637:6;2624:20;2615:29;;2653:33;2680:5;2653:33;:::i;:::-;2605:87;;;;:::o;2715:303::-;2786:5;2835:3;2828:4;2820:6;2816:17;2812:27;2802:2;;2853:1;2850;2843:12;2802:2;2893:6;2880:20;2918:94;3008:3;3000:6;2993:4;2985:6;2981:17;2918:94;:::i;:::-;2909:103;;2792:226;;;;;:::o;3039:321::-;3119:5;3168:3;3161:4;3153:6;3149:17;3145:27;3135:2;;3186:1;3183;3176:12;3135:2;3226:6;3213:20;3251:103;3350:3;3342:6;3335:4;3327:6;3323:17;3251:103;:::i;:::-;3242:112;;3125:235;;;;;:::o;3383:303::-;3454:5;3503:3;3496:4;3488:6;3484:17;3480:27;3470:2;;3521:1;3518;3511:12;3470:2;3561:6;3548:20;3586:94;3676:3;3668:6;3661:4;3653:6;3649:17;3586:94;:::i;:::-;3577:103;;3460:226;;;;;:::o;3692:139::-;3738:5;3776:6;3763:20;3754:29;;3792:33;3819:5;3792:33;:::i;:::-;3744:87;;;;:::o;3837:137::-;3882:5;3920:6;3907:20;3898:29;;3936:32;3962:5;3936:32;:::i;:::-;3888:86;;;;:::o;3993:271::-;4048:5;4097:3;4090:4;4082:6;4078:17;4074:27;4064:2;;4115:1;4112;4105:12;4064:2;4155:6;4142:20;4180:78;4254:3;4246:6;4239:4;4231:6;4227:17;4180:78;:::i;:::-;4171:87;;4054:210;;;;;:::o;4270:139::-;4316:5;4354:6;4341:20;4332:29;;4370:33;4397:5;4370:33;:::i;:::-;4322:87;;;;:::o;4415:955::-;4519:6;4527;4535;4543;4551;4600:3;4588:9;4579:7;4575:23;4571:33;4568:2;;;4617:1;4614;4607:12;4568:2;4660:1;4685:53;4730:7;4721:6;4710:9;4706:22;4685:53;:::i;:::-;4675:63;;4631:117;4787:2;4813:53;4858:7;4849:6;4838:9;4834:22;4813:53;:::i;:::-;4803:63;;4758:118;4915:2;4941:53;4986:7;4977:6;4966:9;4962:22;4941:53;:::i;:::-;4931:63;;4886:118;5043:2;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5014:118;5199:3;5188:9;5184:19;5171:33;5231:18;5223:6;5220:30;5217:2;;;5263:1;5260;5253:12;5217:2;5291:62;5345:7;5336:6;5325:9;5321:22;5291:62;:::i;:::-;5281:72;;5142:221;4558:812;;;;;;;;:::o;5376:999::-;5537:6;5545;5553;5602:2;5590:9;5581:7;5577:23;5573:32;5570:2;;;5618:1;5615;5608:12;5570:2;5689:1;5678:9;5674:17;5661:31;5719:18;5711:6;5708:30;5705:2;;;5751:1;5748;5741:12;5705:2;5779:78;5849:7;5840:6;5829:9;5825:22;5779:78;:::i;:::-;5769:88;;5632:235;5934:2;5923:9;5919:18;5906:32;5965:18;5957:6;5954:30;5951:2;;;5997:1;5994;5987:12;5951:2;6025:87;6104:7;6095:6;6084:9;6080:22;6025:87;:::i;:::-;6015:97;;5877:245;6189:2;6178:9;6174:18;6161:32;6220:18;6212:6;6209:30;6206:2;;;6252:1;6249;6242:12;6206:2;6280:78;6350:7;6341:6;6330:9;6326:22;6280:78;:::i;:::-;6270:88;;6132:236;5560:815;;;;;:::o;6381:262::-;6440:6;6489:2;6477:9;6468:7;6464:23;6460:32;6457:2;;;6505:1;6502;6495:12;6457:2;6548:1;6573:53;6618:7;6609:6;6598:9;6594:22;6573:53;:::i;:::-;6563:63;;6519:117;6447:196;;;;:::o;6649:407::-;6717:6;6725;6774:2;6762:9;6753:7;6749:23;6745:32;6742:2;;;6790:1;6787;6780:12;6742:2;6833:1;6858:53;6903:7;6894:6;6883:9;6879:22;6858:53;:::i;:::-;6848:63;;6804:117;6960:2;6986:53;7031:7;7022:6;7011:9;7007:22;6986:53;:::i;:::-;6976:63;;6931:118;6732:324;;;;;:::o;7062:260::-;7120:6;7169:2;7157:9;7148:7;7144:23;7140:32;7137:2;;;7185:1;7182;7175:12;7137:2;7228:1;7253:52;7297:7;7288:6;7277:9;7273:22;7253:52;:::i;:::-;7243:62;;7199:116;7127:195;;;;:::o;7328:118::-;7415:24;7433:5;7415:24;:::i;:::-;7410:3;7403:37;7393:53;;:::o;7452:157::-;7557:45;7577:24;7595:5;7577:24;:::i;:::-;7557:45;:::i;:::-;7552:3;7545:58;7535:74;;:::o;7615:109::-;7696:21;7711:5;7696:21;:::i;:::-;7691:3;7684:34;7674:50;;:::o;7730:118::-;7817:24;7835:5;7817:24;:::i;:::-;7812:3;7805:37;7795:53;;:::o;7854:157::-;7959:45;7979:24;7997:5;7979:24;:::i;:::-;7959:45;:::i;:::-;7954:3;7947:58;7937:74;;:::o;8017:373::-;8121:3;8149:38;8181:5;8149:38;:::i;:::-;8203:88;8284:6;8279:3;8203:88;:::i;:::-;8196:95;;8300:52;8345:6;8340:3;8333:4;8326:5;8322:16;8300:52;:::i;:::-;8377:6;8372:3;8368:16;8361:23;;8125:265;;;;;:::o;8396:364::-;8484:3;8512:39;8545:5;8512:39;:::i;:::-;8567:71;8631:6;8626:3;8567:71;:::i;:::-;8560:78;;8647:52;8692:6;8687:3;8680:4;8673:5;8669:16;8647:52;:::i;:::-;8724:29;8746:6;8724:29;:::i;:::-;8719:3;8715:39;8708:46;;8488:272;;;;;:::o;8766:377::-;8872:3;8900:39;8933:5;8900:39;:::i;:::-;8955:89;9037:6;9032:3;8955:89;:::i;:::-;8948:96;;9053:52;9098:6;9093:3;9086:4;9079:5;9075:16;9053:52;:::i;:::-;9130:6;9125:3;9121:16;9114:23;;8876:267;;;;;:::o;9149:366::-;9291:3;9312:67;9376:2;9371:3;9312:67;:::i;:::-;9305:74;;9388:93;9477:3;9388:93;:::i;:::-;9506:2;9501:3;9497:12;9490:19;;9295:220;;;:::o;9521:366::-;9663:3;9684:67;9748:2;9743:3;9684:67;:::i;:::-;9677:74;;9760:93;9849:3;9760:93;:::i;:::-;9878:2;9873:3;9869:12;9862:19;;9667:220;;;:::o;9893:402::-;10053:3;10074:85;10156:2;10151:3;10074:85;:::i;:::-;10067:92;;10168:93;10257:3;10168:93;:::i;:::-;10286:2;10281:3;10277:12;10270:19;;10057:238;;;:::o;10301:366::-;10443:3;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10540:93;10629:3;10540:93;:::i;:::-;10658:2;10653:3;10649:12;10642:19;;10447:220;;;:::o;10673:366::-;10815:3;10836:67;10900:2;10895:3;10836:67;:::i;:::-;10829:74;;10912:93;11001:3;10912:93;:::i;:::-;11030:2;11025:3;11021:12;11014:19;;10819:220;;;:::o;11045:366::-;11187:3;11208:67;11272:2;11267:3;11208:67;:::i;:::-;11201:74;;11284:93;11373:3;11284:93;:::i;:::-;11402:2;11397:3;11393:12;11386:19;;11191:220;;;:::o;11417:366::-;11559:3;11580:67;11644:2;11639:3;11580:67;:::i;:::-;11573:74;;11656:93;11745:3;11656:93;:::i;:::-;11774:2;11769:3;11765:12;11758:19;;11563:220;;;:::o;11789:366::-;11931:3;11952:67;12016:2;12011:3;11952:67;:::i;:::-;11945:74;;12028:93;12117:3;12028:93;:::i;:::-;12146:2;12141:3;12137:12;12130:19;;11935:220;;;:::o;12161:366::-;12303:3;12324:67;12388:2;12383:3;12324:67;:::i;:::-;12317:74;;12400:93;12489:3;12400:93;:::i;:::-;12518:2;12513:3;12509:12;12502:19;;12307:220;;;:::o;12533:366::-;12675:3;12696:67;12760:2;12755:3;12696:67;:::i;:::-;12689:74;;12772:93;12861:3;12772:93;:::i;:::-;12890:2;12885:3;12881:12;12874:19;;12679:220;;;:::o;12905:366::-;13047:3;13068:67;13132:2;13127:3;13068:67;:::i;:::-;13061:74;;13144:93;13233:3;13144:93;:::i;:::-;13262:2;13257:3;13253:12;13246:19;;13051:220;;;:::o;13277:366::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13423:220;;;:::o;13649:366::-;13791:3;13812:67;13876:2;13871:3;13812:67;:::i;:::-;13805:74;;13888:93;13977:3;13888:93;:::i;:::-;14006:2;14001:3;13997:12;13990:19;;13795:220;;;:::o;14021:366::-;14163:3;14184:67;14248:2;14243:3;14184:67;:::i;:::-;14177:74;;14260:93;14349:3;14260:93;:::i;:::-;14378:2;14373:3;14369:12;14362:19;;14167:220;;;:::o;14393:366::-;14535:3;14556:67;14620:2;14615:3;14556:67;:::i;:::-;14549:74;;14632:93;14721:3;14632:93;:::i;:::-;14750:2;14745:3;14741:12;14734:19;;14539:220;;;:::o;14765:398::-;14924:3;14945:83;15026:1;15021:3;14945:83;:::i;:::-;14938:90;;15037:93;15126:3;15037:93;:::i;:::-;15155:1;15150:3;15146:11;15139:18;;14928:235;;;:::o;15169:366::-;15311:3;15332:67;15396:2;15391:3;15332:67;:::i;:::-;15325:74;;15408:93;15497:3;15408:93;:::i;:::-;15526:2;15521:3;15517:12;15510:19;;15315:220;;;:::o;15541:366::-;15683:3;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15780:93;15869:3;15780:93;:::i;:::-;15898:2;15893:3;15889:12;15882:19;;15687:220;;;:::o;15913:402::-;16073:3;16094:85;16176:2;16171:3;16094:85;:::i;:::-;16087:92;;16188:93;16277:3;16188:93;:::i;:::-;16306:2;16301:3;16297:12;16290:19;;16077:238;;;:::o;16321:366::-;16463:3;16484:67;16548:2;16543:3;16484:67;:::i;:::-;16477:74;;16560:93;16649:3;16560:93;:::i;:::-;16678:2;16673:3;16669:12;16662:19;;16467:220;;;:::o;16693:366::-;16835:3;16856:67;16920:2;16915:3;16856:67;:::i;:::-;16849:74;;16932:93;17021:3;16932:93;:::i;:::-;17050:2;17045:3;17041:12;17034:19;;16839:220;;;:::o;17065:402::-;17225:3;17246:85;17328:2;17323:3;17246:85;:::i;:::-;17239:92;;17340:93;17429:3;17340:93;:::i;:::-;17458:2;17453:3;17449:12;17442:19;;17229:238;;;:::o;17473:366::-;17615:3;17636:67;17700:2;17695:3;17636:67;:::i;:::-;17629:74;;17712:93;17801:3;17712:93;:::i;:::-;17830:2;17825:3;17821:12;17814:19;;17619:220;;;:::o;17845:118::-;17932:24;17950:5;17932:24;:::i;:::-;17927:3;17920:37;17910:53;;:::o;17969:157::-;18074:45;18094:24;18112:5;18094:24;:::i;:::-;18074:45;:::i;:::-;18069:3;18062:58;18052:74;;:::o;18132:112::-;18215:22;18231:5;18215:22;:::i;:::-;18210:3;18203:35;18193:51;;:::o;18250:271::-;18380:3;18402:93;18491:3;18482:6;18402:93;:::i;:::-;18395:100;;18512:3;18505:10;;18384:137;;;;:::o;18527:412::-;18685:3;18707:93;18796:3;18787:6;18707:93;:::i;:::-;18700:100;;18810:75;18881:3;18872:6;18810:75;:::i;:::-;18910:2;18905:3;18901:12;18894:19;;18930:3;18923:10;;18689:250;;;;;:::o;18945:945::-;19242:3;19264:148;19408:3;19264:148;:::i;:::-;19257:155;;19422:75;19493:3;19484:6;19422:75;:::i;:::-;19522:2;19517:3;19513:12;19506:19;;19535:75;19606:3;19597:6;19535:75;:::i;:::-;19635:2;19630:3;19626:12;19619:19;;19648:75;19719:3;19710:6;19648:75;:::i;:::-;19748:2;19743:3;19739:12;19732:19;;19761:75;19832:3;19823:6;19761:75;:::i;:::-;19861:2;19856:3;19852:12;19845:19;;19881:3;19874:10;;19246:644;;;;;;;:::o;19896:379::-;20080:3;20102:147;20245:3;20102:147;:::i;:::-;20095:154;;20266:3;20259:10;;20084:191;;;:::o;20281:967::-;20663:3;20685:148;20829:3;20685:148;:::i;:::-;20678:155;;20850:95;20941:3;20932:6;20850:95;:::i;:::-;20843:102;;20962:148;21106:3;20962:148;:::i;:::-;20955:155;;21127:95;21218:3;21209:6;21127:95;:::i;:::-;21120:102;;21239:3;21232:10;;20667:581;;;;;:::o;21254:222::-;21347:4;21385:2;21374:9;21370:18;21362:26;;21398:71;21466:1;21455:9;21451:17;21442:6;21398:71;:::i;:::-;21352:124;;;;:::o;21482:210::-;21569:4;21607:2;21596:9;21592:18;21584:26;;21620:65;21682:1;21671:9;21667:17;21658:6;21620:65;:::i;:::-;21574:118;;;;:::o;21698:222::-;21791:4;21829:2;21818:9;21814:18;21806:26;;21842:71;21910:1;21899:9;21895:17;21886:6;21842:71;:::i;:::-;21796:124;;;;:::o;21926:545::-;22099:4;22137:3;22126:9;22122:19;22114:27;;22151:71;22219:1;22208:9;22204:17;22195:6;22151:71;:::i;:::-;22232:68;22296:2;22285:9;22281:18;22272:6;22232:68;:::i;:::-;22310:72;22378:2;22367:9;22363:18;22354:6;22310:72;:::i;:::-;22392;22460:2;22449:9;22445:18;22436:6;22392:72;:::i;:::-;22104:367;;;;;;;:::o;22477:313::-;22590:4;22628:2;22617:9;22613:18;22605:26;;22677:9;22671:4;22667:20;22663:1;22652:9;22648:17;22641:47;22705:78;22778:4;22769:6;22705:78;:::i;:::-;22697:86;;22595:195;;;;:::o;22796:419::-;22962:4;23000:2;22989:9;22985:18;22977:26;;23049:9;23043:4;23039:20;23035:1;23024:9;23020:17;23013:47;23077:131;23203:4;23077:131;:::i;:::-;23069:139;;22967:248;;;:::o;23221:419::-;23387:4;23425:2;23414:9;23410:18;23402:26;;23474:9;23468:4;23464:20;23460:1;23449:9;23445:17;23438:47;23502:131;23628:4;23502:131;:::i;:::-;23494:139;;23392:248;;;:::o;23646:419::-;23812:4;23850:2;23839:9;23835:18;23827:26;;23899:9;23893:4;23889:20;23885:1;23874:9;23870:17;23863:47;23927:131;24053:4;23927:131;:::i;:::-;23919:139;;23817:248;;;:::o;24071:419::-;24237:4;24275:2;24264:9;24260:18;24252:26;;24324:9;24318:4;24314:20;24310:1;24299:9;24295:17;24288:47;24352:131;24478:4;24352:131;:::i;:::-;24344:139;;24242:248;;;:::o;24496:419::-;24662:4;24700:2;24689:9;24685:18;24677:26;;24749:9;24743:4;24739:20;24735:1;24724:9;24720:17;24713:47;24777:131;24903:4;24777:131;:::i;:::-;24769:139;;24667:248;;;:::o;24921:419::-;25087:4;25125:2;25114:9;25110:18;25102:26;;25174:9;25168:4;25164:20;25160:1;25149:9;25145:17;25138:47;25202:131;25328:4;25202:131;:::i;:::-;25194:139;;25092:248;;;:::o;25346:419::-;25512:4;25550:2;25539:9;25535:18;25527:26;;25599:9;25593:4;25589:20;25585:1;25574:9;25570:17;25563:47;25627:131;25753:4;25627:131;:::i;:::-;25619:139;;25517:248;;;:::o;25771:419::-;25937:4;25975:2;25964:9;25960:18;25952:26;;26024:9;26018:4;26014:20;26010:1;25999:9;25995:17;25988:47;26052:131;26178:4;26052:131;:::i;:::-;26044:139;;25942:248;;;:::o;26196:419::-;26362:4;26400:2;26389:9;26385:18;26377:26;;26449:9;26443:4;26439:20;26435:1;26424:9;26420:17;26413:47;26477:131;26603:4;26477:131;:::i;:::-;26469:139;;26367:248;;;:::o;26621:419::-;26787:4;26825:2;26814:9;26810:18;26802:26;;26874:9;26868:4;26864:20;26860:1;26849:9;26845:17;26838:47;26902:131;27028:4;26902:131;:::i;:::-;26894:139;;26792:248;;;:::o;27046:419::-;27212:4;27250:2;27239:9;27235:18;27227:26;;27299:9;27293:4;27289:20;27285:1;27274:9;27270:17;27263:47;27327:131;27453:4;27327:131;:::i;:::-;27319:139;;27217:248;;;:::o;27471:419::-;27637:4;27675:2;27664:9;27660:18;27652:26;;27724:9;27718:4;27714:20;27710:1;27699:9;27695:17;27688:47;27752:131;27878:4;27752:131;:::i;:::-;27744:139;;27642:248;;;:::o;27896:419::-;28062:4;28100:2;28089:9;28085:18;28077:26;;28149:9;28143:4;28139:20;28135:1;28124:9;28120:17;28113:47;28177:131;28303:4;28177:131;:::i;:::-;28169:139;;28067:248;;;:::o;28321:419::-;28487:4;28525:2;28514:9;28510:18;28502:26;;28574:9;28568:4;28564:20;28560:1;28549:9;28545:17;28538:47;28602:131;28728:4;28602:131;:::i;:::-;28594:139;;28492:248;;;:::o;28746:419::-;28912:4;28950:2;28939:9;28935:18;28927:26;;28999:9;28993:4;28989:20;28985:1;28974:9;28970:17;28963:47;29027:131;29153:4;29027:131;:::i;:::-;29019:139;;28917:248;;;:::o;29171:419::-;29337:4;29375:2;29364:9;29360:18;29352:26;;29424:9;29418:4;29414:20;29410:1;29399:9;29395:17;29388:47;29452:131;29578:4;29452:131;:::i;:::-;29444:139;;29342:248;;;:::o;29596:419::-;29762:4;29800:2;29789:9;29785:18;29777:26;;29849:9;29843:4;29839:20;29835:1;29824:9;29820:17;29813:47;29877:131;30003:4;29877:131;:::i;:::-;29869:139;;29767:248;;;:::o;30021:419::-;30187:4;30225:2;30214:9;30210:18;30202:26;;30274:9;30268:4;30264:20;30260:1;30249:9;30245:17;30238:47;30302:131;30428:4;30302:131;:::i;:::-;30294:139;;30192:248;;;:::o;30446:419::-;30612:4;30650:2;30639:9;30635:18;30627:26;;30699:9;30693:4;30689:20;30685:1;30674:9;30670:17;30663:47;30727:131;30853:4;30727:131;:::i;:::-;30719:139;;30617:248;;;:::o;30871:222::-;30964:4;31002:2;30991:9;30987:18;30979:26;;31015:71;31083:1;31072:9;31068:17;31059:6;31015:71;:::i;:::-;30969:124;;;;:::o;31099:129::-;31133:6;31160:20;;:::i;:::-;31150:30;;31189:33;31217:4;31209:6;31189:33;:::i;:::-;31140:88;;;:::o;31234:75::-;31267:6;31300:2;31294:9;31284:19;;31274:35;:::o;31315:311::-;31392:4;31482:18;31474:6;31471:30;31468:2;;;31504:18;;:::i;:::-;31468:2;31554:4;31546:6;31542:17;31534:25;;31614:4;31608;31604:15;31596:23;;31397:229;;;:::o;31632:320::-;31718:4;31808:18;31800:6;31797:30;31794:2;;;31830:18;;:::i;:::-;31794:2;31880:4;31872:6;31868:17;31860:25;;31940:4;31934;31930:15;31922:23;;31723:229;;;:::o;31958:311::-;32035:4;32125:18;32117:6;32114:30;32111:2;;;32147:18;;:::i;:::-;32111:2;32197:4;32189:6;32185:17;32177:25;;32257:4;32251;32247:15;32239:23;;32040:229;;;:::o;32275:307::-;32336:4;32426:18;32418:6;32415:30;32412:2;;;32448:18;;:::i;:::-;32412:2;32486:29;32508:6;32486:29;:::i;:::-;32478:37;;32570:4;32564;32560:15;32552:23;;32341:241;;;:::o;32588:98::-;32639:6;32673:5;32667:12;32657:22;;32646:40;;;:::o;32692:99::-;32744:6;32778:5;32772:12;32762:22;;32751:40;;;:::o;32797:147::-;32898:11;32935:3;32920:18;;32910:34;;;;:::o;32950:169::-;33034:11;33068:6;33063:3;33056:19;33108:4;33103:3;33099:14;33084:29;;33046:73;;;;:::o;33125:148::-;33227:11;33264:3;33249:18;;33239:34;;;;:::o;33279:305::-;33319:3;33338:20;33356:1;33338:20;:::i;:::-;33333:25;;33372:20;33390:1;33372:20;:::i;:::-;33367:25;;33526:1;33458:66;33454:74;33451:1;33448:81;33445:2;;;33532:18;;:::i;:::-;33445:2;33576:1;33573;33569:9;33562:16;;33323:261;;;;:::o;33590:348::-;33630:7;33653:20;33671:1;33653:20;:::i;:::-;33648:25;;33687:20;33705:1;33687:20;:::i;:::-;33682:25;;33875:1;33807:66;33803:74;33800:1;33797:81;33792:1;33785:9;33778:17;33774:105;33771:2;;;33882:18;;:::i;:::-;33771:2;33930:1;33927;33923:9;33912:20;;33638:300;;;;:::o;33944:96::-;33981:7;34010:24;34028:5;34010:24;:::i;:::-;33999:35;;33989:51;;;:::o;34046:90::-;34080:7;34123:5;34116:13;34109:21;34098:32;;34088:48;;;:::o;34142:77::-;34179:7;34208:5;34197:16;;34187:32;;;:::o;34225:149::-;34261:7;34301:66;34294:5;34290:78;34279:89;;34269:105;;;:::o;34380:126::-;34417:7;34457:42;34450:5;34446:54;34435:65;;34425:81;;;:::o;34512:77::-;34549:7;34578:5;34567:16;;34557:32;;;:::o;34595:86::-;34630:7;34670:4;34663:5;34659:16;34648:27;;34638:43;;;:::o;34687:154::-;34771:6;34766:3;34761;34748:30;34833:1;34824:6;34819:3;34815:16;34808:27;34738:103;;;:::o;34847:307::-;34915:1;34925:113;34939:6;34936:1;34933:13;34925:113;;;35024:1;35019:3;35015:11;35009:18;35005:1;35000:3;34996:11;34989:39;34961:2;34958:1;34954:10;34949:15;;34925:113;;;35056:6;35053:1;35050:13;35047:2;;;35136:1;35127:6;35122:3;35118:16;35111:27;35047:2;34896:258;;;;:::o;35160:171::-;35199:3;35222:24;35240:5;35222:24;:::i;:::-;35213:33;;35268:4;35261:5;35258:15;35255:2;;;35276:18;;:::i;:::-;35255:2;35323:1;35316:5;35312:13;35305:20;;35203:128;;;:::o;35337:281::-;35420:27;35442:4;35420:27;:::i;:::-;35412:6;35408:40;35550:6;35538:10;35535:22;35514:18;35502:10;35499:34;35496:62;35493:2;;;35561:18;;:::i;:::-;35493:2;35601:10;35597:2;35590:22;35380:238;;;:::o;35624:233::-;35663:3;35686:24;35704:5;35686:24;:::i;:::-;35677:33;;35732:66;35725:5;35722:77;35719:2;;;35802:18;;:::i;:::-;35719:2;35849:1;35842:5;35838:13;35831:20;;35667:190;;;:::o;35863:100::-;35902:7;35931:26;35951:5;35931:26;:::i;:::-;35920:37;;35910:53;;;:::o;35969:79::-;36008:7;36037:5;36026:16;;36016:32;;;:::o;36054:94::-;36093:7;36122:20;36136:5;36122:20;:::i;:::-;36111:31;;36101:47;;;:::o;36154:79::-;36193:7;36222:5;36211:16;;36201:32;;;:::o;36239:180::-;36287:77;36284:1;36277:88;36384:4;36381:1;36374:15;36408:4;36405:1;36398:15;36425:180;36473:77;36470:1;36463:88;36570:4;36567:1;36560:15;36594:4;36591:1;36584:15;36611:102;36652:6;36703:2;36699:7;36694:2;36687:5;36683:14;36679:28;36669:38;;36659:54;;;:::o;36719:94::-;36752:8;36800:5;36796:2;36792:14;36771:35;;36761:52;;;:::o;36819:174::-;36959:26;36955:1;36947:6;36943:14;36936:50;36925:68;:::o;36999:182::-;37139:34;37135:1;37127:6;37123:14;37116:58;37105:76;:::o;37187:161::-;37327:13;37323:1;37315:6;37311:14;37304:37;37293:55;:::o;37354:170::-;37494:22;37490:1;37482:6;37478:14;37471:46;37460:64;:::o;37530:181::-;37670:33;37666:1;37658:6;37654:14;37647:57;37636:75;:::o;37717:164::-;37857:16;37853:1;37845:6;37841:14;37834:40;37823:58;:::o;37887:170::-;38027:22;38023:1;38015:6;38011:14;38004:46;37993:64;:::o;38063:245::-;38203:34;38199:1;38191:6;38187:14;38180:58;38272:28;38267:2;38259:6;38255:15;38248:53;38169:139;:::o;38314:221::-;38454:34;38450:1;38442:6;38438:14;38431:58;38523:4;38518:2;38510:6;38506:15;38499:29;38420:115;:::o;38541:179::-;38681:31;38677:1;38669:6;38665:14;38658:55;38647:73;:::o;38726:225::-;38866:34;38862:1;38854:6;38850:14;38843:58;38935:8;38930:2;38922:6;38918:15;38911:33;38832:119;:::o;38957:166::-;39097:18;39093:1;39085:6;39081:14;39074:42;39063:60;:::o;39129:221::-;39269:34;39265:1;39257:6;39253:14;39246:58;39338:4;39333:2;39325:6;39321:15;39314:29;39235:115;:::o;39356:162::-;39496:14;39492:1;39484:6;39480:14;39473:38;39462:56;:::o;39524:180::-;39664:32;39660:1;39652:6;39648:14;39641:56;39630:74;:::o;39710:114::-;39816:8;:::o;39830:179::-;39970:31;39966:1;39958:6;39954:14;39947:55;39936:73;:::o;40015:172::-;40155:24;40151:1;40143:6;40139:14;40132:48;40121:66;:::o;40193:173::-;40333:25;40329:1;40321:6;40317:14;40310:49;40299:67;:::o;40372:174::-;40512:26;40508:1;40500:6;40496:14;40489:50;40478:68;:::o;40552:181::-;40692:33;40688:1;40680:6;40676:14;40669:57;40658:75;:::o;40739:167::-;40879:19;40875:1;40867:6;40863:14;40856:43;40845:61;:::o;40912:234::-;41052:34;41048:1;41040:6;41036:14;41029:58;41121:17;41116:2;41108:6;41104:15;41097:42;41018:128;:::o;41152:122::-;41225:24;41243:5;41225:24;:::i;:::-;41218:5;41215:35;41205:2;;41264:1;41261;41254:12;41205:2;41195:79;:::o;41280:122::-;41353:24;41371:5;41353:24;:::i;:::-;41346:5;41343:35;41333:2;;41392:1;41389;41382:12;41333:2;41323:79;:::o;41408:120::-;41480:23;41497:5;41480:23;:::i;:::-;41473:5;41470:34;41460:2;;41518:1;41515;41508:12;41460:2;41450:78;:::o;41534:122::-;41607:24;41625:5;41607:24;:::i;:::-;41600:5;41597:35;41587:2;;41646:1;41643;41636:12;41587:2;41577:79;:::o
Swarm Source
ipfs://31e8a6569c67c01b0e503d5fcbf2eaae1994ca59e04804bfa3f0599e7ed6c39a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,311.21 | 1.1042 | $2,552.11 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.