More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,648 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 15682180 | 918 days ago | IN | 0 ETH | 0.00267396 | ||||
Deposit | 13995466 | 1183 days ago | IN | 0 ETH | 0.01659282 | ||||
Deposit | 13389408 | 1278 days ago | IN | 0 ETH | 0.01257005 | ||||
Deposit | 13277658 | 1295 days ago | IN | 0 ETH | 0.00522791 | ||||
Emergency Withdr... | 13207366 | 1306 days ago | IN | 0 ETH | 0.00195717 | ||||
Withdraw | 13207346 | 1306 days ago | IN | 0 ETH | 0.00689808 | ||||
Withdraw | 13153683 | 1315 days ago | IN | 0 ETH | 0.01798622 | ||||
Emergency Withdr... | 13153645 | 1315 days ago | IN | 0 ETH | 0.0074931 | ||||
Withdraw | 13153593 | 1315 days ago | IN | 0 ETH | 0.01992551 | ||||
Deposit | 13101623 | 1323 days ago | IN | 0 ETH | 0.00992537 | ||||
Emergency Withdr... | 13049489 | 1331 days ago | IN | 0 ETH | 0.00233945 | ||||
Update Pool | 13049402 | 1331 days ago | IN | 0 ETH | 0.0035032 | ||||
Update Pool | 13049396 | 1331 days ago | IN | 0 ETH | 0.00333097 | ||||
Emergency Withdr... | 13049363 | 1331 days ago | IN | 0 ETH | 0.00137719 | ||||
Withdraw | 13049342 | 1331 days ago | IN | 0 ETH | 0.0038378 | ||||
Emergency Withdr... | 13049328 | 1331 days ago | IN | 0 ETH | 0.00211238 | ||||
Withdraw | 13049309 | 1331 days ago | IN | 0 ETH | 0.00083693 | ||||
Withdraw | 13049287 | 1331 days ago | IN | 0 ETH | 0.00487983 | ||||
Deposit | 13030897 | 1334 days ago | IN | 0 ETH | 0.01230993 | ||||
Withdraw | 12994496 | 1339 days ago | IN | 0 ETH | 0.00478159 | ||||
Withdraw | 12994385 | 1339 days ago | IN | 0 ETH | 0.00378054 | ||||
Withdraw | 12994346 | 1339 days ago | IN | 0 ETH | 0.00670774 | ||||
Emergency Withdr... | 12992028 | 1340 days ago | IN | 0 ETH | 0.00303116 | ||||
Withdraw | 12973062 | 1342 days ago | IN | 0 ETH | 0.00149721 | ||||
Withdraw | 12973054 | 1342 days ago | IN | 0 ETH | 0.00143612 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Master
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-06 */ pragma solidity ^0.6.12; /* * @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; } } /** * @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); } /** * @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; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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); } } } } /** * @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"); } } } /** * @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; } } /** * @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 is 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 { } } // PlutusToken with Governance. contract PlutusToken is ERC20("yplutus.finance", "yPLT"), Ownable { constructor (address _presale_address) public { _mint(_presale_address, 10 ** 25); } /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef). function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } /// @notice Burns `_amount` of token from `owner`. Must only be called by the owner (MasterChef). function burn(address _owner, uint256 _amount) public onlyOwner { _burn(_owner, _amount); } } contract Master is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // // We do some fancy math here. Basically, any point in time, the amount of PLUTUSs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accPlutusPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accPlutusPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. PLUTUSs to distribute per block. uint256 lastRewardBlock; // Last block number that PLUTUSs distribution occurs. uint256 accPlutusPerShare; // Accumulated PLUTUSs per share, times 1e12. See below. } // The PLUTUS TOKEN! PlutusToken public plutus; // Dev address. address public devaddr; // Block number when bonus PLUTUS period ends. uint256 public bonusEndBlock; // PLUTUS tokens created per block. uint256 public plutusPerBlock; // Bonus muliplier for early plutus makers. uint256 public constant BONUS_MULTIPLIER = 80; // no bonus // Bonus number of blocks after genesis block uint256 public constant FIVE_MILLION_BLOCKS = 5000000; // Stages start block number uint256 private STAGE1; uint256 private STAGE2; uint256 private STAGE3; uint256 private STAGE4; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when PLUTUS mining starts. uint256 public startBlock; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); constructor( PlutusToken _plutus, address _devaddr, uint256 _plutusPerBlock, uint256 _startBlock, uint256 _bonusEndBlock ) public { plutus = _plutus; devaddr = _devaddr; plutusPerBlock = _plutusPerBlock; bonusEndBlock = _bonusEndBlock; startBlock = _startBlock; STAGE1 = bonusEndBlock.add(FIVE_MILLION_BLOCKS); STAGE2 = STAGE1.add(FIVE_MILLION_BLOCKS); STAGE3 = STAGE2.add(FIVE_MILLION_BLOCKS); STAGE4 = STAGE3.add(FIVE_MILLION_BLOCKS); } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do. function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate) public onlyOwner { if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accPlutusPerShare: 0 })); } // Update the given pool's PLUTUS allocation point. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { // Temporary variable for calculating rewards uint256 bonus = 0; if (_to <= startBlock || _from >= _to) { return 0; } else if (_to > startBlock && _to <= bonusEndBlock) { if (_from <= startBlock) { return _to.sub(startBlock).mul(BONUS_MULTIPLIER); } else { return _to.sub(_from).mul(BONUS_MULTIPLIER); } } else if (_to > bonusEndBlock && _to <= STAGE1){ if (_from <= startBlock){ bonus = bonusEndBlock.sub(startBlock).mul(BONUS_MULTIPLIER); return bonus.add(_to.sub(bonusEndBlock).mul(BONUS_MULTIPLIER.div(10))); } else if (_from > startBlock && _from <= bonusEndBlock){ bonus = bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER); return bonus.add(_to.sub(bonusEndBlock).mul(BONUS_MULTIPLIER.div(10))); } else{ return _to.sub(_from).mul(BONUS_MULTIPLIER.div(10)); } } else if (_to > STAGE1 && _to <= STAGE2){ if (_from <= startBlock){ bonus = bonusEndBlock.sub(startBlock).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); return bonus.add(_to.sub(STAGE1).mul(BONUS_MULTIPLIER.div(20))); } else if (_from > startBlock && _from <= bonusEndBlock){ bonus = bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); return bonus.add(_to.sub(STAGE1).mul(BONUS_MULTIPLIER.div(20))); } else if (_from > bonusEndBlock && _from <= STAGE1){ bonus = STAGE1.sub(_from).mul(BONUS_MULTIPLIER.div(10)); return bonus.add(_to.sub(STAGE1).mul(BONUS_MULTIPLIER.div(20))); } else{ return _to.sub(_from).mul(BONUS_MULTIPLIER.div(20)); } } else if (_to > STAGE2 && _to <= STAGE3){ if (_from <= startBlock){ bonus = bonusEndBlock.sub(startBlock).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); return bonus.add(_to.sub(STAGE2).mul(BONUS_MULTIPLIER.div(40))); } else if (_from > startBlock && _from <= bonusEndBlock){ bonus = bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); return bonus.add(_to.sub(STAGE2).mul(BONUS_MULTIPLIER.div(40))); } else if (_from > bonusEndBlock && _from <= STAGE1){ bonus= STAGE1.sub(_from).mul(BONUS_MULTIPLIER.div(10)); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); return bonus.add(_to.sub(STAGE2).mul(BONUS_MULTIPLIER.div(40))); } else if(_from > STAGE1 && _from <= STAGE2){ bonus= STAGE2.sub(_from).mul(BONUS_MULTIPLIER.div(20)); return bonus.add(_to.sub(STAGE2).mul(BONUS_MULTIPLIER.div(40))); } else{ return _to.sub(_from).mul(BONUS_MULTIPLIER.div(40)); } } else if (_to > STAGE3 && _to <= STAGE4){ if (_from <= startBlock){ bonus = bonusEndBlock.sub(startBlock).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add( FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(_to.sub(STAGE3)); } else if (_from > startBlock && _from <= bonusEndBlock){ bonus = bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add( FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(_to.sub(STAGE3)); } else if (_from > bonusEndBlock && _from <= STAGE1){ bonus = STAGE1.sub(_from).mul(BONUS_MULTIPLIER.div(10)); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(_to.sub(STAGE3)); } else if(_from > STAGE1 && _from <= STAGE2){ bonus = STAGE2.sub(_from).mul(BONUS_MULTIPLIER.div(20)); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(_to.sub(STAGE3)); } else if(_from > STAGE2 && _from <= STAGE3){ bonus = STAGE3.sub(_from).mul(BONUS_MULTIPLIER.div(40)); return bonus.add(_to.sub(STAGE3)); } else{ return _to.sub(_from); } } else{ if (_from <= startBlock){ bonus = bonusEndBlock.sub(startBlock).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(FIVE_MILLION_BLOCKS); } else if (_from > startBlock && _from <= bonusEndBlock){ bonus = bonusEndBlock.sub(_from).mul(BONUS_MULTIPLIER); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(FIVE_MILLION_BLOCKS); } else if (_from > bonusEndBlock && _from <= STAGE1){ bonus = bonus.add(STAGE1.sub(_from).mul(BONUS_MULTIPLIER.div(10))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(FIVE_MILLION_BLOCKS); } else if(_from > STAGE1 && _from <= STAGE2){ bonus = bonus.add(STAGE2.sub(_from).mul(BONUS_MULTIPLIER.div(20))); bonus = bonus.add(FIVE_MILLION_BLOCKS.mul(BONUS_MULTIPLIER.div(40))); return bonus.add(FIVE_MILLION_BLOCKS); } else if( _from > STAGE2 && _from <= STAGE3){ bonus = bonus.add(STAGE3.sub(_from).mul(BONUS_MULTIPLIER.div(40))); return bonus.add(FIVE_MILLION_BLOCKS); } else if(_from > STAGE3 && _from <= STAGE4){ return bonus.add(STAGE4.sub(_from)); } else { return 0; } } } // View function to see pending PLUTUSs on frontend. function pendingPlutus(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accPlutusPerShare = pool.accPlutusPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 plutusReward = multiplier.mul(plutusPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accPlutusPerShare = accPlutusPerShare.add((plutusReward.sub(plutusReward.div(20))).mul(1e12).div(lpSupply)); } return user.amount.mul(accPlutusPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Burn tokens from owner account, only be called by owner. function burn(uint256 amount) public onlyOwner{ plutus.burn(msg.sender, amount); } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 plutusReward = multiplier.mul(plutusPerBlock).mul(pool.allocPoint).div(totalAllocPoint); plutus.mint(devaddr, plutusReward.div(20)); // 5% plutusReward = plutusReward.sub(plutusReward.div(20)); //Rest 95% plutus.mint(address(this), plutusReward); pool.accPlutusPerShare = pool.accPlutusPerShare.add(plutusReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to Master for PLUTUS allocation. function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accPlutusPerShare).div(1e12).sub(user.rewardDebt); safePlutusTransfer(msg.sender, pending); } pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accPlutusPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from Master. function withdraw(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accPlutusPerShare).div(1e12).sub(user.rewardDebt); safePlutusTransfer(msg.sender, pending); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accPlutusPerShare).div(1e12); pool.lpToken.safeTransfer(address(msg.sender), _amount); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, _pid, user.amount); user.amount = 0; user.rewardDebt = 0; } // Safe plutus transfer function, just in case if rounding error causes pool to not have enough PLUTUSs. function safePlutusTransfer(address _to, uint256 _amount) internal { uint256 plutusBal = plutus.balanceOf(address(this)); if (_amount > plutusBal) { plutus.transfer(_to, plutusBal); } else { plutus.transfer(_to, _amount); } } // Update dev address by the previous dev. function dev(address _devaddr) public { require(msg.sender == devaddr, "dev: wut?"); devaddr = _devaddr; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract PlutusToken","name":"_plutus","type":"address"},{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"uint256","name":"_plutusPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_bonusEndBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIVE_MILLION_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingPlutus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plutus","outputs":[{"internalType":"contract PlutusToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"plutusPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accPlutusPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600b553480156200001657600080fd5b506040516200209338038062002093833981810160405260a08110156200003c57600080fd5b508051602082015160408301516060840151608090940151929391929091906000620000676200018b565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b03199081166001600160a01b03888116919091179092556002805490911691861691909117905560048390556003819055600c8290556200010d81624c4b406200018f602090811b620016df17901c565b60058190555062000132624c4b406005546200018f60201b620016df1790919060201c565b60068190555062000157624c4b406006546200018f60201b620016df1790919060201c565b6007819055506200017c624c4b406007546200018f60201b620016df1790919060201c565b60085550620001f19350505050565b3390565b600082820183811015620001ea576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b611e9280620002016000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806364482f79116100de5780638da5cb5b11610097578063b788e29011610071578063b788e290146103d8578063d49e77cd146103e0578063e2bbb158146103e8578063f2fde38b1461040b57610173565b80638da5cb5b1461034c5780638dbb1e3a1461037057806393f1a40b1461039357610173565b806364482f79146102b7578063715018a6146102e25780637431a321146102ea5780637b8fd002146103165780638aa285501461031e5780638d88a90e1461032657610173565b806342966c681161013057806342966c681461022d578063441a3e701461024a57806348cd4cb11461026d57806351eb05a6146102755780635312ea8e14610292578063630b5ba1146102af57610173565b8063081e3eda146101785780631526fe271461019257806317caf6f1146101df5780631aed6553146101e75780631eaaa045146101ef57806335d9723d14610225575b600080fd5b610180610431565b60408051918252519081900360200190f35b6101af600480360360208110156101a857600080fd5b5035610437565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b610180610478565b61018061047e565b6102236004803603606081101561020557600080fd5b508035906001600160a01b0360208201351690604001351515610484565b005b6101806105ff565b6102236004803603602081101561024357600080fd5b5035610606565b6102236004803603604081101561026057600080fd5b50803590602001356106cc565b61018061081f565b6102236004803603602081101561028b57600080fd5b5035610825565b610223600480360360208110156102a857600080fd5b5035610a6d565b610223610b08565b610223600480360360608110156102cd57600080fd5b50803590602081013590604001351515610b2b565b610223610bfc565b6101806004803603604081101561030057600080fd5b50803590602001356001600160a01b0316610c9e565b610180610e11565b610180610e17565b6102236004803603602081101561033c57600080fd5b50356001600160a01b0316610e1c565b610354610e89565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603604081101561038657600080fd5b5080359060200135610e98565b6103bf600480360360408110156103a957600080fd5b50803590602001356001600160a01b03166114a0565b6040805192835260208301919091528051918290030190f35b6103546114c4565b6103546114d3565b610223600480360360408110156103fe57600080fd5b50803590602001356114e2565b6102236004803603602081101561042157600080fd5b50356001600160a01b03166115e7565b60095490565b6009818154811061044457fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b600b5481565b60035481565b61048c611740565b6000546001600160a01b039081169116146104dc576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b80156104ea576104ea610b08565b6000600c5443116104fd57600c546104ff565b435b600b5490915061050f90856116df565b600b55604080516080810182526001600160a01b0394851681526020810195865290810191825260006060820181815260098054600181018255925291517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af600490920291820180546001600160a01b031916919096161790945593517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0840155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b18301555090517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b290910155565b624c4b4081565b61060e611740565b6000546001600160a01b0390811691161461065e576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b60015460408051632770a7eb60e21b81523360048201526024810184905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b1580156106b157600080fd5b505af11580156106c5573d6000803e3d6000fd5b5050505050565b6000600983815481106106db57fe5b60009182526020808320868452600a82526040808520338652909252922080546004909202909201925083111561074e576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61075784610825565b6000610791826001015461078b64e8d4a510006107858760030154876000015461174490919063ffffffff16565b9061179d565b906117df565b905061079d3382611821565b81546107a990856117df565b80835560038401546107c69164e8d4a51000916107859190611744565b600183015582546107e1906001600160a01b031633866119af565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b600c5481565b60006009828154811061083457fe5b90600052602060002090600402019050806002015443116108555750610a6a565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b50519050806108df575043600290910155610a6a565b60006108ef836002015443610e98565b9050600061091c600b5461078586600101546109166004548761174490919063ffffffff16565b90611744565b6001546002549192506001600160a01b03908116916340c10f19911661094384601461179d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561098957600080fd5b505af115801561099d573d6000803e3d6000fd5b505050506109bf6109b860148361179d90919063ffffffff16565b82906117df565b600154604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f199160448082019260009290919082900301818387803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b50505050610a57610a4c8461078564e8d4a510008561174490919063ffffffff16565b6003860154906116df565b6003850155505043600290920191909155505b50565b600060098281548110610a7c57fe5b60009182526020808320858452600a82526040808520338087529352909320805460049093029093018054909450610ac1926001600160a01b039190911691906119af565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60095460005b81811015610b2757610b1f81610825565b600101610b0e565b5050565b610b33611740565b6000546001600160a01b03908116911614610b83576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b8015610b9157610b91610b08565b610bce82610bc860098681548110610ba557fe5b906000526020600020906004020160010154600b546117df90919063ffffffff16565b906116df565b600b819055508160098481548110610be257fe5b906000526020600020906004020160010181905550505050565b610c04611740565b6000546001600160a01b03908116911614610c54576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060098481548110610cae57fe5b60009182526020808320878452600a825260408085206001600160a01b03898116875290845281862060049586029093016003810154815484516370a0823160e01b81523098810198909852935191985093969395939492909116926370a08231926024808301939192829003018186803b158015610d2c57600080fd5b505afa158015610d40573d6000803e3d6000fd5b505050506040513d6020811015610d5657600080fd5b5051600285015490915043118015610d6d57508015155b15610ddc576000610d82856002015443610e98565b90506000610da9600b5461078588600101546109166004548761174490919063ffffffff16565b9050610dd7610dd08461078564e8d4a51000610916610dc987601461179d565b87906117df565b85906116df565b935050505b610e04836001015461078b64e8d4a5100061078586886000015461174490919063ffffffff16565b9450505050505b92915050565b60045481565b605081565b6002546001600160a01b03163314610e67576040805162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b600c54600090819083111580610eae5750828410155b15610ebd576000915050610e0b565b600c5483118015610ed057506003548311155b15610f0f57600c548411610f0057610ef86050610916600c54866117df90919063ffffffff16565b915050610e0b565b610ef8605061091685876117df565b60035483118015610f2257506005548311155b15610fc057600c548411610f7557610f4c6050610916600c546003546117df90919063ffffffff16565b9050610ef8610f6e610f606050600a61179d565b6003546109169087906117df565b82906116df565b600c5484118015610f8857506003548411155b15610fa757610f4c6050610916866003546117df90919063ffffffff16565b610ef8610fb66050600a61179d565b61091685876117df565b60055483118015610fd357506006548311155b156110b257600c54841161103d57610ffd6050610916600c546003546117df90919063ffffffff16565b905061101b610f6e6110116050600a61179d565b624c4b4090611744565b9050610ef8610f6e61102f6050601461179d565b6005546109169087906117df565b600c548411801561105057506003548411155b1561106f57610ffd6050610916866003546117df90919063ffffffff16565b6003548411801561108257506005548411155b156110a35761101b6110966050600a61179d565b60055461091690876117df565b610ef8610fb66050601461179d565b600654831180156110c557506007548311155b156111d557600c548411611139576110ef6050610916600c546003546117df90919063ffffffff16565b9050611103610f6e6110116050600a61179d565b9050611117610f6e6110116050601461179d565b9050610ef8610f6e61112b6050602861179d565b6006546109169087906117df565b600c548411801561114c57506003548411155b1561116b576110ef6050610916866003546117df90919063ffffffff16565b6003548411801561117e57506005548411155b15611192576111036110966050600a61179d565b600554841180156111a557506006548411155b156111c6576111176111b96050601461179d565b60065461091690876117df565b610ef8610fb66050602861179d565b600754831180156111e857506008548311155b1561132657600c548411611268576112126050610916600c546003546117df90919063ffffffff16565b9050611226610f6e6110116050600a61179d565b905061123a610f6e6110116050601461179d565b905061124e610f6e6110116050602861179d565b9050610ef8610f6e600754856117df90919063ffffffff16565b600c548411801561127b57506003548411155b1561129a576112126050610916866003546117df90919063ffffffff16565b600354841180156112ad57506005548411155b156112c1576112266110966050600a61179d565b600554841180156112d457506006548411155b156112e85761123a6111b96050601461179d565b600654841180156112fb57506007548411155b1561131c5761124e61130f6050602861179d565b60075461091690876117df565b610ef883856117df565b600c5484116113965761134b6050610916600c546003546117df90919063ffffffff16565b905061135f610f6e6110116050600a61179d565b9050611373610f6e6110116050601461179d565b9050611387610f6e6110116050602861179d565b9050610ef881624c4b406116df565b600c54841180156113a957506003548411155b156113c85761134b6050610916866003546117df90919063ffffffff16565b600354841180156113db57506005548411155b156113ff5761135f610f6e6113f26050600a61179d565b60055461091690886117df565b6005548411801561141257506006548411155b1561143657611373610f6e6114296050601461179d565b60065461091690886117df565b6006548411801561144957506007548411155b1561146d57611387610f6e6114606050602861179d565b60075461091690886117df565b6007548411801561148057506008548411155b1561149657600854610ef890610f6e90866117df565b6000915050610e0b565b600a6020908152600092835260408084209091529082529020805460019091015482565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000600983815481106114f157fe5b60009182526020808320868452600a8252604080852033865290925292206004909102909101915061152284610825565b805415611565576000611557826001015461078b64e8d4a510006107858760030154876000015461174490919063ffffffff16565b90506115633382611821565b505b815461157c906001600160a01b0316333086611a01565b805461158890846116df565b80825560038301546115a59164e8d4a51000916107859190611744565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6115ef611740565b6000546001600160a01b0390811691161461163f576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b6001600160a01b0381166116845760405162461bcd60e51b8152600401808060200182810382526026815260200180611dcc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082820183811015611739576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b60008261175357506000610e0b565b8282028284828161176057fe5b04146117395760405162461bcd60e51b8152600401808060200182810382526021815260200180611df26021913960400191505060405180910390fd5b600061173983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a61565b600061173983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b03565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b505190508082111561192a576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156118f857600080fd5b505af115801561190c573d6000803e3d6000fd5b505050506040513d602081101561192257600080fd5b506119aa9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505050506040513d60208110156106c557600080fd5b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119aa908490611b5d565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611a5b908590611b5d565b50505050565b60008183611aed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ab2578181015183820152602001611a9a565b50505050905090810190601f168015611adf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611af957fe5b0495945050505050565b60008184841115611b555760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ab2578181015183820152602001611a9a565b505050900390565b6060611bb2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c0e9092919063ffffffff16565b8051909150156119aa57808060200190516020811015611bd157600080fd5b50516119aa5760405162461bcd60e51b815260040180806020018281038252602a815260200180611e33602a913960400191505060405180910390fd5b6060611c1d8484600085611c25565b949350505050565b6060611c3085611d92565b611c81576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611cc05780518252601f199092019160209182019101611ca1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d22576040519150601f19603f3d011682016040523d82523d6000602084013e611d27565b606091505b50915091508115611d3b579150611c1d9050565b805115611d4b5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611ab2578181015183820152602001611a9a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c1d57505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220f18f4e44bbfa84e8d5b21bd5cbc48fd71d44f8d58ab4b3adbe6310a93d88b5c064736f6c634300060c003300000000000000000000000040e7705254494a7e61d5b7c86da50225ddc3daae00000000000000000000000015b1019e03cda55b2f143ac17d65e552e8824e9f0000000000000000000000000000000000000000000000001158e460913d00000000000000000000000000000000000000000000000000000000000000a7fbe80000000000000000000000000000000000000000000000000000000000a8bf38
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806364482f79116100de5780638da5cb5b11610097578063b788e29011610071578063b788e290146103d8578063d49e77cd146103e0578063e2bbb158146103e8578063f2fde38b1461040b57610173565b80638da5cb5b1461034c5780638dbb1e3a1461037057806393f1a40b1461039357610173565b806364482f79146102b7578063715018a6146102e25780637431a321146102ea5780637b8fd002146103165780638aa285501461031e5780638d88a90e1461032657610173565b806342966c681161013057806342966c681461022d578063441a3e701461024a57806348cd4cb11461026d57806351eb05a6146102755780635312ea8e14610292578063630b5ba1146102af57610173565b8063081e3eda146101785780631526fe271461019257806317caf6f1146101df5780631aed6553146101e75780631eaaa045146101ef57806335d9723d14610225575b600080fd5b610180610431565b60408051918252519081900360200190f35b6101af600480360360208110156101a857600080fd5b5035610437565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b610180610478565b61018061047e565b6102236004803603606081101561020557600080fd5b508035906001600160a01b0360208201351690604001351515610484565b005b6101806105ff565b6102236004803603602081101561024357600080fd5b5035610606565b6102236004803603604081101561026057600080fd5b50803590602001356106cc565b61018061081f565b6102236004803603602081101561028b57600080fd5b5035610825565b610223600480360360208110156102a857600080fd5b5035610a6d565b610223610b08565b610223600480360360608110156102cd57600080fd5b50803590602081013590604001351515610b2b565b610223610bfc565b6101806004803603604081101561030057600080fd5b50803590602001356001600160a01b0316610c9e565b610180610e11565b610180610e17565b6102236004803603602081101561033c57600080fd5b50356001600160a01b0316610e1c565b610354610e89565b604080516001600160a01b039092168252519081900360200190f35b6101806004803603604081101561038657600080fd5b5080359060200135610e98565b6103bf600480360360408110156103a957600080fd5b50803590602001356001600160a01b03166114a0565b6040805192835260208301919091528051918290030190f35b6103546114c4565b6103546114d3565b610223600480360360408110156103fe57600080fd5b50803590602001356114e2565b6102236004803603602081101561042157600080fd5b50356001600160a01b03166115e7565b60095490565b6009818154811061044457fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b600b5481565b60035481565b61048c611740565b6000546001600160a01b039081169116146104dc576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b80156104ea576104ea610b08565b6000600c5443116104fd57600c546104ff565b435b600b5490915061050f90856116df565b600b55604080516080810182526001600160a01b0394851681526020810195865290810191825260006060820181815260098054600181018255925291517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af600490920291820180546001600160a01b031916919096161790945593517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b0840155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b18301555090517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b290910155565b624c4b4081565b61060e611740565b6000546001600160a01b0390811691161461065e576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b60015460408051632770a7eb60e21b81523360048201526024810184905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b1580156106b157600080fd5b505af11580156106c5573d6000803e3d6000fd5b5050505050565b6000600983815481106106db57fe5b60009182526020808320868452600a82526040808520338652909252922080546004909202909201925083111561074e576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61075784610825565b6000610791826001015461078b64e8d4a510006107858760030154876000015461174490919063ffffffff16565b9061179d565b906117df565b905061079d3382611821565b81546107a990856117df565b80835560038401546107c69164e8d4a51000916107859190611744565b600183015582546107e1906001600160a01b031633866119af565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b600c5481565b60006009828154811061083457fe5b90600052602060002090600402019050806002015443116108555750610a6a565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b50519050806108df575043600290910155610a6a565b60006108ef836002015443610e98565b9050600061091c600b5461078586600101546109166004548761174490919063ffffffff16565b90611744565b6001546002549192506001600160a01b03908116916340c10f19911661094384601461179d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561098957600080fd5b505af115801561099d573d6000803e3d6000fd5b505050506109bf6109b860148361179d90919063ffffffff16565b82906117df565b600154604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f199160448082019260009290919082900301818387803b158015610a1557600080fd5b505af1158015610a29573d6000803e3d6000fd5b50505050610a57610a4c8461078564e8d4a510008561174490919063ffffffff16565b6003860154906116df565b6003850155505043600290920191909155505b50565b600060098281548110610a7c57fe5b60009182526020808320858452600a82526040808520338087529352909320805460049093029093018054909450610ac1926001600160a01b039190911691906119af565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60095460005b81811015610b2757610b1f81610825565b600101610b0e565b5050565b610b33611740565b6000546001600160a01b03908116911614610b83576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b8015610b9157610b91610b08565b610bce82610bc860098681548110610ba557fe5b906000526020600020906004020160010154600b546117df90919063ffffffff16565b906116df565b600b819055508160098481548110610be257fe5b906000526020600020906004020160010181905550505050565b610c04611740565b6000546001600160a01b03908116911614610c54576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60008060098481548110610cae57fe5b60009182526020808320878452600a825260408085206001600160a01b03898116875290845281862060049586029093016003810154815484516370a0823160e01b81523098810198909852935191985093969395939492909116926370a08231926024808301939192829003018186803b158015610d2c57600080fd5b505afa158015610d40573d6000803e3d6000fd5b505050506040513d6020811015610d5657600080fd5b5051600285015490915043118015610d6d57508015155b15610ddc576000610d82856002015443610e98565b90506000610da9600b5461078588600101546109166004548761174490919063ffffffff16565b9050610dd7610dd08461078564e8d4a51000610916610dc987601461179d565b87906117df565b85906116df565b935050505b610e04836001015461078b64e8d4a5100061078586886000015461174490919063ffffffff16565b9450505050505b92915050565b60045481565b605081565b6002546001600160a01b03163314610e67576040805162461bcd60e51b81526020600482015260096024820152686465763a207775743f60b81b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b600c54600090819083111580610eae5750828410155b15610ebd576000915050610e0b565b600c5483118015610ed057506003548311155b15610f0f57600c548411610f0057610ef86050610916600c54866117df90919063ffffffff16565b915050610e0b565b610ef8605061091685876117df565b60035483118015610f2257506005548311155b15610fc057600c548411610f7557610f4c6050610916600c546003546117df90919063ffffffff16565b9050610ef8610f6e610f606050600a61179d565b6003546109169087906117df565b82906116df565b600c5484118015610f8857506003548411155b15610fa757610f4c6050610916866003546117df90919063ffffffff16565b610ef8610fb66050600a61179d565b61091685876117df565b60055483118015610fd357506006548311155b156110b257600c54841161103d57610ffd6050610916600c546003546117df90919063ffffffff16565b905061101b610f6e6110116050600a61179d565b624c4b4090611744565b9050610ef8610f6e61102f6050601461179d565b6005546109169087906117df565b600c548411801561105057506003548411155b1561106f57610ffd6050610916866003546117df90919063ffffffff16565b6003548411801561108257506005548411155b156110a35761101b6110966050600a61179d565b60055461091690876117df565b610ef8610fb66050601461179d565b600654831180156110c557506007548311155b156111d557600c548411611139576110ef6050610916600c546003546117df90919063ffffffff16565b9050611103610f6e6110116050600a61179d565b9050611117610f6e6110116050601461179d565b9050610ef8610f6e61112b6050602861179d565b6006546109169087906117df565b600c548411801561114c57506003548411155b1561116b576110ef6050610916866003546117df90919063ffffffff16565b6003548411801561117e57506005548411155b15611192576111036110966050600a61179d565b600554841180156111a557506006548411155b156111c6576111176111b96050601461179d565b60065461091690876117df565b610ef8610fb66050602861179d565b600754831180156111e857506008548311155b1561132657600c548411611268576112126050610916600c546003546117df90919063ffffffff16565b9050611226610f6e6110116050600a61179d565b905061123a610f6e6110116050601461179d565b905061124e610f6e6110116050602861179d565b9050610ef8610f6e600754856117df90919063ffffffff16565b600c548411801561127b57506003548411155b1561129a576112126050610916866003546117df90919063ffffffff16565b600354841180156112ad57506005548411155b156112c1576112266110966050600a61179d565b600554841180156112d457506006548411155b156112e85761123a6111b96050601461179d565b600654841180156112fb57506007548411155b1561131c5761124e61130f6050602861179d565b60075461091690876117df565b610ef883856117df565b600c5484116113965761134b6050610916600c546003546117df90919063ffffffff16565b905061135f610f6e6110116050600a61179d565b9050611373610f6e6110116050601461179d565b9050611387610f6e6110116050602861179d565b9050610ef881624c4b406116df565b600c54841180156113a957506003548411155b156113c85761134b6050610916866003546117df90919063ffffffff16565b600354841180156113db57506005548411155b156113ff5761135f610f6e6113f26050600a61179d565b60055461091690886117df565b6005548411801561141257506006548411155b1561143657611373610f6e6114296050601461179d565b60065461091690886117df565b6006548411801561144957506007548411155b1561146d57611387610f6e6114606050602861179d565b60075461091690886117df565b6007548411801561148057506008548411155b1561149657600854610ef890610f6e90866117df565b6000915050610e0b565b600a6020908152600092835260408084209091529082529020805460019091015482565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000600983815481106114f157fe5b60009182526020808320868452600a8252604080852033865290925292206004909102909101915061152284610825565b805415611565576000611557826001015461078b64e8d4a510006107858760030154876000015461174490919063ffffffff16565b90506115633382611821565b505b815461157c906001600160a01b0316333086611a01565b805461158890846116df565b80825560038301546115a59164e8d4a51000916107859190611744565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b6115ef611740565b6000546001600160a01b0390811691161461163f576040805162461bcd60e51b81526020600482018190526024820152600080516020611e13833981519152604482015290519081900360640190fd5b6001600160a01b0381166116845760405162461bcd60e51b8152600401808060200182810382526026815260200180611dcc6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600082820183811015611739576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b60008261175357506000610e0b565b8282028284828161176057fe5b04146117395760405162461bcd60e51b8152600401808060200182810382526021815260200180611df26021913960400191505060405180910390fd5b600061173983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a61565b600061173983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b03565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b505190508082111561192a576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156118f857600080fd5b505af115801561190c573d6000803e3d6000fd5b505050506040513d602081101561192257600080fd5b506119aa9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561198057600080fd5b505af1158015611994573d6000803e3d6000fd5b505050506040513d60208110156106c557600080fd5b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119aa908490611b5d565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611a5b908590611b5d565b50505050565b60008183611aed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ab2578181015183820152602001611a9a565b50505050905090810190601f168015611adf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611af957fe5b0495945050505050565b60008184841115611b555760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ab2578181015183820152602001611a9a565b505050900390565b6060611bb2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c0e9092919063ffffffff16565b8051909150156119aa57808060200190516020811015611bd157600080fd5b50516119aa5760405162461bcd60e51b815260040180806020018281038252602a815260200180611e33602a913960400191505060405180910390fd5b6060611c1d8484600085611c25565b949350505050565b6060611c3085611d92565b611c81576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611cc05780518252601f199092019160209182019101611ca1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611d22576040519150601f19603f3d011682016040523d82523d6000602084013e611d27565b606091505b50915091508115611d3b579150611c1d9050565b805115611d4b5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611ab2578181015183820152602001611a9a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c1d57505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220f18f4e44bbfa84e8d5b21bd5cbc48fd71d44f8d58ab4b3adbe6310a93d88b5c064736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000040e7705254494a7e61d5b7c86da50225ddc3daae00000000000000000000000015b1019e03cda55b2f143ac17d65e552e8824e9f0000000000000000000000000000000000000000000000001158e460913d00000000000000000000000000000000000000000000000000000000000000a7fbe80000000000000000000000000000000000000000000000000000000000a8bf38
-----Decoded View---------------
Arg [0] : _plutus (address): 0x40E7705254494a7E61D5b7c86da50225DDc3DaAE
Arg [1] : _devaddr (address): 0x15B1019E03CDA55b2F143Ac17D65E552E8824e9f
Arg [2] : _plutusPerBlock (uint256): 1250000000000000000
Arg [3] : _startBlock (uint256): 11009000
Arg [4] : _bonusEndBlock (uint256): 11059000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000040e7705254494a7e61d5b7c86da50225ddc3daae
Arg [1] : 00000000000000000000000015b1019e03cda55b2f143ac17d65e552e8824e9f
Arg [2] : 0000000000000000000000000000000000000000000000001158e460913d0000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000a7fbe8
Arg [4] : 0000000000000000000000000000000000000000000000000000000000a8bf38
Deployed Bytecode Sourcemap
32487:16612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35739:95;;;:::i;:::-;;;;;;;;;;;;;;;;34529:26;;;;;;;;;;;;;;;;-1:-1:-1;34529:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;34529:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34772:34;;;:::i;34016:28::-;;;:::i;36003:515::-;;;;;;;;;;;;;;;;-1:-1:-1;36003:515:0;;;-1:-1:-1;;;;;36003:515:0;;;;;;;;;;;;:::i;:::-;;34292:53;;;:::i;45585:96::-;;;;;;;;;;;;;;;;-1:-1:-1;45585:96:0;;:::i;47416:658::-;;;;;;;;;;;;;;;;-1:-1:-1;47416:658:0;;;;;;;:::i;34865:25::-;;;:::i;45759:880::-;;;;;;;;;;;;;;;;-1:-1:-1;45759:880:0;;:::i;48145:356::-;;;;;;;;;;;;;;;;-1:-1:-1;48145:356:0;;:::i;45332:180::-;;;:::i;36616:304::-;;;;;;;;;;;;;;;;-1:-1:-1;36616:304:0;;;;;;;;;;;;;;:::i;20383:148::-;;;:::i;44444:805::-;;;;;;;;;;;;;;;;-1:-1:-1;44444:805:0;;;;;;-1:-1:-1;;;;;44444:805:0;;:::i;34092:29::-;;;:::i;34177:45::-;;;:::i;48967:129::-;;;;;;;;;;;;;;;;-1:-1:-1;48967:129:0;-1:-1:-1;;;;;48967:129:0;;:::i;19741:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;19741:79:0;;;;;;;;;;;;;;37000:7378;;;;;;;;;;;;;;;;-1:-1:-1;37000:7378:0;;;;;;;:::i;34611:66::-;;;;;;;;;;;;;;;;-1:-1:-1;34611:66:0;;;;;;-1:-1:-1;;;;;34611:66:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33882:25;;;:::i;33935:22::-;;;:::i;46706:662::-;;;;;;;;;;;;;;;;-1:-1:-1;46706:662:0;;;;;;;:::i;20686:244::-;;;;;;;;;;;;;;;;-1:-1:-1;20686:244:0;-1:-1:-1;;;;;20686:244:0;;:::i;35739:95::-;35811:8;:15;35739:95;:::o;34529:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34529:26:0;;;;-1:-1:-1;34529:26:0;;;:::o;34772:34::-;;;;:::o;34016:28::-;;;;:::o;36003:515::-;19963:12;:10;:12::i;:::-;19953:6;;-1:-1:-1;;;;;19953:6:0;;;:22;;;19945:67;;;;;-1:-1:-1;;;19945:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19945:67:0;;;;;;;;;;;;;;;36104:11:::1;36100:61;;;36132:17;:15;:17::i;:::-;36171:23;36212:10;;36197:12;:25;:53;;36240:10;;36197:53;;;36225:12;36197:53;36279:15;::::0;36171:79;;-1:-1:-1;36279:32:0::1;::::0;36299:11;36279:19:::1;:32::i;:::-;36261:15;:50:::0;36336:173:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;36336:173:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;36336:173:0;;;;;;36322:8:::1;:188:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;36322:188:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;-1:-1:-1;36322:188:0;;;;;;;36003:515::o;34292:53::-;34338:7;34292:53;:::o;45585:96::-;19963:12;:10;:12::i;:::-;19953:6;;-1:-1:-1;;;;;19953:6:0;;;:22;;;19945:67;;;;;-1:-1:-1;;;19945:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19945:67:0;;;;;;;;;;;;;;;45642:6:::1;::::0;:31:::1;::::0;;-1:-1:-1;;;45642:31:0;;45654:10:::1;45642:31;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;45642:6:0;;::::1;::::0;:11:::1;::::0;:31;;;;;:6:::1;::::0;:31;;;;;;;;:6;;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45585:96:::0;:::o;47416:658::-;47483:21;47507:8;47516:4;47507:14;;;;;;;;;;;;;;;;47556;;;:8;:14;;;;;;47571:10;47556:26;;;;;;;47601:11;;47507:14;;;;;;;;-1:-1:-1;47601:22:0;-1:-1:-1;47601:22:0;47593:53;;;;;-1:-1:-1;;;47593:53:0;;;;;;;;;;;;-1:-1:-1;;;47593:53:0;;;;;;;;;;;;;;;47657:16;47668:4;47657:10;:16::i;:::-;47684:15;47702:70;47756:4;:15;;;47702:49;47746:4;47702:39;47718:4;:22;;;47702:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49::i;:::-;:53;;:70::i;:::-;47684:88;;47783:39;47802:10;47814:7;47783:18;:39::i;:::-;47847:11;;:24;;47863:7;47847:15;:24::i;:::-;47833:38;;;47916:22;;;;47900:49;;47944:4;;47900:39;;47833:38;47900:15;:39::i;:49::-;47882:15;;;:67;47960:12;;:55;;-1:-1:-1;;;;;47960:12:0;47994:10;48007:7;47960:25;:55::i;:::-;48031:35;;;;;;;;48052:4;;48040:10;;48031:35;;;;;;;;;47416:658;;;;;:::o;34865:25::-;;;;:::o;45759:880::-;45811:21;45835:8;45844:4;45835:14;;;;;;;;;;;;;;;;;;45811:38;;45880:4;:20;;;45864:12;:36;45860:75;;45917:7;;;45860:75;45964:12;;:37;;;-1:-1:-1;;;45964:37:0;;45995:4;45964:37;;;;;;45945:16;;-1:-1:-1;;;;;45964:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45964:37:0;;-1:-1:-1;46016:13:0;46012:102;;-1:-1:-1;46069:12:0;46046:20;;;;:35;46096:7;;46012:102;46124:18;46145:49;46159:4;:20;;;46181:12;46145:13;:49::i;:::-;46124:70;;46205:20;46228:72;46284:15;;46228:51;46263:4;:15;;;46228:30;46243:14;;46228:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:72::-;46311:6;;46323:7;;46205:95;;-1:-1:-1;;;;;;46311:6:0;;;;:11;;46323:7;46332:20;46205:95;46349:2;46332:16;:20::i;:::-;46311:42;;;;;;;;;;;;;-1:-1:-1;;;;;46311:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46385:38;46402:20;46419:2;46402:12;:16;;:20;;;;:::i;:::-;46385:12;;:16;:38::i;:::-;46445:6;;:40;;;-1:-1:-1;;;46445:40:0;;46465:4;46445:40;;;;;;;;;;;;46370:53;;-1:-1:-1;;;;;;46445:6:0;;;;:11;;:40;;;;;:6;;:40;;;;;;;;:6;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46521:64;46548:36;46575:8;46548:22;46565:4;46548:12;:16;;:22;;;;:::i;:36::-;46521:22;;;;;:26;:64::i;:::-;46496:22;;;:89;-1:-1:-1;;46619:12:0;46596:20;;;;:35;;;;-1:-1:-1;45759:880:0;;:::o;48145:356::-;48204:21;48228:8;48237:4;48228:14;;;;;;;;;;;;;;;;48277;;;:8;:14;;;;;;48292:10;48277:26;;;;;;;;48361:11;;48228:14;;;;;;;48314:12;;48228:14;;-1:-1:-1;48314:59:0;;-1:-1:-1;;;;;48314:12:0;;;;;48292:10;48314:25;:59::i;:::-;48425:11;;48389:48;;;;;;;48419:4;;48407:10;;48389:48;;;;;;;;;48462:1;48448:15;;;48474;;;;:19;-1:-1:-1;;48145:356:0:o;45332:180::-;45394:8;:15;45377:14;45420:85;45448:6;45442:3;:12;45420:85;;;45478:15;45489:3;45478:10;:15::i;:::-;45456:5;;45420:85;;;;45332:180;:::o;36616:304::-;19963:12;:10;:12::i;:::-;19953:6;;-1:-1:-1;;;;;19953:6:0;;;:22;;;19945:67;;;;;-1:-1:-1;;;19945:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19945:67:0;;;;;;;;;;;;;;;36714:11:::1;36710:61;;;36742:17;:15;:17::i;:::-;36799:63;36850:11;36799:46;36819:8;36828:4;36819:14;;;;;;;;;;;;;;;;;;:25;;;36799:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;36781:15;:81;;;;36901:11;36873:8;36882:4;36873:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;36616:304:::0;;;:::o;20383:148::-;19963:12;:10;:12::i;:::-;19953:6;;-1:-1:-1;;;;;19953:6:0;;;:22;;;19945:67;;;;;-1:-1:-1;;;19945:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19945:67:0;;;;;;;;;;;;;;;20490:1:::1;20474:6:::0;;20453:40:::1;::::0;-1:-1:-1;;;;;20474:6:0;;::::1;::::0;20453:40:::1;::::0;20490:1;;20453:40:::1;20521:1;20504:19:::0;;-1:-1:-1;;;;;;20504:19:0::1;::::0;;20383:148::o;44444:805::-;44519:7;44539:21;44563:8;44572:4;44563:14;;;;;;;;;;;;;;;;44612;;;:8;:14;;;;;;-1:-1:-1;;;;;44612:21:0;;;;;;;;;;;44563:14;;;;;;;44672:22;;;;44724:12;;:37;;-1:-1:-1;;;44724:37:0;;44755:4;44724:37;;;;;;;;;44563:14;;-1:-1:-1;44612:21:0;;44672:22;;44563:14;;44724:12;;;;;:22;;:37;;;;;44563:14;;44724:37;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44724:37:0;44791:20;;;;44724:37;;-1:-1:-1;44776:12:0;:35;:52;;;;-1:-1:-1;44815:13:0;;;44776:52;44772:387;;;44845:18;44866:49;44880:4;:20;;;44902:12;44866:13;:49::i;:::-;44845:70;;44930:20;44953:72;45009:15;;44953:51;44988:4;:15;;;44953:30;44968:14;;44953:10;:14;;:30;;;;:::i;:72::-;44930:95;-1:-1:-1;45060:87:0;45082:64;45137:8;45082:50;45127:4;45083:38;45100:20;44930:95;45117:2;45100:16;:20::i;:::-;45083:12;;:16;:38::i;45082:64::-;45060:17;;:21;:87::i;:::-;45040:107;;44772:387;;;45176:65;45225:4;:15;;;45176:44;45215:4;45176:34;45192:17;45176:4;:11;;;:15;;:34;;;;:::i;:65::-;45169:72;;;;;;44444:805;;;;;:::o;34092:29::-;;;;:::o;34177:45::-;34220:2;34177:45;:::o;48967:129::-;49038:7;;-1:-1:-1;;;;;49038:7:0;49024:10;:21;49016:43;;;;;-1:-1:-1;;;49016:43:0;;;;;;;;;;;;-1:-1:-1;;;49016:43:0;;;;;;;;;;;;;;;49070:7;:18;;-1:-1:-1;;;;;;49070:18:0;-1:-1:-1;;;;;49070:18:0;;;;;;;;;;48967:129::o;19741:79::-;19779:7;19806:6;-1:-1:-1;;;;;19806:6:0;19741:79;:::o;37000:7378::-;37186:10;;37072:7;;;;37179:17;;;;:33;;;37209:3;37200:5;:12;;37179:33;37175:7194;;;37236:1;37229:8;;;;;37175:7194;37265:10;;37259:3;:16;:40;;;;;37286:13;;37279:3;:20;;37259:40;37255:7114;;;37329:10;;37320:5;:19;37316:192;;37367:41;34220:2;37367:19;37375:10;;37367:3;:7;;:19;;;;:::i;:41::-;37360:48;;;;;37316:192;37456:36;34220:2;37456:14;:3;37464:5;37456:7;:14::i;37255:7114::-;37535:13;;37529:3;:19;:36;;;;;37559:6;;37552:3;:13;;37529:36;37525:6844;;;37594:10;;37585:5;:19;37581:531;;37632:51;34220:2;37632:29;37650:10;;37632:13;;:17;;:29;;;;:::i;:51::-;37624:59;-1:-1:-1;37709:63:0;37719:52;37746:24;34220:2;37767;37746:20;:24::i;:::-;37727:13;;37719:22;;:3;;:7;:22::i;:52::-;37709:5;;:9;:63::i;37581:531::-;37806:10;;37798:5;:18;:44;;;;;37829:13;;37820:5;:22;;37798:44;37794:318;;;37870:46;34220:2;37870:24;37888:5;37870:13;;:17;;:24;;;;:::i;37794:318::-;38052:44;38071:24;34220:2;38092;38071:20;:24::i;:::-;38052:14;:3;38060:5;38052:7;:14::i;37525:6844::-;38139:6;;38133:3;:12;:29;;;;;38156:6;;38149:3;:13;;38133:29;38129:6240;;;38191:10;;38182:5;:19;38178:914;;38229:51;34220:2;38229:29;38247:10;;38229:13;;:17;;:29;;;;:::i;:51::-;38221:59;-1:-1:-1;38307:60:0;38317:49;38341:24;34220:2;38362;38341:20;:24::i;:::-;34338:7;;38317:23;:49::i;38307:60::-;38299:68;-1:-1:-1;38393:56:0;38403:45;38423:24;34220:2;38444;38423:20;:24::i;:::-;38411:6;;38403:15;;:3;;:7;:15::i;38178:914::-;38483:10;;38475:5;:18;:44;;;;;38506:13;;38497:5;:22;;38475:44;38471:621;;;38547:46;34220:2;38547:24;38565:5;38547:13;;:17;;:24;;;;:::i;38471:621::-;38796:13;;38788:5;:21;:40;;;;;38822:6;;38813:5;:15;;38788:40;38784:308;;;38856:47;38878:24;34220:2;38899;38878:20;:24::i;:::-;38856:6;;:17;;38867:5;38856:10;:17::i;38784:308::-;39032:44;39051:24;34220:2;39072;39051:20;:24::i;38129:6240::-;39119:6;;39113:3;:12;:29;;;;;39136:6;;39129:3;:13;;39113:29;39109:5260;;;39171:10;;39162:5;:19;39158:1388;;39209:51;34220:2;39209:29;39227:10;;39209:13;;:17;;:29;;;;:::i;:51::-;39201:59;-1:-1:-1;39287:60:0;39297:49;39321:24;34220:2;39342;39321:20;:24::i;39287:60::-;39279:68;-1:-1:-1;39374:60:0;39384:49;39408:24;34220:2;39429;39408:20;:24::i;39374:60::-;39366:68;-1:-1:-1;39460:56:0;39470:45;39490:24;34220:2;39511;39490:20;:24::i;:::-;39478:6;;39470:15;;:3;;:7;:15::i;39158:1388::-;39550:10;;39542:5;:18;:44;;;;;39573:13;;39564:5;:22;;39542:44;39538:1008;;;39614:46;34220:2;39614:24;39632:5;39614:13;;:17;;:24;;;;:::i;39538:1008::-;39950:13;;39942:5;:21;:40;;;;;39976:6;;39967:5;:15;;39942:40;39938:608;;;40009:47;40031:24;34220:2;40052;40031:20;:24::i;39938:608::-;40258:6;;40250:5;:14;:33;;;;;40277:6;;40268:5;:15;;40250:33;40247:299;;;40310:47;40332:24;34220:2;40353;40332:20;:24::i;:::-;40310:6;;:17;;40321:5;40310:10;:17::i;40247:299::-;40486:44;40505:24;34220:2;40526;40505:20;:24::i;39109:5260::-;40582:6;;40576:3;:12;:29;;;;;40599:6;;40592:3;:13;;40576:29;40572:3797;;;40634:10;;40625:5;:19;40621:1775;;40672:51;34220:2;40672:29;40690:10;;40672:13;;:17;;:29;;;;:::i;:51::-;40664:59;-1:-1:-1;40750:60:0;40760:49;40784:24;34220:2;40805;40784:20;:24::i;40750:60::-;40742:68;-1:-1:-1;40837:61:0;40848:49;40872:24;34220:2;40893;40872:20;:24::i;40837:61::-;40829:69;-1:-1:-1;40925:60:0;40935:49;40959:24;34220:2;40980;40959:20;:24::i;40925:60::-;40917:68;;41011:26;41021:15;41029:6;;41021:3;:7;;:15;;;;:::i;40621:1775::-;41071:10;;41063:5;:18;:44;;;;;41094:13;;41085:5;:22;;41063:44;41059:1337;;;41135:46;34220:2;41135:24;41153:5;41135:13;;:17;;:24;;;;:::i;41059:1337::-;41529:13;;41521:5;:21;:40;;;;;41555:6;;41546:5;:15;;41521:40;41517:879;;;41589:47;41611:24;34220:2;41632;41611:20;:24::i;41517:879::-;41895:6;;41887:5;:14;:33;;;;;41914:6;;41905:5;:15;;41887:33;41884:512;;;41948:47;41970:24;34220:2;41991;41970:20;:24::i;41884:512::-;42167:6;;42159:5;:14;:33;;;;;42186:6;;42177:5;:15;;42159:33;42156:240;;;42220:47;42242:24;34220:2;42263;42242:20;:24::i;:::-;42220:6;;:17;;42231:5;42220:10;:17::i;42156:240::-;42366:14;:3;42374:5;42366:7;:14::i;40572:3797::-;42443:10;;42434:5;:19;42430:1928;;42481:51;34220:2;42481:29;42499:10;;42481:13;;:17;;:29;;;;:::i;:51::-;42473:59;-1:-1:-1;42559:60:0;42569:49;42593:24;34220:2;42614;42593:20;:24::i;42559:60::-;42551:68;-1:-1:-1;42646:60:0;42656:49;42680:24;34220:2;42701;42680:20;:24::i;42646:60::-;42638:68;-1:-1:-1;42733:60:0;42743:49;42767:24;34220:2;42788;42767:20;:24::i;42733:60::-;42725:68;-1:-1:-1;42819:30:0;42725:68;34338:7;42819:9;:30::i;42430:1928::-;42883:10;;42875:5;:18;:44;;;;;42906:13;;42897:5;:22;;42875:44;42871:1487;;;42947:46;34220:2;42947:24;42965:5;42947:13;;:17;;:24;;;;:::i;42871:1487::-;43344:13;;43336:5;:21;:40;;;;;43370:6;;43361:5;:15;;43336:40;43332:1026;;;43404:58;43414:47;43436:24;34220:2;43457;43436:20;:24::i;:::-;43414:6;;:17;;43425:5;43414:10;:17::i;43332:1026::-;43725:6;;43717:5;:14;:33;;;;;43744:6;;43735:5;:15;;43717:33;43714:644;;;43778:58;43788:47;43810:24;34220:2;43831;43810:20;:24::i;:::-;43788:6;;:17;;43799:5;43788:10;:17::i;43714:644::-;44013:6;;44005:5;:14;:33;;;;;44032:6;;44023:5;:15;;44005:33;44001:357;;;44066:58;44076:47;44098:24;34220:2;44119;44098:20;:24::i;:::-;44076:6;;:17;;44087:5;44076:10;:17::i;44001:357::-;44213:6;;44205:5;:14;:33;;;;;44232:6;;44223:5;:15;;44205:33;44202:156;;;44275:6;;44265:28;;44275:17;;44286:5;44275:10;:17::i;44202:156::-;44341:1;44334:8;;;;;34611:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33882:25::-;;;-1:-1:-1;;;;;33882:25:0;;:::o;33935:22::-;;;-1:-1:-1;;;;;33935:22:0;;:::o;46706:662::-;46772:21;46796:8;46805:4;46796:14;;;;;;;;;;;;;;;;46845;;;:8;:14;;;;;;46860:10;46845:26;;;;;;;46796:14;;;;;;;;-1:-1:-1;46882:16:0;46854:4;46882:10;:16::i;:::-;46913:11;;:15;46909:190;;46945:15;46963:70;47017:4;:15;;;46963:49;47007:4;46963:39;46979:4;:22;;;46963:4;:11;;;:15;;:39;;;;:::i;:70::-;46945:88;;47048:39;47067:10;47079:7;47048:18;:39::i;:::-;46909:190;;47109:12;;:74;;-1:-1:-1;;;;;47109:12:0;47147:10;47168:4;47175:7;47109:29;:74::i;:::-;47208:11;;:24;;47224:7;47208:15;:24::i;:::-;47194:38;;;47277:22;;;;47261:49;;47305:4;;47261:39;;47194:38;47261:15;:39::i;:49::-;47243:15;;;:67;47326:34;;;;;;;;47346:4;;47334:10;;47326:34;;;;;;;;;46706:662;;;;:::o;20686:244::-;19963:12;:10;:12::i;:::-;19953:6;;-1:-1:-1;;;;;19953:6:0;;;:22;;;19945:67;;;;;-1:-1:-1;;;19945:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19945:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20775:22:0;::::1;20767:73;;;;-1:-1:-1::0;;;20767:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20877:6;::::0;;20856:38:::1;::::0;-1:-1:-1;;;;;20856:38:0;;::::1;::::0;20877:6;::::1;::::0;20856:38:::1;::::0;::::1;20905:6;:17:::0;;-1:-1:-1;;;;;;20905:17:0::1;-1:-1:-1::0;;;;;20905:17:0;;;::::1;::::0;;;::::1;::::0;;20686:244::o;4476:181::-;4534:7;4566:5;;;4590:6;;;;4582:46;;;;;-1:-1:-1;;;4582:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4648:1;4476:181;-1:-1:-1;;;4476:181:0:o;569:106::-;657:10;569:106;:::o;5830:471::-;5888:7;6133:6;6129:47;;-1:-1:-1;6163:1:0;6156:8;;6129:47;6200:5;;;6204:1;6200;:5;:1;6224:5;;;;;:10;6216:56;;;;-1:-1:-1;;;6216:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6777:132;6835:7;6862:39;6866:1;6869;6862:39;;;;;;;;;;;;;;;;;:3;:39::i;4940:136::-;4998:7;5025:43;5029:1;5032;5025:43;;;;;;;;;;;;;;;;;:3;:43::i;48619:292::-;48717:6;;:31;;;-1:-1:-1;;;48717:31:0;;48742:4;48717:31;;;;;;48697:17;;-1:-1:-1;;;;;48717:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48717:31:0;;-1:-1:-1;48763:19:0;;;48759:145;;;48799:6;;:31;;;-1:-1:-1;;;48799:31:0;;-1:-1:-1;;;;;48799:31:0;;;;;;;;;;;;;;;:6;;;;;:15;;:31;;;;;;;;;;;;;;:6;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48759:145:0;;-1:-1:-1;48759:145:0;;48863:6;;:29;;;-1:-1:-1;;;48863:29:0;;-1:-1:-1;;;;;48863:29:0;;;;;;;;;;;;;;;:6;;;;;:15;;:29;;;;;;;;;;;;;;:6;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48759:145;48619:292;;;:::o;15656:177::-;15766:58;;;-1:-1:-1;;;;;15766:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15766:58:0;-1:-1:-1;;;15766:58:0;;;15739:86;;15759:5;;15739:19;:86::i;15841:205::-;15969:68;;;-1:-1:-1;;;;;15969:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15969:68:0;-1:-1:-1;;;15969:68:0;;;15942:96;;15962:5;;15942:19;:96::i;:::-;15841:205;;;;:::o;7405:278::-;7491:7;7526:12;7519:5;7511:28;;;;-1:-1:-1;;;7511:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7550:9;7566:1;7562;:5;;;;;;;7405:278;-1:-1:-1;;;;;7405:278:0:o;5379:192::-;5465:7;5501:12;5493:6;;;;5485:29;;;;-1:-1:-1;;;5485:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5537:5:0;;;5379:192::o;17961:761::-;18385:23;18411:69;18439:4;18411:69;;;;;;;;;;;;;;;;;18419:5;-1:-1:-1;;;;;18411:27:0;;;:69;;;;;:::i;:::-;18495:17;;18385:95;;-1:-1:-1;18495:21:0;18491:224;;18637:10;18626:30;;;;;;;;;;;;;;;-1:-1:-1;18626:30:0;18618:85;;;;-1:-1:-1;;;18618:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12734:196;12837:12;12869:53;12892:6;12900:4;12906:1;12909:12;12869:22;:53::i;:::-;12862:60;12734:196;-1:-1:-1;;;;12734:196:0:o;14111:979::-;14241:12;14274:18;14285:6;14274:10;:18::i;:::-;14266:60;;;;;-1:-1:-1;;;14266:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14400:12;14414:23;14441:6;-1:-1:-1;;;;;14441:11:0;14461:8;14472:4;14441:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14441:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14399:78;;;;14492:7;14488:595;;;14523:10;-1:-1:-1;14516:17:0;;-1:-1:-1;14516:17:0;14488:595;14637:17;;:21;14633:439;;14900:10;14894:17;14961:15;14948:10;14944:2;14940:19;14933:44;14848:148;15036:20;;-1:-1:-1;;;15036:20:0;;;;;;;;;;;;;;;;;15043:12;;15036:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9619:619;9679:4;10147:20;;9990:66;10187:23;;;;;;:42;;-1:-1:-1;;10214:15:0;;;10179:51;-1:-1:-1;;9619:619:0:o
Swarm Source
ipfs://f18f4e44bbfa84e8d5b21bd5cbc48fd71d44f8d58ab4b3adbe6310a93d88b5c0
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.