Contract 0xb3bbb464485f159b839e1699a352ce6d542c9433 14
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
ArkenStopLimit
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-09-27 */ // SPDX-License-Identifier: UNLICENSED // Sources flattened with hardhat v2.10.2 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // 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/token/ERC20/utils/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // 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/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @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 (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/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/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 contracts/interfaces/IWETH.sol pragma solidity ^0.8.0; interface IWETH { function deposit() external payable; function transfer(address to, uint256 value) external returns (bool); function withdraw(uint256) external; } // File contracts/lib/Fabric.sol pragma solidity ^0.8.0; /** * @title Fabric * @dev Create deterministics vaults. */ library Fabric { using SafeERC20 for IERC20; /*Vault bytecode def _fallback() payable: call cd[56] with: funct call.data[0 len 4] gas cd[56] wei args call.data[4 len 64] selfdestruct(tx.origin) // Constructor bytecode 0x6012600081600A8239f3 0x60 12 - PUSH1 12 // Size of the contract to return 0x60 00 - PUSH1 00 // Memory offset to return stored code 0x81 - DUP2 12 // Size of code to copy 0x60 0a - PUSH1 0A // Start of the code to copy 0x82 - DUP3 00 // Dest memory for code copy 0x39 - CODECOPY 00 0A 12 // Code copy to memory 0xf3 - RETURN 00 12 // Return code to store // Deployed contract bytecode 0x60008060448082803781806038355AF132FF 0x60 00 - PUSH1 00 // Size for the call output 0x80 - DUP1 00 // Offset for the call output 0x60 44 - PUSH1 44 // Size for the call input 0x80 - DUP1 44 // Size for copying calldata to memory 0x82 - DUP3 00 // Offset for calldata copy 0x80 - DUP1 00 // Offset for destination of calldata copy 0x37 - CALLDATACOPY 00 00 44 // Execute calldata copy, is going to be used for next call 0x81 - DUP2 00 // Offset for call input 0x80 - DUP1 00 // Amount of ETH to send during call 0x60 38 - PUSH1 38 // calldata pointer to load value into stack 0x35 - CALLDATALOAD 38 (A) // Load value (A), address to call 0x5a - GAS // Remaining gas 0xf1 - CALL (A) (A) 00 00 44 00 00 // Execute call to address (A) with calldata mem[0:64] 0x32 - ORIGIN (B) // Dest funds for selfdestruct 0xff - SELFDESTRUCT (B) // selfdestruct contract, end of execution */ bytes public constant code = hex"6012600081600A8239F360008060448082803781806038355AF132FF"; bytes32 public constant vaultCodeHash = bytes32(0xfa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97); /** * @dev Get a deterministics vault. */ function getVault(bytes32 _key) internal view returns (address) { return address( uint160( uint( keccak256( abi.encodePacked( bytes1(0xff), address(this), _key, vaultCodeHash ) ) ) ) ); } /** * @dev Create deterministic vault. */ function executeVault(bytes32 _key, IERC20 _token, address _to) internal returns (uint256 value) { address addr; bytes memory slotcode = code; /* solium-disable-next-line */ assembly{ // Create the contract arguments for the constructor addr := create2(0, add(slotcode, 0x20), mload(slotcode), _key) } value = _token.balanceOf(addr); /* solium-disable-next-line */ (bool success, ) = addr.call( abi.encodePacked( abi.encodeWithSelector( _token.transfer.selector, _to, value ), address(_token) ) ); require(success, "Error pulling tokens"); } } // File contracts/ArkenStopLimit.sol pragma solidity >=0.4.22 <0.9.0; // import 'hardhat/console.sol'; contract ArkenStopLimit is Ownable, Pausable, AccessControl { using SafeERC20 for IERC20; using Address for address; bytes32 public constant FULFILLER_ADMIN = keccak256("FULFILLER_ADMIN"); bytes32 public constant FULFILLER = keccak256("FULFILLER"); // constant address public constant _ETH_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint256 constant MAX_INT = 2**256 - 1; address public _ARKEN_APPROVE_; address public _ARKEN_PAUSER_; address public _WETH_; uint64 public _VERSION_; // enum enum OrderStatus { NULL, CREATED, SUCCESS, CANCELLED } enum OrderType { STOP_LIMIT, LIMIT_ORDER } // data struct OrderKey { uint256 nonce; address srcToken; address dstToken; uint256 amountIn; uint256 startPrice; uint256 stopPrice; uint256 limitPrice; uint256 amountOutMin; uint256 expiredAt; OrderType orderType; bool isBuyOrder; } mapping(bytes32 => OrderStatus) orderStatusMapping; modifier onlyArkenPauser() { require(_ARKEN_PAUSER_ == _msgSender(), "Pause: caller is not the pauser"); _; } // event event OrderCreated ( uint256 nonce, address owner, address srcToken, address dstToken, uint256 amountIn, uint256 startPrice, uint256 stopPrice, uint256 limitPrice, uint256 amountOutMin, uint256 expiredAt, OrderType orderType, bool isBuyOrder ); event OrderSuccess ( bytes32 orderHash, uint256 fulfillAmount ); event OrderCancelled ( bytes32 orderHash ); event WETHUpdated(address newWETH); event ArkenApproveUpdated(address newArkenApproveAddress); event ArkenPauserUpdated(address newArkenPauserAddress); constructor( address _ownerAddress, address _arkenFulfillerAdmin, address _arkenApprove, address _arkenPauser, address _weth, uint64 _version ) { transferOwnership(_ownerAddress); _ARKEN_APPROVE_ = _arkenApprove; _ARKEN_PAUSER_ = _arkenPauser; _WETH_ = _weth; _VERSION_ = _version; _setupRole(FULFILLER_ADMIN, _arkenFulfillerAdmin); _setRoleAdmin(FULFILLER, FULFILLER_ADMIN); } receive() external payable {} fallback() external payable {} function createOrder ( OrderKey memory orderKey ) external payable whenNotPaused { bytes32 orderHash = keccak256( abi.encode(orderKey.nonce, msg.sender, orderKey.srcToken, orderKey.dstToken, orderKey.amountIn, orderKey.startPrice, orderKey.stopPrice, orderKey.limitPrice, orderKey.amountOutMin, orderKey.expiredAt, orderKey.orderType, orderKey.isBuyOrder) ); require(orderStatusMapping[orderHash] == OrderStatus.NULL, 'Failed to created order: incorrect status'); orderStatusMapping[orderHash] = OrderStatus.CREATED; { address execAddr = Fabric.getVault(orderHash); if(_ETH_ == orderKey.srcToken) { _wrapEther(_WETH_, address(this).balance); IERC20(_WETH_).safeTransfer(execAddr, orderKey.amountIn); } else{ IERC20(orderKey.srcToken).safeTransferFrom(msg.sender, execAddr, orderKey.amountIn); } } emit OrderCreated( orderKey.nonce, msg.sender, orderKey.srcToken, orderKey.dstToken, orderKey.amountIn, orderKey.startPrice, orderKey.stopPrice, orderKey.limitPrice, orderKey.amountOutMin, orderKey.expiredAt, orderKey.orderType, orderKey.isBuyOrder ); } function fulfillOrder ( address owner, address arkenDex, OrderKey memory orderKey, bytes calldata data ) external whenNotPaused onlyRole(FULFILLER) { bytes32 orderHash = keccak256( abi.encode(orderKey.nonce, owner, orderKey.srcToken, orderKey.dstToken, orderKey.amountIn, orderKey.startPrice, orderKey.stopPrice, orderKey.limitPrice, orderKey.amountOutMin, orderKey.expiredAt, orderKey.orderType, orderKey.isBuyOrder) ); require(block.timestamp < orderKey.expiredAt, 'Failed to fulfill order: order has already expired'); require(orderStatusMapping[orderHash] == OrderStatus.CREATED, 'Failed to fulfill order: incorrect status'); orderStatusMapping[orderHash] = OrderStatus.SUCCESS; if (_ETH_ == orderKey.srcToken) { Fabric.executeVault(orderHash, IERC20(_WETH_), address(this)); _increaseAllowance(_WETH_, _ARKEN_APPROVE_, orderKey.amountIn); } else { Fabric.executeVault(orderHash, IERC20(orderKey.srcToken), address(this)); _increaseAllowance(orderKey.srcToken, _ARKEN_APPROVE_, orderKey.amountIn); } uint256 beforeDstAmt = _getBalance(orderKey.dstToken, owner); arkenDex.functionCall(data); uint256 receivedAmt = _getBalance(orderKey.dstToken, owner) - beforeDstAmt; require( receivedAmt >= orderKey.amountOutMin, 'Received token is not enough' ); emit OrderSuccess( orderHash, receivedAmt ); } function cancelOrder ( OrderKey memory orderKey ) external { bytes32 orderHash = keccak256( abi.encode(orderKey.nonce, msg.sender, orderKey.srcToken, orderKey.dstToken, orderKey.amountIn, orderKey.startPrice, orderKey.stopPrice, orderKey.limitPrice, orderKey.amountOutMin, orderKey.expiredAt, orderKey.orderType, orderKey.isBuyOrder) ); require(orderStatusMapping[orderHash] == OrderStatus.CREATED, 'Failed to cancel order: incorrect status'); orderStatusMapping[orderHash] = OrderStatus.CANCELLED; if (_ETH_ == orderKey.srcToken) { uint256 beforeBalance = _getBalance(_ETH_, msg.sender); uint256 balance = Fabric.executeVault(orderHash, IERC20(_WETH_), address(this)); _unwrapEther(_WETH_, balance); (bool success, ) = msg.sender.call{value: balance}(''); require(success, 'Failed to send Ether'); uint256 afterBalance = _getBalance(_ETH_, msg.sender); require(afterBalance > beforeBalance, 'Failed to cancel order: received token is not enough'); } else { uint256 beforeBalance = _getBalance(orderKey.srcToken, msg.sender); Fabric.executeVault(orderHash, IERC20(orderKey.srcToken), msg.sender); uint256 afterBalance = _getBalance(orderKey.srcToken, msg.sender); require(afterBalance > beforeBalance, 'Failed to cancel order: received token is not enough'); } emit OrderCancelled( orderHash ); } function viewOrderStatus ( bytes32 orderHash ) external view returns(OrderStatus) { require(orderStatusMapping[orderHash] != OrderStatus.NULL, 'order doesnt exist'); return orderStatusMapping[orderHash]; } function _getBalance( address token, address account ) internal view returns (uint256) { if (_ETH_ == token) { return account.balance; } else { return IERC20(token).balanceOf(account); } } function _increaseAllowance ( address token, address spender, uint256 amount ) internal { uint256 allowance = IERC20(token).allowance(address(this), spender); if (amount > allowance) { uint256 increaseAmount = MAX_INT - allowance; IERC20(token).safeIncreaseAllowance(spender, increaseAmount); } } function _wrapEther(address weth, uint256 amount) internal { IWETH(weth).deposit{value: amount}(); } function _unwrapEther(address weth, uint256 amount) internal { IWETH(weth).withdraw(amount); } // update address function updateArkenApprove(address _arkenApprove) external onlyOwner { require(_arkenApprove != address(0), 'arken approve zero address'); _ARKEN_APPROVE_ = _arkenApprove; emit ArkenApproveUpdated(_ARKEN_APPROVE_); } function updateArkenPauser(address _arkenPauser) external onlyOwner { require(_arkenPauser != address(0), 'arken pauser zero address'); _ARKEN_PAUSER_ = _arkenPauser; emit ArkenPauserUpdated(_ARKEN_PAUSER_); } function updateWETH(address _weth) external onlyOwner { require(_weth != address(0), 'WETH zero address'); _WETH_ = _weth; emit WETHUpdated(_WETH_); } function setPause(bool _paused) external onlyArkenPauser { if(_paused) _pause(); else _unpause(); } }
[{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"address","name":"_arkenFulfillerAdmin","type":"address"},{"internalType":"address","name":"_arkenApprove","type":"address"},{"internalType":"address","name":"_arkenPauser","type":"address"},{"internalType":"address","name":"_weth","type":"address"},{"internalType":"uint64","name":"_version","type":"uint64"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newArkenApproveAddress","type":"address"}],"name":"ArkenApproveUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newArkenPauserAddress","type":"address"}],"name":"ArkenPauserUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"srcToken","type":"address"},{"indexed":false,"internalType":"address","name":"dstToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stopPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"limitPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiredAt","type":"uint256"},{"indexed":false,"internalType":"enum ArkenStopLimit.OrderType","name":"orderType","type":"uint8"},{"indexed":false,"internalType":"bool","name":"isBuyOrder","type":"bool"}],"name":"OrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"orderHash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"fulfillAmount","type":"uint256"}],"name":"OrderSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWETH","type":"address"}],"name":"WETHUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FULFILLER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FULFILLER_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ARKEN_APPROVE_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ARKEN_PAUSER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ETH_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_VERSION_","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_WETH_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"stopPrice","type":"uint256"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"expiredAt","type":"uint256"},{"internalType":"enum ArkenStopLimit.OrderType","name":"orderType","type":"uint8"},{"internalType":"bool","name":"isBuyOrder","type":"bool"}],"internalType":"struct ArkenStopLimit.OrderKey","name":"orderKey","type":"tuple"}],"name":"cancelOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"stopPrice","type":"uint256"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"expiredAt","type":"uint256"},{"internalType":"enum ArkenStopLimit.OrderType","name":"orderType","type":"uint8"},{"internalType":"bool","name":"isBuyOrder","type":"bool"}],"internalType":"struct ArkenStopLimit.OrderKey","name":"orderKey","type":"tuple"}],"name":"createOrder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"arkenDex","type":"address"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"startPrice","type":"uint256"},{"internalType":"uint256","name":"stopPrice","type":"uint256"},{"internalType":"uint256","name":"limitPrice","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"expiredAt","type":"uint256"},{"internalType":"enum ArkenStopLimit.OrderType","name":"orderType","type":"uint8"},{"internalType":"bool","name":"isBuyOrder","type":"bool"}],"internalType":"struct ArkenStopLimit.OrderKey","name":"orderKey","type":"tuple"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"fulfillOrder","outputs":[],"stateMutability":"nonpayable","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"bool","name":"_paused","type":"bool"}],"name":"setPause","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_arkenApprove","type":"address"}],"name":"updateArkenApprove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_arkenPauser","type":"address"}],"name":"updateArkenPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_weth","type":"address"}],"name":"updateWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"orderHash","type":"bytes32"}],"name":"viewOrderStatus","outputs":[{"internalType":"enum ArkenStopLimit.OrderStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200291838038062002918833981016040819052620000349162000367565b6200003f3362000134565b6000805460ff60a01b19169055620000578662000184565b600280546001600160a01b03199081166001600160a01b038781169190911790925560038054909116858316179055600480549184166001600160e01b031990921691909117600160a01b6001600160401b03841602179055620000dc7f8a087fada5ea800a5053e970b97ccd009488bb78017e140585988459115174918662000207565b620001287f936d4be36899610cf4bdbcbf8c6d7d642e6f4e365e592023384b5439acdc61397f8a087fada5ea800a5053e970b97ccd009488bb78017e1405859884591151749162000217565b505050505050620003f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200018e62000264565b6001600160a01b038116620001f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620002048162000134565b50565b620002138282620002c2565b5050565b6000828152600160208190526040808320909101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000546001600160a01b03163314620002c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001f0565b565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620002135760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b80516001600160a01b03811681146200036257600080fd5b919050565b60008060008060008060c087890312156200038157600080fd5b6200038c876200034a565b95506200039c602088016200034a565b9450620003ac604088016200034a565b9350620003bc606088016200034a565b9250620003cc608088016200034a565b60a08801519092506001600160401b0381168114620003ea57600080fd5b809150509295509295509295565b61251080620004086000396000f3fe6080604052600436106101735760003560e01c8063a4886b60116100c8578063cfbffc9811610084578063e01fff9511610061578063e01fff95146104ac578063f2fde38b146104e0578063f8444adf14610500578063fe9440d71461052057005b8063cfbffc9814610459578063d1da735714610479578063d547741f1461048c57005b8063a4886b6014610363578063a50f828614610390578063b344ab94146103b0578063bedb86fb146103d0578063c165dd97146103f0578063cf4691a41461041857005b806350f361501161012f5780638b2c83161161010c5780638b2c8316146102f05780638da5cb5b1461031057806391d148541461032e578063a217fddf1461034e57005b806350f361501461029c5780635c975abb146102bc578063715018a6146102db57005b806301ffc9a71461017c5780630d4eec8f146101b157806314c369a6146101e9578063248a9ca31461022b5780632f2ff15d1461025c57806336568abe1461027c57005b3661017a57005b005b34801561018857600080fd5b5061019c610197366004611f49565b610540565b60405190151581526020015b60405180910390f35b3480156101bd57600080fd5b506004546101d1906001600160a01b031681565b6040516001600160a01b0390911681526020016101a8565b3480156101f557600080fd5b5061021d7f8a087fada5ea800a5053e970b97ccd009488bb78017e1405859884591151749181565b6040519081526020016101a8565b34801561023757600080fd5b5061021d610246366004611f73565b6000908152600160208190526040909120015490565b34801561026857600080fd5b5061017a610277366004611fa8565b610577565b34801561028857600080fd5b5061017a610297366004611fa8565b6105a2565b3480156102a857600080fd5b5061017a6102b73660046120f5565b610625565b3480156102c857600080fd5b50600054600160a01b900460ff1661019c565b3480156102e757600080fd5b5061017a61091a565b3480156102fc57600080fd5b5061017a61030b366004612112565b61092e565b34801561031c57600080fd5b506000546001600160a01b03166101d1565b34801561033a57600080fd5b5061019c610349366004611fa8565b6109e1565b34801561035a57600080fd5b5061021d600081565b34801561036f57600080fd5b5061038361037e366004611f73565b610a0c565b6040516101a89190612143565b34801561039c57600080fd5b506002546101d1906001600160a01b031681565b3480156103bc57600080fd5b506003546101d1906001600160a01b031681565b3480156103dc57600080fd5b5061017a6103eb36600461215d565b610a8a565b3480156103fc57600080fd5b506101d173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561042457600080fd5b5060045461044090600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101a8565b34801561046557600080fd5b5061017a61047436600461217a565b610afd565b61017a6104873660046120f5565b610e57565b34801561049857600080fd5b5061017a6104a7366004611fa8565b6110ed565b3480156104b857600080fd5b5061021d7f936d4be36899610cf4bdbcbf8c6d7d642e6f4e365e592023384b5439acdc613981565b3480156104ec57600080fd5b5061017a6104fb366004612112565b611113565b34801561050c57600080fd5b5061017a61051b366004612112565b611189565b34801561052c57600080fd5b5061017a61053b366004612112565b611235565b60006001600160e01b03198216637965db0b60e01b148061057157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526001602081905260409091200154610593816112d5565b61059d83836112df565b505050565b6001600160a01b03811633146106175760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610621828261134a565b5050565b600081600001513383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c610140015160405160200161067d9c9b9a9998979695949392919061221f565b60408051601f1981840301815291905280516020909101209050600160008281526005602052604090205460ff1660038111156106bc576106bc61212d565b1461071a5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2063616e63656c206f726465723a20696e636f72726563604482015267742073746174757360c01b606482015260840161060e565b6000818152600560209081526040909120805460ff191660031790558201516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0361088c57600061077c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336113b1565b60045490915060009061079a9084906001600160a01b031630611459565b6004549091506107b3906001600160a01b03168261161d565b604051600090339083908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b50509050806108425760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015260640161060e565b600061086273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336113b1565b90508381116108835760405162461bcd60e51b815260040161060e906122a9565b505050506108e2565b600061089c8360200151336113b1565b90506108ad82846020015133611459565b5060006108be8460200151336113b1565b90508181116108df5760405162461bcd60e51b815260040161060e906122a9565b50505b6040518181527f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d906020015b60405180910390a15050565b61092261167b565b61092c60006116d5565b565b61093661167b565b6001600160a01b03811661098c5760405162461bcd60e51b815260206004820152601a60248201527f61726b656e20617070726f7665207a65726f2061646472657373000000000000604482015260640161060e565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fbf8272bb6f26e323c8e76a4b80605dcaf8b505cbb54af5597de0798f56f5479a906020015b60405180910390a150565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060008381526005602052604090205460ff166003811115610a3257610a3261212d565b03610a745760405162461bcd60e51b81526020600482015260126024820152711bdc99195c88191bd95cdb9d08195e1a5cdd60721b604482015260640161060e565b5060009081526005602052604090205460ff1690565b6003546001600160a01b03163314610ae45760405162461bcd60e51b815260206004820152601f60248201527f50617573653a2063616c6c6572206973206e6f74207468652070617573657200604482015260640161060e565b8015610af557610af2611725565b50565b610af2611785565b610b056117c1565b7f936d4be36899610cf4bdbcbf8c6d7d642e6f4e365e592023384b5439acdc6139610b2f816112d5565b600084600001518786602001518760400151886060015189608001518a60a001518b60c001518c60e001518d61010001518e61012001518f6101400151604051602001610b879c9b9a9998979695949392919061221f565b6040516020818303038152906040528051906020012090508461010001514210610c0e5760405162461bcd60e51b815260206004820152603260248201527f4661696c656420746f2066756c66696c6c206f726465723a206f726465722068604482015271185cc8185b1c9958591e48195e1c1a5c995960721b606482015260840161060e565b600160008281526005602052604090205460ff166003811115610c3357610c3361212d565b14610c925760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2066756c66696c6c206f726465723a20696e636f72726560448201526863742073746174757360b81b606482015260840161060e565b6000818152600560209081526040909120805460ff191660021790558501516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03610d1457600454610cec9082906001600160a01b031630611459565b506004546002546060870151610d0f926001600160a01b0390811692169061180e565b610d45565b610d2381866020015130611459565b5060208501516002546060870151610d4592916001600160a01b03169061180e565b6000610d558660400151896113b1565b9050610da185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506001600160a01b038b16929150506118b8565b50600081610db388604001518b6113b1565b610dbd9190612313565b90508660e00151811015610e135760405162461bcd60e51b815260206004820152601c60248201527f526563656976656420746f6b656e206973206e6f7420656e6f75676800000000604482015260640161060e565b60408051848152602081018390527fc78413415559d619321107bfa4facd343c77ca22f6a675ecf56421307f1cc7c6910160405180910390a1505050505050505050565b610e5f6117c1565b600081600001513383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c6101400151604051602001610eb79c9b9a9998979695949392919061221f565b60408051601f19818403018152919052805160209091012090506000808281526005602052604090205460ff166003811115610ef557610ef561212d565b14610f545760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2063726561746564206f726465723a20696e636f72726560448201526863742073746174757360b81b606482015260840161060e565b6000818152600560205260408120805460ff19166001179055610feb826040516001600160f81b031960208201526bffffffffffffffffffffffff193060601b166021820152603581018290527ffa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97605582015260009060750160408051601f19818403018152919052805160209091012092915050565b60208401519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036110505760045461102c906001600160a01b031647611901565b606083015160045461104b916001600160a01b03909116908390611959565b611078565b6110783382856060015186602001516001600160a01b03166119bc909392919063ffffffff16565b507fb9350b8c4591e0587dcfe622757b42ff32fbc7e4ce69dc9efeb7939b9be7476082600001513384602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d610140015160405161090e9c9b9a9998979695949392919061221f565b60008281526001602081905260409091200154611109816112d5565b61059d838361134a565b61111b61167b565b6001600160a01b0381166111805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060e565b610af2816116d5565b61119161167b565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152601960248201527f61726b656e20706175736572207a65726f206164647265737300000000000000604482015260640161060e565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f226e1944f88cab4fefd2632be2cf32a902aa1baf5c6d3da95d435f74ea1e0bb4906020016109d6565b61123d61167b565b6001600160a01b0381166112875760405162461bcd60e51b815260206004820152601160248201527057455448207a65726f206164647265737360781b604482015260640161060e565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5f85e7e522385144040f94bcb1eeaeb07da5e11d6384c124c09f53986d0ed8bc906020016109d6565b610af281336119f4565b6112e982826109e1565b6106215760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61135482826109e1565b156106215760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036113e857506001600160a01b03811631610571565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190612326565b9050610571565b60008060006040518060400160405280601c81526020017f6012600081600a8239f360008060448082803781806038355af132ff000000008152509050858151602083016000f56040516370a0823160e01b81526001600160a01b038083166004830152919350908616906370a0823190602401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190612326565b604080516001600160a01b03878116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905292519396506000939086169261156f92918a9101612363565b60408051601f19818403018152908290526115899161239a565b6000604051808303816000865af19150503d80600081146115c6576040519150601f19603f3d011682016040523d82523d6000602084013e6115cb565b606091505b50509050806116135760405162461bcd60e51b81526020600482015260146024820152734572726f722070756c6c696e6720746f6b656e7360601b604482015260640161060e565b5050509392505050565b604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461092c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61172d6117c1565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117683390565b6040516001600160a01b03909116815260200160405180910390a1565b61178d611a58565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611768565b600054600160a01b900460ff161561092c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161060e565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118829190612326565b9050808211156118b257600061189a82600019612313565b90506118b06001600160a01b0386168583611aa8565b505b50505050565b60606118fa83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250611b5a565b9392505050565b816001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050505050565b6040516001600160a01b03831660248201526044810182905261059d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b71565b6040516001600160a01b03808516602483015283166044820152606481018290526118b29085906323b872dd60e01b90608401611985565b6119fe82826109e1565b61062157611a16816001600160a01b03166014611c43565b611a21836020611c43565b604051602001611a329291906123b6565b60408051601f198184030181529082905262461bcd60e51b825261060e9160040161242b565b600054600160a01b900460ff1661092c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161060e565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d9190612326565b611b27919061245e565b6040516001600160a01b0385166024820152604481018290529091506118b290859063095ea7b360e01b90606401611985565b6060611b698484600085611ddf565b949350505050565b6000611bc6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b5a9092919063ffffffff16565b80519091501561059d5780806020019051810190611be49190612471565b61059d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161060e565b60606000611c5283600261248e565b611c5d90600261245e565b67ffffffffffffffff811115611c7557611c75611fd4565b6040519080825280601f01601f191660200182016040528015611c9f576020820181803683370190505b509050600360fc1b81600081518110611cba57611cba6124ad565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ce957611ce96124ad565b60200101906001600160f81b031916908160001a9053506000611d0d84600261248e565b611d1890600161245e565b90505b6001811115611d90576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d4c57611d4c6124ad565b1a60f81b828281518110611d6257611d626124ad565b60200101906001600160f81b031916908160001a90535060049490941c93611d89816124c3565b9050611d1b565b5083156118fa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161060e565b606082471015611e405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161060e565b6001600160a01b0385163b611e975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161060e565b600080866001600160a01b03168587604051611eb3919061239a565b60006040518083038185875af1925050503d8060008114611ef0576040519150601f19603f3d011682016040523d82523d6000602084013e611ef5565b606091505b5091509150611f05828286611f10565b979650505050505050565b60608315611f1f5750816118fa565b825115611f2f5782518084602001fd5b8160405162461bcd60e51b815260040161060e919061242b565b600060208284031215611f5b57600080fd5b81356001600160e01b0319811681146118fa57600080fd5b600060208284031215611f8557600080fd5b5035919050565b80356001600160a01b0381168114611fa357600080fd5b919050565b60008060408385031215611fbb57600080fd5b82359150611fcb60208401611f8c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561201c57634e487b7160e01b600052604160045260246000fd5b60405290565b803560028110611fa357600080fd5b8015158114610af257600080fd5b8035611fa381612031565b6000610160828403121561205d57600080fd5b612065611fea565b90508135815261207760208301611f8c565b602082015261208860408301611f8c565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206120d9818401612022565b908201526101406120eb83820161203f565b9082015292915050565b6000610160828403121561210857600080fd5b6118fa838361204a565b60006020828403121561212457600080fd5b6118fa82611f8c565b634e487b7160e01b600052602160045260246000fd5b60208101600483106121575761215761212d565b91905290565b60006020828403121561216f57600080fd5b81356118fa81612031565b60008060008060006101c0868803121561219357600080fd5b61219c86611f8c565b94506121aa60208701611f8c565b93506121b9876040880161204a565b92506101a086013567ffffffffffffffff808211156121d757600080fd5b818801915088601f8301126121eb57600080fd5b8135818111156121fa57600080fd5b89602082850101111561220c57600080fd5b9699959850939650602001949392505050565b8c81526001600160a01b038c811660208301528b811660408301528a1660608201526080810189905260a0810188905260c0810187905260e08101869052610100810185905261012081018490526101808101600284106122825761228261212d565b8361014083015261229861016083018415159052565b9d9c50505050505050505050505050565b60208082526034908201527f4661696c656420746f2063616e63656c206f726465723a207265636569766564604082015273040e8ded6cadc40d2e640dcdee840cadcdeeaced60631b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610571576105716122fd565b60006020828403121561233857600080fd5b5051919050565b60005b8381101561235a578181015183820152602001612342565b50506000910152565b6000835161237581846020880161233f565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600082516123ac81846020870161233f565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123ee81601785016020880161233f565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161241f81602884016020880161233f565b01602801949350505050565b602081526000825180602084015261244a81604085016020870161233f565b601f01601f19169190910160400192915050565b80820180821115610571576105716122fd565b60006020828403121561248357600080fd5b81516118fa81612031565b60008160001904831182151516156124a8576124a86122fd565b500290565b634e487b7160e01b600052603260045260246000fd5b6000816124d2576124d26122fd565b50600019019056fea26469706673582212201f1e1bfcf280987a89d1b8cb0f49396c4d688ea17261995e3b008a1830810ad464736f6c6343000810003300000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f00000000000000000000000054a42cad102b17f8da389823d558284083ee80d6000000000000000000000000a8bd6336d106c271e7c70d2a36debda0b32dd43400000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000000000000000000000000000000000000000000003
Deployed Bytecode
0x6080604052600436106101735760003560e01c8063a4886b60116100c8578063cfbffc9811610084578063e01fff9511610061578063e01fff95146104ac578063f2fde38b146104e0578063f8444adf14610500578063fe9440d71461052057005b8063cfbffc9814610459578063d1da735714610479578063d547741f1461048c57005b8063a4886b6014610363578063a50f828614610390578063b344ab94146103b0578063bedb86fb146103d0578063c165dd97146103f0578063cf4691a41461041857005b806350f361501161012f5780638b2c83161161010c5780638b2c8316146102f05780638da5cb5b1461031057806391d148541461032e578063a217fddf1461034e57005b806350f361501461029c5780635c975abb146102bc578063715018a6146102db57005b806301ffc9a71461017c5780630d4eec8f146101b157806314c369a6146101e9578063248a9ca31461022b5780632f2ff15d1461025c57806336568abe1461027c57005b3661017a57005b005b34801561018857600080fd5b5061019c610197366004611f49565b610540565b60405190151581526020015b60405180910390f35b3480156101bd57600080fd5b506004546101d1906001600160a01b031681565b6040516001600160a01b0390911681526020016101a8565b3480156101f557600080fd5b5061021d7f8a087fada5ea800a5053e970b97ccd009488bb78017e1405859884591151749181565b6040519081526020016101a8565b34801561023757600080fd5b5061021d610246366004611f73565b6000908152600160208190526040909120015490565b34801561026857600080fd5b5061017a610277366004611fa8565b610577565b34801561028857600080fd5b5061017a610297366004611fa8565b6105a2565b3480156102a857600080fd5b5061017a6102b73660046120f5565b610625565b3480156102c857600080fd5b50600054600160a01b900460ff1661019c565b3480156102e757600080fd5b5061017a61091a565b3480156102fc57600080fd5b5061017a61030b366004612112565b61092e565b34801561031c57600080fd5b506000546001600160a01b03166101d1565b34801561033a57600080fd5b5061019c610349366004611fa8565b6109e1565b34801561035a57600080fd5b5061021d600081565b34801561036f57600080fd5b5061038361037e366004611f73565b610a0c565b6040516101a89190612143565b34801561039c57600080fd5b506002546101d1906001600160a01b031681565b3480156103bc57600080fd5b506003546101d1906001600160a01b031681565b3480156103dc57600080fd5b5061017a6103eb36600461215d565b610a8a565b3480156103fc57600080fd5b506101d173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561042457600080fd5b5060045461044090600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101a8565b34801561046557600080fd5b5061017a61047436600461217a565b610afd565b61017a6104873660046120f5565b610e57565b34801561049857600080fd5b5061017a6104a7366004611fa8565b6110ed565b3480156104b857600080fd5b5061021d7f936d4be36899610cf4bdbcbf8c6d7d642e6f4e365e592023384b5439acdc613981565b3480156104ec57600080fd5b5061017a6104fb366004612112565b611113565b34801561050c57600080fd5b5061017a61051b366004612112565b611189565b34801561052c57600080fd5b5061017a61053b366004612112565b611235565b60006001600160e01b03198216637965db0b60e01b148061057157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008281526001602081905260409091200154610593816112d5565b61059d83836112df565b505050565b6001600160a01b03811633146106175760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610621828261134a565b5050565b600081600001513383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c610140015160405160200161067d9c9b9a9998979695949392919061221f565b60408051601f1981840301815291905280516020909101209050600160008281526005602052604090205460ff1660038111156106bc576106bc61212d565b1461071a5760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f2063616e63656c206f726465723a20696e636f72726563604482015267742073746174757360c01b606482015260840161060e565b6000818152600560209081526040909120805460ff191660031790558201516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0361088c57600061077c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336113b1565b60045490915060009061079a9084906001600160a01b031630611459565b6004549091506107b3906001600160a01b03168261161d565b604051600090339083908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b50509050806108425760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015260640161060e565b600061086273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee336113b1565b90508381116108835760405162461bcd60e51b815260040161060e906122a9565b505050506108e2565b600061089c8360200151336113b1565b90506108ad82846020015133611459565b5060006108be8460200151336113b1565b90508181116108df5760405162461bcd60e51b815260040161060e906122a9565b50505b6040518181527f5152abf959f6564662358c2e52b702259b78bac5ee7842a0f01937e670efcc7d906020015b60405180910390a15050565b61092261167b565b61092c60006116d5565b565b61093661167b565b6001600160a01b03811661098c5760405162461bcd60e51b815260206004820152601a60248201527f61726b656e20617070726f7665207a65726f2061646472657373000000000000604482015260640161060e565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fbf8272bb6f26e323c8e76a4b80605dcaf8b505cbb54af5597de0798f56f5479a906020015b60405180910390a150565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008060008381526005602052604090205460ff166003811115610a3257610a3261212d565b03610a745760405162461bcd60e51b81526020600482015260126024820152711bdc99195c88191bd95cdb9d08195e1a5cdd60721b604482015260640161060e565b5060009081526005602052604090205460ff1690565b6003546001600160a01b03163314610ae45760405162461bcd60e51b815260206004820152601f60248201527f50617573653a2063616c6c6572206973206e6f74207468652070617573657200604482015260640161060e565b8015610af557610af2611725565b50565b610af2611785565b610b056117c1565b7f936d4be36899610cf4bdbcbf8c6d7d642e6f4e365e592023384b5439acdc6139610b2f816112d5565b600084600001518786602001518760400151886060015189608001518a60a001518b60c001518c60e001518d61010001518e61012001518f6101400151604051602001610b879c9b9a9998979695949392919061221f565b6040516020818303038152906040528051906020012090508461010001514210610c0e5760405162461bcd60e51b815260206004820152603260248201527f4661696c656420746f2066756c66696c6c206f726465723a206f726465722068604482015271185cc8185b1c9958591e48195e1c1a5c995960721b606482015260840161060e565b600160008281526005602052604090205460ff166003811115610c3357610c3361212d565b14610c925760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2066756c66696c6c206f726465723a20696e636f72726560448201526863742073746174757360b81b606482015260840161060e565b6000818152600560209081526040909120805460ff191660021790558501516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03610d1457600454610cec9082906001600160a01b031630611459565b506004546002546060870151610d0f926001600160a01b0390811692169061180e565b610d45565b610d2381866020015130611459565b5060208501516002546060870151610d4592916001600160a01b03169061180e565b6000610d558660400151896113b1565b9050610da185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506001600160a01b038b16929150506118b8565b50600081610db388604001518b6113b1565b610dbd9190612313565b90508660e00151811015610e135760405162461bcd60e51b815260206004820152601c60248201527f526563656976656420746f6b656e206973206e6f7420656e6f75676800000000604482015260640161060e565b60408051848152602081018390527fc78413415559d619321107bfa4facd343c77ca22f6a675ecf56421307f1cc7c6910160405180910390a1505050505050505050565b610e5f6117c1565b600081600001513383602001518460400151856060015186608001518760a001518860c001518960e001518a61010001518b61012001518c6101400151604051602001610eb79c9b9a9998979695949392919061221f565b60408051601f19818403018152919052805160209091012090506000808281526005602052604090205460ff166003811115610ef557610ef561212d565b14610f545760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2063726561746564206f726465723a20696e636f72726560448201526863742073746174757360b81b606482015260840161060e565b6000818152600560205260408120805460ff19166001179055610feb826040516001600160f81b031960208201526bffffffffffffffffffffffff193060601b166021820152603581018290527ffa3da1081bc86587310fce8f3a5309785fc567b9b20875900cb289302d6bfa97605582015260009060750160408051601f19818403018152919052805160209091012092915050565b60208401519091506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036110505760045461102c906001600160a01b031647611901565b606083015160045461104b916001600160a01b03909116908390611959565b611078565b6110783382856060015186602001516001600160a01b03166119bc909392919063ffffffff16565b507fb9350b8c4591e0587dcfe622757b42ff32fbc7e4ce69dc9efeb7939b9be7476082600001513384602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001518d610140015160405161090e9c9b9a9998979695949392919061221f565b60008281526001602081905260409091200154611109816112d5565b61059d838361134a565b61111b61167b565b6001600160a01b0381166111805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161060e565b610af2816116d5565b61119161167b565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152601960248201527f61726b656e20706175736572207a65726f206164647265737300000000000000604482015260640161060e565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f226e1944f88cab4fefd2632be2cf32a902aa1baf5c6d3da95d435f74ea1e0bb4906020016109d6565b61123d61167b565b6001600160a01b0381166112875760405162461bcd60e51b815260206004820152601160248201527057455448207a65726f206164647265737360781b604482015260640161060e565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5f85e7e522385144040f94bcb1eeaeb07da5e11d6384c124c09f53986d0ed8bc906020016109d6565b610af281336119f4565b6112e982826109e1565b6106215760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b61135482826109e1565b156106215760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036113e857506001600160a01b03811631610571565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa15801561142e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114529190612326565b9050610571565b60008060006040518060400160405280601c81526020017f6012600081600a8239f360008060448082803781806038355af132ff000000008152509050858151602083016000f56040516370a0823160e01b81526001600160a01b038083166004830152919350908616906370a0823190602401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190612326565b604080516001600160a01b03878116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905292519396506000939086169261156f92918a9101612363565b60408051601f19818403018152908290526115899161239a565b6000604051808303816000865af19150503d80600081146115c6576040519150601f19603f3d011682016040523d82523d6000602084013e6115cb565b606091505b50509050806116135760405162461bcd60e51b81526020600482015260146024820152734572726f722070756c6c696e6720746f6b656e7360601b604482015260640161060e565b5050509392505050565b604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461092c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161060e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61172d6117c1565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117683390565b6040516001600160a01b03909116815260200160405180910390a1565b61178d611a58565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611768565b600054600160a01b900460ff161561092c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161060e565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801561185e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118829190612326565b9050808211156118b257600061189a82600019612313565b90506118b06001600160a01b0386168583611aa8565b505b50505050565b60606118fa83836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250611b5a565b9392505050565b816001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050505050565b6040516001600160a01b03831660248201526044810182905261059d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b71565b6040516001600160a01b03808516602483015283166044820152606481018290526118b29085906323b872dd60e01b90608401611985565b6119fe82826109e1565b61062157611a16816001600160a01b03166014611c43565b611a21836020611c43565b604051602001611a329291906123b6565b60408051601f198184030181529082905262461bcd60e51b825261060e9160040161242b565b600054600160a01b900460ff1661092c5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161060e565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d9190612326565b611b27919061245e565b6040516001600160a01b0385166024820152604481018290529091506118b290859063095ea7b360e01b90606401611985565b6060611b698484600085611ddf565b949350505050565b6000611bc6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b5a9092919063ffffffff16565b80519091501561059d5780806020019051810190611be49190612471565b61059d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161060e565b60606000611c5283600261248e565b611c5d90600261245e565b67ffffffffffffffff811115611c7557611c75611fd4565b6040519080825280601f01601f191660200182016040528015611c9f576020820181803683370190505b509050600360fc1b81600081518110611cba57611cba6124ad565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ce957611ce96124ad565b60200101906001600160f81b031916908160001a9053506000611d0d84600261248e565b611d1890600161245e565b90505b6001811115611d90576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611d4c57611d4c6124ad565b1a60f81b828281518110611d6257611d626124ad565b60200101906001600160f81b031916908160001a90535060049490941c93611d89816124c3565b9050611d1b565b5083156118fa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161060e565b606082471015611e405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161060e565b6001600160a01b0385163b611e975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161060e565b600080866001600160a01b03168587604051611eb3919061239a565b60006040518083038185875af1925050503d8060008114611ef0576040519150601f19603f3d011682016040523d82523d6000602084013e611ef5565b606091505b5091509150611f05828286611f10565b979650505050505050565b60608315611f1f5750816118fa565b825115611f2f5782518084602001fd5b8160405162461bcd60e51b815260040161060e919061242b565b600060208284031215611f5b57600080fd5b81356001600160e01b0319811681146118fa57600080fd5b600060208284031215611f8557600080fd5b5035919050565b80356001600160a01b0381168114611fa357600080fd5b919050565b60008060408385031215611fbb57600080fd5b82359150611fcb60208401611f8c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561201c57634e487b7160e01b600052604160045260246000fd5b60405290565b803560028110611fa357600080fd5b8015158114610af257600080fd5b8035611fa381612031565b6000610160828403121561205d57600080fd5b612065611fea565b90508135815261207760208301611f8c565b602082015261208860408301611f8c565b6040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101008083013581830152506101206120d9818401612022565b908201526101406120eb83820161203f565b9082015292915050565b6000610160828403121561210857600080fd5b6118fa838361204a565b60006020828403121561212457600080fd5b6118fa82611f8c565b634e487b7160e01b600052602160045260246000fd5b60208101600483106121575761215761212d565b91905290565b60006020828403121561216f57600080fd5b81356118fa81612031565b60008060008060006101c0868803121561219357600080fd5b61219c86611f8c565b94506121aa60208701611f8c565b93506121b9876040880161204a565b92506101a086013567ffffffffffffffff808211156121d757600080fd5b818801915088601f8301126121eb57600080fd5b8135818111156121fa57600080fd5b89602082850101111561220c57600080fd5b9699959850939650602001949392505050565b8c81526001600160a01b038c811660208301528b811660408301528a1660608201526080810189905260a0810188905260c0810187905260e08101869052610100810185905261012081018490526101808101600284106122825761228261212d565b8361014083015261229861016083018415159052565b9d9c50505050505050505050505050565b60208082526034908201527f4661696c656420746f2063616e63656c206f726465723a207265636569766564604082015273040e8ded6cadc40d2e640dcdee840cadcdeeaced60631b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610571576105716122fd565b60006020828403121561233857600080fd5b5051919050565b60005b8381101561235a578181015183820152602001612342565b50506000910152565b6000835161237581846020880161233f565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b600082516123ac81846020870161233f565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123ee81601785016020880161233f565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161241f81602884016020880161233f565b01602801949350505050565b602081526000825180602084015261244a81604085016020870161233f565b601f01601f19169190910160400192915050565b80820180821115610571576105716122fd565b60006020828403121561248357600080fd5b81516118fa81612031565b60008160001904831182151516156124a8576124a86122fd565b500290565b634e487b7160e01b600052603260045260246000fd5b6000816124d2576124d26122fd565b50600019019056fea26469706673582212201f1e1bfcf280987a89d1b8cb0f49396c4d688ea17261995e3b008a1830810ad464736f6c63430008100033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f00000000000000000000000054a42cad102b17f8da389823d558284083ee80d6000000000000000000000000a8bd6336d106c271e7c70d2a36debda0b32dd43400000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000000000000000000000000000000000000000000003
-----Decoded View---------------
Arg [0] : _ownerAddress (address): 0x77777EEf36045851c3E1832AC0815D0C894cE09f
Arg [1] : _arkenFulfillerAdmin (address): 0x54a42Cad102b17F8DA389823d558284083EE80D6
Arg [2] : _arkenApprove (address): 0xa8Bd6336d106C271E7C70D2A36DEBda0B32DD434
Arg [3] : _arkenPauser (address): 0x77777EEf36045851c3E1832AC0815D0C894cE09f
Arg [4] : _weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [5] : _version (uint64): 3
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f
Arg [1] : 00000000000000000000000054a42cad102b17f8da389823d558284083ee80d6
Arg [2] : 000000000000000000000000a8bd6336d106c271e7c70d2a36debda0b32dd434
Arg [3] : 00000000000000000000000077777eef36045851c3e1832ac0815d0c894ce09f
Arg [4] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Deployed ByteCode Sourcemap
44786:9216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32116:204;;;;;;;;;;-1:-1:-1;32116:204:0;;;;;:::i;:::-;;:::i;:::-;;;566:14:1;;559:22;541:41;;529:2;514:18;32116:204:0;;;;;;;;45281:21;;;;;;;;;;-1:-1:-1;45281:21:0;;;;-1:-1:-1;;;;;45281:21:0;;;;;;-1:-1:-1;;;;;757:32:1;;;739:51;;727:2;712:18;45281:21:0;593:203:1;44920:70:0;;;;;;;;;;;;44962:28;44920:70;;;;;947:25:1;;;935:2;920:18;44920:70:0;801:177:1;33952:131:0;;;;;;;;;;-1:-1:-1;33952:131:0;;;;;:::i;:::-;34026:7;34053:12;;;:6;:12;;;;;;;;:22;;;33952:131;34393:147;;;;;;;;;;-1:-1:-1;34393:147:0;;;;;:::i;:::-;;:::i;35537:218::-;;;;;;;;;;-1:-1:-1;35537:218:0;;;;;:::i;:::-;;:::i;50410:1583::-;;;;;;;;;;-1:-1:-1;50410:1583:0;;;;;:::i;:::-;;:::i;39475:86::-;;;;;;;;;;-1:-1:-1;39522:4:0;39546:7;-1:-1:-1;;;39546:7:0;;;;39475:86;;21212:103;;;;;;;;;;;;;:::i;53181:249::-;;;;;;;;;;-1:-1:-1;53181:249:0;;;;;:::i;:::-;;:::i;20564:87::-;;;;;;;;;;-1:-1:-1;20610:7:0;20637:6;-1:-1:-1;;;;;20637:6:0;20564:87;;32412:147;;;;;;;;;;-1:-1:-1;32412:147:0;;;;;:::i;:::-;;:::i;31517:49::-;;;;;;;;;;-1:-1:-1;31517:49:0;31562:4;31517:49;;52001:242;;;;;;;;;;-1:-1:-1;52001:242:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45208:30::-;;;;;;;;;;-1:-1:-1;45208:30:0;;;;-1:-1:-1;;;;;45208:30:0;;;45245:29;;;;;;;;;;-1:-1:-1;45245:29:0;;;;-1:-1:-1;;;;;45245:29:0;;;53877:122;;;;;;;;;;-1:-1:-1;53877:122:0;;;;;:::i;:::-;;:::i;45081:74::-;;;;;;;;;;;;45113:42;45081:74;;45309:23;;;;;;;;;;-1:-1:-1;45309:23:0;;;;-1:-1:-1;;;45309:23:0;;;;;;;;;4702:18:1;4690:31;;;4672:50;;4660:2;4645:18;45309:23:0;4528:200:1;48794:1608:0;;;;;;;;;;-1:-1:-1;48794:1608:0;;;;;:::i;:::-;;:::i;47367:1419::-;;;;;;:::i;:::-;;:::i;34833:149::-;;;;;;;;;;-1:-1:-1;34833:149:0;;;;;:::i;:::-;;:::i;44997:58::-;;;;;;;;;;;;45033:22;44997:58;;21470:201;;;;;;;;;;-1:-1:-1;21470:201:0;;;;;:::i;:::-;;:::i;53438:241::-;;;;;;;;;;-1:-1:-1;53438:241:0;;;;;:::i;:::-;;:::i;53687:182::-;;;;;;;;;;-1:-1:-1;53687:182:0;;;;;:::i;:::-;;:::i;32116:204::-;32201:4;-1:-1:-1;;;;;;32225:47:0;;-1:-1:-1;;;32225:47:0;;:87;;-1:-1:-1;;;;;;;;;;29480:40:0;;;32276:36;32218:94;32116:204;-1:-1:-1;;32116:204:0:o;34393:147::-;34026:7;34053:12;;;:6;:12;;;;;;;;:22;;32008:16;32019:4;32008:10;:16::i;:::-;34507:25:::1;34518:4;34524:7;34507:10;:25::i;:::-;34393:147:::0;;;:::o;35537:218::-;-1:-1:-1;;;;;35633:23:0;;19191:10;35633:23;35625:83;;;;-1:-1:-1;;;35625:83:0;;5798:2:1;35625:83:0;;;5780:21:1;5837:2;5817:18;;;5810:30;5876:34;5856:18;;;5849:62;-1:-1:-1;;;5927:18:1;;;5920:45;5982:19;;35625:83:0;;;;;;;;;35721:26;35733:4;35739:7;35721:11;:26::i;:::-;35537:218;;:::o;50410:1583::-;50494:17;50549:8;:14;;;50565:10;50577:8;:17;;;50596:8;:17;;;50615:8;:17;;;50634:8;:19;;;50655:8;:18;;;50675:8;:19;;;50696:8;:21;;;50719:8;:18;;;50739:8;:18;;;50759:8;:19;;;50538:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;50538:241:0;;;;;;;;;50514:276;;50538:241;50514:276;;;;;-1:-1:-1;50842:19:0;50809:29;;;;:18;:29;;;;;;;;:52;;;;;;;;:::i;:::-;;50801:105;;;;-1:-1:-1;;;50801:105:0;;7327:2:1;50801:105:0;;;7309:21:1;7366:2;7346:18;;;7339:30;7405:34;7385:18;;;7378:62;-1:-1:-1;;;7456:18:1;;;7449:38;7504:19;;50801:105:0;7125:404:1;50801:105:0;50917:29;;;;:18;:29;;;;;;;;:53;;-1:-1:-1;;50917:53:0;50949:21;50917:53;;;50996:17;;;-1:-1:-1;;;;;50987:26:0;45113:42;50987:26;50983:928;;51030:21;51054:30;45113:42;51073:10;51054:11;:30::i;:::-;51155:6;;51030:54;;-1:-1:-1;51099:15:0;;51117:61;;51137:9;;-1:-1:-1;;;;;51155:6:0;51172:4;51117:19;:61::i;:::-;51208:6;;51099:79;;-1:-1:-1;51195:29:0;;-1:-1:-1;;;;;51208:6:0;51099:79;51195:12;:29::i;:::-;51260:35;;51242:12;;51260:10;;51283:7;;51242:12;51260:35;51242:12;51260:35;51283:7;51260:10;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51241:54;;;51318:7;51310:40;;;;-1:-1:-1;;;51310:40:0;;7946:2:1;51310:40:0;;;7928:21:1;7985:2;7965:18;;;7958:30;-1:-1:-1;;;8004:18:1;;;7997:50;8064:18;;51310:40:0;7744:344:1;51310:40:0;51367:20;51390:30;45113:42;51409:10;51390:11;:30::i;:::-;51367:53;;51458:13;51443:12;:28;51435:93;;;;-1:-1:-1;;;51435:93:0;;;;;;;:::i;:::-;51015:525;;;;50983:928;;;51561:21;51585:42;51597:8;:17;;;51616:10;51585:11;:42::i;:::-;51561:66;;51642:69;51662:9;51680:8;:17;;;51700:10;51642:19;:69::i;:::-;;51726:20;51749:42;51761:8;:17;;;51780:10;51749:11;:42::i;:::-;51726:65;;51829:13;51814:12;:28;51806:93;;;;-1:-1:-1;;;51806:93:0;;;;;;;:::i;:::-;51546:365;;50983:928;51936:49;;947:25:1;;;51936:49:0;;935:2:1;920:18;51936:49:0;;;;;;;;50483:1510;50410:1583;:::o;21212:103::-;20450:13;:11;:13::i;:::-;21277:30:::1;21304:1;21277:18;:30::i;:::-;21212:103::o:0;53181:249::-;20450:13;:11;:13::i;:::-;-1:-1:-1;;;;;53270:27:0;::::1;53262:66;;;::::0;-1:-1:-1;;;53262:66:0;;8716:2:1;53262:66:0::1;::::0;::::1;8698:21:1::0;8755:2;8735:18;;;8728:30;8794:28;8774:18;;;8767:56;8840:18;;53262:66:0::1;8514:350:1::0;53262:66:0::1;53339:15;:31:::0;;-1:-1:-1;;;;;;53339:31:0::1;-1:-1:-1::0;;;;;53339:31:0;::::1;::::0;;::::1;::::0;;;53386:36:::1;::::0;739:51:1;;;53386:36:0::1;::::0;727:2:1;712:18;53386:36:0::1;;;;;;;;53181:249:::0;:::o;32412:147::-;32498:4;32522:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;32522:29:0;;;;;;;;;;;;;;;32412:147::o;52001:242::-;52084:11;;52116:29;;;;:18;:29;;;;;;;;:49;;;;;;;;:::i;:::-;;52108:80;;;;-1:-1:-1;;;52108:80:0;;9071:2:1;52108:80:0;;;9053:21:1;9110:2;9090:18;;;9083:30;-1:-1:-1;;;9129:18:1;;;9122:48;9187:18;;52108:80:0;8869:342:1;52108:80:0;-1:-1:-1;52206:29:0;;;;:18;:29;;;;;;;;;52001:242::o;53877:122::-;45982:14;;-1:-1:-1;;;;;45982:14:0;19191:10;45982:30;45974:74;;;;-1:-1:-1;;;45974:74:0;;9418:2:1;45974:74:0;;;9400:21:1;9457:2;9437:18;;;9430:30;9496:33;9476:18;;;9469:61;9547:18;;45974:74:0;9216:355:1;45974:74:0;53948:7:::1;53945:46;;;53957:8;:6;:8::i;:::-;53877:122:::0;:::o;53945:46::-:1;53981:10;:8;:10::i;48794:1608::-:0;39080:19;:17;:19::i;:::-;45033:22:::1;32008:16;32019:4;32008:10;:16::i;:::-;48994:17:::2;49049:8;:14;;;49065:5;49072:8;:17;;;49091:8;:17;;;49110:8;:17;;;49129:8;:19;;;49150:8;:18;;;49170:8;:19;;;49191:8;:21;;;49214:8;:18;;;49234:8;:18;;;49254:8;:19;;;49038:236;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49014:271;;;;;;48994:291;;49322:8;:18;;;49304:15;:36;49296:99;;;::::0;-1:-1:-1;;;49296:99:0;;9778:2:1;49296:99:0::2;::::0;::::2;9760:21:1::0;9817:2;9797:18;;;9790:30;9856:34;9836:18;;;9829:62;-1:-1:-1;;;9907:18:1;;;9900:48;9965:19;;49296:99:0::2;9576:414:1::0;49296:99:0::2;49447:19;49414:29;::::0;;;:18:::2;:29;::::0;;;;;::::2;;:52;::::0;::::2;;;;;;:::i;:::-;;49406:106;;;::::0;-1:-1:-1;;;49406:106:0;;10197:2:1;49406:106:0::2;::::0;::::2;10179:21:1::0;10236:2;10216:18;;;10209:30;10275:34;10255:18;;;10248:62;-1:-1:-1;;;10326:18:1;;;10319:39;10375:19;;49406:106:0::2;9995:405:1::0;49406:106:0::2;49523:29;::::0;;;:18:::2;:29;::::0;;;;;;;:51;;-1:-1:-1;;49523:51:0::2;49555:19;49523:51;::::0;;49600:17;::::2;::::0;-1:-1:-1;;;;;49591:26:0::2;45113:42;49591:26:::0;49587:390:::2;;49672:6;::::0;49634:61:::2;::::0;49654:9;;-1:-1:-1;;;;;49672:6:0::2;49689:4;49634:19;:61::i;:::-;-1:-1:-1::0;49729:6:0::2;::::0;49737:15:::2;::::0;49754:17:::2;::::0;::::2;::::0;49710:62:::2;::::0;-1:-1:-1;;;;;49729:6:0;;::::2;::::0;49737:15:::2;::::0;49710:18:::2;:62::i;:::-;49587:390;;;49805:72;49825:9;49843:8;:17;;;49871:4;49805:19;:72::i;:::-;-1:-1:-1::0;49911:17:0::2;::::0;::::2;::::0;49930:15:::2;::::0;49947:17:::2;::::0;::::2;::::0;49892:73:::2;::::0;49911:17;-1:-1:-1;;;;;49930:15:0::2;::::0;49892:18:::2;:73::i;:::-;49989:20;50012:37;50024:8;:17;;;50043:5;50012:11;:37::i;:::-;49989:60;;50062:27;50084:4;;50062:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;;;;;50062:21:0;::::2;::::0;:27;-1:-1:-1;;50062:21:0::2;:27::i;:::-;;50102:19;50164:12;50124:37;50136:8;:17;;;50155:5;50124:11;:37::i;:::-;:52;;;;:::i;:::-;50102:74;;50226:8;:21;;;50211:11;:36;;50189:114;;;::::0;-1:-1:-1;;;50189:114:0;;10872:2:1;50189:114:0::2;::::0;::::2;10854:21:1::0;10911:2;10891:18;;;10884:30;10950;10930:18;;;10923:58;10998:18;;50189:114:0::2;10670:352:1::0;50189:114:0::2;50321:73;::::0;;11201:25:1;;;11257:2;11242:18;;11235:34;;;50321:73:0::2;::::0;11174:18:1;50321:73:0::2;;;;;;;48983:1419;;;39110:1:::1;48794:1608:::0;;;;;:::o;47367:1419::-;39080:19;:17;:19::i;:::-;47473:17:::1;47528:8;:14;;;47544:10;47556:8;:17;;;47575:8;:17;;;47594:8;:17;;;47613:8;:19;;;47634:8;:18;;;47654:8;:19;;;47675:8;:21;;;47698:8;:18;;;47718:8;:18;;;47738:8;:19;;;47517:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;47517:241:0;;::::1;::::0;;;;;;47493:276;;47517:241:::1;47493:276:::0;;::::1;::::0;;-1:-1:-1;47823:16:0::1;47790:29:::0;;;;:18:::1;:29;::::0;;;;;::::1;;:49;::::0;::::1;;;;;;:::i;:::-;;47782:103;;;::::0;-1:-1:-1;;;47782:103:0;;11482:2:1;47782:103:0::1;::::0;::::1;11464:21:1::0;11521:2;11501:18;;;11494:30;11560:34;11540:18;;;11533:62;-1:-1:-1;;;11611:18:1;;;11604:39;11660:19;;47782:103:0::1;11280:405:1::0;47782:103:0::1;47896:29;::::0;;;:18:::1;:29;::::0;;;;:51;;-1:-1:-1;;47896:51:0::1;47928:19;47896:51;::::0;;47994:26:::1;47896:29:::0;43499:209;;-1:-1:-1;;;;;;43499:209:0;;;16002:39:1;-1:-1:-1;;43597:4:0;16078:2:1;16074:15;16070:53;16057:11;;;16050:74;16140:12;;;16133:28;;;43173:66:0;16177:12:1;;;16170:28;43361:7:0;;16214:12:1;;43499:209:0;;;-1:-1:-1;;43499:209:0;;;;;;;;;43463:268;;43499:209;43463:268;;;;;43306:478;-1:-1:-1;;43306:478:0;47994:26:::1;48047:17;::::0;::::1;::::0;47975:45;;-1:-1:-1;;;;;;48038:26:0::1;45113:42;48038:26:::0;48035:305:::1;;48096:6;::::0;48085:41:::1;::::0;-1:-1:-1;;;;;48096:6:0::1;48104:21;48085:10;:41::i;:::-;48183:17;::::0;::::1;::::0;48152:6:::1;::::0;48145:56:::1;::::0;-1:-1:-1;;;;;48152:6:0;;::::1;::::0;48173:8;;48145:27:::1;:56::i;:::-;48035:305;;;48241:83;48284:10;48296:8;48306;:17;;;48248:8;:17;;;-1:-1:-1::0;;;;;48241:42:0::1;;;:83;;;;;;:::i;:::-;47960:391;48368:410;48395:8;:14;;;48424:10;48449:8;:17;;;48481:8;:17;;;48513:8;:17;;;48545:8;:19;;;48579:8;:18;;;48612:8;:19;;;48646:8;:21;;;48682:8;:18;;;48715:8;:18;;;48748:8;:19;;;48368:410;;;;;;;;;;;;;;;;;:::i;34833:149::-:0;34026:7;34053:12;;;:6;:12;;;;;;;;:22;;32008:16;32019:4;32008:10;:16::i;:::-;34948:26:::1;34960:4;34966:7;34948:11;:26::i;21470:201::-:0;20450:13;:11;:13::i;:::-;-1:-1:-1;;;;;21559:22:0;::::1;21551:73;;;::::0;-1:-1:-1;;;21551:73:0;;11892:2:1;21551:73:0::1;::::0;::::1;11874:21:1::0;11931:2;11911:18;;;11904:30;11970:34;11950:18;;;11943:62;-1:-1:-1;;;12021:18:1;;;12014:36;12067:19;;21551:73:0::1;11690:402:1::0;21551:73:0::1;21635:28;21654:8;21635:18;:28::i;53438:241::-:0;20450:13;:11;:13::i;:::-;-1:-1:-1;;;;;53525:26:0;::::1;53517:64;;;::::0;-1:-1:-1;;;53517:64:0;;12299:2:1;53517:64:0::1;::::0;::::1;12281:21:1::0;12338:2;12318:18;;;12311:30;12377:27;12357:18;;;12350:55;12422:18;;53517:64:0::1;12097:349:1::0;53517:64:0::1;53592:14;:29:::0;;-1:-1:-1;;;;;;53592:29:0::1;-1:-1:-1::0;;;;;53592:29:0;::::1;::::0;;::::1;::::0;;;53637:34:::1;::::0;739:51:1;;;53637:34:0::1;::::0;727:2:1;712:18;53637:34:0::1;593:203:1::0;53687:182:0;20450:13;:11;:13::i;:::-;-1:-1:-1;;;;;53760:19:0;::::1;53752:49;;;::::0;-1:-1:-1;;;53752:49:0;;12653:2:1;53752:49:0::1;::::0;::::1;12635:21:1::0;12692:2;12672:18;;;12665:30;-1:-1:-1;;;12711:18:1;;;12704:47;12768:18;;53752:49:0::1;12451:341:1::0;53752:49:0::1;53812:6;:14:::0;;-1:-1:-1;;;;;;53812:14:0::1;-1:-1:-1::0;;;;;53812:14:0;::::1;::::0;;::::1;::::0;;;53842:19:::1;::::0;739:51:1;;;53842:19:0::1;::::0;727:2:1;712:18;53842:19:0::1;593:203:1::0;32863:105:0;32930:30;32941:4;19191:10;32930;:30::i;37134:238::-;37218:22;37226:4;37232:7;37218;:22::i;:::-;37213:152;;37257:12;;;;37289:4;37257:12;;;;;;;;-1:-1:-1;;;;;37257:29:0;;;;;;;;;;:36;;-1:-1:-1;;37257:36:0;;;;;;;37313:40;;19191:10;;37257:12;;37313:40;;37257:12;37313:40;37134:238;;:::o;37552:239::-;37636:22;37644:4;37650:7;37636;:22::i;:::-;37632:152;;;37707:5;37675:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;37675:29:0;;;;;;;;;;:37;;-1:-1:-1;;37675:37:0;;;37732:40;19191:10;;37675:12;;37732:40;;37707:5;37732:40;37552:239;;:::o;52251:269::-;52352:7;-1:-1:-1;;;;;52376:14:0;;45113:42;52376:14;52372:141;;-1:-1:-1;;;;;;52414:15:0;;;52407:22;;52372:141;52469:32;;-1:-1:-1;;;52469:32:0;;-1:-1:-1;;;;;757:32:1;;;52469::0;;;739:51:1;52469:23:0;;;;;712:18:1;;52469:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52462:39;;;;43849:804;43931:13;43957:12;43980:21;44004:4;;;;;;;;;;;;;;;;;43980:28;;44203:4;44192:8;44186:15;44179:4;44169:8;44165:19;44162:1;44154:54;44239:22;;-1:-1:-1;;;44239:22:0;;-1:-1:-1;;;;;757:32:1;;;44239:22:0;;;739:51:1;44146:62:0;;-1:-1:-1;44239:16:0;;;;;;712:18:1;;44239:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44390:142;;;-1:-1:-1;;;;;13178:32:1;;;44390:142:0;;;13160:51:1;13227:18;;;;13220:34;;;44390:142:0;;;;;;;;;;13133:18:1;;;;44390:142:0;;;;;;;;-1:-1:-1;;;;;44390:142:0;-1:-1:-1;;;44390:142:0;;;44355:226;;13220:34:1;;-1:-1:-1;;;44331:9:0;;;;44355:226;;44390:142;44559:6;;44355:226;;:::i;:::-;;;;-1:-1:-1;;44355:226:0;;;;;;;;;;44331:261;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44312:280;;;44613:7;44605:40;;;;-1:-1:-1;;;44605:40:0;;14447:2:1;44605:40:0;;;14429:21:1;14486:2;14466:18;;;14459:30;-1:-1:-1;;;14505:18:1;;;14498:50;14565:18;;44605:40:0;14245:344:1;44605:40:0;43946:707;;;43849:804;;;;;:::o;53042:108::-;53114:28;;-1:-1:-1;;;53114:28:0;;;;;947:25:1;;;-1:-1:-1;;;;;53114:20:0;;;;;920:18:1;;53114:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53042:108;;:::o;20729:132::-;20610:7;20637:6;-1:-1:-1;;;;;20637:6:0;19191:10;20793:23;20785:68;;;;-1:-1:-1;;;20785:68:0;;14978:2:1;20785:68:0;;;14960:21:1;;;14997:18;;;14990:30;15056:34;15036:18;;;15029:62;15108:18;;20785:68:0;14776:356:1;21831:191:0;21905:16;21924:6;;-1:-1:-1;;;;;21941:17:0;;;-1:-1:-1;;;;;;21941:17:0;;;;;;21974:40;;21924:6;;;;;;;21974:40;;21905:16;21974:40;21894:128;21831:191;:::o;40071:118::-;39080:19;:17;:19::i;:::-;40131:7:::1;:14:::0;;-1:-1:-1;;;;40131:14:0::1;-1:-1:-1::0;;;40131:14:0::1;::::0;;40161:20:::1;40168:12;19191:10:::0;;19111:98;40168:12:::1;40161:20;::::0;-1:-1:-1;;;;;757:32:1;;;739:51;;727:2;712:18;40161:20:0::1;;;;;;;40071:118::o:0;40330:120::-;39339:16;:14;:16::i;:::-;40399:5:::1;40389:15:::0;;-1:-1:-1;;;;40389:15:0::1;::::0;;40420:22:::1;19191:10:::0;40429:12:::1;19111:98:::0;39634:108;39522:4;39546:7;-1:-1:-1;;;39546:7:0;;;;39704:9;39696:38;;;;-1:-1:-1;;;39696:38:0;;15339:2:1;39696:38:0;;;15321:21:1;15378:2;15358:18;;;15351:30;-1:-1:-1;;;15397:18:1;;;15390:46;15453:18;;39696:38:0;15137:340:1;52528:386:0;52679:47;;-1:-1:-1;;;52679:47:0;;52711:4;52679:47;;;15694:34:1;-1:-1:-1;;;;;15764:15:1;;;15744:18;;;15737:43;52659:17:0;;52679:23;;;;;;15629:18:1;;52679:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52659:67;;52750:9;52741:6;:18;52737:170;;;52776:22;52801:19;52811:9;-1:-1:-1;;52801:19:0;:::i;:::-;52776:44;-1:-1:-1;52835:60:0;-1:-1:-1;;;;;52835:35:0;;52871:7;52776:44;52835:35;:60::i;:::-;52761:146;52737:170;52648:266;52528:386;;;:::o;8938:175::-;9013:12;9045:60;9058:6;9066:4;9045:60;;;;;;;;;;;;;;;;;:12;:60::i;:::-;9038:67;8938:175;-1:-1:-1;;;8938:175:0:o;52922:114::-;52998:4;-1:-1:-1;;;;;52992:19:0;;53019:6;52992:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52922:114;;:::o;14636:211::-;14780:58;;-1:-1:-1;;;;;13178:32:1;;14780:58:0;;;13160:51:1;13227:18;;;13220:34;;;14753:86:0;;14773:5;;-1:-1:-1;;;14803:23:0;13133:18:1;;14780:58:0;;;;-1:-1:-1;;14780:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14780:58:0;-1:-1:-1;;;;;;14780:58:0;;;;;;;;;;14753:19;:86::i;14855:248::-;15026:68;;-1:-1:-1;;;;;16495:15:1;;;15026:68:0;;;16477:34:1;16547:15;;16527:18;;;16520:43;16579:18;;;16572:34;;;14999:96:0;;15019:5;;-1:-1:-1;;;15049:27:0;16412:18:1;;15026:68:0;16237:375:1;33258:505:0;33347:22;33355:4;33361:7;33347;:22::i;:::-;33342:414;;33535:41;33563:7;-1:-1:-1;;;;;33535:41:0;33573:2;33535:19;:41::i;:::-;33649:38;33677:4;33684:2;33649:19;:38::i;:::-;33440:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;33440:270:0;;;;;;;;;;-1:-1:-1;;;33386:358:0;;;;;;;:::i;39819:108::-;39522:4;39546:7;-1:-1:-1;;;39546:7:0;;;;39878:41;;;;-1:-1:-1;;;39878:41:0;;18037:2:1;39878:41:0;;;18019:21:1;18076:2;18056:18;;;18049:30;-1:-1:-1;;;18095:18:1;;;18088:50;18155:18;;39878:41:0;17835:344:1;15996:317:0;16150:39;;-1:-1:-1;;;16150:39:0;;16174:4;16150:39;;;15694:34:1;-1:-1:-1;;;;;15764:15:1;;;15744:18;;;15737:43;16127:20:0;;16192:5;;16150:15;;;;;15629:18:1;;16150:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;16235:69;;-1:-1:-1;;;;;13178:32:1;;16235:69:0;;;13160:51:1;13227:18;;;13220:34;;;16127:70:0;;-1:-1:-1;16208:97:0;;16228:5;;-1:-1:-1;;;16258:22:0;13133:18:1;;16235:69:0;12986:274:1;9343:229:0;9480:12;9512:52;9534:6;9542:4;9548:1;9551:12;9512:21;:52::i;:::-;9505:59;9343:229;-1:-1:-1;;;;9343:229:0:o;17703:716::-;18127:23;18153:69;18181:4;18153:69;;;;;;;;;;;;;;;;;18161:5;-1:-1:-1;;;;;18153:27:0;;;:69;;;;;:::i;:::-;18237:17;;18127:95;;-1:-1:-1;18237:21:0;18233:179;;18334:10;18323:30;;;;;;;;;;;;:::i;:::-;18315:85;;;;-1:-1:-1;;;18315:85:0;;18766:2:1;18315:85:0;;;18748:21:1;18805:2;18785:18;;;18778:30;18844:34;18824:18;;;18817:62;-1:-1:-1;;;18895:18:1;;;18888:40;18945:19;;18315:85:0;18564:406:1;26813:451:0;26888:13;26914:19;26946:10;26950:6;26946:1;:10;:::i;:::-;:14;;26959:1;26946:14;:::i;:::-;26936:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26936:25:0;;26914:47;;-1:-1:-1;;;26972:6:0;26979:1;26972:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;26972:15:0;;;;;;;;;-1:-1:-1;;;26998:6:0;27005:1;26998:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;26998:15:0;;;;;;;;-1:-1:-1;27029:9:0;27041:10;27045:6;27041:1;:10;:::i;:::-;:14;;27054:1;27041:14;:::i;:::-;27029:26;;27024:135;27061:1;27057;:5;27024:135;;;-1:-1:-1;;;27109:5:0;27117:3;27109:11;27096:25;;;;;;;:::i;:::-;;;;27084:6;27091:1;27084:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;27084:37:0;;;;;;;;-1:-1:-1;27146:1:0;27136:11;;;;;27064:3;;;:::i;:::-;;;27024:135;;;-1:-1:-1;27177:10:0;;27169:55;;;;-1:-1:-1;;;27169:55:0;;19623:2:1;27169:55:0;;;19605:21:1;;;19642:18;;;19635:30;19701:34;19681:18;;;19674:62;19753:18;;27169:55:0;19421:356:1;10463:510:0;10633:12;10691:5;10666:21;:30;;10658:81;;;;-1:-1:-1;;;10658:81:0;;19984:2:1;10658:81:0;;;19966:21:1;20023:2;20003:18;;;19996:30;20062:34;20042:18;;;20035:62;-1:-1:-1;;;20113:18:1;;;20106:36;20159:19;;10658:81:0;19782:402:1;10658:81:0;-1:-1:-1;;;;;6893:19:0;;;10750:60;;;;-1:-1:-1;;;10750:60:0;;20391:2:1;10750:60:0;;;20373:21:1;20430:2;20410:18;;;20403:30;20469:31;20449:18;;;20442:59;20518:18;;10750:60:0;20189:353:1;10750:60:0;10824:12;10838:23;10865:6;-1:-1:-1;;;;;10865:11:0;10884:5;10891:4;10865:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10823:73;;;;10914:51;10931:7;10940:10;10952:12;10914:16;:51::i;:::-;10907:58;10463:510;-1:-1:-1;;;;;;;10463:510:0:o;13149:762::-;13299:12;13328:7;13324:580;;;-1:-1:-1;13359:10:0;13352:17;;13324:580;13473:17;;:21;13469:424;;13721:10;13715:17;13782:15;13769:10;13765:2;13761:19;13754:44;13469:424;13864:12;13857:20;;-1:-1:-1;;;13857:20:0;;;;;;;;:::i;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;983:180;1042:6;1095:2;1083:9;1074:7;1070:23;1066:32;1063:52;;;1111:1;1108;1101:12;1063:52;-1:-1:-1;1134:23:1;;983:180;-1:-1:-1;983:180:1:o;1168:173::-;1236:20;;-1:-1:-1;;;;;1285:31:1;;1275:42;;1265:70;;1331:1;1328;1321:12;1265:70;1168:173;;;:::o;1346:254::-;1414:6;1422;1475:2;1463:9;1454:7;1450:23;1446:32;1443:52;;;1491:1;1488;1481:12;1443:52;1527:9;1514:23;1504:33;;1556:38;1590:2;1579:9;1575:18;1556:38;:::i;:::-;1546:48;;1346:254;;;;;:::o;1605:127::-;1666:10;1661:3;1657:20;1654:1;1647:31;1697:4;1694:1;1687:15;1721:4;1718:1;1711:15;1737:347;1804:2;1798:9;1846:6;1834:19;;1883:18;1868:34;;1904:22;;;1865:62;1862:185;;;1969:10;1964:3;1960:20;1957:1;1950:31;2004:4;2001:1;1994:15;2032:4;2029:1;2022:15;1862:185;2063:2;2056:22;1737:347;:::o;2089:150::-;2164:20;;2213:1;2203:12;;2193:40;;2229:1;2226;2219:12;2244:118;2330:5;2323:13;2316:21;2309:5;2306:32;2296:60;;2352:1;2349;2342:12;2367:128;2432:20;;2461:28;2432:20;2461:28;:::i;2500:967::-;2555:5;2603:6;2591:9;2586:3;2582:19;2578:32;2575:52;;;2623:1;2620;2613:12;2575:52;2645:17;;:::i;:::-;2636:26;;2698:9;2685:23;2678:5;2671:38;2741;2775:2;2764:9;2760:18;2741:38;:::i;:::-;2736:2;2729:5;2725:14;2718:62;2812:38;2846:2;2835:9;2831:18;2812:38;:::i;:::-;2807:2;2800:5;2796:14;2789:62;2911:2;2900:9;2896:18;2883:32;2878:2;2871:5;2867:14;2860:56;2977:3;2966:9;2962:19;2949:33;2943:3;2936:5;2932:15;2925:58;3044:3;3033:9;3029:19;3016:33;3010:3;3003:5;2999:15;2992:58;3111:3;3100:9;3096:19;3083:33;3077:3;3070:5;3066:15;3059:58;3178:3;3167:9;3163:19;3150:33;3144:3;3137:5;3133:15;3126:58;3203:3;3266:2;3255:9;3251:18;3238:32;3233:2;3226:5;3222:14;3215:56;;3290:3;3325:45;3366:2;3355:9;3351:18;3325:45;:::i;:::-;3309:14;;;3302:69;3390:3;3425:35;3441:18;;;3425:35;:::i;:::-;3409:14;;;3402:59;3413:5;2500:967;-1:-1:-1;;2500:967:1:o;3472:230::-;3557:6;3610:3;3598:9;3589:7;3585:23;3581:33;3578:53;;;3627:1;3624;3617:12;3578:53;3650:46;3688:7;3677:9;3650:46;:::i;3707:186::-;3766:6;3819:2;3807:9;3798:7;3794:23;3790:32;3787:52;;;3835:1;3832;3825:12;3787:52;3858:29;3877:9;3858:29;:::i;3898:127::-;3959:10;3954:3;3950:20;3947:1;3940:31;3990:4;3987:1;3980:15;4014:4;4011:1;4004:15;4030:247;4178:2;4163:18;;4211:1;4200:13;;4190:47;;4217:18;;:::i;:::-;4246:25;;;4030:247;:::o;4282:241::-;4338:6;4391:2;4379:9;4370:7;4366:23;4362:32;4359:52;;;4407:1;4404;4397:12;4359:52;4446:9;4433:23;4465:28;4487:5;4465:28;:::i;4733:858::-;4856:6;4864;4872;4880;4888;4941:3;4929:9;4920:7;4916:23;4912:33;4909:53;;;4958:1;4955;4948:12;4909:53;4981:29;5000:9;4981:29;:::i;:::-;4971:39;;5029:38;5063:2;5052:9;5048:18;5029:38;:::i;:::-;5019:48;;5086:55;5133:7;5128:2;5117:9;5113:18;5086:55;:::i;:::-;5076:65;;5192:3;5181:9;5177:19;5164:33;5216:18;5257:2;5249:6;5246:14;5243:34;;;5273:1;5270;5263:12;5243:34;5311:6;5300:9;5296:22;5286:32;;5356:7;5349:4;5345:2;5341:13;5337:27;5327:55;;5378:1;5375;5368:12;5327:55;5418:2;5405:16;5444:2;5436:6;5433:14;5430:34;;;5460:1;5457;5450:12;5430:34;5505:7;5500:2;5491:6;5487:2;5483:15;5479:24;5476:37;5473:57;;;5526:1;5523;5516:12;5473:57;4733:858;;;;-1:-1:-1;4733:858:1;;-1:-1:-1;5557:2:1;5549:11;;5579:6;4733:858;-1:-1:-1;;;4733:858:1:o;6012:1108::-;6475:25;;;-1:-1:-1;;;;;6574:15:1;;;6569:2;6554:18;;6547:43;6626:15;;;6621:2;6606:18;;6599:43;6678:15;;6673:2;6658:18;;6651:43;6725:3;6710:19;;6703:35;;;6527:3;6754:19;;6747:35;;;6813:3;6798:19;;6791:35;;;6857:3;6842:19;;6835:35;;;6901:3;6886:19;;6879:35;;;6945:3;6930:19;;6923:35;;;6462:3;6447:19;;6989:1;6977:14;;6967:48;;6995:18;;:::i;:::-;7052:7;7046:3;7035:9;7031:19;7024:36;7069:45;7109:3;7098:9;7094:19;7085:7;375:13;368:21;356:34;;305:91;7069:45;6012:1108;;;;;;;;;;;;;;;:::o;8093:416::-;8295:2;8277:21;;;8334:2;8314:18;;;8307:30;8373:34;8368:2;8353:18;;8346:62;-1:-1:-1;;;8439:2:1;8424:18;;8417:50;8499:3;8484:19;;8093:416::o;10405:127::-;10466:10;10461:3;10457:20;10454:1;10447:31;10497:4;10494:1;10487:15;10521:4;10518:1;10511:15;10537:128;10604:9;;;10625:11;;;10622:37;;;10639:18;;:::i;12797:184::-;12867:6;12920:2;12908:9;12899:7;12895:23;12891:32;12888:52;;;12936:1;12933;12926:12;12888:52;-1:-1:-1;12959:16:1;;12797:184;-1:-1:-1;12797:184:1:o;13265:250::-;13350:1;13360:113;13374:6;13371:1;13368:13;13360:113;;;13450:11;;;13444:18;13431:11;;;13424:39;13396:2;13389:10;13360:113;;;-1:-1:-1;;13507:1:1;13489:16;;13482:27;13265:250::o;13520:428::-;13677:3;13715:6;13709:13;13731:66;13790:6;13785:3;13778:4;13770:6;13766:17;13731:66;:::i;:::-;13866:2;13862:15;;;;-1:-1:-1;;13858:53:1;13819:16;;;;13844:68;;;13939:2;13928:14;;13520:428;-1:-1:-1;;13520:428:1:o;13953:287::-;14082:3;14120:6;14114:13;14136:66;14195:6;14190:3;14183:4;14175:6;14171:17;14136:66;:::i;:::-;14218:16;;;;;13953:287;-1:-1:-1;;13953:287:1:o;16617:812::-;17028:25;17023:3;17016:38;16998:3;17083:6;17077:13;17099:75;17167:6;17162:2;17157:3;17153:12;17146:4;17138:6;17134:17;17099:75;:::i;:::-;-1:-1:-1;;;17233:2:1;17193:16;;;17225:11;;;17218:40;17283:13;;17305:76;17283:13;17367:2;17359:11;;17352:4;17340:17;;17305:76;:::i;:::-;17401:17;17420:2;17397:26;;16617:812;-1:-1:-1;;;;16617:812:1:o;17434:396::-;17583:2;17572:9;17565:21;17546:4;17615:6;17609:13;17658:6;17653:2;17642:9;17638:18;17631:34;17674:79;17746:6;17741:2;17730:9;17726:18;17721:2;17713:6;17709:15;17674:79;:::i;:::-;17814:2;17793:15;-1:-1:-1;;17789:29:1;17774:45;;;;17821:2;17770:54;;17434:396;-1:-1:-1;;17434:396:1:o;18184:125::-;18249:9;;;18270:10;;;18267:36;;;18283:18;;:::i;18314:245::-;18381:6;18434:2;18422:9;18413:7;18409:23;18405:32;18402:52;;;18450:1;18447;18440:12;18402:52;18482:9;18476:16;18501:28;18523:5;18501:28;:::i;18975:168::-;19015:7;19081:1;19077;19073:6;19069:14;19066:1;19063:21;19058:1;19051:9;19044:17;19040:45;19037:71;;;19088:18;;:::i;:::-;-1:-1:-1;19128:9:1;;18975:168::o;19148:127::-;19209:10;19204:3;19200:20;19197:1;19190:31;19240:4;19237:1;19230:15;19264:4;19261:1;19254:15;19280:136;19319:3;19347:5;19337:39;;19356:18;;:::i;:::-;-1:-1:-1;;;19392:18:1;;19280:136::o
Metadata Hash
1f1e1bfcf280987a89d1b8cb0f49396c4d688ea17261995e3b008a1830810ad4
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.