Contract Overview
My Name Tag:
Not Available
TokenTracker:
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xb7bba45cd2101cfe914921081156aca03e8f7ef3618312a188b409f91a4bdf52 | Deposit | 72053831 | 374 days 2 hrs ago | DOGESHIT: Deployer | IN | 0x371fdfa6b985c84ae139c42b9cff47167f6e8fc8 | 0 ETH | 0.000042 | |
0xe87697db3c4fb4be15750399df7621129615be522a8faf15fd3a16dc3371773f | 0x60a06040 | 72051829 | 374 days 2 hrs ago | DOGESHIT: Deployer | IN | Create: MirrorARBD | 0 ETH | 0.00104873 |
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xb7bba45cd2101cfe914921081156aca03e8f7ef3618312a188b409f91a4bdf52 | 72053831 | 374 days 2 hrs ago | 0x371fdfa6b985c84ae139c42b9cff47167f6e8fc8 | 0x5657b6cccf62774220d30a580f597cc26c1df9eb | 0 ETH | ||
0xb7bba45cd2101cfe914921081156aca03e8f7ef3618312a188b409f91a4bdf52 | 72053831 | 374 days 2 hrs ago | 0x371fdfa6b985c84ae139c42b9cff47167f6e8fc8 | 0x5657b6cccf62774220d30a580f597cc26c1df9eb | 0 ETH |
[ Download CSV Export ]
Contract Name:
MirrorARBD
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2023-03-21 */ // SPDX-License-Identifier: MIT 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; } } 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); } /** * @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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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 Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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()); } } /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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); } } /** * @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)); } } /** * @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"); } } } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } interface IArbdexToken is IERC20 { } contract MirrorARBD is Ownable, Pausable, ERC20 { using SafeERC20 for IArbdexToken; using SafeERC20 for IERC20; IArbdexToken public immutable token; // Arbdex token mapping(address => uint256) public userLastDepositedTime; // keeps track of deposited time address public admin; address public treasury; address public devAddr; uint256 public constant MAX_WITHDRAW_FEE = 1000; // 10% uint256 public constant MAX_WITHDRAW_FEE_PERIOD = 30 days; // 30 days uint256 public constant MaxArbdPerSecond = 10 ether; // Max arbd per second. uint256 public constant MIN_DEPOSIT_AMOUNT = 0.00001 ether; uint256 public withdrawFee = 100; // 1% uint256 public withdrawFeePeriod = 3 days; // 3 days uint256 public arbdPerSecond = 1 ether; // arbd tokens created 1 per second. uint256 public latestMintTime; bool public Mintable = true; event Deposit(address indexed sender, uint256 amount, uint256 shares, uint256 lastDepositedTime); event Withdraw(address indexed sender, uint256 amount, uint256 shares, uint256 withdrawFee); event SetMintable(bool mintable, uint256 time); /** * @notice Constructor * @param _token: Arbdex token contract * @param _admin: address of the admin * @param _treasury: address of the treasury (collects fees) * @param _devAddr: address of the dev * @param _startMintTime: start of mint time */ constructor( IArbdexToken _token, address _admin, address _treasury, address _devAddr, uint256 _startMintTime ) ERC20("Mirror ARBD", "xARBD") { require(_startMintTime > block.timestamp); token = _token; admin = _admin; treasury = _treasury; devAddr = _devAddr; latestMintTime = _startMintTime; } /** * @notice Checks if the msg.sender is the admin address */ modifier onlyAdmin() { require(msg.sender == admin, "admin: wut?"); _; } /** * @notice Deposits funds into the Arbdex X Token * @dev Only possible when contract not paused. * @param _amount: number of tokens to deposit (in Arbd) */ function deposit(uint256 _amount) external whenNotPaused { depositOperation(_amount, msg.sender); } /** * @notice Deposits funds into the Arbdex X Token to user * @dev Only possible when contract not paused. * @param _amount: number of tokens to deposit (in Arbd) * @param _user: deposit token to user */ function deposit(uint256 _amount, address _user) external whenNotPaused { depositOperation(_amount, _user); } /** * @notice Deposit operation * @param _amount: number of tokens to deposit (in Arbd) * @param _user: deposit token to user */ function depositOperation(uint256 _amount, address _user) internal { require(_amount >= MIN_DEPOSIT_AMOUNT, "Deposit amount must be greater than MIN_DEPOSIT_AMOUNT"); mint(); uint256 pool = available(); token.safeTransferFrom(msg.sender, address(this), _amount); uint256 currentShares = 0; if (totalSupply() != 0) { currentShares = (_amount * totalSupply()) / pool; } else { currentShares = _amount; } userLastDepositedTime[_user] = block.timestamp; _mint(_user, currentShares); emit Deposit(_user, _amount, currentShares, block.timestamp); } /** * @notice Withdraws shares from the pool * @param _shares: Number of shares to withdraw */ function withdraw(uint256 _shares) public whenNotPaused { require(_shares > 0, "Nothing to withdraw"); require(_shares <= balanceOf(msg.sender), "Withdraw amount exceeds balance"); mint(); uint256 currentAmount = (available() * _shares) / totalSupply(); _burn(msg.sender, _shares); uint256 currentWithdrawFee; if (block.timestamp < userLastDepositedTime[msg.sender] + withdrawFeePeriod) { currentWithdrawFee = (currentAmount * withdrawFee) / 10000; token.safeTransfer(treasury, currentWithdrawFee); currentAmount -= currentWithdrawFee; } token.safeTransfer(msg.sender, currentAmount); emit Withdraw(msg.sender, currentAmount, _shares, currentWithdrawFee); } /** * @notice Withdraws all shares for a user */ function withdrawAll() external { withdraw(balanceOf(msg.sender)); } /** * @notice Sets admin address * @dev Only callable by the contract owner. */ function setAdmin(address _admin) external onlyOwner { require(_admin != address(0), "Cannot be zero address"); admin = _admin; } /** * @notice Sets treasury address * @dev Only callable by the contract owner. */ function setTreasury(address _treasury) external onlyOwner { require(_treasury != address(0), "Cannot be zero address"); treasury = _treasury; } /** * @notice Sets dev address * @dev Only callable by the contract owner. */ function setDevAddress(address _devAddr) external onlyOwner { require(_devAddr != address(0), "Cannot be zero address"); devAddr = _devAddr; } /** * @notice Sets withdraw fee * @dev Only callable by the contract admin. */ function setArbdPerSecond(uint256 _arbdPerSecond) external onlyAdmin { require(_arbdPerSecond <= MaxArbdPerSecond, "arbdPerSecond cannot be more than MaxArbdPerSecond"); arbdPerSecond = _arbdPerSecond; } /** * @notice Sets withdraw fee * @dev Only callable by the contract admin. */ function setWithdrawFee(uint256 _withdrawFee) external onlyAdmin { require(_withdrawFee <= MAX_WITHDRAW_FEE, "withdrawFee cannot be more than MAX_WITHDRAW_FEE"); withdrawFee = _withdrawFee; } /** * @notice Sets withdraw fee period * @dev Only callable by the contract admin. */ function setWithdrawFeePeriod(uint256 _withdrawFeePeriod) external onlyAdmin { require( _withdrawFeePeriod <= MAX_WITHDRAW_FEE_PERIOD, "withdrawFeePeriod cannot be more than MAX_WITHDRAW_FEE_PERIOD" ); withdrawFeePeriod = _withdrawFeePeriod; } /** * @notice Sets mintable * @dev Only callable by the contract admin. */ function setMintable(bool _mintable) external onlyAdmin { Mintable = _mintable; emit SetMintable(_mintable, block.timestamp); } /** * @notice Withdraw unexpected tokens sent to this contract. */ function inCaseTokensGetStuck(address _token) external onlyAdmin { require(_token != address(token), "Token cannot be same as deposit token"); uint256 amount = IERC20(_token).balanceOf(address(this)); IERC20(_token).safeTransfer(msg.sender, amount); } /** * @notice Triggers stopped state * @dev Only possible when contract not paused. */ function pause() external onlyAdmin whenNotPaused { _pause(); } /** * @notice Returns to normal state * @dev Only possible when contract is paused. */ function unpause() external onlyAdmin whenPaused { _unpause(); } /** * @notice Return reward multiplier. */ function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { if (_from >= _to) { return 0; } return _to - _from; } /** * @notice Calculates the price per share */ function getPricePerFullShare() external view returns (uint256) { return totalSupply() == 0 ? 1e18 : (available() * (1e18)) / totalSupply(); } /** * @notice Arbdex Token Balance * @dev */ function available() public view returns (uint256) { return token.balanceOf(address(this)); } /** * @notice Mint tokens From Arbdex Token Contract */ function mint() internal { if (Mintable && block.timestamp > latestMintTime) { uint256 multiplier = getMultiplier(latestMintTime, block.timestamp); uint256 arbdReward = multiplier * arbdPerSecond; latestMintTime = block.timestamp; } } }
[{"inputs":[{"internalType":"contract IArbdexToken","name":"_token","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_devAddr","type":"address"},{"internalType":"uint256","name":"_startMintTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","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":false,"internalType":"bool","name":"mintable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMintable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawFee","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_WITHDRAW_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_WITHDRAW_FEE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_DEPOSIT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxArbdPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Mintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arbdPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"latestMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_arbdPerSecond","type":"uint256"}],"name":"setArbdPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddr","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mintable","type":"bool"}],"name":"setMintable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFee","type":"uint256"}],"name":"setWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawFeePeriod","type":"uint256"}],"name":"setWithdrawFeePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IArbdexToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userLastDepositedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040526064600a556203f480600b55670de0b6b3a7640000600c55600e805460ff191660011790553480156200003657600080fd5b50604051620024373803806200243783398101604081905262000059916200025f565b6040518060400160405280600b81526020016a135a5c9c9bdc881054909160aa1b815250604051806040016040528060058152602001641e1054909160da1b815250620000b5620000af6200014c60201b60201c565b62000150565b6000805460ff60a01b191690558151620000d7906004906020850190620001a0565b508051620000ed906005906020840190620001a0565b505050428111620000fd57600080fd5b6001600160a01b03948516608052600780549486166001600160a01b031995861617905560088054938616938516939093179092556009805491909416921691909117909155600d5562000310565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001ae90620002d3565b90600052602060002090601f016020900481019282620001d257600085556200021d565b82601f10620001ed57805160ff19168380011785556200021d565b828001600101855582156200021d579182015b828111156200021d57825182559160200191906001019062000200565b506200022b9291506200022f565b5090565b5b808211156200022b576000815560010162000230565b6001600160a01b03811681146200025c57600080fd5b50565b600080600080600060a086880312156200027857600080fd5b8551620002858162000246565b6020870151909550620002988162000246565b6040870151909450620002ab8162000246565b6060870151909350620002be8162000246565b80925050608086015190509295509295909350565b600181811c90821680620002e857607f821691505b602082108114156200030a57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516120e86200034f600039600081816105a30152818161091d0152818161096001528181610a8d01528181610f96015261183e01526120e86000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80638456cb591161015c578063d4b0de2f116100ce578063e941fa7811610087578063e941fa781461054d578063f0f4426014610556578063f183681214610569578063f2fde38b14610578578063f851a4401461058b578063fc0c546a1461059e57600080fd5b8063d4b0de2f146104f9578063d80aa0ae14610502578063da09c72c1461050b578063dd62ed3e1461051e578063def68a9c14610531578063df10b4e61461054457600080fd5b8063a457c2d711610120578063a457c2d714610487578063a9059cbb1461049a578063ae91e994146104ad578063b6ac642a146104c0578063b6b55f25146104d3578063d0d41fe1146104e657600080fd5b80638456cb591461044b578063853828b6146104535780638da5cb5b1461045b5780638dbb1e3a1461046c57806395d89b411461047f57600080fd5b806339509351116102005780636afbd04f116101b95780636afbd04f146103df5780636e553f65146103ec578063704b6c02146103ff57806370a0823114610412578063715018a61461043b57806377c7b8fc1461044357600080fd5b8063395093511461035f5780633f4ba83a1461037257806348a0d7541461037a57806349447855146103825780635c975abb146103a257806361d027b3146103b457600080fd5b806323b872dd1161025257806323b872dd14610304578063285d70d4146103175780632cfc5f011461032a5780632e1a7d4d14610334578063313ce56714610347578063353a0f2c1461035657600080fd5b806306fdde031461028f578063095ea7b3146102ad57806318160ddd146102d05780631ea30fef146102e25780631efac1b8146102ef575b600080fd5b6102976105c5565b6040516102a49190611d5f565b60405180910390f35b6102c06102bb366004611dae565b610657565b60405190151581526020016102a4565b6003545b6040519081526020016102a4565b6102d46509184e72a00081565b6103026102fd366004611dd8565b610671565b005b6102c0610312366004611df1565b610722565b610302610325366004611e3b565b610748565b6102d462278d0081565b610302610342366004611dd8565b6107be565b604051601281526020016102a4565b6102d4600c5481565b6102c061036d366004611dae565b6109cf565b6103026109f1565b6102d4610a75565b6102d4610390366004611e58565b60066020526000908152604090205481565b600054600160a01b900460ff166102c0565b6008546103c7906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b600e546102c09060ff1681565b6103026103fa366004611e73565b610b05565b61030261040d366004611e58565b610b3d565b6102d4610420366004611e58565b6001600160a01b031660009081526001602052604090205490565b610302610baf565b6102d4610be3565b610302610c27565b610302610c83565b6000546001600160a01b03166103c7565b6102d461047a366004611e9f565b610c9c565b610297610cb7565b6102c0610495366004611dae565b610cc6565b6102c06104a8366004611dae565b610d4c565b6103026104bb366004611dd8565b610d5a565b6103026104ce366004611dd8565b610dfc565b6103026104e1366004611dd8565b610e96565b6103026104f4366004611e58565b610ecd565b6102d46103e881565b6102d4600d5481565b6009546103c7906001600160a01b031681565b6102d461052c366004611ec1565b610f3f565b61030261053f366004611e58565b610f6a565b6102d4600b5481565b6102d4600a5481565b610302610564366004611e58565b6110a5565b6102d4678ac7230489e8000081565b610302610586366004611e58565b611117565b6007546103c7906001600160a01b031681565b6103c77f000000000000000000000000000000000000000000000000000000000000000081565b6060600480546105d490611eeb565b80601f016020809104026020016040519081016040528092919081815260200182805461060090611eeb565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050905090565b6000336106658185856111af565b60019150505b92915050565b6007546001600160a01b031633146106a45760405162461bcd60e51b815260040161069b90611f26565b60405180910390fd5b62278d0081111561071d5760405162461bcd60e51b815260206004820152603d60248201527f7769746864726177466565506572696f642063616e6e6f74206265206d6f726560448201527f207468616e204d41585f57495448445241575f4645455f504552494f44000000606482015260840161069b565b600b55565b6000336107308582856112d4565b61073b85858561134e565b60019150505b9392505050565b6007546001600160a01b031633146107725760405162461bcd60e51b815260040161069b90611f26565b600e805460ff1916821515908117909155604080519182524260208301527f97ea47c3166e1903a7f6c66d7c2375a1c9d2a75d3be5ebe60452e9afed57d090910160405180910390a150565b600054600160a01b900460ff16156107e85760405162461bcd60e51b815260040161069b90611f4b565b6000811161082e5760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015260640161069b565b3360009081526001602052604090205481111561088d5760405162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015260640161069b565b61089561151c565b60006108a060035490565b826108a9610a75565b6108b39190611f8b565b6108bd9190611faa565b90506108c9338361155d565b600b543360009081526006602052604081205490916108e791611fcc565b42101561095357612710600a54836108ff9190611f8b565b6109099190611faa565b600854909150610946906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116836116a8565b6109508183611fe4565b91505b6109876001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633846116a8565b604080518381526020810185905290810182905233907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b6000336106658185856109e28383610f3f565b6109ec9190611fcc565b6111af565b6007546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161069b90611f26565b600054600160a01b900460ff16610a6b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161069b565b610a7361170b565b565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611ffb565b905090565b600054600160a01b900460ff1615610b2f5760405162461bcd60e51b815260040161069b90611f4b565b610b3982826117a8565b5050565b6000546001600160a01b03163314610b675760405162461bcd60e51b815260040161069b90612014565b6001600160a01b038116610b8d5760405162461bcd60e51b815260040161069b90612049565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bd95760405162461bcd60e51b815260040161069b90612014565b610a736000611914565b6000610bee60035490565b15610c1a57600354610bfe610a75565b610c1090670de0b6b3a7640000611f8b565b610b009190611faa565b50670de0b6b3a764000090565b6007546001600160a01b03163314610c515760405162461bcd60e51b815260040161069b90611f26565b600054600160a01b900460ff1615610c7b5760405162461bcd60e51b815260040161069b90611f4b565b610a73611964565b33600090815260016020526040902054610a73906107be565b6000818310610cad5750600061066b565b6107418383611fe4565b6060600580546105d490611eeb565b60003381610cd48286610f3f565b905083811015610d345760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161069b565b610d4182868684036111af565b506001949350505050565b60003361066581858561134e565b6007546001600160a01b03163314610d845760405162461bcd60e51b815260040161069b90611f26565b678ac7230489e80000811115610df75760405162461bcd60e51b815260206004820152603260248201527f617262645065725365636f6e642063616e6e6f74206265206d6f7265207468616044820152711b8813585e105c989914195c94d958dbdb9960721b606482015260840161069b565b600c55565b6007546001600160a01b03163314610e265760405162461bcd60e51b815260040161069b90611f26565b6103e8811115610e915760405162461bcd60e51b815260206004820152603060248201527f77697468647261774665652063616e6e6f74206265206d6f7265207468616e2060448201526f4d41585f57495448445241575f46454560801b606482015260840161069b565b600a55565b600054600160a01b900460ff1615610ec05760405162461bcd60e51b815260040161069b90611f4b565b610eca81336117a8565b50565b6000546001600160a01b03163314610ef75760405162461bcd60e51b815260040161069b90612014565b6001600160a01b038116610f1d5760405162461bcd60e51b815260040161069b90612049565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6007546001600160a01b03163314610f945760405162461bcd60e51b815260040161069b90611f26565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614156110245760405162461bcd60e51b815260206004820152602560248201527f546f6b656e2063616e6e6f742062652073616d65206173206465706f736974206044820152643a37b5b2b760d91b606482015260840161069b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190611ffb565b9050610b396001600160a01b03831633836116a8565b6000546001600160a01b031633146110cf5760405162461bcd60e51b815260040161069b90612014565b6001600160a01b0381166110f55760405162461bcd60e51b815260040161069b90612049565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111415760405162461bcd60e51b815260040161069b90612014565b6001600160a01b0381166111a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161069b565b610eca81611914565b6001600160a01b0383166112115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161069b565b6001600160a01b0382166112725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161069b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006112e08484610f3f565b90506000198114611348578181101561133b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069b565b61134884848484036111af565b50505050565b6001600160a01b0383166113b25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161069b565b6001600160a01b0382166114145760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161069b565b6001600160a01b0383166000908152600160205260409020548181101561148c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161069b565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906114c3908490611fcc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150f91815260200190565b60405180910390a3611348565b600e5460ff16801561152f5750600d5442115b15610a73576000611542600d5442610c9c565b90506000600c54826115549190611f8b565b505042600d5550565b6001600160a01b0382166115bd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161069b565b6001600160a01b038216600090815260016020526040902054818110156116315760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161069b565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611660908490611fe4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016112c7565b505050565b6040516001600160a01b0383166024820152604481018290526116a390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119c9565b600054600160a01b900460ff1661175b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161069b565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6509184e72a00082101561181d5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b8813525397d1115413d4d25517d05353d5539560521b606482015260840161069b565b61182561151c565b600061182f610a75565b90506118666001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333086611a9b565b600061187160035490565b1561189b578161188060035490565b61188a9086611f8b565b6118949190611faa565b905061189e565b50825b6001600160a01b03831660009081526006602052604090204290556118c38382611ad3565b6040805185815260208101839052428183015290516001600160a01b038516917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e919081900360600190a250505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff161561198e5760405162461bcd60e51b815260040161069b90611f4b565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861178b3390565b6000611a1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bb29092919063ffffffff16565b8051909150156116a35780806020019051810190611a3c9190612079565b6116a35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069b565b6040516001600160a01b03808516602483015283166044820152606481018290526113489085906323b872dd60e01b906084016116d4565b6001600160a01b038216611b295760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069b565b8060036000828254611b3b9190611fcc565b90915550506001600160a01b03821660009081526001602052604081208054839290611b68908490611fcc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6060611bc18484600085611bc9565b949350505050565b606082471015611c2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069b565b6001600160a01b0385163b611c815760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069b565b600080866001600160a01b03168587604051611c9d9190612096565b60006040518083038185875af1925050503d8060008114611cda576040519150601f19603f3d011682016040523d82523d6000602084013e611cdf565b606091505b5091509150611cef828286611cfa565b979650505050505050565b60608315611d09575081610741565b825115611d195782518084602001fd5b8160405162461bcd60e51b815260040161069b9190611d5f565b60005b83811015611d4e578181015183820152602001611d36565b838111156113485750506000910152565b6020815260008251806020840152611d7e816040850160208701611d33565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611da957600080fd5b919050565b60008060408385031215611dc157600080fd5b611dca83611d92565b946020939093013593505050565b600060208284031215611dea57600080fd5b5035919050565b600080600060608486031215611e0657600080fd5b611e0f84611d92565b9250611e1d60208501611d92565b9150604084013590509250925092565b8015158114610eca57600080fd5b600060208284031215611e4d57600080fd5b813561074181611e2d565b600060208284031215611e6a57600080fd5b61074182611d92565b60008060408385031215611e8657600080fd5b82359150611e9660208401611d92565b90509250929050565b60008060408385031215611eb257600080fd5b50508035926020909101359150565b60008060408385031215611ed457600080fd5b611edd83611d92565b9150611e9660208401611d92565b600181811c90821680611eff57607f821691505b60208210811415611f2057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a61646d696e3a207775743f60a81b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611fa557611fa5611f75565b500290565b600082611fc757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611fdf57611fdf611f75565b500190565b600082821015611ff657611ff6611f75565b500390565b60006020828403121561200d57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526016908201527543616e6e6f74206265207a65726f206164647265737360501b604082015260600190565b60006020828403121561208b57600080fd5b815161074181611e2d565b600082516120a8818460208701611d33565b919091019291505056fea264697066735822122000ab2b234672dbdce1bcdc100d82f1612413308c6d2cefc8bbad4af49b1b454964736f6c634300080a00330000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b500000000000000000000000000000000000000000000000000000000641963d9
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80638456cb591161015c578063d4b0de2f116100ce578063e941fa7811610087578063e941fa781461054d578063f0f4426014610556578063f183681214610569578063f2fde38b14610578578063f851a4401461058b578063fc0c546a1461059e57600080fd5b8063d4b0de2f146104f9578063d80aa0ae14610502578063da09c72c1461050b578063dd62ed3e1461051e578063def68a9c14610531578063df10b4e61461054457600080fd5b8063a457c2d711610120578063a457c2d714610487578063a9059cbb1461049a578063ae91e994146104ad578063b6ac642a146104c0578063b6b55f25146104d3578063d0d41fe1146104e657600080fd5b80638456cb591461044b578063853828b6146104535780638da5cb5b1461045b5780638dbb1e3a1461046c57806395d89b411461047f57600080fd5b806339509351116102005780636afbd04f116101b95780636afbd04f146103df5780636e553f65146103ec578063704b6c02146103ff57806370a0823114610412578063715018a61461043b57806377c7b8fc1461044357600080fd5b8063395093511461035f5780633f4ba83a1461037257806348a0d7541461037a57806349447855146103825780635c975abb146103a257806361d027b3146103b457600080fd5b806323b872dd1161025257806323b872dd14610304578063285d70d4146103175780632cfc5f011461032a5780632e1a7d4d14610334578063313ce56714610347578063353a0f2c1461035657600080fd5b806306fdde031461028f578063095ea7b3146102ad57806318160ddd146102d05780631ea30fef146102e25780631efac1b8146102ef575b600080fd5b6102976105c5565b6040516102a49190611d5f565b60405180910390f35b6102c06102bb366004611dae565b610657565b60405190151581526020016102a4565b6003545b6040519081526020016102a4565b6102d46509184e72a00081565b6103026102fd366004611dd8565b610671565b005b6102c0610312366004611df1565b610722565b610302610325366004611e3b565b610748565b6102d462278d0081565b610302610342366004611dd8565b6107be565b604051601281526020016102a4565b6102d4600c5481565b6102c061036d366004611dae565b6109cf565b6103026109f1565b6102d4610a75565b6102d4610390366004611e58565b60066020526000908152604090205481565b600054600160a01b900460ff166102c0565b6008546103c7906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b600e546102c09060ff1681565b6103026103fa366004611e73565b610b05565b61030261040d366004611e58565b610b3d565b6102d4610420366004611e58565b6001600160a01b031660009081526001602052604090205490565b610302610baf565b6102d4610be3565b610302610c27565b610302610c83565b6000546001600160a01b03166103c7565b6102d461047a366004611e9f565b610c9c565b610297610cb7565b6102c0610495366004611dae565b610cc6565b6102c06104a8366004611dae565b610d4c565b6103026104bb366004611dd8565b610d5a565b6103026104ce366004611dd8565b610dfc565b6103026104e1366004611dd8565b610e96565b6103026104f4366004611e58565b610ecd565b6102d46103e881565b6102d4600d5481565b6009546103c7906001600160a01b031681565b6102d461052c366004611ec1565b610f3f565b61030261053f366004611e58565b610f6a565b6102d4600b5481565b6102d4600a5481565b610302610564366004611e58565b6110a5565b6102d4678ac7230489e8000081565b610302610586366004611e58565b611117565b6007546103c7906001600160a01b031681565b6103c77f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb81565b6060600480546105d490611eeb565b80601f016020809104026020016040519081016040528092919081815260200182805461060090611eeb565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050905090565b6000336106658185856111af565b60019150505b92915050565b6007546001600160a01b031633146106a45760405162461bcd60e51b815260040161069b90611f26565b60405180910390fd5b62278d0081111561071d5760405162461bcd60e51b815260206004820152603d60248201527f7769746864726177466565506572696f642063616e6e6f74206265206d6f726560448201527f207468616e204d41585f57495448445241575f4645455f504552494f44000000606482015260840161069b565b600b55565b6000336107308582856112d4565b61073b85858561134e565b60019150505b9392505050565b6007546001600160a01b031633146107725760405162461bcd60e51b815260040161069b90611f26565b600e805460ff1916821515908117909155604080519182524260208301527f97ea47c3166e1903a7f6c66d7c2375a1c9d2a75d3be5ebe60452e9afed57d090910160405180910390a150565b600054600160a01b900460ff16156107e85760405162461bcd60e51b815260040161069b90611f4b565b6000811161082e5760405162461bcd60e51b81526020600482015260136024820152724e6f7468696e6720746f20776974686472617760681b604482015260640161069b565b3360009081526001602052604090205481111561088d5760405162461bcd60e51b815260206004820152601f60248201527f576974686472617720616d6f756e7420657863656564732062616c616e636500604482015260640161069b565b61089561151c565b60006108a060035490565b826108a9610a75565b6108b39190611f8b565b6108bd9190611faa565b90506108c9338361155d565b600b543360009081526006602052604081205490916108e791611fcc565b42101561095357612710600a54836108ff9190611f8b565b6109099190611faa565b600854909150610946906001600160a01b037f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb81169116836116a8565b6109508183611fe4565b91505b6109876001600160a01b037f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb1633846116a8565b604080518381526020810185905290810182905233907f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca949060600160405180910390a2505050565b6000336106658185856109e28383610f3f565b6109ec9190611fcc565b6111af565b6007546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161069b90611f26565b600054600160a01b900460ff16610a6b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161069b565b610a7361170b565b565b6040516370a0823160e01b81523060048201526000907f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb6001600160a01b0316906370a0823190602401602060405180830381865afa158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190611ffb565b905090565b600054600160a01b900460ff1615610b2f5760405162461bcd60e51b815260040161069b90611f4b565b610b3982826117a8565b5050565b6000546001600160a01b03163314610b675760405162461bcd60e51b815260040161069b90612014565b6001600160a01b038116610b8d5760405162461bcd60e51b815260040161069b90612049565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bd95760405162461bcd60e51b815260040161069b90612014565b610a736000611914565b6000610bee60035490565b15610c1a57600354610bfe610a75565b610c1090670de0b6b3a7640000611f8b565b610b009190611faa565b50670de0b6b3a764000090565b6007546001600160a01b03163314610c515760405162461bcd60e51b815260040161069b90611f26565b600054600160a01b900460ff1615610c7b5760405162461bcd60e51b815260040161069b90611f4b565b610a73611964565b33600090815260016020526040902054610a73906107be565b6000818310610cad5750600061066b565b6107418383611fe4565b6060600580546105d490611eeb565b60003381610cd48286610f3f565b905083811015610d345760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161069b565b610d4182868684036111af565b506001949350505050565b60003361066581858561134e565b6007546001600160a01b03163314610d845760405162461bcd60e51b815260040161069b90611f26565b678ac7230489e80000811115610df75760405162461bcd60e51b815260206004820152603260248201527f617262645065725365636f6e642063616e6e6f74206265206d6f7265207468616044820152711b8813585e105c989914195c94d958dbdb9960721b606482015260840161069b565b600c55565b6007546001600160a01b03163314610e265760405162461bcd60e51b815260040161069b90611f26565b6103e8811115610e915760405162461bcd60e51b815260206004820152603060248201527f77697468647261774665652063616e6e6f74206265206d6f7265207468616e2060448201526f4d41585f57495448445241575f46454560801b606482015260840161069b565b600a55565b600054600160a01b900460ff1615610ec05760405162461bcd60e51b815260040161069b90611f4b565b610eca81336117a8565b50565b6000546001600160a01b03163314610ef75760405162461bcd60e51b815260040161069b90612014565b6001600160a01b038116610f1d5760405162461bcd60e51b815260040161069b90612049565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6007546001600160a01b03163314610f945760405162461bcd60e51b815260040161069b90611f26565b7f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb6001600160a01b0316816001600160a01b031614156110245760405162461bcd60e51b815260206004820152602560248201527f546f6b656e2063616e6e6f742062652073616d65206173206465706f736974206044820152643a37b5b2b760d91b606482015260840161069b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108f9190611ffb565b9050610b396001600160a01b03831633836116a8565b6000546001600160a01b031633146110cf5760405162461bcd60e51b815260040161069b90612014565b6001600160a01b0381166110f55760405162461bcd60e51b815260040161069b90612049565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111415760405162461bcd60e51b815260040161069b90612014565b6001600160a01b0381166111a65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161069b565b610eca81611914565b6001600160a01b0383166112115760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161069b565b6001600160a01b0382166112725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161069b565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006112e08484610f3f565b90506000198114611348578181101561133b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161069b565b61134884848484036111af565b50505050565b6001600160a01b0383166113b25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161069b565b6001600160a01b0382166114145760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161069b565b6001600160a01b0383166000908152600160205260409020548181101561148c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161069b565b6001600160a01b038085166000908152600160205260408082208585039055918516815290812080548492906114c3908490611fcc565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161150f91815260200190565b60405180910390a3611348565b600e5460ff16801561152f5750600d5442115b15610a73576000611542600d5442610c9c565b90506000600c54826115549190611f8b565b505042600d5550565b6001600160a01b0382166115bd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161069b565b6001600160a01b038216600090815260016020526040902054818110156116315760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161069b565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611660908490611fe4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016112c7565b505050565b6040516001600160a01b0383166024820152604481018290526116a390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119c9565b600054600160a01b900460ff1661175b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161069b565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6509184e72a00082101561181d5760405162461bcd60e51b815260206004820152603660248201527f4465706f73697420616d6f756e74206d757374206265206772656174657220746044820152751a185b8813525397d1115413d4d25517d05353d5539560521b606482015260840161069b565b61182561151c565b600061182f610a75565b90506118666001600160a01b037f0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb16333086611a9b565b600061187160035490565b1561189b578161188060035490565b61188a9086611f8b565b6118949190611faa565b905061189e565b50825b6001600160a01b03831660009081526006602052604090204290556118c38382611ad3565b6040805185815260208101839052428183015290516001600160a01b038516917f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e919081900360600190a250505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff161561198e5760405162461bcd60e51b815260040161069b90611f4b565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861178b3390565b6000611a1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611bb29092919063ffffffff16565b8051909150156116a35780806020019051810190611a3c9190612079565b6116a35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161069b565b6040516001600160a01b03808516602483015283166044820152606481018290526113489085906323b872dd60e01b906084016116d4565b6001600160a01b038216611b295760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161069b565b8060036000828254611b3b9190611fcc565b90915550506001600160a01b03821660009081526001602052604081208054839290611b68908490611fcc565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6060611bc18484600085611bc9565b949350505050565b606082471015611c2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161069b565b6001600160a01b0385163b611c815760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161069b565b600080866001600160a01b03168587604051611c9d9190612096565b60006040518083038185875af1925050503d8060008114611cda576040519150601f19603f3d011682016040523d82523d6000602084013e611cdf565b606091505b5091509150611cef828286611cfa565b979650505050505050565b60608315611d09575081610741565b825115611d195782518084602001fd5b8160405162461bcd60e51b815260040161069b9190611d5f565b60005b83811015611d4e578181015183820152602001611d36565b838111156113485750506000910152565b6020815260008251806020840152611d7e816040850160208701611d33565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114611da957600080fd5b919050565b60008060408385031215611dc157600080fd5b611dca83611d92565b946020939093013593505050565b600060208284031215611dea57600080fd5b5035919050565b600080600060608486031215611e0657600080fd5b611e0f84611d92565b9250611e1d60208501611d92565b9150604084013590509250925092565b8015158114610eca57600080fd5b600060208284031215611e4d57600080fd5b813561074181611e2d565b600060208284031215611e6a57600080fd5b61074182611d92565b60008060408385031215611e8657600080fd5b82359150611e9660208401611d92565b90509250929050565b60008060408385031215611eb257600080fd5b50508035926020909101359150565b60008060408385031215611ed457600080fd5b611edd83611d92565b9150611e9660208401611d92565b600181811c90821680611eff57607f821691505b60208210811415611f2057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a61646d696e3a207775743f60a81b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611fa557611fa5611f75565b500290565b600082611fc757634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611fdf57611fdf611f75565b500190565b600082821015611ff657611ff6611f75565b500390565b60006020828403121561200d57600080fd5b5051919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526016908201527543616e6e6f74206265207a65726f206164647265737360501b604082015260600190565b60006020828403121561208b57600080fd5b815161074181611e2d565b600082516120a8818460208701611d33565b919091019291505056fea264697066735822122000ab2b234672dbdce1bcdc100d82f1612413308c6d2cefc8bbad4af49b1b454964736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b500000000000000000000000000000000000000000000000000000000641963d9
-----Decoded View---------------
Arg [0] : _token (address): 0x5657B6CccF62774220D30a580f597cc26C1DF9eb
Arg [1] : _admin (address): 0xA2b7e1aDb1Bc16ba6F70b9552ceC3c69A655A5b5
Arg [2] : _treasury (address): 0xA2b7e1aDb1Bc16ba6F70b9552ceC3c69A655A5b5
Arg [3] : _devAddr (address): 0xA2b7e1aDb1Bc16ba6F70b9552ceC3c69A655A5b5
Arg [4] : _startMintTime (uint256): 1679385561
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000005657b6cccf62774220d30a580f597cc26c1df9eb
Arg [1] : 000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5
Arg [2] : 000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5
Arg [3] : 000000000000000000000000a2b7e1adb1bc16ba6f70b9552cec3c69a655a5b5
Arg [4] : 00000000000000000000000000000000000000000000000000000000641963d9
Deployed ByteCode Sourcemap
33669:8633:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22823:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25174:201;;;;;;:::i;:::-;;:::i;:::-;;;1267:14:1;;1260:22;1242:41;;1230:2;1215:18;25174:201:0;1102:187:1;23943:108:0;24031:12;;23943:108;;;1440:25:1;;;1428:2;1413:18;23943:108:0;1294:177:1;34262:58:0;;34307:13;34262:58;;39924:301;;;;;;:::i;:::-;;:::i;:::-;;25955:295;;;;;;:::i;:::-;;:::i;40331:150::-;;;;;;:::i;:::-;;:::i;34105:57::-;;34155:7;34105:57;;37374:799;;;;;;:::i;:::-;;:::i;23785:93::-;;;23868:2;2505:36:1;;2493:2;2478:18;23785:93:0;2363:184:1;34432:38:0;;;;;;26659:238;;;;;;:::i;:::-;;:::i;41171:78::-;;;:::i;41803:107::-;;;:::i;33858:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;12896:86;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;12896:86;;33983:23;;;;;-1:-1:-1;;;;;33983:23:0;;;;;;-1:-1:-1;;;;;2907:32:1;;;2889:51;;2877:2;2862:18;33983:23:0;2743:203:1;34550:27:0;;;;;;;;;36281:123;;;;;;:::i;:::-;;:::i;38440:152::-;;;;;;:::i;:::-;;:::i;24114:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24215:18:0;24188:7;24215:18;;;:9;:18;;;;;;;24114:127;15654:103;;;:::i;41571:156::-;;;:::i;40976:77::-;;;:::i;38247:82::-;;;:::i;15003:87::-;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;15003:87;;41317:181;;;;;;:::i;:::-;;:::i;23042:104::-;;;:::i;27400:436::-;;;;;;:::i;:::-;;:::i;24447:193::-;;;;;;:::i;:::-;;:::i;39257:226::-;;;;;;:::i;:::-;;:::i;39593:214::-;;;;;;:::i;:::-;;:::i;35920:113::-;;;;;;:::i;:::-;;:::i;38982:165::-;;;;;;:::i;:::-;;:::i;34044:47::-;;34087:4;34044:47;;34514:29;;;;;;34013:22;;;;;-1:-1:-1;;;;;34013:22:0;;;24703:151;;;;;;:::i;:::-;;:::i;40573:285::-;;;;;;:::i;:::-;;:::i;34374:41::-;;;;;;34329:32;;;;;;38706:167;;;;;;:::i;:::-;;:::i;34180:51::-;;34223:8;34180:51;;15912:201;;;;;;:::i;:::-;;:::i;33956:20::-;;;;;-1:-1:-1;;;;;33956:20:0;;;33798:35;;;;;22823:100;22877:13;22910:5;22903:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22823:100;:::o;25174:201::-;25257:4;682:10;25313:32;682:10;25329:7;25338:6;25313:8;:32::i;:::-;25363:4;25356:11;;;25174:201;;;;;:::o;39924:301::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;;;;;;;;;34155:7:::1;40034:18;:45;;40012:156;;;::::0;-1:-1:-1;;;40012:156:0;;4884:2:1;40012:156:0::1;::::0;::::1;4866:21:1::0;4923:2;4903:18;;;4896:30;4962:34;4942:18;;;4935:62;5033:31;5013:18;;;5006:59;5082:19;;40012:156:0::1;4682:425:1::0;40012:156:0::1;40179:17;:38:::0;39924:301::o;25955:295::-;26086:4;682:10;26144:38;26160:4;682:10;26175:6;26144:15;:38::i;:::-;26193:27;26203:4;26209:2;26213:6;26193:9;:27::i;:::-;26238:4;26231:11;;;25955:295;;;;;;:::o;40331:150::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;40398:8:::1;:20:::0;;-1:-1:-1;;40398:20:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40434:39:::1;::::0;;5280:41:1;;;40457:15:0::1;5352:2:1::0;5337:18;;5330:34;40434:39:0::1;::::0;5253:18:1;40434:39:0::1;;;;;;;40331:150:::0;:::o;37374:799::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13221:9;13213:38;;;;-1:-1:-1;;;13213:38:0;;;;;;;:::i;:::-;37459:1:::1;37449:7;:11;37441:43;;;::::0;-1:-1:-1;;;37441:43:0;;5922:2:1;37441:43:0::1;::::0;::::1;5904:21:1::0;5961:2;5941:18;;;5934:30;-1:-1:-1;;;5980:18:1;;;5973:49;6039:18;;37441:43:0::1;5720:343:1::0;37441:43:0::1;37524:10;24188:7:::0;24215:18;;;:9;:18;;;;;;37503:7:::1;:32;;37495:76;;;::::0;-1:-1:-1;;;37495:76:0;;6270:2:1;37495:76:0::1;::::0;::::1;6252:21:1::0;6309:2;6289:18;;;6282:30;6348:33;6328:18;;;6321:61;6399:18;;37495:76:0::1;6068:355:1::0;37495:76:0::1;37582:6;:4;:6::i;:::-;37601:21;37651:13;24031:12:::0;;;23943:108;37651:13:::1;37640:7;37626:11;:9;:11::i;:::-;:21;;;;:::i;:::-;37625:39;;;;:::i;:::-;37601:63;;37675:26;37681:10;37693:7;37675:5;:26::i;:::-;37809:17;::::0;37795:10:::1;37714:26;37773:33:::0;;;:21:::1;:33;::::0;;;;;37714:26;;37773:53:::1;::::0;::::1;:::i;:::-;37755:15;:71;37751:275;;;37896:5;37881:11;;37865:13;:27;;;;:::i;:::-;37864:37;;;;:::i;:::-;37935:8;::::0;37843:58;;-1:-1:-1;37916:48:0::1;::::0;-1:-1:-1;;;;;37916:5:0::1;:18:::0;::::1;::::0;37935:8:::1;37843:58:::0;37916:18:::1;:48::i;:::-;37979:35;37996:18:::0;37979:35;::::1;:::i;:::-;;;37751:275;38038:45;-1:-1:-1::0;;;;;38038:5:0::1;:18;38057:10;38069:13:::0;38038:18:::1;:45::i;:::-;38101:64;::::0;;7420:25:1;;;7476:2;7461:18;;7454:34;;;7504:18;;;7497:34;;;38110:10:0::1;::::0;38101:64:::1;::::0;7408:2:1;7393:18;38101:64:0::1;;;;;;;37430:743;;37374:799:::0;:::o;26659:238::-;26747:4;682:10;26803:64;682:10;26819:7;26856:10;26828:25;682:10;26819:7;26828:9;:25::i;:::-;:38;;;;:::i;:::-;26803:8;:64::i;41171:78::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13491:41:::1;;;::::0;-1:-1:-1;;;13491:41:0;;7744:2:1;13491:41:0::1;::::0;::::1;7726:21:1::0;7783:2;7763:18;;;7756:30;-1:-1:-1;;;7802:18:1;;;7795:50;7862:18;;13491:41:0::1;7542:344:1::0;13491:41:0::1;41231:10:::2;:8;:10::i;:::-;41171:78::o:0;41803:107::-;41872:30;;-1:-1:-1;;;41872:30:0;;41896:4;41872:30;;;2889:51:1;41845:7:0;;41872:5;-1:-1:-1;;;;;41872:15:0;;;;2862:18:1;;41872:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41865:37;;41803:107;:::o;36281:123::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13221:9;13213:38;;;;-1:-1:-1;;;13213:38:0;;;;;;;:::i;:::-;36364:32:::1;36381:7;36390:5;36364:16;:32::i;:::-;36281:123:::0;;:::o;38440:152::-;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;682:10;15223:23;15215:68;;;;-1:-1:-1;;;15215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38512:20:0;::::1;38504:55;;;;-1:-1:-1::0;;;38504:55:0::1;;;;;;;:::i;:::-;38570:5;:14:::0;;-1:-1:-1;;;;;;38570:14:0::1;-1:-1:-1::0;;;;;38570:14:0;;;::::1;::::0;;;::::1;::::0;;38440:152::o;15654:103::-;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;682:10;15223:23;15215:68;;;;-1:-1:-1;;;15215:68:0;;;;;;;:::i;:::-;15719:30:::1;15746:1;15719:18;:30::i;41571:156::-:0;41626:7;41653:13;24031:12;;;23943:108;41653:13;:18;:66;;24031:12;;41682:11;:9;:11::i;:::-;:20;;41697:4;41682:20;:::i;:::-;41681:38;;;;:::i;41653:66::-;-1:-1:-1;41674:4:0;;41571:156::o;40976:77::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13221:9:::1;13213:38;;;;-1:-1:-1::0;;;13213:38:0::1;;;;;;;:::i;:::-;41037:8:::2;:6;:8::i;38247:82::-:0;38309:10;24188:7;24215:18;;;:9;:18;;;;;;38290:31;;37374:799;:::i;41317:181::-;41389:7;41422:3;41413:5;:12;41409:53;;-1:-1:-1;41449:1:0;41442:8;;41409:53;41479:11;41485:5;41479:3;:11;:::i;23042:104::-;23098:13;23131:7;23124:14;;;;;:::i;27400:436::-;27493:4;682:10;27493:4;27576:25;682:10;27593:7;27576:9;:25::i;:::-;27549:52;;27640:15;27620:16;:35;;27612:85;;;;-1:-1:-1;;;27612:85:0;;8994:2:1;27612:85:0;;;8976:21:1;9033:2;9013:18;;;9006:30;9072:34;9052:18;;;9045:62;-1:-1:-1;;;9123:18:1;;;9116:35;9168:19;;27612:85:0;8792:401:1;27612:85:0;27733:60;27742:5;27749:7;27777:15;27758:16;:34;27733:8;:60::i;:::-;-1:-1:-1;27824:4:0;;27400:436;-1:-1:-1;;;;27400:436:0:o;24447:193::-;24526:4;682:10;24582:28;682:10;24599:2;24603:6;24582:9;:28::i;39257:226::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;34223:8:::1;39345:14;:34;;39337:97;;;::::0;-1:-1:-1;;;39337:97:0;;9400:2:1;39337:97:0::1;::::0;::::1;9382:21:1::0;9439:2;9419:18;;;9412:30;9478:34;9458:18;;;9451:62;-1:-1:-1;;;9529:18:1;;;9522:48;9587:19;;39337:97:0::1;9198:414:1::0;39337:97:0::1;39445:13;:30:::0;39257:226::o;39593:214::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;34087:4:::1;39677:12;:32;;39669:93;;;::::0;-1:-1:-1;;;39669:93:0;;9819:2:1;39669:93:0::1;::::0;::::1;9801:21:1::0;9858:2;9838:18;;;9831:30;9897:34;9877:18;;;9870:62;-1:-1:-1;;;9948:18:1;;;9941:46;10004:19;;39669:93:0::1;9617:412:1::0;39669:93:0::1;39773:11;:26:::0;39593:214::o;35920:113::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13221:9;13213:38;;;;-1:-1:-1;;;13213:38:0;;;;;;;:::i;:::-;35988:37:::1;36005:7;36014:10;35988:16;:37::i;:::-;35920:113:::0;:::o;38982:165::-;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;682:10;15223:23;15215:68;;;;-1:-1:-1;;;15215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39061:22:0;::::1;39053:57;;;;-1:-1:-1::0;;;39053:57:0::1;;;;;;;:::i;:::-;39121:7;:18:::0;;-1:-1:-1;;;;;;39121:18:0::1;-1:-1:-1::0;;;;;39121:18:0;;;::::1;::::0;;;::::1;::::0;;38982:165::o;24703:151::-;-1:-1:-1;;;;;24819:18:0;;;24792:7;24819:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24703:151::o;40573:285::-;35683:5;;-1:-1:-1;;;;;35683:5:0;35669:10;:19;35661:43;;;;-1:-1:-1;;;35661:43:0;;;;;;;:::i;:::-;40675:5:::1;-1:-1:-1::0;;;;;40657:24:0::1;:6;-1:-1:-1::0;;;;;40657:24:0::1;;;40649:74;;;::::0;-1:-1:-1;;;40649:74:0;;10236:2:1;40649:74:0::1;::::0;::::1;10218:21:1::0;10275:2;10255:18;;;10248:30;10314:34;10294:18;;;10287:62;-1:-1:-1;;;10365:18:1;;;10358:35;10410:19;;40649:74:0::1;10034:401:1::0;40649:74:0::1;40753:39;::::0;-1:-1:-1;;;40753:39:0;;40786:4:::1;40753:39;::::0;::::1;2889:51:1::0;40736:14:0::1;::::0;-1:-1:-1;;;;;40753:24:0;::::1;::::0;::::1;::::0;2862:18:1;;40753:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40736:56:::0;-1:-1:-1;40803:47:0::1;-1:-1:-1::0;;;;;40803:27:0;::::1;40831:10;40736:56:::0;40803:27:::1;:47::i;38706:167::-:0;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;682:10;15223:23;15215:68;;;;-1:-1:-1;;;15215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38784:23:0;::::1;38776:58;;;;-1:-1:-1::0;;;38776:58:0::1;;;;;;;:::i;:::-;38845:8;:20:::0;;-1:-1:-1;;;;;;38845:20:0::1;-1:-1:-1::0;;;;;38845:20:0;;;::::1;::::0;;;::::1;::::0;;38706:167::o;15912:201::-;15049:7;15076:6;-1:-1:-1;;;;;15076:6:0;682:10;15223:23;15215:68;;;;-1:-1:-1;;;15215:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16001:22:0;::::1;15993:73;;;::::0;-1:-1:-1;;;15993:73:0;;10642:2:1;15993:73:0::1;::::0;::::1;10624:21:1::0;10681:2;10661:18;;;10654:30;10720:34;10700:18;;;10693:62;-1:-1:-1;;;10771:18:1;;;10764:36;10817:19;;15993:73:0::1;10440:402:1::0;15993:73:0::1;16077:28;16096:8;16077:18;:28::i;31034:380::-:0;-1:-1:-1;;;;;31170:19:0;;31162:68;;;;-1:-1:-1;;;31162:68:0;;11049:2:1;31162:68:0;;;11031:21:1;11088:2;11068:18;;;11061:30;11127:34;11107:18;;;11100:62;-1:-1:-1;;;11178:18:1;;;11171:34;11222:19;;31162:68:0;10847:400:1;31162:68:0;-1:-1:-1;;;;;31249:21:0;;31241:68;;;;-1:-1:-1;;;31241:68:0;;11454:2:1;31241:68:0;;;11436:21:1;11493:2;11473:18;;;11466:30;11532:34;11512:18;;;11505:62;-1:-1:-1;;;11583:18:1;;;11576:32;11625:19;;31241:68:0;11252:398:1;31241:68:0;-1:-1:-1;;;;;31322:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31374:32;;1440:25:1;;;31374:32:0;;1413:18:1;31374:32:0;;;;;;;;31034:380;;;:::o;31705:453::-;31840:24;31867:25;31877:5;31884:7;31867:9;:25::i;:::-;31840:52;;-1:-1:-1;;31907:16:0;:37;31903:248;;31989:6;31969:16;:26;;31961:68;;;;-1:-1:-1;;;31961:68:0;;11857:2:1;31961:68:0;;;11839:21:1;11896:2;11876:18;;;11869:30;11935:31;11915:18;;;11908:59;11984:18;;31961:68:0;11655:353:1;31961:68:0;32073:51;32082:5;32089:7;32117:6;32098:16;:25;32073:8;:51::i;:::-;31829:329;31705:453;;;:::o;28315:671::-;-1:-1:-1;;;;;28446:18:0;;28438:68;;;;-1:-1:-1;;;28438:68:0;;12215:2:1;28438:68:0;;;12197:21:1;12254:2;12234:18;;;12227:30;12293:34;12273:18;;;12266:62;-1:-1:-1;;;12344:18:1;;;12337:35;12389:19;;28438:68:0;12013:401:1;28438:68:0;-1:-1:-1;;;;;28525:16:0;;28517:64;;;;-1:-1:-1;;;28517:64:0;;12621:2:1;28517:64:0;;;12603:21:1;12660:2;12640:18;;;12633:30;12699:34;12679:18;;;12672:62;-1:-1:-1;;;12750:18:1;;;12743:33;12793:19;;28517:64:0;12419:399:1;28517:64:0;-1:-1:-1;;;;;28667:15:0;;28645:19;28667:15;;;:9;:15;;;;;;28701:21;;;;28693:72;;;;-1:-1:-1;;;28693:72:0;;13025:2:1;28693:72:0;;;13007:21:1;13064:2;13044:18;;;13037:30;13103:34;13083:18;;;13076:62;-1:-1:-1;;;13154:18:1;;;13147:36;13200:19;;28693:72:0;12823:402:1;28693:72:0;-1:-1:-1;;;;;28801:15:0;;;;;;;:9;:15;;;;;;28819:20;;;28801:38;;28861:13;;;;;;;;:23;;28833:6;;28801:15;28861:23;;28833:6;;28861:23;:::i;:::-;;;;;;;;28917:2;-1:-1:-1;;;;;28902:26:0;28911:4;-1:-1:-1;;;;;28902:26:0;;28921:6;28902:26;;;;1440:25:1;;1428:2;1413:18;;1294:177;28902:26:0;;;;;;;;28941:37;30005:591;41991:308;42031:8;;;;:44;;;;;42061:14;;42043:15;:32;42031:44;42027:265;;;42092:18;42113:46;42127:14;;42143:15;42113:13;:46::i;:::-;42092:67;;42174:18;42208:13;;42195:10;:26;;;;:::i;:::-;-1:-1:-1;;42253:15:0;42236:14;:32;-1:-1:-1;41991:308:0:o;30005:591::-;-1:-1:-1;;;;;30089:21:0;;30081:67;;;;-1:-1:-1;;;30081:67:0;;13432:2:1;30081:67:0;;;13414:21:1;13471:2;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;-1:-1:-1;;;13561:18:1;;;13554:31;13602:19;;30081:67:0;13230:397:1;30081:67:0;-1:-1:-1;;;;;30248:18:0;;30223:22;30248:18;;;:9;:18;;;;;;30285:24;;;;30277:71;;;;-1:-1:-1;;;30277:71:0;;13834:2:1;30277:71:0;;;13816:21:1;13873:2;13853:18;;;13846:30;13912:34;13892:18;;;13885:62;-1:-1:-1;;;13963:18:1;;;13956:32;14005:19;;30277:71:0;13632:398:1;30277:71:0;-1:-1:-1;;;;;30384:18:0;;;;;;:9;:18;;;;;30405:23;;;30384:44;;30450:12;:22;;30422:6;;30384:18;30450:22;;30422:6;;30450:22;:::i;:::-;;;;-1:-1:-1;;30490:37:0;;1440:25:1;;;30516:1:0;;-1:-1:-1;;;;;30490:37:0;;;;;1428:2:1;1413:18;30490:37:0;1294:177:1;30540:48:0;30070:526;30005:591;;:::o;16999:211::-;17143:58;;-1:-1:-1;;;;;14227:32:1;;17143:58:0;;;14209:51:1;14276:18;;;14269:34;;;17116:86:0;;17136:5;;-1:-1:-1;;;17166:23:0;14182:18:1;;17143:58:0;;;;-1:-1:-1;;17143:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17143:58:0;-1:-1:-1;;;;;;17143:58:0;;;;;;;;;;17116:19;:86::i;13955:120::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13491:41;;;;-1:-1:-1;;;13491:41:0;;7744:2:1;13491:41:0;;;7726:21:1;7783:2;7763:18;;;7756:30;-1:-1:-1;;;7802:18:1;;;7795:50;7862:18;;13491:41:0;7542:344:1;13491:41:0;14024:5:::1;14014:15:::0;;-1:-1:-1;;;;14014:15:0::1;::::0;;14045:22:::1;682:10:::0;14054:12:::1;14045:22;::::0;-1:-1:-1;;;;;2907:32:1;;;2889:51;;2877:2;2862:18;14045:22:0::1;;;;;;;13955:120::o:0;36570:678::-;34307:13;36656:7;:29;;36648:96;;;;-1:-1:-1;;;36648:96:0;;14516:2:1;36648:96:0;;;14498:21:1;14555:2;14535:18;;;14528:30;14594:34;14574:18;;;14567:62;-1:-1:-1;;;14645:18:1;;;14638:52;14707:19;;36648:96:0;14314:418:1;36648:96:0;36755:6;:4;:6::i;:::-;36772:12;36787:11;:9;:11::i;:::-;36772:26;-1:-1:-1;36809:58:0;-1:-1:-1;;;;;36809:5:0;:22;36832:10;36852:4;36859:7;36809:22;:58::i;:::-;36878:21;36918:13;24031:12;;;23943:108;36918:13;:18;36914:155;;36997:4;36980:13;24031:12;;;23943:108;36980:13;36970:23;;:7;:23;:::i;:::-;36969:32;;;;:::i;:::-;36953:48;;36914:155;;;-1:-1:-1;37050:7:0;36914:155;-1:-1:-1;;;;;37081:28:0;;;;;;:21;:28;;;;;37112:15;37081:46;;37140:27;37103:5;37153:13;37140:5;:27::i;:::-;37185:55;;;7420:25:1;;;7476:2;7461:18;;7454:34;;;37224:15:0;7504:18:1;;;7497:34;37185:55:0;;-1:-1:-1;;;;;37185:55:0;;;;;;;;;7408:2:1;37185:55:0;;;36637:611;;36570:678;;:::o;16273:191::-;16347:16;16366:6;;-1:-1:-1;;;;;16383:17:0;;;-1:-1:-1;;;;;;16383:17:0;;;;;;16416:40;;16366:6;;;;;;;16416:40;;16347:16;16416:40;16336:128;16273:191;:::o;13696:118::-;12943:4;12967:7;-1:-1:-1;;;12967:7:0;;;;13221:9;13213:38;;;;-1:-1:-1;;;13213:38:0;;;;;;;:::i;:::-;13756:7:::1;:14:::0;;-1:-1:-1;;;;13756:14:0::1;-1:-1:-1::0;;;13756:14:0::1;::::0;;13786:20:::1;13793:12;682:10:::0;;602:98;19572:716;19996:23;20022:69;20050:4;20022:69;;;;;;;;;;;;;;;;;20030:5;-1:-1:-1;;;;;20022:27:0;;;:69;;;;;:::i;:::-;20106:17;;19996:95;;-1:-1:-1;20106:21:0;20102:179;;20203:10;20192:30;;;;;;;;;;;;:::i;:::-;20184:85;;;;-1:-1:-1;;;20184:85:0;;15189:2:1;20184:85:0;;;15171:21:1;15228:2;15208:18;;;15201:30;15267:34;15247:18;;;15240:62;-1:-1:-1;;;15318:18:1;;;15311:40;15368:19;;20184:85:0;14987:406:1;17218:248:0;17389:68;;-1:-1:-1;;;;;15656:15:1;;;17389:68:0;;;15638:34:1;15708:15;;15688:18;;;15681:43;15740:18;;;15733:34;;;17362:96:0;;17382:5;;-1:-1:-1;;;17412:27:0;15573:18:1;;17389:68:0;15398:375:1;29273:399:0;-1:-1:-1;;;;;29357:21:0;;29349:65;;;;-1:-1:-1;;;29349:65:0;;15980:2:1;29349:65:0;;;15962:21:1;16019:2;15999:18;;;15992:30;16058:33;16038:18;;;16031:61;16109:18;;29349:65:0;15778:355:1;29349:65:0;29505:6;29489:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;29522:18:0;;;;;;:9;:18;;;;;:28;;29544:6;;29522:18;:28;;29544:6;;29522:28;:::i;:::-;;;;-1:-1:-1;;29566:37:0;;1440:25:1;;;-1:-1:-1;;;;;29566:37:0;;;29583:1;;29566:37;;1428:2:1;1413:18;29566:37:0;;;;;;;36281:123;;:::o;7386:229::-;7523:12;7555:52;7577:6;7585:4;7591:1;7594:12;7555:21;:52::i;:::-;7548:59;7386:229;-1:-1:-1;;;;7386:229:0:o;8506:510::-;8676:12;8734:5;8709:21;:30;;8701:81;;;;-1:-1:-1;;;8701:81:0;;16340:2:1;8701:81:0;;;16322:21:1;16379:2;16359:18;;;16352:30;16418:34;16398:18;;;16391:62;-1:-1:-1;;;16469:18:1;;;16462:36;16515:19;;8701:81:0;16138:402:1;8701:81:0;-1:-1:-1;;;;;4936:19:0;;;8793:60;;;;-1:-1:-1;;;8793:60:0;;16747:2:1;8793:60:0;;;16729:21:1;16786:2;16766:18;;;16759:30;16825:31;16805:18;;;16798:59;16874:18;;8793:60:0;16545:353:1;8793:60:0;8867:12;8881:23;8908:6;-1:-1:-1;;;;;8908:11:0;8927:5;8934:4;8908:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8866:73;;;;8957:51;8974:7;8983:10;8995:12;8957:16;:51::i;:::-;8950:58;8506:510;-1:-1:-1;;;;;;;8506:510:0:o;11192:712::-;11342:12;11371:7;11367:530;;;-1:-1:-1;11402:10:0;11395:17;;11367:530;11516:17;;:21;11512:374;;11714:10;11708:17;11775:15;11762:10;11758:2;11754:19;11747:44;11512:374;11857:12;11850:20;;-1:-1:-1;;;11850:20:0;;;;;;;;:::i;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:173::-;733:20;;-1:-1:-1;;;;;782:31:1;;772:42;;762:70;;828:1;825;818:12;762:70;665:173;;;:::o;843:254::-;911:6;919;972:2;960:9;951:7;947:23;943:32;940:52;;;988:1;985;978:12;940:52;1011:29;1030:9;1011:29;:::i;:::-;1001:39;1087:2;1072:18;;;;1059:32;;-1:-1:-1;;;843:254:1:o;1476:180::-;1535:6;1588:2;1576:9;1567:7;1563:23;1559:32;1556:52;;;1604:1;1601;1594:12;1556:52;-1:-1:-1;1627:23:1;;1476:180;-1:-1:-1;1476:180:1:o;1661:328::-;1738:6;1746;1754;1807:2;1795:9;1786:7;1782:23;1778:32;1775:52;;;1823:1;1820;1813:12;1775:52;1846:29;1865:9;1846:29;:::i;:::-;1836:39;;1894:38;1928:2;1917:9;1913:18;1894:38;:::i;:::-;1884:48;;1979:2;1968:9;1964:18;1951:32;1941:42;;1661:328;;;;;:::o;1994:118::-;2080:5;2073:13;2066:21;2059:5;2056:32;2046:60;;2102:1;2099;2092:12;2117:241;2173:6;2226:2;2214:9;2205:7;2201:23;2197:32;2194:52;;;2242:1;2239;2232:12;2194:52;2281:9;2268:23;2300:28;2322:5;2300:28;:::i;2552:186::-;2611:6;2664:2;2652:9;2643:7;2639:23;2635:32;2632:52;;;2680:1;2677;2670:12;2632:52;2703:29;2722:9;2703:29;:::i;2951:254::-;3019:6;3027;3080:2;3068:9;3059:7;3055:23;3051:32;3048:52;;;3096:1;3093;3086:12;3048:52;3132:9;3119:23;3109:33;;3161:38;3195:2;3184:9;3180:18;3161:38;:::i;:::-;3151:48;;2951:254;;;;;:::o;3210:248::-;3278:6;3286;3339:2;3327:9;3318:7;3314:23;3310:32;3307:52;;;3355:1;3352;3345:12;3307:52;-1:-1:-1;;3378:23:1;;;3448:2;3433:18;;;3420:32;;-1:-1:-1;3210:248:1:o;3463:260::-;3531:6;3539;3592:2;3580:9;3571:7;3567:23;3563:32;3560:52;;;3608:1;3605;3598:12;3560:52;3631:29;3650:9;3631:29;:::i;:::-;3621:39;;3679:38;3713:2;3702:9;3698:18;3679:38;:::i;3957:380::-;4036:1;4032:12;;;;4079;;;4100:61;;4154:4;4146:6;4142:17;4132:27;;4100:61;4207:2;4199:6;4196:14;4176:18;4173:38;4170:161;;;4253:10;4248:3;4244:20;4241:1;4234:31;4288:4;4285:1;4278:15;4316:4;4313:1;4306:15;4170:161;;3957:380;;;:::o;4342:335::-;4544:2;4526:21;;;4583:2;4563:18;;;4556:30;-1:-1:-1;;;4617:2:1;4602:18;;4595:41;4668:2;4653:18;;4342:335::o;5375:340::-;5577:2;5559:21;;;5616:2;5596:18;;;5589:30;-1:-1:-1;;;5650:2:1;5635:18;;5628:46;5706:2;5691:18;;5375:340::o;6428:127::-;6489:10;6484:3;6480:20;6477:1;6470:31;6520:4;6517:1;6510:15;6544:4;6541:1;6534:15;6560:168;6600:7;6666:1;6662;6658:6;6654:14;6651:1;6648:21;6643:1;6636:9;6629:17;6625:45;6622:71;;;6673:18;;:::i;:::-;-1:-1:-1;6713:9:1;;6560:168::o;6733:217::-;6773:1;6799;6789:132;;6843:10;6838:3;6834:20;6831:1;6824:31;6878:4;6875:1;6868:15;6906:4;6903:1;6896:15;6789:132;-1:-1:-1;6935:9:1;;6733:217::o;6955:128::-;6995:3;7026:1;7022:6;7019:1;7016:13;7013:39;;;7032:18;;:::i;:::-;-1:-1:-1;7068:9:1;;6955:128::o;7088:125::-;7128:4;7156:1;7153;7150:8;7147:34;;;7161:18;;:::i;:::-;-1:-1:-1;7198:9:1;;7088:125::o;7891:184::-;7961:6;8014:2;8002:9;7993:7;7989:23;7985:32;7982:52;;;8030:1;8027;8020:12;7982:52;-1:-1:-1;8053:16:1;;7891:184;-1:-1:-1;7891:184:1:o;8080:356::-;8282:2;8264:21;;;8301:18;;;8294:30;8360:34;8355:2;8340:18;;8333:62;8427:2;8412:18;;8080:356::o;8441:346::-;8643:2;8625:21;;;8682:2;8662:18;;;8655:30;-1:-1:-1;;;8716:2:1;8701:18;;8694:52;8778:2;8763:18;;8441:346::o;14737:245::-;14804:6;14857:2;14845:9;14836:7;14832:23;14828:32;14825:52;;;14873:1;14870;14863:12;14825:52;14905:9;14899:16;14924:28;14946:5;14924:28;:::i;16903:274::-;17032:3;17070:6;17064:13;17086:53;17132:6;17127:3;17120:4;17112:6;17108:17;17086:53;:::i;:::-;17155:16;;;;;16903:274;-1:-1:-1;;16903:274:1:o
Metadata Hash
00ab2b234672dbdce1bcdc100d82f1612413308c6d2cefc8bbad4af49b1b4549
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.