Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 28 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20943653 | 1135 days ago | IN | 0 POL | 0.00029756 | ||||
Withdraw | 20833238 | 1137 days ago | IN | 0 POL | 0.00320661 | ||||
Withdraw | 20712079 | 1141 days ago | IN | 0 POL | 0.00371961 | ||||
Withdraw | 20708354 | 1141 days ago | IN | 0 POL | 0.00474561 | ||||
Deposit | 20707999 | 1141 days ago | IN | 0 POL | 0.00381066 | ||||
Withdraw | 20703306 | 1141 days ago | IN | 0 POL | 0.00585561 | ||||
Deposit | 20689437 | 1141 days ago | IN | 0 POL | 0.00544926 | ||||
Emergency Withdr... | 20680440 | 1141 days ago | IN | 0 POL | 0.00145521 | ||||
Emergency Withdr... | 20679499 | 1141 days ago | IN | 0 POL | 0.00145521 | ||||
Emergency Withdr... | 20679499 | 1141 days ago | IN | 0 POL | 0.00173472 | ||||
Emergency Withdr... | 20679499 | 1141 days ago | IN | 0 POL | 0.0014655 | ||||
Withdraw | 20570067 | 1145 days ago | IN | 0 POL | 0.0012936 | ||||
Deposit | 20569996 | 1145 days ago | IN | 0 POL | 0.00116118 | ||||
Deposit | 20569981 | 1145 days ago | IN | 0 POL | 0.00440709 | ||||
Deposit | 20520847 | 1146 days ago | IN | 0 POL | 0.00476757 | ||||
Transfer Ownersh... | 20473291 | 1147 days ago | IN | 0 POL | 0.00086217 | ||||
Set | 20471584 | 1147 days ago | IN | 0 POL | 0.00138771 | ||||
Add | 20471565 | 1147 days ago | IN | 0 POL | 0.0048072 | ||||
Add | 20471560 | 1147 days ago | IN | 0 POL | 0.00497034 | ||||
Add | 20471554 | 1147 days ago | IN | 0 POL | 0.00497166 | ||||
Add | 20471547 | 1147 days ago | IN | 0 POL | 0.00496446 | ||||
Add | 20471540 | 1147 days ago | IN | 0 POL | 0.00481644 | ||||
Add | 20471535 | 1147 days ago | IN | 0 POL | 0.00480972 | ||||
Add | 20471528 | 1147 days ago | IN | 0 POL | 0.00497166 | ||||
Add | 20471522 | 1147 days ago | IN | 0 POL | 0.00481104 |
Loading...
Loading
Contract Name:
MasterChef
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./ReentrancyGuard.sol"; import "./Ownable.sol"; import "./SafeMath.sol"; import "./SafeERC20.sol"; import "./DiamondToken.sol"; import "./IReferral.sol"; // MasterChef is the master of Diamond. He can make Diamond and he is a fair guy. // // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once Diamond is sufficiently // distributed and the community can show to govern itself. // // Have fun reading it. Hopefully it's bug-free. God bless. // European boys play fair, don't worry. contract MasterChef is Ownable, ReentrancyGuard { 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 IRIS // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accIrisPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accIrisPerShare` (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. IRISes to distribute per block. uint256 lastRewardBlock; // Last block number that IRISes distribution occurs. uint256 accIrisPerShare; // Accumulated IRISes per share, times 1e18. See below. uint16 depositFeeBP; // Deposit fee in basis points uint256 lpSupply; } // The DIAMOND TOKEN! DiamondToken public iris; address public devAddress; address public feeAddress; uint256 constant max_iris_supply = 1000000 ether; // IRIS tokens created per block. uint256 public irisPerBlock = 0.4 ether; // 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 IRIS mining starts. uint256 public startBlock; // Iris referral contract address. IReferral public referral; // Referral commission rate in basis points. uint16 public referralCommissionRate = 200; // Max referral commission rate: 5%. uint16 public constant MAXIMUM_REFERRAL_COMMISSION_RATE = 500; uint256 public constant MAXIMUM_EMISSION_RATE = 1 ether; bool updateReferralAddress = false; 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); event SetFeeAddress(address indexed user, address indexed newAddress); event SetDevAddress(address indexed user, address indexed newAddress); event SetReferralAddress(address indexed user, IReferral indexed newAddress); event UpdateEmissionRate(address indexed user, uint256 irisPerBlock); event ReferralCommissionPaid(address indexed user, address indexed referrer, uint256 commissionAmount); event PoolAdd(address indexed user, IERC20 lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint16 depositFeeBP); event PoolSet(address indexed user, IERC20 lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint16 depositFeeBP); event SetReferralCommissionRate(address indexed user, uint16 referralCommmissionRate); event UpdateStartBlock(address indexed user, uint256 startBlock); constructor( DiamondToken _iris, uint256 _startBlock, address _devAddress, address _feeAddress ) public { iris = _iris; startBlock = _startBlock; devAddress = _devAddress; feeAddress = _feeAddress; } function poolLength() external view returns (uint256) { return poolInfo.length; } mapping(IERC20 => bool) public poolExistence; modifier nonDuplicated(IERC20 _lpToken) { require(poolExistence[_lpToken] == false, "nonDuplicated: duplicated"); _; } // Add a new lp to the pool. Can only be called by the owner. function add(uint256 _allocPoint, IERC20 _lpToken, uint16 _depositFeeBP) external onlyOwner nonDuplicated(_lpToken) { _lpToken.balanceOf(address(this)); require(_depositFeeBP <= 500, "add: invalid deposit fee basis points"); uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolExistence[_lpToken] = true; poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accIrisPerShare: 0, depositFeeBP: _depositFeeBP, lpSupply: 0 })); emit PoolAdd(msg.sender, _lpToken, _allocPoint,lastRewardBlock,_depositFeeBP); } // Update the given pool's IRIS allocation point and deposit fee. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP) external onlyOwner { require(_depositFeeBP <= 500, "set: invalid deposit fee basis points"); totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; emit PoolSet(msg.sender, poolInfo[_pid].lpToken, _allocPoint,poolInfo[_pid].lastRewardBlock,_depositFeeBP); } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (iris.totalSupply() >= max_iris_supply) return 0; return _to.sub(_from); } // View function to see pending DIAMONDs on frontend. function pendingIris(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accIrisPerShare = pool.accIrisPerShare; if (block.number > pool.lastRewardBlock && pool.lpSupply != 0 && totalAllocPoint > 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 irisReward = multiplier.mul(irisPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accIrisPerShare = accIrisPerShare.add(irisReward.mul(1e18).div(pool.lpSupply)); } return user.amount.mul(accIrisPerShare).div(1e18).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); } } // 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; } if (pool.lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 irisReward = multiplier.mul(irisPerBlock).mul(pool.allocPoint).div(totalAllocPoint); if(iris.totalSupply().add(irisReward.mul(105).div(100)) <= max_iris_supply){ iris.mint(devAddress, irisReward.div(100)); iris.mint(address(this), irisReward); }else if(iris.totalSupply() < max_iris_supply){ iris.mint(address(this), max_iris_supply.sub(iris.totalSupply())); } pool.accIrisPerShare = pool.accIrisPerShare.add(irisReward.mul(1e18).div(pool.lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for DIAMOND allocation. function deposit(uint256 _pid, uint256 _amount, address _referrer) nonReentrant external { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (_amount > 0 && address(referral) != address(0) && _referrer != address(0) && _referrer != msg.sender) { referral.recordReferral(msg.sender, _referrer); } if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accIrisPerShare).div(1e18).sub(user.rewardDebt); if (pending > 0) { safeIrisTransfer(msg.sender, pending); payReferralCommission(msg.sender, pending); } } if (_amount > 0) { uint256 balanceBefore = pool.lpToken.balanceOf(address(this)); pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); _amount = pool.lpToken.balanceOf(address(this)).sub(balanceBefore); require(_amount > 0, "we dont accept deposits of 0"); if (pool.depositFeeBP > 0) { uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000); pool.lpToken.safeTransfer(feeAddress, depositFee); user.amount = user.amount.add(_amount).sub(depositFee); pool.lpSupply = pool.lpSupply.add(_amount).sub(depositFee); } else { user.amount = user.amount.add(_amount); pool.lpSupply = pool.lpSupply.add(_amount); } } user.rewardDebt = user.amount.mul(pool.accIrisPerShare).div(1e18); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) nonReentrant external { 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.accIrisPerShare).div(1e18).sub(user.rewardDebt); if (pending > 0) { safeIrisTransfer(msg.sender, pending); payReferralCommission(msg.sender, pending); } if (_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); pool.lpSupply = pool.lpSupply.sub(_amount); } user.rewardDebt = user.amount.mul(pool.accIrisPerShare).div(1e18); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) nonReentrant external{ PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; pool.lpSupply = pool.lpSupply.sub(user.amount); user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe DIAMOND transfer function, just in case if rounding error causes pool to not have enough DIAMOND. function safeIrisTransfer(address _to, uint256 _amount) internal { uint256 irisBal = iris.balanceOf(address(this)); bool transferSuccess = false; if (_amount > irisBal) { transferSuccess = iris.transfer(_to, irisBal); } else { transferSuccess = iris.transfer(_to, _amount); } require(transferSuccess, "safeIrisTransfer: Transfer failed"); } // Update dev address by the previous dev. function setDevAddress(address _devAddress) external onlyOwner { require(_devAddress != address(0), "!nonzero"); devAddress = _devAddress; emit SetDevAddress(msg.sender, _devAddress); } function setFeeAddress(address _feeAddress) external onlyOwner { require(_feeAddress != address(0), "!nonzero"); feeAddress = _feeAddress; emit SetFeeAddress(msg.sender, _feeAddress); } function updateEmissionRate(uint256 _irisPerBlock) external onlyOwner { require(_irisPerBlock <= MAXIMUM_EMISSION_RATE, "Too High"); massUpdatePools(); irisPerBlock = _irisPerBlock; emit UpdateEmissionRate(msg.sender, _irisPerBlock); } // Update the referral contract address by the owner function setReferralAddress(IReferral _referral) external onlyOwner { require(updateReferralAddress == false, "The Referral contract address is changed already"); referral = _referral; updateReferralAddress = true; emit SetReferralAddress(msg.sender, _referral); } // Update referral commission rate by the owner function setReferralCommissionRate(uint16 _referralCommissionRate) external onlyOwner { require(_referralCommissionRate <= MAXIMUM_REFERRAL_COMMISSION_RATE, "setReferralCommissionRate: invalid referral commission rate basis points"); referralCommissionRate = _referralCommissionRate; emit SetReferralCommissionRate(msg.sender, _referralCommissionRate); } // Pay referral commission to the referrer who referred this user. function payReferralCommission(address _user, uint256 _pending) internal { if (address(referral) != address(0) && referralCommissionRate > 0) { address referrer = referral.getReferrer(_user); uint256 commissionAmount = _pending.mul(referralCommissionRate).div(10000); if (referrer != address(0) && commissionAmount > 0) { if(iris.totalSupply().add(commissionAmount) <= max_iris_supply){ iris.mint(referrer, commissionAmount); }else if(iris.totalSupply() < max_iris_supply) { iris.mint(address(this), max_iris_supply.sub(iris.totalSupply())); } emit ReferralCommissionPaid(_user, referrer, commissionAmount); } } } // Only update before start of farm function updateStartBlock(uint256 _startBlock) onlyOwner external{ require(startBlock > block.number, "Farm already started"); uint256 length = poolInfo.length; for(uint256 pid = 0; pid < length; ++pid){ PoolInfo storage pool = poolInfo[pid]; pool.lastRewardBlock = _startBlock; } startBlock = _startBlock; emit UpdateStartBlock(msg.sender, _startBlock); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./Ownable.sol"; import "./ERC20.sol"; contract DiamondToken is ERC20("Diamond", "DIAMOND"), Ownable { function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @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 { } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IReferral { /** * @dev Record referral. */ function recordReferral(address user, address referrer) external; /** * @dev Get the referrer address that referred the user. */ function getReferrer(address user) external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./Context.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "./Context.sol"; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @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"); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @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; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract DiamondToken","name":"_iris","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_feeAddress","type":"address"}],"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":false,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"name":"PoolAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"name":"PoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"commissionAmount","type":"uint256"}],"name":"ReferralCommissionPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract IReferral","name":"newAddress","type":"address"}],"name":"SetReferralAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint16","name":"referralCommmissionRate","type":"uint16"}],"name":"SetReferralCommissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"irisPerBlock","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"UpdateStartBlock","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":"MAXIMUM_EMISSION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_REFERRAL_COMMISSION_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","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":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iris","outputs":[{"internalType":"contract DiamondToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"irisPerBlock","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":"pendingIris","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"accIrisPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"},{"internalType":"uint256","name":"lpSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referral","outputs":[{"internalType":"contract IReferral","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCommissionRate","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"uint16","name":"_depositFeeBP","type":"uint16"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IReferral","name":"_referral","type":"address"}],"name":"setReferralAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_referralCommissionRate","type":"uint16"}],"name":"setReferralCommissionRate","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":"_irisPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","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
608060405267058d15e176280000600555600060085560c8600a60146101000a81548161ffff021916908361ffff1602179055506000600a60166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b50604051620049d8380380620049d8833981810160405260808110156200008157600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050506000620000c26200023b60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260098190555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000243565b600033905090565b61478580620002536000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80636eed6a2c1161010f578063bf5294c8116100a2578063d0d41fe111610071578063d0d41fe11461082b578063d30ef61b1461086f578063f2fde38b14610891578063fac2b9ba146108d5576101f0565b8063bf5294c81461071d578063c80ff2421461073b578063c8e63cd21461079d578063cbd258b5146107d1576101f0565b80638dbb1e3a116100de5780638dbb1e3a146105cc5780638dbdbe6d1461061857806393f1a40b14610670578063b3caba5a146106d9576101f0565b80636eed6a2c1461052c578063715018a61461054a5780638705fcd4146105545780638da5cb5b14610598576101f0565b8063412753581161018757806351eb05a61161015657806351eb05a6146104945780635312ea8e146104c257806355dbc826146104f0578063630b5ba114610522576101f0565b806341275358146103e8578063441a3e701461041c57806348b22bfb1461045457806348cd4cb114610476576101f0565b80631526fe27116101c35780631526fe27146102d157806317caf6f11461035057806324bcb38c1461036e5780633ad10ef6146103b4576101f0565b806306539275146101f5578063081e3eda146102515780630ba84cd21461026f5780631441a5a91461029d575b600080fd5b61024f6004803603606081101561020b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610903565b005b610259610dad565b6040518082815260200191505060405180910390f35b61029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610dba565b005b6102a5610f60565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610f86565b604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018361ffff168152602001828152602001965050505050505060405180910390f35b610358610ffd565b6040518082815260200191505060405180910390f35b6103b26004803603606081101561038457600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611003565b005b6103bc6112b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f06112d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104526004803603604081101561043257600080fd5b8101908080359060200190929190803590602001909291905050506112fe565b005b61045c611613565b604051808261ffff16815260200191505060405180910390f35b61047e611619565b6040518082815260200191505060405180910390f35b6104c0600480360360208110156104aa57600080fd5b810190808035906020019092919050505061161f565b005b6104ee600480360360208110156104d857600080fd5b8101908080359060200190929190505050611bc8565b005b6105206004803603602081101561050657600080fd5b81019080803561ffff169060200190929190505050611da7565b005b61052a611f44565b005b610534611f71565b6040518082815260200191505060405180910390f35b610552611f7d565b005b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612103565b005b6105a061230c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610602600480360360408110156105e257600080fd5b810190808035906020019092919080359060200190929190505050612335565b6040518082815260200191505060405180910390f35b61066e6004803603606081101561062e57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240f565b005b6106bc6004803603604081101561068657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ba7565b604051808381526020018281526020019250505060405180910390f35b61071b600480360360208110156106ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b005b610725612dc5565b6040518082815260200191505060405180910390f35b6107876004803603604081101561075157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dcb565b6040518082815260200191505060405180910390f35b6107a5612f62565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610813600480360360208110156107e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b60405180821515815260200191505060405180910390f35b61086d6004803603602081101561084157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fa8565b005b6108776131b1565b604051808261ffff16815260200191505060405180910390f35b6108d3600480360360208110156108a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131c5565b005b610901600480360360208110156108eb57600080fd5b81019080803590602001909291905050506133d0565b005b61090b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8160001515600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f6e4475706c6963617465643a206475706c6963617465640000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d6020811015610b2357600080fd5b8101908080519060200190929190505050506101f48261ffff161115610b94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806145fc6025913960400191505060405180910390fd5b60006009544311610ba757600954610ba9565b435b9050610bc0856008546135ba90919063ffffffff16565b6008819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060066040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001878152602001838152602001600081526020018561ffff1681526020016000815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555060a0820151816005015550503373ffffffffffffffffffffffffffffffffffffffff167fa2c51573880fb2ac3b22bb2584e1c8972b7baf3928d9abbf230c500de25e84fa85878487604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018261ffff16815260200194505050505060405180910390a25050505050565b6000600680549050905090565b610dc26135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000811115610f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f204869676800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610f08611f44565b806005819055503373ffffffffffffffffffffffffffffffffffffffff167fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c4053826040518082815260200191505060405180910390a250565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60068181548110610f9357fe5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16908060050154905086565b60085481565b61100b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101f48161ffff16111561112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b61116f826111616006868154811061113e57fe5b90600052602060002090600602016001015460085461364290919063ffffffff16565b6135ba90919063ffffffff16565b600881905550816006848154811061118357fe5b90600052602060002090600602016001018190555080600684815481106111a657fe5b906000526020600020906006020160040160006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f6b15d9ccfec36c187bb7ca9613a8be7a7367d3fc401d1efdea721d6c4567395e6006858154811061121657fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846006878154811061125657fe5b90600052602060002090600602016002015485604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018261ffff16815260200194505050505060405180910390a2505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006006838154811061138e57fe5b9060005260206000209060060201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000154101561146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b6114758461161f565b60006114c282600101546114b4670de0b6b3a76400006114a68760030154876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b905060008111156114e2576114d7338261375c565b6114e13382613a30565b5b60008411156115795761150284836000015461364290919063ffffffff16565b826000018190555061155933858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b61157084846005015461364290919063ffffffff16565b83600501819055505b6115ae670de0b6b3a76400006115a08560030154856000015461368c90919063ffffffff16565b61371290919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a3505050600180819055505050565b6101f481565b60095481565b60006006828154811061162e57fe5b906000526020600020906006020190508060020154431161164f5750611bc5565b600081600501541480611666575060008160010154145b1561167a5743816002018190555050611bc5565b600061168a826002015443612335565b905060006116cd6008546116bf85600101546116b16005548761368c90919063ffffffff16565b61368c90919063ffffffff16565b61371290919063ffffffff16565b905069d3c21bcecceda10000006117b561170460646116f660698661368c90919063ffffffff16565b61371290919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561176c57600080fd5b505afa158015611780573d6000803e3d6000fd5b505050506040513d602081101561179657600080fd5b81019080805190602001909291905050506135ba90919063ffffffff16565b1161194a57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661182f60648561371290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561192d57600080fd5b505af1158015611941573d6000803e3d6000fd5b50505050611b69565b69d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119bd57600080fd5b505afa1580156119d1573d6000803e3d6000fd5b505050506040513d60208110156119e757600080fd5b81019080805190602001909291905050501015611b6857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930611afc600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611aa857600080fd5b505afa158015611abc573d6000803e3d6000fd5b505050506040513d6020811015611ad257600080fd5b810190808051906020019092919050505069d3c21bcecceda100000061364290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050505b5b611bb0611b9d8460050154611b8f670de0b6b3a76400008561368c90919063ffffffff16565b61371290919063ffffffff16565b84600301546135ba90919063ffffffff16565b83600301819055504383600201819055505050505b50565b60026001541415611c41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068281548110611c5857fe5b9060005260206000209060060201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050611ce08260000154846005015461364290919063ffffffff16565b83600501819055506000826000018190555060008260010181905550611d4b33828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a35050506001808190555050565b611daf6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101f461ffff168161ffff161115611ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806146216048913960600191505060405180910390fd5b80600a60146101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f59918637b45c88e8896129fc8b400ddc6729ae5c8f2590514684dde0f7877ebc82604051808261ffff16815260200191505060405180910390a250565b6000600680549050905060005b81811015611f6d57611f628161161f565b806001019050611f51565b5050565b670de0b6b3a764000081565b611f856135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61210b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561226e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216e6f6e7a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f760405160405180910390a350565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600069d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d60208110156123d457600080fd5b8101908080519060200190929190505050106123f35760009050612409565b612406838361364290919063ffffffff16565b90505b92915050565b60026001541415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006006848154811061249f57fe5b9060005260206000209060060201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061250c8561161f565b60008411801561256b5750600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156125a45750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125dc57503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126a357600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c7f7b6b33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561268a57600080fd5b505af115801561269e573d6000803e3d6000fd5b505050505b60008160000154111561271f5760006126fd82600101546126ef670de0b6b3a76400006126e18760030154876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b9050600081111561271d57612712338261375c565b61271c3382613a30565b5b505b6000841115612b0d5760008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d60208110156127df57600080fd5b810190808051906020019092919050505090506128433330878660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614094909392919063ffffffff16565b61291b818460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128d257600080fd5b505afa1580156128e6573d6000803e3d6000fd5b505050506040513d60208110156128fc57600080fd5b810190808051906020019092919050505061364290919063ffffffff16565b945060008511612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f776520646f6e7420616363657074206465706f73697473206f6620300000000081525060200191505060405180910390fd5b60008360040160009054906101000a900461ffff1661ffff161115612acc5760006129f16127106129e38660040160009054906101000a900461ffff1661ffff168961368c90919063ffffffff16565b61371290919063ffffffff16565b9050612a64600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b612a8d81612a7f8886600001546135ba90919063ffffffff16565b61364290919063ffffffff16565b8360000181905550612abe81612ab08887600501546135ba90919063ffffffff16565b61364290919063ffffffff16565b846005018190555050612b0b565b612ae38583600001546135ba90919063ffffffff16565b8260000181905550612b028584600501546135ba90919063ffffffff16565b83600501819055505b505b612b42670de0b6b3a7640000612b348460030154846000015461368c90919063ffffffff16565b61371290919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15866040518082815260200191505060405180910390a3505060018081905550505050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b612be06135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ca0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600a60169054906101000a900460ff16151514612d0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146f66030913960400191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60166101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fee63201fedda9e28e92efef9abb99bd9d2f90208a4fd0d0186c14daf364a273160405160405180910390a350565b60055481565b60008060068481548110612ddb57fe5b9060005260206000209060060201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600301549050826002015443118015612e6057506000836005015414155b8015612e6e57506000600854115b15612f10576000612e83846002015443612335565b90506000612ec6600854612eb88760010154612eaa6005548761368c90919063ffffffff16565b61368c90919063ffffffff16565b61371290919063ffffffff16565b9050612f0b612efc8660050154612eee670de0b6b3a76400008561368c90919063ffffffff16565b61371290919063ffffffff16565b846135ba90919063ffffffff16565b925050505b612f578260010154612f49670de0b6b3a7640000612f3b85876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b935050505092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b612fb06135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613113576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216e6f6e7a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e760405160405180910390a350565b600a60149054906101000a900461ffff1681565b6131cd6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461328d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146696026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133d86135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613498576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b436009541161350f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4661726d20616c7265616479207374617274656400000000000000000000000081525060200191505060405180910390fd5b6000600680549050905060005b818110156135585760006006828154811061353357fe5b906000526020600020906006020190508381600201819055505080600101905061351c565b50816009819055503373ffffffffffffffffffffffffffffffffffffffff167f3eb4ecd5fe1c1fb419227f1ed2015b7c67d3867f237683c50a2192b6ceabe016836040518082815260200191505060405180910390a25050565b600033905090565b600080828401905083811015613638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061368483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614155565b905092915050565b60008083141561369f576000905061370c565b60008284029050828482816136b057fe5b0414613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146b06021913960400191505060405180910390fd5b809150505b92915050565b600061375483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614215565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156137e757600080fd5b505afa1580156137fb573d6000803e3d6000fd5b505050506040513d602081101561381157600080fd5b8101908080519060200190929190505050905060008183111561390357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156138c157600080fd5b505af11580156138d5573d6000803e3d6000fd5b505050506040513d60208110156138eb57600080fd5b810190808051906020019092919050505090506139d4565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561399657600080fd5b505af11580156139aa573d6000803e3d6000fd5b505050506040513d60208110156139c057600080fd5b810190808051906020019092919050505090505b80613a2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061468f6021913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613aa357506000600a60149054906101000a900461ffff1661ffff16115b15613fee576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634a9fefc7846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b3357600080fd5b505afa158015613b47573d6000803e3d6000fd5b505050506040513d6020811015613b5d57600080fd5b810190808051906020019092919050505090506000613bad612710613b9f600a60149054906101000a900461ffff1661ffff168661368c90919063ffffffff16565b61371290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613bec5750600081115b15613feb5769d3c21bcecceda1000000613cb182600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613c6857600080fd5b505afa158015613c7c573d6000803e3d6000fd5b505050506040513d6020811015613c9257600080fd5b81019080805190602001909291905050506135ba90919063ffffffff16565b11613d6657600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613d4957600080fd5b505af1158015613d5d573d6000803e3d6000fd5b50505050613f85565b69d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613dd957600080fd5b505afa158015613ded573d6000803e3d6000fd5b505050506040513d6020811015613e0357600080fd5b81019080805190602001909291905050501015613f8457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930613f18600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec457600080fd5b505afa158015613ed8573d6000803e3d6000fd5b505050506040513d6020811015613eee57600080fd5b810190808051906020019092919050505069d3c21bcecceda100000061364290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f6b57600080fd5b505af1158015613f7f573d6000803e3d6000fd5b505050505b5b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f86ddab457291316e0f5496737e5ca67c4037234c32c3be04c48ae96186893a7b836040518082815260200191505060405180910390a35b50505b5050565b61408f8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506142db565b505050565b61414f846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506142db565b50505050565b6000838311158290614202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141c75780820151818401526020810190506141ac565b50505050905090810190601f1680156141f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906142c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561428657808201518184015260208101905061426b565b50505050905090810190601f1680156142b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816142cd57fe5b049050809150509392505050565b606061433d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ca9092919063ffffffff16565b90506000815111156143c55780806020019051602081101561435e57600080fd5b81019080805190602001909291905050506143c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614726602a913960400191505060405180910390fd5b5b505050565b60606143d984846000856143e2565b90509392505050565b60606143ed856145e8565b61445f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106144af578051825260208201915060208101905060208303925061448c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614511576040519150601f19603f3d011682016040523d82523d6000602084013e614516565b606091505b5091509150811561452b5780925050506145e0565b60008151111561453e5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145a557808201518184015260208101905061458a565b50505050905090810190601f1680156145d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736574526566657272616c436f6d6d697373696f6e526174653a20696e76616c696420726566657272616c20636f6d6d697373696f6e207261746520626173697320706f696e74734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737373616665497269735472616e736665723a205472616e73666572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e747354686520526566657272616c20636f6e74726163742061646472657373206973206368616e67656420616c72656164795361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208658d2fe0c4372f0342d762a336ca2243827c5feecf06389602b2d6b17bab13a64736f6c634300060c0033000000000000000000000000c58a202af3d8cceffe1e0b1169294372a6cacf7a00000000000000000000000000000000000000000000000000000000013bc0c80000000000000000000000002b321b3fdb8fd69be1c9b5055130815ecee9664c000000000000000000000000d7a96df0258907ab2792295306ca2f65ff2bc68d
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101f05760003560e01c80636eed6a2c1161010f578063bf5294c8116100a2578063d0d41fe111610071578063d0d41fe11461082b578063d30ef61b1461086f578063f2fde38b14610891578063fac2b9ba146108d5576101f0565b8063bf5294c81461071d578063c80ff2421461073b578063c8e63cd21461079d578063cbd258b5146107d1576101f0565b80638dbb1e3a116100de5780638dbb1e3a146105cc5780638dbdbe6d1461061857806393f1a40b14610670578063b3caba5a146106d9576101f0565b80636eed6a2c1461052c578063715018a61461054a5780638705fcd4146105545780638da5cb5b14610598576101f0565b8063412753581161018757806351eb05a61161015657806351eb05a6146104945780635312ea8e146104c257806355dbc826146104f0578063630b5ba114610522576101f0565b806341275358146103e8578063441a3e701461041c57806348b22bfb1461045457806348cd4cb114610476576101f0565b80631526fe27116101c35780631526fe27146102d157806317caf6f11461035057806324bcb38c1461036e5780633ad10ef6146103b4576101f0565b806306539275146101f5578063081e3eda146102515780630ba84cd21461026f5780631441a5a91461029d575b600080fd5b61024f6004803603606081101561020b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803561ffff169060200190929190505050610903565b005b610259610dad565b6040518082815260200191505060405180910390f35b61029b6004803603602081101561028557600080fd5b8101908080359060200190929190505050610dba565b005b6102a5610f60565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102fd600480360360208110156102e757600080fd5b8101908080359060200190929190505050610f86565b604051808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018361ffff168152602001828152602001965050505050505060405180910390f35b610358610ffd565b6040518082815260200191505060405180910390f35b6103b26004803603606081101561038457600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611003565b005b6103bc6112b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f06112d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104526004803603604081101561043257600080fd5b8101908080359060200190929190803590602001909291905050506112fe565b005b61045c611613565b604051808261ffff16815260200191505060405180910390f35b61047e611619565b6040518082815260200191505060405180910390f35b6104c0600480360360208110156104aa57600080fd5b810190808035906020019092919050505061161f565b005b6104ee600480360360208110156104d857600080fd5b8101908080359060200190929190505050611bc8565b005b6105206004803603602081101561050657600080fd5b81019080803561ffff169060200190929190505050611da7565b005b61052a611f44565b005b610534611f71565b6040518082815260200191505060405180910390f35b610552611f7d565b005b6105966004803603602081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612103565b005b6105a061230c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610602600480360360408110156105e257600080fd5b810190808035906020019092919080359060200190929190505050612335565b6040518082815260200191505060405180910390f35b61066e6004803603606081101561062e57600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061240f565b005b6106bc6004803603604081101561068657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ba7565b604051808381526020018281526020019250505060405180910390f35b61071b600480360360208110156106ef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b005b610725612dc5565b6040518082815260200191505060405180910390f35b6107876004803603604081101561075157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612dcb565b6040518082815260200191505060405180910390f35b6107a5612f62565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610813600480360360208110156107e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f88565b60405180821515815260200191505060405180910390f35b61086d6004803603602081101561084157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fa8565b005b6108776131b1565b604051808261ffff16815260200191505060405180910390f35b6108d3600480360360208110156108a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131c5565b005b610901600480360360208110156108eb57600080fd5b81019080803590602001909291905050506133d0565b005b61090b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8160001515600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610a92576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f6e4475706c6963617465643a206475706c6963617465640000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610af957600080fd5b505afa158015610b0d573d6000803e3d6000fd5b505050506040513d6020811015610b2357600080fd5b8101908080519060200190929190505050506101f48261ffff161115610b94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806145fc6025913960400191505060405180910390fd5b60006009544311610ba757600954610ba9565b435b9050610bc0856008546135ba90919063ffffffff16565b6008819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060066040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001878152602001838152602001600081526020018561ffff1681526020016000815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548161ffff021916908361ffff16021790555060a0820151816005015550503373ffffffffffffffffffffffffffffffffffffffff167fa2c51573880fb2ac3b22bb2584e1c8972b7baf3928d9abbf230c500de25e84fa85878487604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018261ffff16815260200194505050505060405180910390a25050505050565b6000600680549050905090565b610dc26135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b670de0b6b3a7640000811115610f00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f546f6f204869676800000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b610f08611f44565b806005819055503373ffffffffffffffffffffffffffffffffffffffff167fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c4053826040518082815260200191505060405180910390a250565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60068181548110610f9357fe5b90600052602060002090600602016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900461ffff16908060050154905086565b60085481565b61100b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101f48161ffff16111561112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806146d16025913960400191505060405180910390fd5b61116f826111616006868154811061113e57fe5b90600052602060002090600602016001015460085461364290919063ffffffff16565b6135ba90919063ffffffff16565b600881905550816006848154811061118357fe5b90600052602060002090600602016001018190555080600684815481106111a657fe5b906000526020600020906006020160040160006101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f6b15d9ccfec36c187bb7ca9613a8be7a7367d3fc401d1efdea721d6c4567395e6006858154811061121657fe5b906000526020600020906006020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846006878154811061125657fe5b90600052602060002090600602016002015485604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018261ffff16815260200194505050505060405180910390a2505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026001541415611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006006838154811061138e57fe5b9060005260206000209060060201905060006007600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050828160000154101561146c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77697468647261773a206e6f7420676f6f64000000000000000000000000000081525060200191505060405180910390fd5b6114758461161f565b60006114c282600101546114b4670de0b6b3a76400006114a68760030154876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b905060008111156114e2576114d7338261375c565b6114e13382613a30565b5b60008411156115795761150284836000015461364290919063ffffffff16565b826000018190555061155933858560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b61157084846005015461364290919063ffffffff16565b83600501819055505b6115ae670de0b6b3a76400006115a08560030154856000015461368c90919063ffffffff16565b61371290919063ffffffff16565b8260010181905550843373ffffffffffffffffffffffffffffffffffffffff167ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568866040518082815260200191505060405180910390a3505050600180819055505050565b6101f481565b60095481565b60006006828154811061162e57fe5b906000526020600020906006020190508060020154431161164f5750611bc5565b600081600501541480611666575060008160010154145b1561167a5743816002018190555050611bc5565b600061168a826002015443612335565b905060006116cd6008546116bf85600101546116b16005548761368c90919063ffffffff16565b61368c90919063ffffffff16565b61371290919063ffffffff16565b905069d3c21bcecceda10000006117b561170460646116f660698661368c90919063ffffffff16565b61371290919063ffffffff16565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561176c57600080fd5b505afa158015611780573d6000803e3d6000fd5b505050506040513d602081101561179657600080fd5b81019080805190602001909291905050506135ba90919063ffffffff16565b1161194a57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661182f60648561371290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561188257600080fd5b505af1158015611896573d6000803e3d6000fd5b50505050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561192d57600080fd5b505af1158015611941573d6000803e3d6000fd5b50505050611b69565b69d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119bd57600080fd5b505afa1580156119d1573d6000803e3d6000fd5b505050506040513d60208110156119e757600080fd5b81019080805190602001909291905050501015611b6857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930611afc600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611aa857600080fd5b505afa158015611abc573d6000803e3d6000fd5b505050506040513d6020811015611ad257600080fd5b810190808051906020019092919050505069d3c21bcecceda100000061364290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050505b5b611bb0611b9d8460050154611b8f670de0b6b3a76400008561368c90919063ffffffff16565b61371290919063ffffffff16565b84600301546135ba90919063ffffffff16565b83600301819055504383600201819055505050505b50565b60026001541415611c41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600181905550600060068281548110611c5857fe5b9060005260206000209060060201905060006007600084815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050611ce08260000154846005015461364290919063ffffffff16565b83600501819055506000826000018190555060008260010181905550611d4b33828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b833373ffffffffffffffffffffffffffffffffffffffff167fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae0595836040518082815260200191505060405180910390a35050506001808190555050565b611daf6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6101f461ffff168161ffff161115611ed2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806146216048913960600191505060405180910390fd5b80600a60146101000a81548161ffff021916908361ffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f59918637b45c88e8896129fc8b400ddc6729ae5c8f2590514684dde0f7877ebc82604051808261ffff16815260200191505060405180910390a250565b6000600680549050905060005b81811015611f6d57611f628161161f565b806001019050611f51565b5050565b670de0b6b3a764000081565b611f856135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61210b6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561226e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216e6f6e7a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd44190acf9d04bdb5d3a1aafff7e6dee8b40b93dfb8c5d3f0eea4b9f4539c3f760405160405180910390a350565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600069d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123aa57600080fd5b505afa1580156123be573d6000803e3d6000fd5b505050506040513d60208110156123d457600080fd5b8101908080519060200190929190505050106123f35760009050612409565b612406838361364290919063ffffffff16565b90505b92915050565b60026001541415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060006006848154811061249f57fe5b9060005260206000209060060201905060006007600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061250c8561161f565b60008411801561256b5750600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156125a45750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156125dc57503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156126a357600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c7f7b6b33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b15801561268a57600080fd5b505af115801561269e573d6000803e3d6000fd5b505050505b60008160000154111561271f5760006126fd82600101546126ef670de0b6b3a76400006126e18760030154876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b9050600081111561271d57612712338261375c565b61271c3382613a30565b5b505b6000841115612b0d5760008260000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156127b557600080fd5b505afa1580156127c9573d6000803e3d6000fd5b505050506040513d60208110156127df57600080fd5b810190808051906020019092919050505090506128433330878660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614094909392919063ffffffff16565b61291b818460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128d257600080fd5b505afa1580156128e6573d6000803e3d6000fd5b505050506040513d60208110156128fc57600080fd5b810190808051906020019092919050505061364290919063ffffffff16565b945060008511612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f776520646f6e7420616363657074206465706f73697473206f6620300000000081525060200191505060405180910390fd5b60008360040160009054906101000a900461ffff1661ffff161115612acc5760006129f16127106129e38660040160009054906101000a900461ffff1661ffff168961368c90919063ffffffff16565b61371290919063ffffffff16565b9050612a64600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ff29092919063ffffffff16565b612a8d81612a7f8886600001546135ba90919063ffffffff16565b61364290919063ffffffff16565b8360000181905550612abe81612ab08887600501546135ba90919063ffffffff16565b61364290919063ffffffff16565b846005018190555050612b0b565b612ae38583600001546135ba90919063ffffffff16565b8260000181905550612b028584600501546135ba90919063ffffffff16565b83600501819055505b505b612b42670de0b6b3a7640000612b348460030154846000015461368c90919063ffffffff16565b61371290919063ffffffff16565b8160010181905550843373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15866040518082815260200191505060405180910390a3505060018081905550505050565b6007602052816000526040600020602052806000526040600020600091509150508060000154908060010154905082565b612be06135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ca0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600a60169054906101000a900460ff16151514612d0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146f66030913960400191505060405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60166101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fee63201fedda9e28e92efef9abb99bd9d2f90208a4fd0d0186c14daf364a273160405160405180910390a350565b60055481565b60008060068481548110612ddb57fe5b9060005260206000209060060201905060006007600086815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600301549050826002015443118015612e6057506000836005015414155b8015612e6e57506000600854115b15612f10576000612e83846002015443612335565b90506000612ec6600854612eb88760010154612eaa6005548761368c90919063ffffffff16565b61368c90919063ffffffff16565b61371290919063ffffffff16565b9050612f0b612efc8660050154612eee670de0b6b3a76400008561368c90919063ffffffff16565b61371290919063ffffffff16565b846135ba90919063ffffffff16565b925050505b612f578260010154612f49670de0b6b3a7640000612f3b85876000015461368c90919063ffffffff16565b61371290919063ffffffff16565b61364290919063ffffffff16565b935050505092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b612fb06135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613113576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260088152602001807f216e6f6e7a65726f00000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e760405160405180910390a350565b600a60149054906101000a900461ffff1681565b6131cd6135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461328d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806146696026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6133d86135b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613498576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b436009541161350f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4661726d20616c7265616479207374617274656400000000000000000000000081525060200191505060405180910390fd5b6000600680549050905060005b818110156135585760006006828154811061353357fe5b906000526020600020906006020190508381600201819055505080600101905061351c565b50816009819055503373ffffffffffffffffffffffffffffffffffffffff167f3eb4ecd5fe1c1fb419227f1ed2015b7c67d3867f237683c50a2192b6ceabe016836040518082815260200191505060405180910390a25050565b600033905090565b600080828401905083811015613638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061368483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614155565b905092915050565b60008083141561369f576000905061370c565b60008284029050828482816136b057fe5b0414613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146b06021913960400191505060405180910390fd5b809150505b92915050565b600061375483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614215565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156137e757600080fd5b505afa1580156137fb573d6000803e3d6000fd5b505050506040513d602081101561381157600080fd5b8101908080519060200190929190505050905060008183111561390357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156138c157600080fd5b505af11580156138d5573d6000803e3d6000fd5b505050506040513d60208110156138eb57600080fd5b810190808051906020019092919050505090506139d4565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561399657600080fd5b505af11580156139aa573d6000803e3d6000fd5b505050506040513d60208110156139c057600080fd5b810190808051906020019092919050505090505b80613a2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061468f6021913960400191505060405180910390fd5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015613aa357506000600a60149054906101000a900461ffff1661ffff16115b15613fee576000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634a9fefc7846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b3357600080fd5b505afa158015613b47573d6000803e3d6000fd5b505050506040513d6020811015613b5d57600080fd5b810190808051906020019092919050505090506000613bad612710613b9f600a60149054906101000a900461ffff1661ffff168661368c90919063ffffffff16565b61371290919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613bec5750600081115b15613feb5769d3c21bcecceda1000000613cb182600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613c6857600080fd5b505afa158015613c7c573d6000803e3d6000fd5b505050506040513d6020811015613c9257600080fd5b81019080805190602001909291905050506135ba90919063ffffffff16565b11613d6657600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613d4957600080fd5b505af1158015613d5d573d6000803e3d6000fd5b50505050613f85565b69d3c21bcecceda1000000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613dd957600080fd5b505afa158015613ded573d6000803e3d6000fd5b505050506040513d6020811015613e0357600080fd5b81019080805190602001909291905050501015613f8457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930613f18600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec457600080fd5b505afa158015613ed8573d6000803e3d6000fd5b505050506040513d6020811015613eee57600080fd5b810190808051906020019092919050505069d3c21bcecceda100000061364290919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015613f6b57600080fd5b505af1158015613f7f573d6000803e3d6000fd5b505050505b5b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f86ddab457291316e0f5496737e5ca67c4037234c32c3be04c48ae96186893a7b836040518082815260200191505060405180910390a35b50505b5050565b61408f8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506142db565b505050565b61414f846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506142db565b50505050565b6000838311158290614202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141c75780820151818401526020810190506141ac565b50505050905090810190601f1680156141f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906142c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561428657808201518184015260208101905061426b565b50505050905090810190601f1680156142b35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816142cd57fe5b049050809150509392505050565b606061433d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143ca9092919063ffffffff16565b90506000815111156143c55780806020019051602081101561435e57600080fd5b81019080805190602001909291905050506143c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614726602a913960400191505060405180910390fd5b5b505050565b60606143d984846000856143e2565b90509392505050565b60606143ed856145e8565b61445f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106144af578051825260208201915060208101905060208303925061448c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614511576040519150601f19603f3d011682016040523d82523d6000602084013e614516565b606091505b5091509150811561452b5780925050506145e0565b60008151111561453e5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145a557808201518184015260208101905061458a565b50505050905090810190601f1680156145d25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e7473736574526566657272616c436f6d6d697373696f6e526174653a20696e76616c696420726566657272616c20636f6d6d697373696f6e207261746520626173697320706f696e74734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737373616665497269735472616e736665723a205472616e73666572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e747354686520526566657272616c20636f6e74726163742061646472657373206973206368616e67656420616c72656164795361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212208658d2fe0c4372f0342d762a336ca2243827c5feecf06389602b2d6b17bab13a64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c58a202af3d8cceffe1e0b1169294372a6cacf7a00000000000000000000000000000000000000000000000000000000013bc0c80000000000000000000000002b321b3fdb8fd69be1c9b5055130815ecee9664c000000000000000000000000d7a96df0258907ab2792295306ca2f65ff2bc68d
-----Decoded View---------------
Arg [0] : _iris (address): 0xc58A202aF3d8CcEFfE1E0b1169294372a6CAcF7A
Arg [1] : _startBlock (uint256): 20693192
Arg [2] : _devAddress (address): 0x2B321B3FDb8FD69Be1c9B5055130815ecee9664C
Arg [3] : _feeAddress (address): 0xD7a96Df0258907aB2792295306ca2F65ff2Bc68d
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c58a202af3d8cceffe1e0b1169294372a6cacf7a
Arg [1] : 00000000000000000000000000000000000000000000000000000000013bc0c8
Arg [2] : 0000000000000000000000002b321b3fdb8fd69be1c9b5055130815ecee9664c
Arg [3] : 000000000000000000000000d7a96df0258907ab2792295306ca2f65ff2bc68d
Deployed Bytecode Sourcemap
638:14192:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4822:758;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4463:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12563:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2762:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2365:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2602:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5689:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2138:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2169;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10199:847;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2931:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2691:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7529:927;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11114:440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13241:375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7281:175;;;:::i;:::-;;2998:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1685:145:7;;;:::i;:::-;;12351:206:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1062:77:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6240:182:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8525:1625;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2445:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12897:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2293:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6486:715;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2108:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4562:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12139:206;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2842:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1979:240:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14451:377:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4822:758;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4928:8:6::1;4697:5;4670:32;;:13;:23;4684:8;4670:23;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;4662:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;4941:8:::2;:18;;;4968:4;4941:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;5009:3;4992:13;:20;;;;4984:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5064:23;5105:10;;5090:12;:25;:53;;5133:10;;5090:53;;;5118:12;5090:53;5064:79;;5171:32;5191:11;5171:15;;:19;;:32;;;;:::i;:::-;5153:15;:50;;;;5239:4;5213:13;:23;5227:8;5213:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;5253:8;5267:225;;;;;;;;5299:8;5267:225;;;;;;5333:11;5267:225;;;;5375:15;5267:225;;;;5421:1;5267:225;;;;5450:13;5267:225;;;;;;5480:1;5267:225;;::::0;5253:240:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5509:10;5501:72;;;5521:8;5531:11;5543:15;5559:13;5501:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4742:1;1335::7::1;4822:758:6::0;;;:::o;4463:93::-;4508:7;4534:8;:15;;;;4527:22;;4463:93;:::o;12563:271::-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3046:7:6::1;12651:13;:38;;12643:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12712:17;:15;:17::i;:::-;12754:13;12739:12;:28;;;;12801:10;12782:45;;;12813:13;12782:45;;;;;;;;;;;;;;;;;;12563:271:::0;:::o;2762:25::-;;;;;;;;;;;;;:::o;2365:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2602:34::-;;;;:::o;5689:478::-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5813:3:6::1;5796:13;:20;;;;5788:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5886:63;5937:11;5886:46;5906:8;5915:4;5906:14;;;;;;;;;;;;;;;;;;:25;;;5886:15;;:19;;:46;;;;:::i;:::-;:50;;:63;;;;:::i;:::-;5868:15;:81;;;;5987:11;5959:8;5968:4;5959:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;6038:13;6008:8;6017:4;6008:14;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;6067:10;6059:101;;;6079:8;6088:4;6079:14;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;6103:11;6115:8;6124:4;6115:14;;;;;;;;;;;;;;;;;;:30;;;6146:13;6059:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5689:478:::0;;;:::o;2138:25::-;;;;;;;;;;;;;:::o;2169:::-;;;;;;;;;;;;;:::o;10199:847::-;929:1:8;1518:7;;:19;;1510:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;929:1;1648:7;:18;;;;10280:21:6::1;10304:8;10313:4;10304:14;;;;;;;;;;;;;;;;;;10280:38;;10328:21;10352:8;:14;10361:4;10352:14;;;;;;;;;;;:26;10367:10;10352:26;;;;;;;;;;;;;;;10328:50;;10411:7;10396:4;:11;;;:22;;10388:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10451:16;10462:4;10451:10;:16::i;:::-;10477:15;10495:68;10547:4;:15;;;10495:47;10537:4;10495:37;10511:4;:20;;;10495:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;10477:86;;10587:1;10577:7;:11;10573:135;;;10604:37;10621:10;10633:7;10604:16;:37::i;:::-;10655:42;10677:10;10689:7;10655:21;:42::i;:::-;10573:135;10731:1;10721:7;:11;10717:198;;;10762:24;10778:7;10762:4;:11;;;:15;;:24;;;;:::i;:::-;10748:4;:11;;:38;;;;10800:55;10834:10;10847:7;10800:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;10878:26;10896:7;10878:4;:13;;;:17;;:26;;;;:::i;:::-;10862:4;:13;;:42;;;;10717:198;10942:47;10984:4;10942:37;10958:4;:20;;;10942:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;10924:4;:15;;:65;;;;11025:4;11013:10;11004:35;;;11031:7;11004:35;;;;;;;;;;;;;;;;;;1677:1:8;;;886::::0;1821:7;:22;;;;10199:847:6;;:::o;2931:61::-;2989:3;2931:61;:::o;2691:25::-;;;;:::o;7529:927::-;7580:21;7604:8;7613:4;7604:14;;;;;;;;;;;;;;;;;;7580:38;;7648:4;:20;;;7632:12;:36;7628:73;;7684:7;;;7628:73;7731:1;7714:4;:13;;;:18;:42;;;;7755:1;7736:4;:15;;;:20;7714:42;7710:128;;;7795:12;7772:4;:20;;:35;;;;7821:7;;;7710:128;7847:18;7868:49;7882:4;:20;;;7904:12;7868:13;:49::i;:::-;7847:70;;7927:18;7948:70;8002:15;;7948:49;7981:4;:15;;;7948:28;7963:12;;7948:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;7927:91;;2235:13;8024:52;8047:28;8071:3;8047:19;8062:3;8047:10;:14;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;8024:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;:71;8021:286;;8101:4;;;;;;;;;;;:9;;;8111:10;;;;;;;;;;;8123:19;8138:3;8123:10;:14;;:19;;;;:::i;:::-;8101:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8148:4;;;;;;;;;;;:9;;;8166:4;8173:10;8148:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8021:286;;;2235:13;8196:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;8193:114;;;8238:4;;;;;;;;;;;:9;;;8256:4;8263:39;8283:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2235:13;8263:19;;:39;;;;:::i;:::-;8238:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8193:114;8021:286;8339:65;8364:39;8389:4;:13;;;8364:20;8379:4;8364:10;:14;;:20;;;;:::i;:::-;:24;;:39;;;;:::i;:::-;8339:4;:20;;;:24;;:65;;;;:::i;:::-;8316:4;:20;;:88;;;;8437:12;8414:4;:20;;:35;;;;7529:927;;;;;:::o;11114:440::-;929:1:8;1518:7;;:19;;1510:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;929:1;1648:7;:18;;;;11186:21:6::1;11210:8;11219:4;11210:14;;;;;;;;;;;;;;;;;;11186:38;;11234:21;11258:8;:14;11267:4;11258:14;;;;;;;;;;;:26;11273:10;11258:26;;;;;;;;;;;;;;;11234:50;;11294:14;11311:4;:11;;;11294:28;;11341:30;11359:4;:11;;;11341:4;:13;;;:17;;:30;;;;:::i;:::-;11325:4;:13;;:46;;;;11395:1;11381:4;:11;;:15;;;;11424:1;11406:4;:15;;:19;;;;11435:54;11469:10;11482:6;11435:4;:12;;;;;;;;;;;;:25;;;;:54;;;;;:::i;:::-;11534:4;11522:10;11504:43;;;11540:6;11504:43;;;;;;;;;;;;;;;;;;1677:1:8;;;886::::0;1821:7;:22;;;;11114:440:6;:::o;13241:375::-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2989:3:6::1;13345:59;;:23;:59;;;;13337:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13516:23;13491:22;;:48;;;;;;;;;;;;;;;;;;13573:10;13547:62;;;13585:23;13547:62;;;;;;;;;;;;;;;;;;;;13241:375:::0;:::o;7281:175::-;7325:14;7342:8;:15;;;;7325:32;;7372:11;7367:83;7395:6;7389:3;:12;7367:83;;;7424:15;7435:3;7424:10;:15::i;:::-;7403:5;;;;;7367:83;;;;7281:175;:::o;2998:55::-;3046:7;2998:55;:::o;1685:145:7:-;1276:12;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1791:1:::1;1754:40;;1775:6;::::0;::::1;;;;;;;;1754:40;;;;;;;;;;;;1821:1;1804:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1685:145::o:0;12351:206:6:-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12448:1:6::1;12425:25;;:11;:25;;;;12417:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12486:11;12473:10;;:24;;;;;;;;;;;;;;;;;;12538:11;12512:38;;12526:10;12512:38;;;;;;;;;;;;12351:206:::0;:::o;1062:77:7:-;1100:7;1126:6;;;;;;;;;;;1119:13;;1062:77;:::o;6240:182:6:-;6312:7;2235:13;6335:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:37;6331:51;;6381:1;6374:8;;;;6331:51;6401:14;6409:5;6401:3;:7;;:14;;;;:::i;:::-;6394:21;;6240:182;;;;;:::o;8525:1625::-;929:1:8;1518:7;;:19;;1510:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;929:1;1648:7;:18;;;;8624:21:6::1;8648:8;8657:4;8648:14;;;;;;;;;;;;;;;;;;8624:38;;8672:21;8696:8;:14;8705:4;8696:14;;;;;;;;;;;:26;8711:10;8696:26;;;;;;;;;;;;;;;8672:50;;8732:16;8743:4;8732:10;:16::i;:::-;8772:1;8762:7;:11;:46;;;;;8806:1;8777:31;;8785:8;;;;;;;;;;;8777:31;;;;8762:46;:73;;;;;8833:1;8812:23;;:9;:23;;;;8762:73;:100;;;;;8852:10;8839:23;;:9;:23;;;;8762:100;8758:177;;;8878:8;;;;;;;;;;;:23;;;8902:10;8914:9;8878:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8758:177;8962:1;8948:4;:11;;;:15;8944:292;;;8979:15;8997:68;9049:4;:15;;;8997:47;9039:4;8997:37;9013:4;:20;;;8997:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;:51;;:68;;;;:::i;:::-;8979:86;;9093:1;9083:7;:11;9079:147;;;9114:37;9131:10;9143:7;9114:16;:37::i;:::-;9169:42;9191:10;9203:7;9169:21;:42::i;:::-;9079:147;8944:292;;9259:1;9249:7;:11;9245:775;;;9269:21;9293:4;:12;;;;;;;;;;;;:22;;;9324:4;9293:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;9269:61;;9344:74;9382:10;9403:4;9410:7;9344:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;9435:56;9477:13;9435:4;:12;;;;;;;;;;;;:22;;;9466:4;9435:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:41;;:56;;;;:::i;:::-;9425:66;;9516:1;9506:7;:11;9498:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9588:1;9568:4;:17;;;;;;;;;;;;:21;;;9564:446;;;9609:18;9630:41;9665:5;9630:30;9642:4;:17;;;;;;;;;;;;9630:30;;:7;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;9609:62;;9689:49;9715:10;;;;;;;;;;;9727;9689:4;:12;;;;;;;;;;;;:25;;;;:49;;;;;:::i;:::-;9770:40;9799:10;9770:24;9786:7;9770:4;:11;;;:15;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;9756:4;:11;;:54;;;;9830:42;9861:10;9830:26;9848:7;9830:4;:13;;;:17;;:26;;;;:::i;:::-;:30;;:42;;;;:::i;:::-;9814:4;:13;;:58;;;;9564:446;;;;9925:24;9941:7;9925:4;:11;;;:15;;:24;;;;:::i;:::-;9911:4;:11;;:38;;;;9969:26;9987:7;9969:4;:13;;;:17;;:26;;;;:::i;:::-;9953:4;:13;;:42;;;;9564:446;9245:775;;10047:47;10089:4;10047:37;10063:4;:20;;;10047:4;:11;;;:15;;:37;;;;:::i;:::-;:41;;:47;;;;:::i;:::-;10029:4;:15;;:65;;;;10129:4;10117:10;10109:34;;;10135:7;10109:34;;;;;;;;;;;;;;;;;;1677:1:8;;886::::0;1821:7;:22;;;;8525:1625:6;;;:::o;2445:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12897:286::-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13001:5:6::1;12976:30;;:21;;;;;;;;;;;:30;;;12968:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13080:9;13069:8;;:20;;;;;;;;;;;;;;;;;;13116:4;13092:21;;:28;;;;;;;;;;;;;;;;;;13166:9;13135:41;;13154:10;13135:41;;;;;;;;;;;;12897:286:::0;:::o;2293:39::-;;;;:::o;6486:715::-;6559:7;6578:21;6602:8;6611:4;6602:14;;;;;;;;;;;;;;;;;;6578:38;;6626:21;6650:8;:14;6659:4;6650:14;;;;;;;;;;;:21;6665:5;6650:21;;;;;;;;;;;;;;;6626:45;;6681:23;6707:4;:20;;;6681:46;;6756:4;:20;;;6741:12;:35;:57;;;;;6797:1;6780:4;:13;;;:18;;6741:57;:80;;;;;6820:1;6802:15;;:19;6741:80;6737:378;;;6837:18;6858:49;6872:4;:20;;;6894:12;6858:13;:49::i;:::-;6837:70;;6921:18;6942:70;6996:15;;6942:49;6975:4;:15;;;6942:28;6957:12;;6942:10;:14;;:28;;;;:::i;:::-;:32;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;6921:91;;7044:60;7064:39;7089:4;:13;;;7064:20;7079:4;7064:10;:14;;:20;;;;:::i;:::-;:24;;:39;;;;:::i;:::-;7044:15;:19;;:60;;;;:::i;:::-;7026:78;;6737:378;;;7131:63;7178:4;:15;;;7131:42;7168:4;7131:32;7147:15;7131:4;:11;;;:15;;:32;;;;:::i;:::-;:36;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;7124:70;;;;;6486:715;;;;:::o;2108:24::-;;;;;;;;;;;;;:::o;4562:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;12139:206::-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12236:1:6::1;12213:25;;:11;:25;;;;12205:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12274:11;12261:10;;:24;;;;;;;;;;;;;;;;;;12326:11;12300:38;;12314:10;12300:38;;;;;;;;;;;;12139:206:::0;:::o;2842:42::-;;;;;;;;;;;;;:::o;1979:240:7:-;1276:12;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2087:1:::1;2067:22;;:8;:22;;;;2059:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2176:8;2147:38;;2168:6;::::0;::::1;;;;;;;;2147:38;;;;;;;;;;;;2204:8;2195:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1979:240:::0;:::o;14451:377:6:-;1276:12:7;:10;:12::i;:::-;1266:22;;:6;;;;;;;;;;:22;;;1258:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14540:12:6::1;14527:10;;:25;14519:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;14580:14;14597:8;:15;;;;14580:32;;14619:11;14615:124;14642:6;14636:3;:12;14615:124;;;14660:21;14684:8;14693:3;14684:13;;;;;;;;;;;;;;;;;;14660:37;;14724:11;14701:4;:20;;:34;;;;14615:124;14650:5;;;;;14615:124;;;;14761:11;14748:10;:24;;;;14797:10;14780:41;;;14809:11;14780:41;;;;;;;;;;;;;;;;;;1335:1:7;14451:377:6::0;:::o;591:104:1:-;644:15;678:10;671:17;;591:104;:::o;875:176:10:-;933:7;952:9;968:1;964;:5;952:17;;992:1;987;:6;;979:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1043:1;1036:8;;;875:176;;;;:::o;1322:134::-;1380:7;1406:43;1410:1;1413;1406:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1399:50;;1322:134;;;;:::o;2181:459::-;2239:7;2485:1;2480;:6;2476:45;;;2509:1;2502:8;;;;2476:45;2531:9;2547:1;2543;:5;2531:17;;2575:1;2570;2566;:5;;;;;;:10;2558:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2632:1;2625:8;;;2181:459;;;;;:::o;3102:130::-;3160:7;3186:39;3190:1;3193;3186:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3179:46;;3102:130;;;;:::o;11670:416:6:-;11745:15;11763:4;;;;;;;;;;;:14;;;11786:4;11763:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11745:47;;11802:20;11854:7;11844;:17;11840:169;;;11895:4;;;;;;;;;;;:13;;;11909:3;11914:7;11895:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11877:45;;11840:169;;;11971:4;;;;;;;;;;;:13;;;11985:3;11990:7;11971:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11953:45;;11840:169;12026:15;12018:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11670:416;;;;:::o;13693:712::-;13809:1;13780:31;;13788:8;;;;;;;;;;;13780:31;;;;:61;;;;;13840:1;13815:22;;;;;;;;;;;:26;;;13780:61;13776:623;;;13857:16;13876:8;;;;;;;;;;;:20;;;13897:5;13876:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13857:46;;13917:24;13944:47;13985:5;13944:36;13957:22;;;;;;;;;;;13944:36;;:8;:12;;:36;;;;:::i;:::-;:40;;:47;;;;:::i;:::-;13917:74;;14030:1;14010:22;;:8;:22;;;;:46;;;;;14055:1;14036:16;:20;14010:46;14006:383;;;2235:13;14065:40;14088:16;14065:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;:40;;;;:::i;:::-;:59;14062:233;;14131:4;;;;;;;;;;;:9;;;14141:8;14151:16;14131:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14062:233;;;2235:13;14181:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;14178:117;;;14225:4;;;;;;;;;;;:9;;;14243:4;14250:39;14270:4;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2235:13;14250:19;;:39;;;;:::i;:::-;14225:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14178:117;14062:233;14347:8;14317:57;;14340:5;14317:57;;;14357:16;14317:57;;;;;;;;;;;;;;;;;;14006:383;13776:623;;;13693:712;;:::o;700:175:9:-;782:86;802:5;832:23;;;857:2;861:5;809:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;782:19;:86::i;:::-;700:175;;;:::o;881:203::-;981:96;1001:5;1031:27;;;1060:4;1066:2;1070:5;1008:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;981:19;:96::i;:::-;881:203;;;;:::o;1747:187:10:-;1833:7;1865:1;1860;:6;;1868:12;1852:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1891:9;1907:1;1903;:5;1891:17;;1926:1;1919:8;;;1747:187;;;;;:::o;3714:272::-;3800:7;3831:1;3827;:5;3834:12;3819:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3857:9;3873:1;3869;:5;;;;;;3857:17;;3978:1;3971:8;;;3714:272;;;;;:::o;2963:751:9:-;3382:23;3408:69;3436:4;3408:69;;;;;;;;;;;;;;;;;3416:5;3408:27;;;;:69;;;;;:::i;:::-;3382:95;;3511:1;3491:10;:17;:21;3487:221;;;3631:10;3620:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3612:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3487:221;2963:751;;;:::o;3506:194:0:-;3609:12;3640:53;3663:6;3671:4;3677:1;3680:12;3640:22;:53::i;:::-;3633:60;;3506:194;;;;;:::o;4853:958::-;4983:12;5015:18;5026:6;5015:10;:18::i;:::-;5007:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5138:12;5152:23;5179:6;:11;;5199:8;5210:4;5179:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5137:78;;;;5229:7;5225:580;;;5259:10;5252:17;;;;;;5225:580;5390:1;5370:10;:17;:21;5366:429;;;5628:10;5622:17;5688:15;5675:10;5671:2;5667:19;5660:44;5577:145;5767:12;5760:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4853:958;;;;;;;:::o;651:413::-;711:4;914:12;1023:7;1011:20;1003:28;;1056:1;1049:4;:8;1042:15;;;651:413;;;:::o
Swarm Source
ipfs://8658d2fe0c4372f0342d762a336ca2243827c5feecf06389602b2d6b17bab13a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.630698 | 0.96 | $0.6054 |
[ 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.