More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 442 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Liquidi... | 13412417 | 887 days ago | IN | 0 ETH | 0.00981824 | ||||
Emergency Drain | 11407332 | 1197 days ago | IN | 0 ETH | 0.0030504 | ||||
Transfer | 11406350 | 1197 days ago | IN | 4 ETH | 0.0018906 | ||||
Transfer | 11406240 | 1197 days ago | IN | 3 ETH | 0.005121 | ||||
Transfer | 11406236 | 1197 days ago | IN | 3 ETH | 0.0035847 | ||||
Transfer | 11406228 | 1197 days ago | IN | 3 ETH | 0.00384075 | ||||
Transfer | 11406225 | 1197 days ago | IN | 2.5 ETH | 0.00230445 | ||||
Transfer | 11406216 | 1197 days ago | IN | 2 ETH | 0.00145948 | ||||
Transfer | 11406206 | 1197 days ago | IN | 3 ETH | 0.00123928 | ||||
Liquidity Genera... | 11406157 | 1197 days ago | IN | 0 ETH | 0.0054522 | ||||
Transfer | 11403282 | 1198 days ago | IN | 0.005 ETH | 0.000822 | ||||
Transfer | 11403278 | 1198 days ago | IN | 0.005 ETH | 0.00300267 | ||||
Liquidity Genera... | 11401409 | 1198 days ago | IN | 0 ETH | 0.00300779 | ||||
Transfer | 11400403 | 1198 days ago | IN | 1 ETH | 0.000959 | ||||
Transfer | 11400322 | 1198 days ago | IN | 1 ETH | 0.000959 | ||||
Transfer | 11400318 | 1198 days ago | IN | 1 ETH | 0.000822 | ||||
Transfer | 11399730 | 1198 days ago | IN | 0 ETH | 0.00116325 | ||||
Liquidity Genera... | 11399693 | 1198 days ago | IN | 0 ETH | 0.00227175 | ||||
Transfer | 11399692 | 1198 days ago | IN | 0.001 ETH | 0.000609 | ||||
Transfer | 11399686 | 1198 days ago | IN | 0.01 ETH | 0.000609 | ||||
Transfer | 11399682 | 1198 days ago | IN | 0.02 ETH | 0.000609 | ||||
Transfer | 11399658 | 1198 days ago | IN | 0.03 ETH | 0.00240213 | ||||
Transfer | 11399656 | 1198 days ago | IN | 1 ETH | 0.0088776 | ||||
Transfer | 11399653 | 1198 days ago | IN | 2 ETH | 0.0088776 | ||||
Transfer | 11399649 | 1198 days ago | IN | 0.239 ETH | 0.00250222 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
11407327 | 1197 days ago | 399.99908917 ETH | ||||
11406281 | 1197 days ago | 399.99908917 ETH | ||||
11406157 | 1197 days ago | 399.99908917 ETH | ||||
11404510 | 1197 days ago | 399.99908917 ETH | ||||
11403278 | 1198 days ago | 0.0025 ETH | ||||
11401409 | 1198 days ago | 399.99658917 ETH | ||||
11399693 | 1198 days ago | 399.99658917 ETH | ||||
11399658 | 1198 days ago | 0.015 ETH | ||||
11399649 | 1198 days ago | 0.1195 ETH | ||||
11399647 | 1198 days ago | 0.1 ETH | ||||
11399629 | 1198 days ago | 0.08 ETH | ||||
11399629 | 1198 days ago | 0.3 ETH | ||||
11399627 | 1198 days ago | 0.095 ETH | ||||
11399627 | 1198 days ago | 0.5 ETH | ||||
11399627 | 1198 days ago | 2 ETH | ||||
11399626 | 1198 days ago | 0.5 ETH | ||||
11399623 | 1198 days ago | 0.75 ETH | ||||
11399622 | 1198 days ago | 0.25 ETH | ||||
11399621 | 1198 days ago | 0.25 ETH | ||||
11399621 | 1198 days ago | 0.1 ETH | ||||
11399621 | 1198 days ago | 2 ETH | ||||
11399620 | 1198 days ago | 2 ETH | ||||
11399620 | 1198 days ago | 0.25 ETH | ||||
11399620 | 1198 days ago | 0.1 ETH | ||||
11399619 | 1198 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
SpaceMinePresale
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-04 */ // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol pragma solidity ^0.6.0; /** * @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 guidelines: functions revert instead * of 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 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 * * - `to` 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } // File: localhost/contracts/POLContract.sol pragma solidity 0.6.12; contract POLContract { event Received(address, uint); event onDeposit(address, uint256, uint256); event onWithdraw(address, uint256); using SafeMath for uint256; struct VestingPeriod { uint256 epoch; uint256 amount; } struct UserTokenInfo { uint256 deposited; // incremented on successful deposit uint256 withdrawn; // incremented on successful withdrawl VestingPeriod[] vestingPeriods; // added to on successful deposit } // map erc20 token to user address to release schedule mapping(address => mapping(address => UserTokenInfo)) tokenUserMap; struct LiquidityTokenomics { uint256[] epochs; mapping (uint256 => uint256) releaseMap; // map epoch -> amount withdrawable } // map erc20 token to release schedule mapping(address => LiquidityTokenomics) tokenEpochMap; // Fast mapping to prevent array iteration in solidity mapping(address => bool) public lockedTokenLookup; // A dynamically-sized array of currently locked tokens address[] public lockedTokens; // fee variables uint256 public feeNumerator; uint256 public feeDenominator; address public feeReserveAddress; address public owner; constructor() public { feeNumerator = 3; feeDenominator = 1000; feeReserveAddress = address(0xAA3d85aD9D128DFECb55424085754F6dFa643eb1); owner = address(0xfCdd591498e86876F086524C0b2E9Af41a0c9FCD); } receive() external payable { emit Received(msg.sender, msg.value); } modifier onlyOwner { require(msg.sender == owner, "You are not the owner"); _; } function updateFee(uint256 numerator, uint256 denominator) onlyOwner public { feeNumerator = numerator; feeDenominator = denominator; } function calculateFee(uint256 amount) public view returns (uint256){ require(amount >= feeDenominator, 'Deposit is too small'); uint256 amountInLarge = amount.mul(feeDenominator.sub(feeNumerator)); uint256 amountIn = amountInLarge.div(feeDenominator); uint256 fee = amount.sub(amountIn); return (fee); } function depositTokenMultipleEpochs(address token, uint256[] memory amounts, uint256[] memory dates) public payable { require(amounts.length == dates.length, 'Amount and date arrays have differing lengths'); for (uint i=0; i<amounts.length; i++) { depositToken(token, amounts[i], dates[i]); } } function depositToken(address token, uint256 amount, uint256 unlock_date) public payable { require(unlock_date < 10000000000, 'Enter an unix timestamp in seconds, not miliseconds'); require(amount > 0, 'Your attempting to trasfer 0 tokens'); uint256 allowance = IERC20(token).allowance(msg.sender, address(this)); require(allowance >= amount, 'You need to set a higher allowance'); // charge a fee uint256 fee = calculateFee(amount); uint256 amountIn = amount.sub(fee); require(IERC20(token).transferFrom(msg.sender, address(this), amountIn), 'Transfer failed'); require(IERC20(token).transferFrom(msg.sender, address(feeReserveAddress), fee), 'Transfer failed'); if (!lockedTokenLookup[token]) { lockedTokens.push(token); lockedTokenLookup[token] = true; } LiquidityTokenomics storage liquidityTokenomics = tokenEpochMap[token]; // amount is required to be above 0 in the start of this block, therefore this works if (liquidityTokenomics.releaseMap[unlock_date] > 0) { liquidityTokenomics.releaseMap[unlock_date] = liquidityTokenomics.releaseMap[unlock_date].add(amountIn); } else { liquidityTokenomics.epochs.push(unlock_date); liquidityTokenomics.releaseMap[unlock_date] = amountIn; } UserTokenInfo storage uto = tokenUserMap[token][msg.sender]; uto.deposited = uto.deposited.add(amountIn); VestingPeriod[] storage vp = uto.vestingPeriods; vp.push(VestingPeriod(unlock_date, amountIn)); emit onDeposit(token, amount, unlock_date); } function withdrawToken(address token, uint256 amount) public { require(amount > 0, 'Your attempting to withdraw 0 tokens'); uint256 withdrawable = getWithdrawableBalance(token, msg.sender); UserTokenInfo storage uto = tokenUserMap[token][msg.sender]; uto.withdrawn = uto.withdrawn.add(amount); require(amount <= withdrawable, 'Your attempting to withdraw more than you have available'); require(IERC20(token).transfer(msg.sender, amount), 'Transfer failed'); emit onWithdraw(token, amount); } function getWithdrawableBalance(address token, address user) public view returns (uint256) { UserTokenInfo storage uto = tokenUserMap[token][address(user)]; uint arrayLength = uto.vestingPeriods.length; uint256 withdrawable = 0; for (uint i=0; i<arrayLength; i++) { VestingPeriod storage vestingPeriod = uto.vestingPeriods[i]; if (vestingPeriod.epoch < block.timestamp) { withdrawable = withdrawable.add(vestingPeriod.amount); } } withdrawable = withdrawable.sub(uto.withdrawn); return withdrawable; } function getUserTokenInfo (address token, address user) public view returns (uint256, uint256, uint256) { UserTokenInfo storage uto = tokenUserMap[address(token)][address(user)]; uint256 deposited = uto.deposited; uint256 withdrawn = uto.withdrawn; uint256 length = uto.vestingPeriods.length; return (deposited, withdrawn, length); } function getUserVestingAtIndex (address token, address user, uint index) public view returns (uint256, uint256) { UserTokenInfo storage uto = tokenUserMap[address(token)][address(user)]; VestingPeriod storage vp = uto.vestingPeriods[index]; return (vp.epoch, vp.amount); } function getTokenReleaseLength (address token) public view returns (uint256) { LiquidityTokenomics storage liquidityTokenomics = tokenEpochMap[address(token)]; return liquidityTokenomics.epochs.length; } function getTokenReleaseAtIndex (address token, uint index) public view returns (uint256, uint256) { LiquidityTokenomics storage liquidityTokenomics = tokenEpochMap[address(token)]; uint256 epoch = liquidityTokenomics.epochs[index]; uint256 amount = liquidityTokenomics.releaseMap[epoch]; return (epoch, amount); } function lockedTokensLength() external view returns (uint) { return lockedTokens.length; } } // File: localhost/contracts/SpaceMineToken.sol pragma solidity 0.6.12; contract SpaceMineCore is ERC20("SpaceMineToken", "MINE"), Ownable { using SafeMath for uint256; address internal _taxer; address internal _taxDestination; uint256 internal _cap; uint internal _taxRate = 0; bool internal _lock = true; mapping (address => bool) internal _taxWhitelist; function transfer(address recipient, uint256 amount) public override returns (bool) { require(msg.sender == owner() || !_lock, "Transfer is locking"); uint256 taxAmount = amount.mul(_taxRate).div(100); if (_taxWhitelist[msg.sender] == true) { taxAmount = 0; } uint256 transferAmount = amount.sub(taxAmount); require(balanceOf(msg.sender) >= amount, "insufficient balance."); super.transfer(recipient, transferAmount); if (taxAmount != 0) { super.transfer(_taxDestination, taxAmount); } return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { require(sender == owner() || !_lock, "TransferFrom is locking"); uint256 taxAmount = amount.mul(_taxRate).div(100); if (_taxWhitelist[sender] == true) { taxAmount = 0; } uint256 transferAmount = amount.sub(taxAmount); require(balanceOf(sender) >= amount, "insufficient balance."); super.transferFrom(sender, recipient, transferAmount); if (taxAmount != 0) { super.transferFrom(sender, _taxDestination, taxAmount); } return true; } function _mint(address account, uint256 value) override internal { require(totalSupply().add(value) <= _cap, "cap exceeded"); super._mint(account, value); } } contract SpaceMineToken is SpaceMineCore { mapping (address => bool) public minters; uint256 public constant hard_cap = 96000 * 1e18; constructor() public { _taxer = owner(); _taxDestination = owner(); _cap = hard_cap; } function cap() public view returns (uint256) { return _cap; } function mint(address to, uint amount) public onlyMinter { _mint(to, amount); _moveDelegates(address(0), _delegates[to], amount); } /// @notice A record of each accounts delegate mapping (address => address) public _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "MINE:delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "MINE::delegateBySig: invalid nonce"); require(block.timestamp <= expiry, "MINE::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "MINE::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); // balance of underlying MINE; _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld-amount; _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld+amount; _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "MINE::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } function burn(uint amount) public { require(amount > 0); require(balanceOf(msg.sender) >= amount); _burn(msg.sender, amount); } function addMinter(address account) public onlyOwner { minters[account] = true; } function removeMinter(address account) public onlyOwner { minters[account] = false; } modifier onlyMinter() { require(minters[msg.sender], "Restricted to minters."); _; } modifier onlyTaxer() { require(msg.sender == _taxer, "Only for taxer."); _; } function setTaxer(address account) public onlyTaxer { _taxer = account; } function setTaxRate(uint256 rate) public onlyTaxer { _taxRate = rate; } function setTaxDestination(address account) public onlyTaxer { _taxDestination = account; } function addToWhitelist(address account) public onlyTaxer { _taxWhitelist[account] = true; } function removeFromWhitelist(address account) public onlyTaxer { _taxWhitelist[account] = false; } function taxer() public view returns(address) { return _taxer; } function taxDestination() public view returns(address) { return _taxDestination; } function taxRate() public view returns(uint256) { return _taxRate; } function isInWhitelist(address account) public view returns(bool) { return _taxWhitelist[account]; } function unlock() public onlyOwner { _lock = false; } function getLockStatus() view public returns(bool) { return _lock; } } // File: localhost/contracts/uniswapv2/interfaces/IERC20.sol pragma solidity >=0.5.0; interface IERC20Uniswap { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } // File: localhost/contracts/uniswapv2/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File: localhost/contracts/uniswapv2/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: localhost/contracts/uniswapv2/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: localhost/contracts/uniswapv2/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); /* function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; */ } // File: localhost/contracts/uniswapv2/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _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 // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/math/Math.sol pragma solidity ^0.6.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File: localhost/contracts/SpaceMinePresale.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; contract SpaceMinePresale is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; IUniswapV2Router02 private uniswapRouterV2; IUniswapV2Factory private uniswapFactory; IUniswapV2Pair private pair; POLContract private pol; address public tokenUniswapPair; SpaceMineToken public mine; mapping (address => bool) public whitelist; mapping (address => uint) public ethSupply; address payable devAddress; uint public minePrice = 10; uint public buyLimit = 4 * 1e18; bool public presaleStart = false; bool public onlyWhitelist = true; uint public presaleLastSupply = 8000 * 1e18; uint public initialLiquidityMax = 1600 * 1e18; uint256 public contractStartTimestamp; uint256 public constant LOCK_PERIOD = 26 weeks; bool public LPGenerationCompleted; uint256 public totalLPTokensMinted; uint256 public totalPresaleContributed; address payable constant UNICRYPT_DEPLOYER = 0x60e2E1b2a317EdfC870b6Fc6886F69083FB2099a; address constant UNISWAP_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address constant UNISWAP_ROUTER_V2 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; address constant UNICRYPT_POL = 0x17e00383A843A9922bCA3B280C0ADE9f8BA48449; event BuyMineSuccess(address account, uint ethAmount, uint mineAmount); constructor( SpaceMineToken _mine ) public { mine = _mine; initWhitelist(); pairSetup(); } function pairSetup() internal { uniswapRouterV2 = IUniswapV2Router02(UNISWAP_ROUTER_V2); // For testing uniswapFactory = IUniswapV2Factory(UNISWAP_FACTORY); // For testing pol = POLContract(payable(UNICRYPT_POL)); // For testing; createUniswapPair(); } function createUniswapPair() internal { require(tokenUniswapPair == address(0), "Token: pool already created"); tokenUniswapPair = uniswapFactory.createPair( address(uniswapRouterV2.WETH()), address(mine) ); pair = IUniswapV2Pair(tokenUniswapPair); } function addToWhitelist(address account) public onlyOwner { require(whitelist[account] == false, "This account is already in whitelist."); whitelist[account] = true; } function removeFromWhitelist(address account) public onlyOwner { require(whitelist[account], "This account is not in whitelist."); whitelist[account] = false; } function startPresale() public onlyOwner { presaleStart = true; contractStartTimestamp = block.timestamp; mine.mint(address(this), initialLiquidityMax); } function stopPresale() public onlyOwner { presaleStart = false; } function setDevAddress(address payable account) public onlyOwner { devAddress = account; } function setMinePrice(uint newPrice) public onlyOwner { minePrice = newPrice; } function setBuyLimit(uint newLimit) public onlyOwner { buyLimit = newLimit; } function changeToNotOnlyWhitelist() public onlyOwner { onlyWhitelist = false; } function checkpresaleLastSupply() public view returns(uint){ return presaleLastSupply; } function burnLeftoverMine() public onlyOwner { // Only available 24 hours after presale ends (48 hours after presale starts) require(contractStartTimestamp.add(2 days) < block.timestamp, "Grace period is not over yet"); mine.burn(mine.balanceOf(address(this))); } modifier needHaveLastSupply() { require(presaleLastSupply >= 0, "Oh you are too late, all mine are gone"); _; } modifier presaleHasStarted() { require(presaleStart, "Presale has not been started, buckle up!"); _; } receive() payable external presaleHasStarted needHaveLastSupply { if (onlyWhitelist) { require(whitelist[msg.sender], "Currently only people who are in whitelist can participate"); } uint ethTotalAmount = ethSupply[msg.sender].add(msg.value); require(ethTotalAmount <= buyLimit, "Everyone should buy lesser than 4 eth."); uint mineAmount = msg.value.mul(minePrice); require(mineAmount <= presaleLastSupply, "sorry, insufficient presale supply"); totalPresaleContributed.add(msg.value); presaleLastSupply = presaleLastSupply.sub(mineAmount); devAddress.transfer(msg.value.div(2)); mine.mint(msg.sender, mineAmount); ethSupply[msg.sender] = ethTotalAmount; emit BuyMineSuccess(msg.sender, msg.value, mineAmount); } function liquidityGeneration() public { require(LPGenerationCompleted == false, "Liquidity generation already finished"); uint256 initialETHLiquidity = address(this).balance; //Wrap eth address WETH = uniswapRouterV2.WETH(); IWETH(WETH).deposit{value : initialETHLiquidity}(); require(address(this).balance == 0 , "Transfer Failed"); IWETH(WETH).transfer(address(pair),initialETHLiquidity); uint256 initialLiquidity = initialETHLiquidity.mul(4); require(initialLiquidity <= initialLiquidityMax, "Error amount"); mine.transfer(address(pair), initialLiquidity); pair.mint(address(this)); totalLPTokensMinted = pair.balanceOf(address(this)); require(totalLPTokensMinted != 0 , "LP creation failed"); LPGenerationCompleted = true; uint256 unlockTime = block.timestamp + LOCK_PERIOD; IERC20(address(pair)).approve(address(pol), totalLPTokensMinted); pol.depositToken(address(pair), totalLPTokensMinted, unlockTime); require(pair.balanceOf(address(pol)) != 0, "Auto lock failed"); } function withdrawLiquidity() public onlyOwner { uint256 withdrawable = pol.getWithdrawableBalance(address(pair), address(this)); pol.withdrawToken(address(pair), withdrawable); pair.transfer(msg.sender, pair.balanceOf(address(this))); } // Emergency drain in case of a bug in liquidity generation // Adds all funds to owner to refund people // Only available 24 hours after presale ends (48 hours after presale starts) function emergencyDrain() public onlyOwner { require(contractStartTimestamp.add(2 days) < block.timestamp, "Grace period is not over yet"); uint256 initialLiquidity = address(this).balance.mul(4); mine.transfer(UNICRYPT_DEPLOYER, initialLiquidity); (bool success, ) = UNICRYPT_DEPLOYER.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function initWhitelist() internal { //add the original whitelist whitelist[0x04b936745C02E8Cb75cC68b93B4fb99b38939d5D] = true; whitelist[0xcC4fB675c46F3715c52307c4d2f8640c4EF7bb31] = true; whitelist[0xA734871BC0f9d069936db4fA44AeA6d4325F41e5] = true; whitelist[0x9A8ea427c5CF4490c07428b853A5577c9B7a2d14] = true; whitelist[0x9DC6A59a9Eee821cE178f0aaBE1880874d48eca1] = true; whitelist[0x7149De569464C1c90f9d70cAf03B25dc2766E936] = true; whitelist[0xf21cE4A93534E725215bfEc2A5e1aDD496E80469] = true; whitelist[0xB7A641f8aebf507E1Bbc85F8feeEa56F38DbeB24] = true; whitelist[0x9a0F4440086141b9a405675fC8f839144Dd63B8F] = true; whitelist[0xbE18f84532d8f7fb6d7919401C0096f3e257DB8b] = true; whitelist[0xB4E383BEc5c5312F2E823d0A9C9eb17882f2aaF9] = true; whitelist[0x5b85988F0032ee818f911ec969Dd9c649CAa0a14] = true; whitelist[0xA43c750d5dE3Bd88EE4F35DEF72Cf76afEbeC274] = true; whitelist[0xfc35497204dA2d9539b23FE0D71022e2523d99b1] = true; whitelist[0x870ABcf52d52ECb1Ed00270433138262300BCC6d] = true; whitelist[0x5D39036947e83862cE5f3DB351cC64E3D4592cD5] = true; whitelist[0x63c9a867D704dF159bbBB88EeEe1609196b1995E] = true; whitelist[0xC0375Db78aB51B82E9bE2E139348491259280343] = true; whitelist[0x13EAEced8317889e7A3452A3ecb474b7801F20d8] = true; whitelist[0x81409E4C1a55C034EC86F64A75d18D911A8B0071] = true; whitelist[0x6CF51FDeF74d02296017A1129086Ee9C3477DC01] = true; whitelist[0xD87dB443b01Cb8e453c11f9a26F48CD51c19842a] = true; whitelist[0x10F555120485f0E352c0F11A4aC6f4A420300092] = true; whitelist[0xBf26925f736E90E1715ce4E04cD9c289dD1bc002] = true; whitelist[0xd39E6aD9d32D6c71326b800EA883c8Edc0b7B5e4] = true; whitelist[0xF03336c8c2B040cF026af8774B67127dFF5413A5] = true; whitelist[0x6CAd957812F1bb9aB9364F20cfA15482BcE9DE77] = true; whitelist[0x64aaaBE41689B60ed969386b2D154e3887f628F6] = true; whitelist[0x635954403448b9f55655FD5dbcC9675e8a4b8109] = true; whitelist[0xfCE9f37F4F554419E9c370c9e6c67Bd0020BF577] = true; whitelist[0x26FA038d801970EE46d53b0056658B4e1a4458Db] = true; whitelist[0x8e9817f8f20F4B6156B4548144a2affde1890f08] = true; whitelist[0xD6F50F21038c5479b9cc663794E7b5Fc876b3C26] = true; whitelist[0x5984bb82F11171cb1DC2287E2A6935c44D491538] = true; whitelist[0x0d79cce030AE9654aA9488524F407ce464297722] = true; whitelist[0x0A4D7Bf0abc967d6204b83173A98B14603057C08] = true; whitelist[0x908A52B2a18C7Adf135A861DE80b4952fF03BEEa] = true; whitelist[0xB8dCE88744A07baf3904BAc6D9cEE3D1927BBb5e] = true; whitelist[0x156D2893955A52fF0796d2D88BF6Ab2e7663e3FC] = true; whitelist[0x8b584Cf38bFE7d50809bbC2A622C7Bd118a82577] = true; whitelist[0x5f4B42AE45C1681f5b24eB6aFBd1F0f95d7c8E25] = true; whitelist[0xA6a576527217e0194c8CDb5f15F21209FeAB5FB7] = true; whitelist[0x40a4fce89b26E924A3b5f13A91E78A5dc4944a45] = true; whitelist[0x7f62Fbb8a9E707e44A198584ae2e8Db67cEfC30a] = true; whitelist[0xC82b6f107fA7Baeb0809B2645cE8AAC4328Cb75A] = true; whitelist[0xeFAE1190444Aae8CFF4915eb7D5054BFcDfEDcE6] = true; whitelist[0x963D961b4F18dB19d285F44e6De8D77BD457D7D6] = true; whitelist[0x538fAaE7e0fD3aDC7C400b0A1CCA242095ebB554] = true; whitelist[0x3049c80BDD527128eb4E7886AB1Db1E8042a8EB7] = true; whitelist[0x08BeEabCa238deb5ee1016618BF80c40Ad221C98] = true; whitelist[0xcA7F8f6A21C6e0F3b0177207407Fc935429BdD27] = true; whitelist[0xD45FcAca001032bcB6DC509b4E0dc97A3351Ca88] = true; whitelist[0xA0dc2b64eb9c93334225032383344a9a62DA9Ef0] = true; whitelist[0x9e353fbdC3eC7290290BdA31a8001cb609858adf] = true; whitelist[0x465FE2dbE1F73FA4dB8b2a3b8A4aafcACb2Bf1AA] = true; whitelist[0x8468c6Efa8ca7ffccB2C31D112e5e9331A469867] = true; whitelist[0x04A0f10c0Dcfa5a4C060E5421f385c2A0E541a94] = true; whitelist[0x61412bB7b13c24C3A913639a22BE592D65e797b6] = true; whitelist[0x12429F85Fa35183Bc7cA6750303ee3f6AFE31d13] = true; whitelist[0xE349a754b82eFa0AB90C69BBc2Bcc7Cf17CC8650] = true; whitelist[0x6f158C7DdAeb8594d36C8869bee1B3080a6e5317] = true; whitelist[0x1e9b0e7D28bC135584EA1717065a6CcE3298a80D] = true; whitelist[0x98C744edfd71F95a63423bEe72eAE5cB78415067] = true; whitelist[0x921AC49968F27B7922B5aB1757ef30508e787580] = true; whitelist[0x294e20DA26e64730FadA867213d011B622aD0bb8] = true; whitelist[0xd2a4A34eF72F766f269409702A811eec8D55F2dE] = true; whitelist[0x7ae9185fc5fC77fdf2CaFCb0018a54C34E733fe7] = true; whitelist[0x44Acd0Ff3bE9Fdfb932453C82B5dF5739D28b276] = true; whitelist[0x0Ed67742bb18250F0e0CeD12B980668A32437915] = true; whitelist[0xaa126ef289c099D46a5a9484C95707E681D278DD] = true; whitelist[0xdd8D647b0133dEdC7907bbd2E303C029E2009d2a] = true; whitelist[0xd81a19b8b3BE4912018b32AD634C0CA873f45189] = true; whitelist[0x13adb88D0CE40651625b43B597019f9CE3D60bCC] = true; whitelist[0x9FBEacDf803004e8BEF3e5013faF0bF0090e6588] = true; whitelist[0xE792be33d36df027c6a5ad9bFe9F74bD40AD0F58] = true; whitelist[0x064a5d4359FFF916e59E0d68f6094729c4052B8b] = true; whitelist[0xBc159B71c296c21a1895a8dDf0aa45969c5F17c2] = true; whitelist[0xeC31a56b8323dd7289F5f69F99F8F8558faDBBc9] = true; whitelist[0xF9687743fb84966f63afB100B0F6be8E4aEc374e] = true; whitelist[0x21A56D488521C02644698Bf30dF4D7aC21B03ED4] = true; whitelist[0x83B045a90C8f67B7734D3b0417ed20eD5933E67D] = true; whitelist[0x89A5d9e66AA6439f9daBa379078193AbA58d949a] = true; whitelist[0xf062B3ab33A518Ef57e0039379A128CaF2e01AD8] = true; whitelist[0x71fE41C174277D4f6D52BfB10B7CE8cB55Bad9Fe] = true; whitelist[0x0388134B224Fc69B19f26c65581356B6eEA9aF81] = true; whitelist[0xf403ad7F9F36D0201d5AFe7331b40835E3CEd922] = true; whitelist[0x166B6770f7513ee4BE7a88f7C8d250E5E8BCbfAF] = true; whitelist[0x97ca6aE239E5476b546Fc873002BF117Cc52F6df] = true; whitelist[0x76AaD6e2165a469feA3A02F545D9f6e5E6AAd2d5] = true; whitelist[0xf4c7E60fC24Bd932b275cAa71C4Cf6642e49F5BD] = true; whitelist[0xe8C0C83C181AACdab4f48624B5574CC88aD8E840] = true; whitelist[0x0910AEd2f4a4b3E7F399F3d5Cf6EdacA132b83D0] = true; whitelist[0xD631A7500c39368F021109F497c4eD85B8a256EA] = true; whitelist[0x127563d0B37872e4956BF9B033e3cc03c6bF7E45] = true; whitelist[0x88d6F54C227A0483272f03435af70b4A864A0333] = true; whitelist[0xCdD607DECbe9b714F6E032bA478830a521753233] = true; whitelist[0x92353D9186a1d02bE280F55C8A563762A9Edc100] = true; whitelist[0x2B5b1Fffe86302F73e478a0E09d8Bf92eC75FFba] = true; whitelist[0x6f7d991841CeFF8cEdFF91CfFc913a2CB4560d71] = true; whitelist[0x585020d9C6b56874B78979F29d84E082D34f0B2a] = true; whitelist[0x93f5af632Ce523286e033f0510E9b3C9710F4489] = true; whitelist[0x3DdaEf422793e387bdD2aD26F5d511A949708B1A] = true; whitelist[0x07D7E180C0Bd4ee3d5e25006dB854D81f76Fe1Fb] = true; whitelist[0x129e81DAD8cFAEecEE130309b39B5F22215062ED] = true; whitelist[0xdB32722A9dc5da52273F4fB1F25a8c75176c9Db2] = true; whitelist[0x688c3689C5a3Fa844C1D186db2393d4590044178] = true; whitelist[0x51D2C8b408B264dA569f75eCE31172f50b27E838] = true; whitelist[0xcCEE65c43C62338f13A638bB98f18E36801B7450] = true; whitelist[0xbB02B1B914590f69e9f1942d205f77276b4B3CA9] = true; whitelist[0xba30963F47A2d33476E922Faa55bEc570C433dD0] = true; whitelist[0xaca3365a1A6DBA0839b3B56219Cf250eBB9F32f1] = true; whitelist[0x70e703ba15c43Aa6D043b8c29e60927E3b01df73] = true; whitelist[0x374D37AA9d27C8a03F0d34Db0a9D441aAc99F186] = true; whitelist[0x70b53C16852a2e341a31F0e884983DE58B937301] = true; whitelist[0xAbC3EF008F7693C5A87ba317AA370c102C1DD690] = true; whitelist[0xCc22DDc2e3B896Dd2b22A18590E73a2194B22c9C] = true; whitelist[0xB16E1101CbB48F631AB4dBd54c801Ecef9B47D2b] = true; whitelist[0x81D7D1dc2B8de78E68a082C858DAcB5ed3631133] = true; whitelist[0x7Bf7Dedb68CAC2cFD0d99DFdDb703c4CE9640941] = true; whitelist[0xA87fB81CDC6dfa965Bf8b7F43219BCc326A74Cfb] = true; whitelist[0xCB0B5c48E08dC20A7F535E106703f3172fBE3012] = true; whitelist[0xe15863985BE0c9Fb9D590E2d1D6486a551d63e06] = true; whitelist[0x506adE0A94949dB63047346D3796A01C09384198] = true; whitelist[0x61069795367ECC82167b8349BBb562449e452aac] = true; whitelist[0x6d55db28aAaD7Ad31b33BF48a0461e202BF18622] = true; whitelist[0x4d28975B4Ed2a1a9A00C657f28344DCe37EE0Ac6] = true; whitelist[0xF6196741d0896dc362788C1FDbDF91b544Ab7C1C] = true; whitelist[0x52d2D6E5A8b0a7594250D720b66a791fc8e71538] = true; whitelist[0x24ED3B0C0a1cb8fEce7E3A25A34e86613234dD04] = true; whitelist[0x3Bd8a3C2d90e1709259Cd271A8e8d2C5caDeBE82] = true; whitelist[0x46B8FfC41F26cd896E033942cAF999b78d10c277] = true; whitelist[0x25D1cbf24e549CcaD81c2A5cab9e62c6be208920] = true; whitelist[0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E] = true; whitelist[0x03b76647464CF57255f20289D2501417A5eC457E] = true; whitelist[0x338bfa2c23Cc5Daf45208A2f23431d91e668515a] = true; whitelist[0x67C0fc4B0490ab7E76C08C2bbD30fAc0059bbc7A] = true; whitelist[0xE37689CFf507cB199f55eaA23338181C9a63a748] = true; whitelist[0xA37F6C27c603619B729adCe9849f2C4FcF79AD83] = true; whitelist[0xFD0d152BF613956B6929A7156fE75eEE2A20C3B6] = true; whitelist[0x25DbEB6565778B8570f8936165370348f16E7E88] = true; whitelist[0x467e20bD74Bbba59dc6C88B3A975fBC381FA2441] = true; whitelist[0xff4d2D37a08f1B0d40dda7eAd1D88Aa5ceEF7C66] = true; whitelist[0x4010a534B8Ab01945DEc322F4eecd6A4B4785277] = true; whitelist[0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301] = true; whitelist[0xcbBC5D06BE48B9B1D90A8E787B4d42bc4A3B74a8] = true; whitelist[0x908A52B2a18C7Adf135A861DE80b4952fF03BEEa] = true; whitelist[0x0B431F91c54C303AE29E4023A70da6caDEB0D387] = true; whitelist[0xC2ea0584A6B5dF8Ad2C488A208B2f1ac25f4019f] = true; whitelist[0xf2306b7547b4E7C3d2B4F0864900414A91d5571f] = true; whitelist[0x387EAf27c966bB6dEE6A0E8bA45ba0854d01Ee32] = true; whitelist[0x291F8D2F3D94ef8731807883B452A92627714d03] = true; whitelist[0x74f90fC63084F5AC7546d105397034ac8A4a51F7] = true; whitelist[0x6B511F9919E0239d345E2F0f2688E11d168829D1] = true; whitelist[0x700bdccb187238bC4263C233bCBE48c3BcF7d32d] = true; whitelist[0xb06336f40e1dE49c9c2f35C5742d1923cB4A9E7D] = true; whitelist[0xc6fE56E09F826245304BA8210BAEcAC306e67357] = true; whitelist[0xA538311df7DC52bBE861F6e3EfDD749730503Cae] = true; whitelist[0x42147EE918238fdfF257a15fA758944D6b870B6A] = true; whitelist[0x5b049c3Bef543a181A720DcC6fEbc9afdab5D377] = true; whitelist[0xBacEcAc3EA45372e6a83C2B97032211e4758368a] = true; whitelist[0x9Fe686D6fAcBC5AE4433308B26e7c810ac43F3D4] = true; whitelist[0x85b25DF7991AfF597DCf936DdC66A41100A1DF38] = true; whitelist[0x51Bc4B6db5D958d066d3c6C11C4396e881961bca] = true; whitelist[0x5CbAfbE163BD766B5EEd26D81ECea0f41f232847] = true; whitelist[0x8e76Bcf139d65f9c160E8Ef0ED321d7049A3ee83] = true; whitelist[0xB80216042142Ef55F6d61FD5ae0F23B25D150178] = true; whitelist[0x8760E565273B47195F76A22455Ce0B68A11aF5B5] = true; whitelist[0x164D39D1DB5Ec3b4472a18F0E588F0C1F0D98d9E] = true; whitelist[0x404C4f2C30B70135964397eA658C26b6997bdeD5] = true; whitelist[0xE2BF97AdEcabf5bbd9C184b287Cd0a0490c259Be] = true; whitelist[0x7dD1a007Ff481FEa56F9F5B5832ec9f40c01172e] = true; whitelist[0xca1B8F95046506fdF2560880b2beB2950CC9aED6] = true; whitelist[0x75A4c4730e354e1097bf2f8D447Ae7751c20E480] = true; whitelist[0x3B1d9AF9fBe4DE15E4C320304204c623E6726358] = true; whitelist[0xbcf7564427Bfa1C2f305eD2352E3987f19b46608] = true; whitelist[0xebeA475d9453122fA1E87E79883893A20A12f3f9] = true; whitelist[0x2E2Aa9909361F5e1c9f2f8a85AFF7ee8194eCCe9] = true; whitelist[0x399b282c17F8ed9F542C2376917947d6B79E2Cc6] = true; whitelist[0xd63a8b9699fbe0b0B70C443CDA57CD667A77D1b2] = true; whitelist[0x76AaD6e2165a469feA3A02F545D9f6e5E6AAd2d5] = true; whitelist[0x8b09C4Fd7f3beAFc91bbcA198313CFD0D1a5ecbB] = true; whitelist[0xDb704Df06A7fA515fe77B30595451346198bC44C] = true; whitelist[0x576fe99A39fEC41fC644f193C8F539FaEb038241] = true; whitelist[0x0869fD08Ff42889e11E09A0c2B46Ce3d163a25D5] = true; whitelist[0xcD5d0593c17c40BD2BB857B2dc9F6A3771862D8d] = true; whitelist[0x7C1ec41944A9591f48e44A9d4e8eDC43B7D58948] = true; whitelist[0x04b936745C02E8Cb75cC68b93B4fb99b38939d5D] = true; whitelist[0x4670D6b9AEf53615382934A481B133B70a3B631a] = true; whitelist[0xD87dB443b01Cb8e453c11f9a26F48CD51c19842a] = true; whitelist[0xe1b6514df22AfCd09DE787FdA75d0834bF9c8DC1] = true; whitelist[0xA3fE401D499f306C49b54ee89b4160f4832Cbe6e] = true; whitelist[0x98b7C27df27C857536C61aDEa0D3C9C7E327432d] = true; whitelist[0xAFdfF5466Db276b274BAE48336D1B6f70F644065] = true; whitelist[0x80b3bdAD4bA4D26aAe097f742A97cd016aB46F86] = true; whitelist[0x72a5Ba942a401C4BD08a32963B75f971292213a8] = true; whitelist[0xe2438Db969db43314040e51F95D425c1fe1cc433] = true; whitelist[0x7f59fbfe6C2cBA95173d69B4B0B00E09c76501FC] = true; whitelist[0xd29979e7a3560C450Dd94333215D42898e1BbA72] = true; whitelist[0xdFA2ba1473d66e06b57278A058e411364caB1449] = true; whitelist[0xF4F98B4a1B0a0F46bA8856939bAC69A40b1F5f56] = true; } function testMint() public onlyOwner { mine.mint(address(this), 1); } function isInWhitelist(address account) public view returns(bool) { return whitelist[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract SpaceMineToken","name":"_mine","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mineAmount","type":"uint256"}],"name":"BuyMineSuccess","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"},{"inputs":[],"name":"LOCK_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LPGenerationCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnLeftoverMine","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeToNotOnlyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkpresaleLastSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyDrain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialLiquidityMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isInWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityGeneration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mine","outputs":[{"internalType":"contract SpaceMineToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleLastSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMinePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLPTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPresaleContributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a8055673782dace9d900000600b556000600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506901b1ae4d6e2ef5000000600d556856bc75e2d631000000600e553480156200007257600080fd5b506040516200904238038062009042833981810160405260208110156200009857600080fd5b81019080805190602001909291905050506000620000bb620001c160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001aa620001c960201b60201c565b620001ba6200562b60201b60201c565b5062005a54565b600033905090565b6001600760007304b936745c02e8cb75cc68b93b4fb99b38939d5d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cc4fb675c46f3715c52307c4d2f8640c4ef7bb3173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a734871bc0f9d069936db4fa44aea6d4325f41e573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739a8ea427c5cf4490c07428b853a5577c9b7a2d1473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739dc6a59a9eee821ce178f0aabe1880874d48eca173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737149de569464c1c90f9d70caf03b25dc2766e93673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f21ce4a93534e725215bfec2a5e1add496e8046973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b7a641f8aebf507e1bbc85f8feeea56f38dbeb2473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739a0f4440086141b9a405675fc8f839144dd63b8f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073be18f84532d8f7fb6d7919401c0096f3e257db8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b4e383bec5c5312f2e823d0a9c9eb17882f2aaf973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735b85988f0032ee818f911ec969dd9c649caa0a1473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a43c750d5de3bd88ee4f35def72cf76afebec27473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073fc35497204da2d9539b23fe0d71022e2523d99b173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073870abcf52d52ecb1ed00270433138262300bcc6d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735d39036947e83862ce5f3db351cc64e3d4592cd573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007363c9a867d704df159bbbb88eeee1609196b1995e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073c0375db78ab51b82e9be2e13934849125928034373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007313eaeced8317889e7a3452a3ecb474b7801f20d873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007381409e4c1a55c034ec86f64a75d18d911a8b007173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736cf51fdef74d02296017a1129086ee9c3477dc0173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d87db443b01cb8e453c11f9a26f48cd51c19842a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007310f555120485f0e352c0f11a4ac6f4a42030009273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073bf26925f736e90e1715ce4e04cd9c289dd1bc00273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d39e6ad9d32d6c71326b800ea883c8edc0b7b5e473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f03336c8c2b040cf026af8774b67127dff5413a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736cad957812f1bb9ab9364f20cfa15482bce9de7773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007364aaabe41689b60ed969386b2d154e3887f628f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073635954403448b9f55655fd5dbcc9675e8a4b810973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073fce9f37f4f554419e9c370c9e6c67bd0020bf57773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007326fa038d801970ee46d53b0056658b4e1a4458db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738e9817f8f20f4b6156b4548144a2affde1890f0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d6f50f21038c5479b9cc663794e7b5fc876b3c2673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735984bb82f11171cb1dc2287e2a6935c44d49153873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730d79cce030ae9654aa9488524f407ce46429772273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730a4d7bf0abc967d6204b83173a98b14603057c0873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073908a52b2a18c7adf135a861de80b4952ff03beea73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b8dce88744a07baf3904bac6d9cee3d1927bbb5e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073156d2893955a52ff0796d2d88bf6ab2e7663e3fc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738b584cf38bfe7d50809bbc2a622c7bd118a8257773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735f4b42ae45c1681f5b24eb6afbd1f0f95d7c8e2573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a6a576527217e0194c8cdb5f15f21209feab5fb773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007340a4fce89b26e924a3b5f13a91e78a5dc4944a4573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737f62fbb8a9e707e44a198584ae2e8db67cefc30a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073c82b6f107fa7baeb0809b2645ce8aac4328cb75a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073efae1190444aae8cff4915eb7d5054bfcdfedce673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073963d961b4f18db19d285f44e6de8d77bd457d7d673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073538faae7e0fd3adc7c400b0a1cca242095ebb55473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000733049c80bdd527128eb4e7886ab1db1e8042a8eb773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007308beeabca238deb5ee1016618bf80c40ad221c9873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ca7f8f6a21c6e0f3b0177207407fc935429bdd2773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d45fcaca001032bcb6dc509b4e0dc97a3351ca8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a0dc2b64eb9c93334225032383344a9a62da9ef073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739e353fbdc3ec7290290bda31a8001cb609858adf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073465fe2dbe1f73fa4db8b2a3b8a4aafcacb2bf1aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738468c6efa8ca7ffccb2c31d112e5e9331a46986773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007304a0f10c0dcfa5a4c060e5421f385c2a0e541a9473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007361412bb7b13c24c3a913639a22be592d65e797b673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007312429f85fa35183bc7ca6750303ee3f6afe31d1373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e349a754b82efa0ab90c69bbc2bcc7cf17cc865073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736f158c7ddaeb8594d36c8869bee1b3080a6e531773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000731e9b0e7d28bc135584ea1717065a6cce3298a80d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007398c744edfd71f95a63423bee72eae5cb7841506773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073921ac49968f27b7922b5ab1757ef30508e78758073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073294e20da26e64730fada867213d011b622ad0bb873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d2a4a34ef72f766f269409702a811eec8d55f2de73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737ae9185fc5fc77fdf2cafcb0018a54c34e733fe773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007344acd0ff3be9fdfb932453c82b5df5739d28b27673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730ed67742bb18250f0e0ced12b980668a3243791573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073aa126ef289c099d46a5a9484c95707e681d278dd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073dd8d647b0133dedc7907bbd2e303c029e2009d2a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d81a19b8b3be4912018b32ad634c0ca873f4518973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007313adb88d0ce40651625b43b597019f9ce3d60bcc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739fbeacdf803004e8bef3e5013faf0bf0090e658873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e792be33d36df027c6a5ad9bfe9f74bd40ad0f5873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073064a5d4359fff916e59e0d68f6094729c4052b8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073bc159b71c296c21a1895a8ddf0aa45969c5f17c273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ec31a56b8323dd7289f5f69f99f8f8558fadbbc973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f9687743fb84966f63afb100b0f6be8e4aec374e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007321a56d488521c02644698bf30df4d7ac21b03ed473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007383b045a90c8f67b7734d3b0417ed20ed5933e67d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007389a5d9e66aa6439f9daba379078193aba58d949a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f062b3ab33a518ef57e0039379a128caf2e01ad873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007371fe41c174277d4f6d52bfb10b7ce8cb55bad9fe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730388134b224fc69b19f26c65581356b6eea9af8173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f403ad7f9f36d0201d5afe7331b40835e3ced92273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073166b6770f7513ee4be7a88f7c8d250e5e8bcbfaf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007397ca6ae239e5476b546fc873002bf117cc52f6df73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007376aad6e2165a469fea3a02f545d9f6e5e6aad2d573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f4c7e60fc24bd932b275caa71c4cf6642e49f5bd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e8c0c83c181aacdab4f48624b5574cc88ad8e84073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730910aed2f4a4b3e7f399f3d5cf6edaca132b83d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d631a7500c39368f021109f497c4ed85b8a256ea73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073127563d0b37872e4956bf9b033e3cc03c6bf7e4573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007388d6f54c227a0483272f03435af70b4a864a033373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cdd607decbe9b714f6e032ba478830a52175323373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007392353d9186a1d02be280f55c8a563762a9edc10073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000732b5b1fffe86302f73e478a0e09d8bf92ec75ffba73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736f7d991841ceff8cedff91cffc913a2cb4560d7173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073585020d9c6b56874b78979f29d84e082d34f0b2a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007393f5af632ce523286e033f0510e9b3c9710f448973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000733ddaef422793e387bdd2ad26f5d511a949708b1a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007307d7e180c0bd4ee3d5e25006db854d81f76fe1fb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073129e81dad8cfaeecee130309b39b5f22215062ed73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073db32722a9dc5da52273f4fb1f25a8c75176c9db273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073688c3689c5a3fa844c1d186db2393d459004417873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007351d2c8b408b264da569f75ece31172f50b27e83873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ccee65c43c62338f13a638bb98f18e36801b745073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073bb02b1b914590f69e9f1942d205f77276b4b3ca973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ba30963f47a2d33476e922faa55bec570c433dd073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073aca3365a1a6dba0839b3b56219cf250ebb9f32f173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007370e703ba15c43aa6d043b8c29e60927e3b01df7373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073374d37aa9d27c8a03f0d34db0a9d441aac99f18673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007370b53c16852a2e341a31f0e884983de58b93730173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073abc3ef008f7693c5a87ba317aa370c102c1dd69073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cc22ddc2e3b896dd2b22a18590e73a2194b22c9c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b16e1101cbb48f631ab4dbd54c801ecef9b47d2b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007381d7d1dc2b8de78e68a082c858dacb5ed363113373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737bf7dedb68cac2cfd0d99dfddb703c4ce964094173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a87fb81cdc6dfa965bf8b7f43219bcc326a74cfb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cb0b5c48e08dc20a7f535e106703f3172fbe301273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e15863985be0c9fb9d590e2d1d6486a551d63e0673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073506ade0a94949db63047346d3796a01c0938419873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007361069795367ecc82167b8349bbb562449e452aac73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736d55db28aaad7ad31b33bf48a0461e202bf1862273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000734d28975b4ed2a1a9a00c657f28344dce37ee0ac673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f6196741d0896dc362788c1fdbdf91b544ab7c1c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007352d2d6e5a8b0a7594250d720b66a791fc8e7153873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007324ed3b0c0a1cb8fece7e3a25a34e86613234dd0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000733bd8a3c2d90e1709259cd271a8e8d2c5cadebe8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007346b8ffc41f26cd896e033942caf999b78d10c27773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007325d1cbf24e549ccad81c2a5cab9e62c6be20892073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e139962e5d7b07a9378f159a4a1b7cabe9df1d6e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007303b76647464cf57255f20289d2501417a5ec457e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073338bfa2c23cc5daf45208a2f23431d91e668515a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007367c0fc4b0490ab7e76c08c2bbd30fac0059bbc7a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e37689cff507cb199f55eaa23338181c9a63a74873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a37f6c27c603619b729adce9849f2c4fcf79ad8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073fd0d152bf613956b6929a7156fe75eee2a20c3b673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007325dbeb6565778b8570f8936165370348f16e7e8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073467e20bd74bbba59dc6c88b3a975fbc381fa244173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ff4d2d37a08f1b0d40dda7ead1d88aa5ceef7c6673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000734010a534b8ab01945dec322f4eecd6a4b478527773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d9d4e0f4c81d13edf3ee8cec6ff026a06d41830173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cbbc5d06be48b9b1d90a8e787b4d42bc4a3b74a873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073908a52b2a18c7adf135a861de80b4952ff03beea73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730b431f91c54c303ae29e4023a70da6cadeb0d38773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073c2ea0584a6b5df8ad2c488a208b2f1ac25f4019f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f2306b7547b4e7c3d2b4f0864900414a91d5571f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073387eaf27c966bb6dee6a0e8ba45ba0854d01ee3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073291f8d2f3d94ef8731807883b452a92627714d0373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007374f90fc63084f5ac7546d105397034ac8a4a51f773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000736b511f9919e0239d345e2f0f2688e11d168829d173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073700bdccb187238bc4263c233bcbe48c3bcf7d32d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b06336f40e1de49c9c2f35c5742d1923cb4a9e7d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073c6fe56e09f826245304ba8210baecac306e6735773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a538311df7dc52bbe861f6e3efdd749730503cae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007342147ee918238fdff257a15fa758944d6b870b6a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735b049c3bef543a181a720dcc6febc9afdab5d37773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073bacecac3ea45372e6a83c2b97032211e4758368a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739fe686d6facbc5ae4433308b26e7c810ac43f3d473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007385b25df7991aff597dcf936ddc66a41100a1df3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007351bc4b6db5d958d066d3c6c11c4396e881961bca73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000735cbafbe163bd766b5eed26d81ecea0f41f23284773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738e76bcf139d65f9c160e8ef0ed321d7049a3ee8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073b80216042142ef55f6d61fd5ae0f23b25d15017873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738760e565273b47195f76a22455ce0b68a11af5b573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073164d39d1db5ec3b4472a18f0e588f0c1f0d98d9e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073404c4f2c30b70135964397ea658c26b6997bded573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e2bf97adecabf5bbd9c184b287cd0a0490c259be73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737dd1a007ff481fea56f9f5b5832ec9f40c01172e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ca1b8f95046506fdf2560880b2beb2950cc9aed673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007375a4c4730e354e1097bf2f8d447ae7751c20e48073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000733b1d9af9fbe4de15e4c320304204c623e672635873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073bcf7564427bfa1c2f305ed2352e3987f19b4660873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073ebea475d9453122fa1e87e79883893a20a12f3f973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000732e2aa9909361f5e1c9f2f8a85aff7ee8194ecce973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073399b282c17f8ed9f542c2376917947d6b79e2cc673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d63a8b9699fbe0b0b70c443cda57cd667a77d1b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007376aad6e2165a469fea3a02f545d9f6e5e6aad2d573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000738b09c4fd7f3beafc91bbca198313cfd0d1a5ecbb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073db704df06a7fa515fe77b30595451346198bc44c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073576fe99a39fec41fc644f193c8f539faeb03824173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000730869fd08ff42889e11e09a0c2b46ce3d163a25d573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073cd5d0593c17c40bd2bb857b2dc9f6a3771862d8d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737c1ec41944a9591f48e44a9d4e8edc43b7d5894873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007304b936745c02e8cb75cc68b93b4fb99b38939d5d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000734670d6b9aef53615382934a481b133b70a3b631a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d87db443b01cb8e453c11f9a26f48cd51c19842a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e1b6514df22afcd09de787fda75d0834bf9c8dc173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073a3fe401d499f306c49b54ee89b4160f4832cbe6e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007398b7c27df27c857536c61adea0d3c9c7e327432d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073afdff5466db276b274bae48336d1b6f70f64406573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007380b3bdad4ba4d26aae097f742a97cd016ab46f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007372a5ba942a401c4bd08a32963b75f971292213a873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073e2438db969db43314040e51f95d425c1fe1cc43373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000737f59fbfe6c2cba95173d69b4b0b00e09c76501fc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073d29979e7a3560c450dd94333215d42898e1bba7273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073dfa2ba1473d66e06b57278a058e411364cab144973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016007600073f4f98b4a1b0a0f46ba8856939bac69a40b1f5f5673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507317e00383a843a9922bca3b280c0ade9f8ba48449600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200573a6200573c60201b60201c565b565b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462005801576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f546f6b656e3a20706f6f6c20616c72656164792063726561746564000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c65396600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620058a857600080fd5b505afa158015620058bd573d6000803e3d6000fd5b505050506040513d6020811015620058d457600080fd5b8101908080519060200190929190505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200597257600080fd5b505af115801562005987573d6000803e3d6000fd5b505050506040513d60208110156200599e57600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6135de8062005a646000396000f3fe6080604052600436106101f15760003560e01c80636a2f796c1161010d57806399f4b251116100a0578063d0d41fe11161006f578063d0d41fe114610bc4578063dd31ee2d14610c15578063de8801e514610c50578063e43252d714610c7d578063f2fde38b14610cce57610691565b806399f4b25114610ac45780639b19251a14610b05578063a88e099614610b6c578063b6044c5014610b9957610691565b80638ab1d681116100dc5780638ab1d681146109b65780638da5cb5b14610a075780639547d2c314610a485780639642ddaf14610aad57610691565b80636a2f796c14610932578063715018a61461095d57806378f6e998146109745780637ea382c11461099f57610691565b80631ad2ad1a116101855780633d6c5809116101545780633d6c5809146108985780634d332457146108af5780635674427b146108f0578063589210d91461090757610691565b80631ad2ad1a1461080457806328539c171461081b5780632c568f53146108465780632caac08b1461088157610691565b806310b1219e116101c157806310b1219e1461076a57806314b8fecc146107955780631820cabb146107c2578063196684fe146107ed57610691565b80622b13291461069657806304c98b2b146106c157806309fd8212146106d85780630de51d351461073f57610691565b3661069157600c60009054906101000a900460ff1661025b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061346f6028913960400191505060405180910390fd5b6000600d5410156102b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061355e6026913960400191505060405180910390fd5b600c60019054906101000a900460ff161561036f57600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806134e2603a913960400191505060405180910390fd5b5b60006103c334600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d1f90919063ffffffff16565b9050600b54811115610420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134976026913960400191505060405180910390fd5b6000610437600a5434610da790919063ffffffff16565b9050600d54811115610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061344d6022913960400191505060405180910390fd5b6104a934601254610d1f90919063ffffffff16565b506104bf81600d54610e2d90919063ffffffff16565b600d81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610515600234610e7790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610540573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b5050505081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f982d9579894dbf2949796cafd82300da765550d9f7c0d75f74aa4fe5e8821a99333483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050005b600080fd5b3480156106a257600080fd5b506106ab610ec1565b6040518082815260200191505060405180910390f35b3480156106cd57600080fd5b506106d6610ec7565b005b3480156106e457600080fd5b50610727600480360360208110156106fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611060565b60405180821515815260200191505060405180910390f35b34801561074b57600080fd5b506107546110b6565b6040518082815260200191505060405180910390f35b34801561077657600080fd5b5061077f6110bc565b6040518082815260200191505060405180910390f35b3480156107a157600080fd5b506107aa6110c6565b60405180821515815260200191505060405180910390f35b3480156107ce57600080fd5b506107d76110d9565b6040518082815260200191505060405180910390f35b3480156107f957600080fd5b506108026110e0565b005b34801561081057600080fd5b50610819611a7a565b005b34801561082757600080fd5b50610830611b5f565b6040518082815260200191505060405180910390f35b34801561085257600080fd5b5061087f6004803603602081101561086957600080fd5b8101908080359060200190929190505050611b65565b005b34801561088d57600080fd5b50610896611c37565b005b3480156108a457600080fd5b506108ad611f7a565b005b3480156108bb57600080fd5b506108c461205f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108fc57600080fd5b50610905612085565b005b34801561091357600080fd5b5061091c61232b565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b50610947612331565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b50610972612337565b005b34801561098057600080fd5b506109896124bd565b6040518082815260200191505060405180910390f35b3480156109ab57600080fd5b506109b46124c3565b005b3480156109c257600080fd5b50610a05600480360360208110156109d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f5565b005b348015610a1357600080fd5b50610a1c612aba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5457600080fd5b50610a9760048036036020811015610a6b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae3565b6040518082815260200191505060405180910390f35b348015610ab957600080fd5b50610ac2612afb565b005b348015610ad057600080fd5b50610ad9612c71565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b1157600080fd5b50610b5460048036036020811015610b2857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c97565b60405180821515815260200191505060405180910390f35b348015610b7857600080fd5b50610b81612cb7565b60405180821515815260200191505060405180910390f35b348015610ba557600080fd5b50610bae612cca565b6040518082815260200191505060405180910390f35b348015610bd057600080fd5b50610c1360048036036020811015610be757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd0565b005b348015610c2157600080fd5b50610c4e60048036036020811015610c3857600080fd5b8101908080359060200190929190505050612ddc565b005b348015610c5c57600080fd5b50610c65612eae565b60405180821515815260200191505060405180910390f35b348015610c8957600080fd5b50610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec1565b005b348015610cda57600080fd5b50610d1d60048036036020811015610cf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061308d565b005b600080828401905083811015610d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415610dba5760009050610e27565b6000828402905082848281610dcb57fe5b0414610e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061351c6021913960400191505060405180910390fd5b809150505b92915050565b6000610e6f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613298565b905092915050565b6000610eb983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613358565b905092915050565b60115481565b610ecf61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600c60006101000a81548160ff02191690831515021790555042600f81905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600d54905090565b601060009054906101000a900460ff1681565b62eff10081565b60001515601060009054906101000a900460ff1615151461114c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135846025913960400191505060405180910390fd5b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b5050505050600047146112cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b505050506040513d602081101561138c57600080fd5b81019080805190602001909291905050505060006113b4600484610da790919063ffffffff16565b9050600e5481111561142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4572726f7220616d6f756e74000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b505050506040513d602081101561150d57600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156115aa57600080fd5b505af11580156115be573d6000803e3d6000fd5b505050506040513d60208110156115d457600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561166f57600080fd5b505afa158015611683573d6000803e3d6000fd5b505050506040513d602081101561169957600080fd5b810190808051906020019092919050505060118190555060006011541415611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600062eff10042019050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166011546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399c6d2de600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601154846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561190057600080fd5b505af1158015611914573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119c557600080fd5b505afa1580156119d9573d6000803e3d6000fd5b505050506040513d60208110156119ef57600080fd5b81019080805190602001909291905050501415611a74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4175746f206c6f636b206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b50505050565b611a8261341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b600d5481565b611b6d61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b611c3f61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42611d186202a300600f54610d1f90919063ffffffff16565b10611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f477261636520706572696f64206973206e6f74206f766572207965740000000081525060200191505060405180910390fd5b6000611da1600447610da790919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7360e2e1b2a317edfc870b6fc6886f69083fb2099a836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050506040513d6020811015611e7457600080fd5b81019080805190602001909291905050505060007360e2e1b2a317edfc870b6fc6886f69083fb2099a73ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114611efa576040519150601f19603f3d011682016040523d82523d6000602084013e611eff565b606091505b5050905080611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b5050565b611f8261341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61208d61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b426121666202a300600f54610d1f90919063ffffffff16565b106121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f477261636520706572696f64206973206e6f74206f766572207965740000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122a057600080fd5b505afa1580156122b4573d6000803e3d6000fd5b505050506040513d60208110156122ca57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b50505050565b600b5481565b600f5481565b61233f61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b6124cb61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393dcd021600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561265657600080fd5b505afa15801561266a573d6000803e3d6000fd5b505050506040513d602081101561268057600080fd5b81019080805190602001909291905050509050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e281a98600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561274857600080fd5b505af115801561275c573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561282857600080fd5b505afa15801561283c573d6000803e3d6000fd5b505050506040513d602081101561285257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b505050506040513d60208110156128e057600080fd5b81019080805190602001909291905050505050565b6128fd61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061353d6021913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b612b0361341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f193060016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c5757600080fd5b505af1158015612c6b573d6000803e3d6000fd5b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600e5481565b612cd861341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612de461341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ea4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b600c60009054906101000a900460ff1681565b612ec961341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806134bd6025913960400191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61309561341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290613345576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561330a5780820151818401526020810190506132ef565b50505050905090810190601f1680156133375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133c95780820151818401526020810190506133ae565b50505050905090810190601f1680156133f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161341057fe5b049050809150509392505050565b60003390509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373736f7272792c20696e73756666696369656e742070726573616c6520737570706c7950726573616c6520686173206e6f74206265656e20737461727465642c206275636b6c652075702145766572796f6e652073686f756c6420627579206c6573736572207468616e2034206574682e54686973206163636f756e7420697320616c726561647920696e2077686974656c6973742e43757272656e746c79206f6e6c792070656f706c652077686f2061726520696e2077686974656c6973742063616e207061727469636970617465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7754686973206163636f756e74206973206e6f7420696e2077686974656c6973742e4f6820796f752061726520746f6f206c6174652c20616c6c206d696e652061726520676f6e654c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a2646970667358221220e5aa4b937acba1a512ad6963c14c20c4af69b789ad6226b95ed075476222c11964736f6c634300060c00330000000000000000000000008356806910ee22cfc0c45d2f5fc32c18016d8423
Deployed Bytecode
0x6080604052600436106101f15760003560e01c80636a2f796c1161010d57806399f4b251116100a0578063d0d41fe11161006f578063d0d41fe114610bc4578063dd31ee2d14610c15578063de8801e514610c50578063e43252d714610c7d578063f2fde38b14610cce57610691565b806399f4b25114610ac45780639b19251a14610b05578063a88e099614610b6c578063b6044c5014610b9957610691565b80638ab1d681116100dc5780638ab1d681146109b65780638da5cb5b14610a075780639547d2c314610a485780639642ddaf14610aad57610691565b80636a2f796c14610932578063715018a61461095d57806378f6e998146109745780637ea382c11461099f57610691565b80631ad2ad1a116101855780633d6c5809116101545780633d6c5809146108985780634d332457146108af5780635674427b146108f0578063589210d91461090757610691565b80631ad2ad1a1461080457806328539c171461081b5780632c568f53146108465780632caac08b1461088157610691565b806310b1219e116101c157806310b1219e1461076a57806314b8fecc146107955780631820cabb146107c2578063196684fe146107ed57610691565b80622b13291461069657806304c98b2b146106c157806309fd8212146106d85780630de51d351461073f57610691565b3661069157600c60009054906101000a900460ff1661025b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061346f6028913960400191505060405180910390fd5b6000600d5410156102b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061355e6026913960400191505060405180910390fd5b600c60019054906101000a900460ff161561036f57600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661036e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806134e2603a913960400191505060405180910390fd5b5b60006103c334600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d1f90919063ffffffff16565b9050600b54811115610420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134976026913960400191505060405180910390fd5b6000610437600a5434610da790919063ffffffff16565b9050600d54811115610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061344d6022913960400191505060405180910390fd5b6104a934601254610d1f90919063ffffffff16565b506104bf81600d54610e2d90919063ffffffff16565b600d81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc610515600234610e7790919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015610540573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156105d457600080fd5b505af11580156105e8573d6000803e3d6000fd5b5050505081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f982d9579894dbf2949796cafd82300da765550d9f7c0d75f74aa4fe5e8821a99333483604051808473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15050005b600080fd5b3480156106a257600080fd5b506106ab610ec1565b6040518082815260200191505060405180910390f35b3480156106cd57600080fd5b506106d6610ec7565b005b3480156106e457600080fd5b50610727600480360360208110156106fb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611060565b60405180821515815260200191505060405180910390f35b34801561074b57600080fd5b506107546110b6565b6040518082815260200191505060405180910390f35b34801561077657600080fd5b5061077f6110bc565b6040518082815260200191505060405180910390f35b3480156107a157600080fd5b506107aa6110c6565b60405180821515815260200191505060405180910390f35b3480156107ce57600080fd5b506107d76110d9565b6040518082815260200191505060405180910390f35b3480156107f957600080fd5b506108026110e0565b005b34801561081057600080fd5b50610819611a7a565b005b34801561082757600080fd5b50610830611b5f565b6040518082815260200191505060405180910390f35b34801561085257600080fd5b5061087f6004803603602081101561086957600080fd5b8101908080359060200190929190505050611b65565b005b34801561088d57600080fd5b50610896611c37565b005b3480156108a457600080fd5b506108ad611f7a565b005b3480156108bb57600080fd5b506108c461205f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108fc57600080fd5b50610905612085565b005b34801561091357600080fd5b5061091c61232b565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b50610947612331565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b50610972612337565b005b34801561098057600080fd5b506109896124bd565b6040518082815260200191505060405180910390f35b3480156109ab57600080fd5b506109b46124c3565b005b3480156109c257600080fd5b50610a05600480360360208110156109d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128f5565b005b348015610a1357600080fd5b50610a1c612aba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a5457600080fd5b50610a9760048036036020811015610a6b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ae3565b6040518082815260200191505060405180910390f35b348015610ab957600080fd5b50610ac2612afb565b005b348015610ad057600080fd5b50610ad9612c71565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b1157600080fd5b50610b5460048036036020811015610b2857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c97565b60405180821515815260200191505060405180910390f35b348015610b7857600080fd5b50610b81612cb7565b60405180821515815260200191505060405180910390f35b348015610ba557600080fd5b50610bae612cca565b6040518082815260200191505060405180910390f35b348015610bd057600080fd5b50610c1360048036036020811015610be757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd0565b005b348015610c2157600080fd5b50610c4e60048036036020811015610c3857600080fd5b8101908080359060200190929190505050612ddc565b005b348015610c5c57600080fd5b50610c65612eae565b60405180821515815260200191505060405180910390f35b348015610c8957600080fd5b50610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ec1565b005b348015610cda57600080fd5b50610d1d60048036036020811015610cf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061308d565b005b600080828401905083811015610d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415610dba5760009050610e27565b6000828402905082848281610dcb57fe5b0414610e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061351c6021913960400191505060405180910390fd5b809150505b92915050565b6000610e6f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613298565b905092915050565b6000610eb983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613358565b905092915050565b60115481565b610ecf61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600c60006101000a81548160ff02191690831515021790555042600f81905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930600e546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600d54905090565b601060009054906101000a900460ff1681565b62eff10081565b60001515601060009054906101000a900460ff1615151461114c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135846025913960400191505060405180910390fd5b60004790506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561124057600080fd5b505af1158015611254573d6000803e3d6000fd5b5050505050600047146112cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5472616e73666572204661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b505050506040513d602081101561138c57600080fd5b81019080805190602001909291905050505060006113b4600484610da790919063ffffffff16565b9050600e5481111561142e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f4572726f7220616d6f756e74000000000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114e357600080fd5b505af11580156114f7573d6000803e3d6000fd5b505050506040513d602081101561150d57600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a627842306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156115aa57600080fd5b505af11580156115be573d6000803e3d6000fd5b505050506040513d60208110156115d457600080fd5b810190808051906020019092919050505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561166f57600080fd5b505afa158015611683573d6000803e3d6000fd5b505050506040513d602081101561169957600080fd5b810190808051906020019092919050505060118190555060006011541415611729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4c50206372656174696f6e206661696c6564000000000000000000000000000081525060200191505060405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600062eff10042019050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166011546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561180557600080fd5b505af1158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b810190808051906020019092919050505050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166399c6d2de600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601154846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561190057600080fd5b505af1158015611914573d6000803e3d6000fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119c557600080fd5b505afa1580156119d9573d6000803e3d6000fd5b505050506040513d60208110156119ef57600080fd5b81019080805190602001909291905050501415611a74576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4175746f206c6f636b206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b50505050565b611a8261341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600c60006101000a81548160ff021916908315150217905550565b600d5481565b611b6d61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b611c3f61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b42611d186202a300600f54610d1f90919063ffffffff16565b10611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f477261636520706572696f64206973206e6f74206f766572207965740000000081525060200191505060405180910390fd5b6000611da1600447610da790919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7360e2e1b2a317edfc870b6fc6886f69083fb2099a836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e4a57600080fd5b505af1158015611e5e573d6000803e3d6000fd5b505050506040513d6020811015611e7457600080fd5b81019080805190602001909291905050505060007360e2e1b2a317edfc870b6fc6886f69083fb2099a73ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114611efa576040519150601f19603f3d011682016040523d82523d6000602084013e611eff565b606091505b5050905080611f76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5472616e73666572206661696c65642e0000000000000000000000000000000081525060200191505060405180910390fd5b5050565b611f8261341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600c60016101000a81548160ff021916908315150217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61208d61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b426121666202a300600f54610d1f90919063ffffffff16565b106121d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f477261636520706572696f64206973206e6f74206f766572207965740000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122a057600080fd5b505afa1580156122b4573d6000803e3d6000fd5b505050506040513d60208110156122ca57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231157600080fd5b505af1158015612325573d6000803e3d6000fd5b50505050565b600b5481565b600f5481565b61233f61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b6124cb61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461258b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166393dcd021600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561265657600080fd5b505afa15801561266a573d6000803e3d6000fd5b505050506040513d602081101561268057600080fd5b81019080805190602001909291905050509050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e281a98600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561274857600080fd5b505af115801561275c573d6000803e3d6000fd5b50505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561282857600080fd5b505afa15801561283c573d6000803e3d6000fd5b505050506040513d602081101561285257600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128b657600080fd5b505af11580156128ca573d6000803e3d6000fd5b505050506040513d60208110156128e057600080fd5b81019080805190602001909291905050505050565b6128fd61341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061353d6021913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b612b0361341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f193060016040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612c5757600080fd5b505af1158015612c6b573d6000803e3d6000fd5b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b600e5481565b612cd861341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612de461341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ea4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600b8190555050565b600c60009054906101000a900460ff1681565b612ec961341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806134bd6025913960400191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61309561341e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290613345576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561330a5780820151818401526020810190506132ef565b50505050905090810190601f1680156133375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156133c95780820151818401526020810190506133ae565b50505050905090810190601f1680156133f65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161341057fe5b049050809150509392505050565b60003390509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373736f7272792c20696e73756666696369656e742070726573616c6520737570706c7950726573616c6520686173206e6f74206265656e20737461727465642c206275636b6c652075702145766572796f6e652073686f756c6420627579206c6573736572207468616e2034206574682e54686973206163636f756e7420697320616c726561647920696e2077686974656c6973742e43757272656e746c79206f6e6c792070656f706c652077686f2061726520696e2077686974656c6973742063616e207061727469636970617465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7754686973206163636f756e74206973206e6f7420696e2077686974656c6973742e4f6820796f752061726520746f6f206c6174652c20616c6c206d696e652061726520676f6e654c69717569646974792067656e65726174696f6e20616c72656164792066696e6973686564a2646970667358221220e5aa4b937acba1a512ad6963c14c20c4af69b789ad6226b95ed075476222c11964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008356806910ee22cfc0c45d2f5fc32c18016d8423
-----Decoded View---------------
Arg [0] : _mine (address): 0x8356806910eE22cFc0c45D2f5fC32c18016D8423
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008356806910ee22cfc0c45d2f5fc32c18016d8423
Deployed Bytecode Sourcemap
62181:21342:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66029:12;;;;;;;;;;;66021:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65909:1:::1;65888:17;;:22;;65880:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66193:13:::2;;;;;;;;;;;66189:138;;;66231:9;:21;66241:10;66231:21;;;;;;;;;;;;;;;;;;;;;;;;;66223:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66189:138;66337:19;66359:36;66385:9;66359;:21;66369:10;66359:21;;;;;;;;;;;;;;;;:25;;:36;;;;:::i;:::-;66337:58;;66432:8;;66414:14;:26;;66406:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66494:15;66512:24;66526:9;;66512;:13;;:24;;;;:::i;:::-;66494:42;;66569:17;;66555:10;:31;;66547:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66636:38;66664:9;66636:23;;:27;;:38;;;;:::i;:::-;;66705:33;66727:10;66705:17;;:21;;:33;;;;:::i;:::-;66685:17;:53;;;;66749:10;;;;;;;;;;;:19;;:37;66769:16;66783:1;66769:9;:13;;:16;;;;:::i;:::-;66749:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;66797:4;;;;;;;;;;;:9;;;66807:10;66819;66797:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;66865:14;66841:9;:21;66851:10;66841:21;;;;;;;;;;;;;;;:38;;;;66895:49;66910:10;66922:9;66933:10;66895:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65964:1;;62181:21342:::0;;;;;63047:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;64732:186;;;;;;;;;;;;;:::i;:::-;;83408:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;63088:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;65426:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;63007:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;62954:46;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;66960:1153;;;;;;;;;;;;;:::i;:::-;;64926:79;;;;;;;;;;;;;:::i;:::-;;62808:43;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;65125:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;68598:415;;;;;;;;;;;;;:::i;:::-;;65325:93;;;;;;;;;;;;;:::i;:::-;;62453:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;65536:295;;;;;;;;;;;;;:::i;:::-;;62692:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;62910:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2712:148;;;;;;;;;;;;;:::i;:::-;;62659:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;68125:268;;;;;;;;;;;;;:::i;:::-;;64541:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2070:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;62577:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;83313:83;;;;;;;;;;;;;:::i;:::-;;62493:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;62528:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;62769:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;62858:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;65013:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;65226:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;62730:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;64343:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3015:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56727:181;56785:7;56805:9;56821:1;56817;:5;56805:17;;56846:1;56841;:6;;56833:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56899:1;56892:8;;;56727:181;;;;:::o;58081:471::-;58139:7;58389:1;58384;:6;58380:47;;;58414:1;58407:8;;;;58380:47;58439:9;58455:1;58451;:5;58439:17;;58484:1;58479;58475;:5;;;;;;:10;58467:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58543:1;58536:8;;;58081:471;;;;;:::o;57191:136::-;57249:7;57276:43;57280:1;57283;57276:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;57269:50;;57191:136;;;;:::o;59028:132::-;59086:7;59113:39;59117:1;59120;59113:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;59106:46;;59028:132;;;;:::o;63047:34::-;;;;:::o;64732:186::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64799:4:::1;64784:12;;:19;;;;;;;;;;;;;;;;;;64839:15;64814:22;:40;;;;64865:4;;;;;;;;;;;:9;;;64883:4;64890:19;;64865:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;64732:186::o:0;83408:110::-;83468:4;83492:9;:18;83502:7;83492:18;;;;;;;;;;;;;;;;;;;;;;;;;83485:25;;83408:110;;;:::o;63088:38::-;;;;:::o;65426:102::-;65480:4;65503:17;;65496:24;;65426:102;:::o;63007:33::-;;;;;;;;;;;;;:::o;62954:46::-;62992:8;62954:46;:::o;66960:1153::-;67042:5;67017:30;;:21;;;;;;;;;;;:30;;;67009:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67100:27;67130:21;67100:51;;67184:12;67199:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67184:37;;67238:4;67232:19;;;67260;67232:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67326:1;67301:21;:26;67293:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67365:4;67359:20;;;67388:4;;;;;;;;;;;67394:19;67359:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67427:24;67454:26;67478:1;67454:19;:23;;:26;;;;:::i;:::-;67427:53;;67519:19;;67499:16;:39;;67491:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67568:4;;;;;;;;;;;:13;;;67590:4;;;;;;;;;;;67597:16;67568:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67625:4;;;;;;;;;;;:9;;;67643:4;67625:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67682:4;;;;;;;;;;;:14;;;67705:4;67682:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67660:19;:51;;;;67753:1;67730:19;;:24;;67722:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67813:4;67789:21;;:28;;;;;;;;;;;;;;;;;;67830:18;62992:8;67851:15;:29;67830:50;;67908:4;;;;;;;;;;;67893:29;;;67931:3;;;;;;;;;;;67937:19;;67893:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67968:3;;;;;;;;;;;:16;;;67993:4;;;;;;;;;;;68000:19;;68021:10;67968:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68083:1;68051:4;;;;;;;;;;;:14;;;68074:3;;;;;;;;;;;68051:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;68043:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;66960:1153;;;;:::o;64926:79::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64992:5:::1;64977:12;;:20;;;;;;;;;;;;;;;;;;64926:79::o:0;62808:43::-;;;;:::o;65125:93::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65202:8:::1;65190:9;:20;;;;65125:93:::0;:::o;68598:415::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68697:15:::1;68660:34;68687:6;68660:22;;:26;;:34;;;;:::i;:::-;:52;68652:93;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;68756:24;68783:28;68809:1;68783:21;:25;;:28;;;;:::i;:::-;68756:55;;68822:4;;;;;;;;;;;:13;;;63180:42;68855:16;68822:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;68884:12;63180:42;68902:22;;68932:21;68902:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68883:75;;;68977:7;68969:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2352:1;;68598:415::o:0;65325:93::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65405:5:::1;65389:13;;:21;;;;;;;;;;;;;;;;;;65325:93::o:0;62453:31::-;;;;;;;;;;;;;:::o;65536:295::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65724:15:::1;65687:34;65714:6;65687:22;;:26;;:34;;;;:::i;:::-;:52;65679:93;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;65783:4;;;;;;;;;;;:9;;;65793:4;;;;;;;;;;;:14;;;65816:4;65793:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;65783:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;65536:295::o:0;62692:31::-;;;;:::o;62910:37::-;;;;:::o;2712:148::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:1:::1;2782:40;;2803:6;::::0;::::1;;;;;;;;2782:40;;;;;;;;;;;;2850:1;2833:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2712:148::o:0;62659:26::-;;;;:::o;68125:268::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68182:20:::1;68205:3;;;;;;;;;;;:26;;;68240:4;;;;;;;;;;;68255;68205:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;68182:79;;68272:3;;;;;;;;;;;:17;;;68298:4;;;;;;;;;;;68305:12;68272:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;68329:4;;;;;;;;;;;:13;;;68343:10;68355:4;;;;;;;;;;;:14;;;68378:4;68355:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;68329:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;2352:1;68125:268::o:0;64541:183::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64623:9:::1;:18;64633:7;64623:18;;;;;;;;;;;;;;;;;;;;;;;;;64615:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64711:5;64690:9;:18;64700:7;64690:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;64541:183:::0;:::o;2070:79::-;2108:7;2135:6;;;;;;;;;;;2128:13;;2070:79;:::o;62577:42::-;;;;;;;;;;;;;;;;;:::o;83313:83::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83361:4:::1;;;;;;;;;;;:9;;;83379:4;83386:1;83361:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;83313:83::o:0;62493:26::-;;;;;;;;;;;;;:::o;62528:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;62769:32::-;;;;;;;;;;;;;:::o;62858:45::-;;;;:::o;65013:104::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65102:7:::1;65089:10;;:20;;;;;;;;;;;;;;;;;;65013:104:::0;:::o;65226:91::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65301:8:::1;65290;:19;;;;65226:91:::0;:::o;62730:32::-;;;;;;;;;;;;;:::o;64343:190::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64442:5:::1;64420:27;;:9;:18;64430:7;64420:18;;;;;;;;;;;;;;;;;;;;;;;;;:27;;;64412:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64521:4;64500:9;:18;64510:7;64500:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;64343:190:::0;:::o;3015:244::-;2292:12;:10;:12::i;:::-;2282:22;;:6;;;;;;;;;;:22;;;2274:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3124:1:::1;3104:22;;:8;:22;;;;3096:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3214:8;3185:38;;3206:6;::::0;::::1;;;;;;;;3185:38;;;;;;;;;;;;3243:8;3234:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3015:244:::0;:::o;57630:192::-;57716:7;57749:1;57744;:6;;57752:12;57736:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57776:9;57792:1;57788;:5;57776:17;;57813:1;57806:8;;;57630:192;;;;;:::o;59656:278::-;59742:7;59774:1;59770;:5;59777:12;59762:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59801:9;59817:1;59813;:5;;;;;;59801:17;;59925:1;59918:8;;;59656:278;;;;;:::o;624:106::-;677:15;712:10;705:17;;624:106;:::o
Swarm Source
ipfs://e5aa4b937acba1a512ad6963c14c20c4af69b789ad6226b95ed075476222c119
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 23 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.