Contract Overview
Balance:
0 CRO
CRO Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xf03c1d42f8a57e03d992cec48bce6f0ee0f9c781573b09f46bc1fc1407035652 | 0x60806040 | 4720091 | 556 days 53 mins ago | stronghands.cro | IN | Create: YieldToken | 0 CRO | 15.537827600826 |
[ Download CSV Export ]
Contract Name:
YieldToken
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-20 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } function safeSub(uint a, uint b) internal pure returns (uint) { if (b > a) {return 0;} else {return a - b;} } } 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)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { 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)); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IMigratorChef { function migrate(IERC20 token) external returns (IERC20); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract Whitelist is Ownable { mapping(address => bool) public whitelist; event WhitelistedAddressAdded(address addr); event WhitelistedAddressRemoved(address addr); modifier onlyWhitelisted() { require(whitelist[msg.sender], 'no whitelist'); _; } function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { if (!whitelist[addr]) { whitelist[addr] = true; emit WhitelistedAddressAdded(addr); success = true; } } function addAddressesToWhitelist(address[] memory addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToWhitelist(addrs[i])) { success = true; } } return success; } function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) { if (whitelist[addr]) { whitelist[addr] = false; emit WhitelistedAddressRemoved(addr); success = true; } return success; } function removeAddressesFromWhitelist(address[] memory addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromWhitelist(addrs[i])) { success = true; } } return success; } } contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return _decimals; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } 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; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } 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; } 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); } 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); } 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); } 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); } function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } contract YieldToken is ERC20('Stronghands Farm', 'SFARM'), Whitelist { struct Checkpoint { uint32 fromBlock; uint256 votes; } mapping (address => uint) public nonces; mapping (address => address) internal _delegates; mapping (address => uint32) public numCheckpoints; mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); //////////////////// // VIEW FUNCTIONS // //////////////////// function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } ///////////////////// // WRITE FUNCTIONS // ///////////////////// function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) external { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name())), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce"); require(now <= expiry, "delegateBySig: signature expired"); return _delegate(signatory, delegatee); } ////////////////////////// // RESTRICTED FUNCTIONS // ////////////////////////// function mint(address _to, uint256 _amount) public onlyWhitelisted() { _mint(_to, _amount); _moveDelegates(address(0), _delegates[_to], _amount); } //////////////////////// // INTERNAL FUNCTIONS // //////////////////////// function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = balanceOf(delegator); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint(address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes) internal { uint32 blockNumber = safe32(block.number, "_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } } contract StakeToken is ERC20('Staked SFARM', 'xSFARM'), Whitelist { YieldToken public yieldToken; constructor(YieldToken _yield) public { yieldToken = _yield; } function mint(address _to, uint256 _amount) public onlyWhitelisted { _mint(_to, _amount); } function burn(address _from ,uint256 _amount) public onlyWhitelisted { _burn(_from, _amount); } function safeYieldTransfer(address _to, uint256 _amount) public onlyWhitelisted { uint256 yieldBal = yieldToken.balanceOf(address(this)); if (_amount > yieldBal) { yieldToken.transfer(_to, yieldBal); } else { yieldToken.transfer(_to, _amount); } } } contract MasterChef is Whitelist { using SafeMath for uint256; using SafeERC20 for IERC20; ////////////////// // DATA STRUCTS // ////////////////// // Info of each user. struct UserInfo { uint256 amount; uint256 rewardDebt; } // Info of each pool. struct PoolInfo { IERC20 lpToken; uint256 allocPoint; uint256 lastRewardBlock; uint256 accYieldPerShare; } ///////////////////////// // CONTRACT INTERFACES // ///////////////////////// YieldToken public yield; StakeToken public stake; IMigratorChef public migrator; PoolInfo[] public poolInfo; /////////////////////////////// // CONFIGURABLES & VARIABLES // /////////////////////////////// address public feeRecipient; uint256 public startBlock; uint256 public yieldPerBlock; uint256 public BONUS_MULTIPLIER = 1; uint256 public totalAllocPoint = 0; mapping(address => bool) public poolExists; mapping (uint256 => mapping (address => UserInfo)) public userInfo; ///////////////////// // CONTRACT EVENTS // ///////////////////// event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); //////////////////////////// // CONSTRUCTOR & FALLBACK // //////////////////////////// constructor( YieldToken _yield, StakeToken _stake, address _feeRecipient, uint256 _yieldPerBlock, uint256 _startBlock ) public { yield = _yield; stake = _stake; feeRecipient = _feeRecipient; yieldPerBlock = _yieldPerBlock; startBlock = _startBlock; // staking pool poolInfo.push(PoolInfo({ lpToken: _yield, allocPoint: 1000, lastRewardBlock: startBlock, accYieldPerShare: 0 })); totalAllocPoint = 1000; } //////////////////// // VIEW FUNCTIONS // //////////////////// // Total number of pools created function poolLength() external view returns (uint256) { return poolInfo.length; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { return _to.sub(_from).mul(BONUS_MULTIPLIER); } // View function to see pending yield on frontend. function pendingYield(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accYieldPerShare = pool.accYieldPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 yieldReward = multiplier.mul(yieldPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accYieldPerShare = accYieldPerShare.add(yieldReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accYieldPerShare).div(1e12).sub(user.rewardDebt); } ///////////////////// // WRITE FUNCTIONS // ///////////////////// // 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; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 yieldReward = multiplier.mul(yieldPerBlock).mul(pool.allocPoint).div(totalAllocPoint); yield.mint(feeRecipient, yieldReward.div(10)); yield.mint(address(stake), yieldReward); pool.accYieldPerShare = pool.accYieldPerShare.add(yieldReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for yield allocation. function deposit(uint256 _pid, uint256 _amount) public { require (_pid != 0, 'deposit yield by staking'); PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accYieldPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeYieldTransfer(msg.sender, pending); } } if (_amount > 0) { pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public { require (_pid != 0, 'withdraw yield by unstaking'); 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.accYieldPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeYieldTransfer(msg.sender, pending); } if(_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12); emit Withdraw(msg.sender, _pid, _amount); } // Stake yield tokens to MasterChef function enterStaking(uint256 _amount) public { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[0][msg.sender]; updatePool(0); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accYieldPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeYieldTransfer(msg.sender, pending); } } if(_amount > 0) { pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12); stake.mint(msg.sender, _amount); emit Deposit(msg.sender, 0, _amount); } // Withdraw yield tokens from STAKING. function leaveStaking(uint256 _amount) public { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[0][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(0); uint256 pending = user.amount.mul(pool.accYieldPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { safeYieldTransfer(msg.sender, pending); } if(_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accYieldPerShare).div(1e12); stake.burn(msg.sender, _amount); emit Withdraw(msg.sender, 0, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, _pid, user.amount); user.amount = 0; user.rewardDebt = 0; } ////////////////////////// // RESTRICTED FUNCTIONS // ////////////////////////// // Migrate lp token to another lp contract. function migrate(uint256 _pid) public onlyOwner { require(address(migrator) != address(0), "migrate: no migrator"); PoolInfo storage pool = poolInfo[_pid]; IERC20 lpToken = pool.lpToken; uint256 bal = lpToken.balanceOf(address(this)); lpToken.safeApprove(address(migrator), bal); IERC20 newLpToken = migrator.migrate(lpToken); require(bal == newLpToken.balanceOf(address(this)), "migrate: bad"); pool.lpToken = newLpToken; } // Set the migrator contract. Can only be called by the owner. function setMigrator(IMigratorChef _migrator) public onlyOwner { migrator = _migrator; } // Update fee recipient address function setFeeRecipient(address _feeRecipient) public onlyOwner { feeRecipient = _feeRecipient; } // Set yield multiplier for early stakers. function updateMultiplier(uint256 multiplierNumber) public onlyOwner { BONUS_MULTIPLIER = multiplierNumber; } // Add a new lp to the pool. Can only be called by the owner. function add(uint256 _allocPoint, IERC20 _lpToken, bool _withUpdate) public onlyOwner { require(!poolExists[address(_lpToken)], "ALREADY_EXISTS"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accYieldPerShare: 0 })); poolExists[address(_lpToken)] = true; updateStakingPool(); } // Update the given pool's yield allocation point. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); uint256 prevAllocPoint = poolInfo[_pid].allocPoint; poolInfo[_pid].allocPoint = _allocPoint; if (prevAllocPoint != _allocPoint) { updateStakingPool(); } } ////////////////////////////////// // INTERNAL & PRIVATE FUNCTIONS // ////////////////////////////////// // Safe yield transfer function, just in case if rounding error causes pool to not have enough yield. function safeYieldTransfer(address _to, uint256 _amount) internal { stake.safeYieldTransfer(_to, _amount); } function updateStakingPool() internal { uint256 length = poolInfo.length; uint256 points = 0; for (uint256 pid = 1; pid < length; ++pid) { points = points.add(poolInfo[pid].allocPoint); } if (points != 0) { points = points.div(3); totalAllocPoint = totalAllocPoint.sub(poolInfo[0].allocPoint).add(points); poolInfo[0].allocPoint = points; } } }
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"}],"name":"WhitelistedAddressRemoved","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"removeAddressesFromWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601081526020017f5374726f6e6768616e6473204661726d000000000000000000000000000000008152506040518060400160405280600581526020017f534641524d0000000000000000000000000000000000000000000000000000008152508160039080519060200190620000969291906200018d565b508060049080519060200190620000af9291906200018d565b506012600560006101000a81548160ff021916908360ff16021790555050506000620000e06200018560201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000233565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001d057805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000200578251825591602001919060010190620001e3565b5b50905062000210919062000214565b5090565b5b808211156200022f57600081600090555060010162000215565b5090565b6136e080620002436000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a9059cbb116100a2578063e2ec6ec311610071578063e2ec6ec314610b29578063e7a324dc14610bf7578063f1127ed814610c15578063f2fde38b14610c8a576101da565b8063a9059cbb1461097c578063b4b5ea57146109e0578063c3cda52014610a38578063dd62ed3e14610ab1576101da565b80638da5cb5b116100de5780638da5cb5b1461080757806395d89b411461083b5780639b19251a146108be578063a457c2d714610918576101da565b8063782d6fe1146106f35780637b9417c8146107555780637ecebe00146107af576101da565b8063313ce5671161017c5780635c19a95c1161014b5780635c19a95c146105ef5780636fcfff451461063357806370a0823114610691578063715018a6146106e9576101da565b8063313ce567146104ae57806339509351146104cf57806340c10f1914610533578063587cde1e14610581576101da565b806320606b70116101b857806320606b70146102e457806323b872dd1461030257806324953eaa14610386578063286dd3f514610454576101da565b806306fdde03146101df578063095ea7b31461026257806318160ddd146102c6575b600080fd5b6101e7610cce565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b6102ce610d8e565b6040518082815260200191505060405180910390f35b6102ec610d98565b6040518082815260200191505060405180910390f35b61036e6004803603606081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dbc565b60405180821515815260200191505060405180910390f35b61043c6004803603602081101561039c57600080fd5b81019080803590602001906401000000008111156103b957600080fd5b8201836020820111156103cb57600080fd5b803590602001918460208302840111640100000000831117156103ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610e95565b60405180821515815260200191505060405180910390f35b6104966004803603602081101561046a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f8b565b60405180821515815260200191505060405180910390f35b6104b661113d565b604051808260ff16815260200191505060405180910390f35b61051b600480360360408110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611154565b60405180821515815260200191505060405180910390f35b61057f6004803603604081101561054957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611207565b005b6105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106316004803603602081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a8565b005b6106756004803603602081101561064957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113b5565b604051808263ffffffff16815260200191505060405180910390f35b6106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d8565b6040518082815260200191505060405180910390f35b6106f1611420565b005b61073f6004803603604081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611590565b6040518082815260200191505060405180910390f35b6107976004803603602081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611951565b60405180821515815260200191505060405180910390f35b6107f1600480360360208110156107c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b02565b6040518082815260200191505060405180910390f35b61080f611b1a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610843611b44565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610883578082015181840152602081019050610868565b50505050905090810190601f1680156108b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be6565b60405180821515815260200191505060405180910390f35b6109646004803603604081101561092e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c06565b60405180821515815260200191505060405180910390f35b6109c86004803603604081101561099257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd3565b60405180821515815260200191505060405180910390f35b610a22600480360360208110156109f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf1565b6040518082815260200191505060405180910390f35b610aaf600480360360c0811015610a4e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611dc7565b005b610b1360048036036040811015610ac757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612182565b6040518082815260200191505060405180910390f35b610bdf60048036036020811015610b3f57600080fd5b8101908080359060200190640100000000811115610b5c57600080fd5b820183602082011115610b6e57600080fd5b80359060200191846020830284011164010000000083111715610b9057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612209565b60405180821515815260200191505060405180910390f35b610bff6122ff565b6040518082815260200191505060405180910390f35b610c6760048036036040811015610c2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050612323565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612364565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d665780601f10610d3b57610100808354040283529160200191610d66565b820191906000526020600020905b815481529060010190602001808311610d4957829003601f168201915b5050505050905090565b6000610d84610d7d612559565b8484612561565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610dc9848484612758565b610e8a84610dd5612559565b610e85856040518060600160405280602881526020016135e760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e3b612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b612561565b600190509392505050565b6000610e9f612559565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015610f8557610f6e838281518110610f6157fe5b6020026020010151610f8b565b15610f7857600191505b8080600101915050610f49565b50919050565b6000610f95612559565b73ffffffffffffffffffffffffffffffffffffffff16610fb3611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611138576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6000600560009054906101000a900460ff16905090565b60006111fd611161612559565b846111f88560016000611172612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b612561565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f2077686974656c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112d08282612b5b565b61133b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d22565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6113b23382612fbf565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611428612559565b73ffffffffffffffffffffffffffffffffffffffff16611446611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60004382106115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135356021913960400191505060405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561165757600091505061194b565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161174157600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff1681526020019081526020016000206001015491505061194b565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156117c257600091505061194b565b6000806001830390505b8163ffffffff168163ffffffff1611156118e5576000600283830363ffffffff16816117f457fe5b0482039050611801613514565b600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156118bd5780602001519550505050505061194b565b86816000015163ffffffff1610156118d7578193506118de565b6001820392505b50506117cc565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600061195b612559565b73ffffffffffffffffffffffffffffffffffffffff16611979611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611afd576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60076020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b5050505050905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6000611cc9611c13612559565b84611cc4856040518060600160405280602581526020016136866025913960016000611c3d612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b612561565b6001905092915050565b6000611ce7611ce0612559565b8484612758565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611d5b576000611dbf565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611df2610cce565b80519060200120611e01613130565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611f85573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612034576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f64656c656761746542795369673a20696e76616c6964207369676e617475726581525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146120f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f64656c656761746542795369673a20696e76616c6964206e6f6e63650000000081525060200191505060405180910390fd5b8742111561216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f64656c656761746542795369673a207369676e6174757265206578706972656481525060200191505060405180910390fd5b612176818b612fbf565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612213612559565b73ffffffffffffffffffffffffffffffffffffffff16612231611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82518110156122f9576122e28382815181106122d557fe5b6020026020010151611951565b156122ec57600191505b80806001019150506122bd565b50919050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b61236c612559565b73ffffffffffffffffffffffffffffffffffffffff1661238a611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806135796026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136626024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061359f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061363d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806135566023913960400191505060405180910390fd5b61286f83838361313d565b6128da816040518060600160405280602681526020016135c1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061296d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612ac6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a8b578082015181840152602081019050612a70565b50505050905090810190601f168015612ab85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015612b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612c0a6000838361313d565b612c1f81600254612ad390919063ffffffff16565b600281905550612c76816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5e5750600081115b15612fba57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e8e576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612e01576000612e65565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612e7c848361314290919063ffffffff16565b9050612e8a868484846131c5565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fb9576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612f2c576000612f90565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612fa78483612ad390919063ffffffff16565b9050612fb5858484846131c5565b5050505b5b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061302e846113d8565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461312a828483612d22565b50505050565b6000804690508091505090565b505050565b6000828211156131ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60006131e9436040518060600160405280602e815260200161360f602e9139613459565b905060008463ffffffff1611801561327e57508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156132ef5781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506133fc565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60006401000000008310829061350a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cf5780820151818401526020810190506134b4565b50505050905090810190601f1680156134fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122099932a0a54aafa6e8a9daf130da6c2dc08d03d4010b5832c4debcc96606ddda664736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101da5760003560e01c8063782d6fe111610104578063a9059cbb116100a2578063e2ec6ec311610071578063e2ec6ec314610b29578063e7a324dc14610bf7578063f1127ed814610c15578063f2fde38b14610c8a576101da565b8063a9059cbb1461097c578063b4b5ea57146109e0578063c3cda52014610a38578063dd62ed3e14610ab1576101da565b80638da5cb5b116100de5780638da5cb5b1461080757806395d89b411461083b5780639b19251a146108be578063a457c2d714610918576101da565b8063782d6fe1146106f35780637b9417c8146107555780637ecebe00146107af576101da565b8063313ce5671161017c5780635c19a95c1161014b5780635c19a95c146105ef5780636fcfff451461063357806370a0823114610691578063715018a6146106e9576101da565b8063313ce567146104ae57806339509351146104cf57806340c10f1914610533578063587cde1e14610581576101da565b806320606b70116101b857806320606b70146102e457806323b872dd1461030257806324953eaa14610386578063286dd3f514610454576101da565b806306fdde03146101df578063095ea7b31461026257806318160ddd146102c6575b600080fd5b6101e7610cce565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d70565b60405180821515815260200191505060405180910390f35b6102ce610d8e565b6040518082815260200191505060405180910390f35b6102ec610d98565b6040518082815260200191505060405180910390f35b61036e6004803603606081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610dbc565b60405180821515815260200191505060405180910390f35b61043c6004803603602081101561039c57600080fd5b81019080803590602001906401000000008111156103b957600080fd5b8201836020820111156103cb57600080fd5b803590602001918460208302840111640100000000831117156103ed57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050610e95565b60405180821515815260200191505060405180910390f35b6104966004803603602081101561046a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f8b565b60405180821515815260200191505060405180910390f35b6104b661113d565b604051808260ff16815260200191505060405180910390f35b61051b600480360360408110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611154565b60405180821515815260200191505060405180910390f35b61057f6004803603604081101561054957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611207565b005b6105c36004803603602081101561059757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106316004803603602081101561060557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113a8565b005b6106756004803603602081101561064957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113b5565b604051808263ffffffff16815260200191505060405180910390f35b6106d3600480360360208110156106a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113d8565b6040518082815260200191505060405180910390f35b6106f1611420565b005b61073f6004803603604081101561070957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611590565b6040518082815260200191505060405180910390f35b6107976004803603602081101561076b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611951565b60405180821515815260200191505060405180910390f35b6107f1600480360360208110156107c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b02565b6040518082815260200191505060405180910390f35b61080f611b1a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610843611b44565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610883578082015181840152602081019050610868565b50505050905090810190601f1680156108b05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610900600480360360208110156108d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be6565b60405180821515815260200191505060405180910390f35b6109646004803603604081101561092e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c06565b60405180821515815260200191505060405180910390f35b6109c86004803603604081101561099257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cd3565b60405180821515815260200191505060405180910390f35b610a22600480360360208110156109f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cf1565b6040518082815260200191505060405180910390f35b610aaf600480360360c0811015610a4e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611dc7565b005b610b1360048036036040811015610ac757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612182565b6040518082815260200191505060405180910390f35b610bdf60048036036020811015610b3f57600080fd5b8101908080359060200190640100000000811115610b5c57600080fd5b820183602082011115610b6e57600080fd5b80359060200191846020830284011164010000000083111715610b9057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612209565b60405180821515815260200191505060405180910390f35b610bff6122ff565b6040518082815260200191505060405180910390f35b610c6760048036036040811015610c2b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff169060200190929190505050612323565b604051808363ffffffff1681526020018281526020019250505060405180910390f35b610ccc60048036036020811015610ca057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612364565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d665780601f10610d3b57610100808354040283529160200191610d66565b820191906000526020600020905b815481529060010190602001808311610d4957829003601f168201915b5050505050905090565b6000610d84610d7d612559565b8484612561565b6001905092915050565b6000600254905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610dc9848484612758565b610e8a84610dd5612559565b610e85856040518060600160405280602881526020016135e760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e3b612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b612561565b600190509392505050565b6000610e9f612559565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614610f46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b8251811015610f8557610f6e838281518110610f6157fe5b6020026020010151610f8b565b15610f7857600191505b8080600101915050610f49565b50919050565b6000610f95612559565b73ffffffffffffffffffffffffffffffffffffffff16610fb3611b1a565b73ffffffffffffffffffffffffffffffffffffffff161461103c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611138576000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff1abf01a1043b7c244d128e8595cf0c1d10743b022b03a02dffd8ca3bf729f5a82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b6000600560009054906101000a900460ff16905090565b60006111fd611161612559565b846111f88560016000611172612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b612561565b6001905092915050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f2077686974656c697374000000000000000000000000000000000000000081525060200191505060405180910390fd5b6112d08282612b5b565b61133b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d22565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6113b23382612fbf565b50565b60096020528060005260406000206000915054906101000a900463ffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611428612559565b73ffffffffffffffffffffffffffffffffffffffff16611446611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60004382106115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806135356021913960400191505060405180910390fd5b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff16141561165757600091505061194b565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161161174157600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff1681526020019081526020016000206001015491505061194b565b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156117c257600091505061194b565b6000806001830390505b8163ffffffff168163ffffffff1611156118e5576000600283830363ffffffff16816117f457fe5b0482039050611801613514565b600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff1614156118bd5780602001519550505050505061194b565b86816000015163ffffffff1610156118d7578193506118de565b6001820392505b50506117cc565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600061195b612559565b73ffffffffffffffffffffffffffffffffffffffff16611979611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614611a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611afd576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fd1bba68c128cc3f427e5831b3c6f99f480b6efa6b9e80c757768f6124158cc3f82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600190505b919050565b60076020528060005260406000206000915090505481565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b5050505050905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6000611cc9611c13612559565b84611cc4856040518060600160405280602581526020016136866025913960016000611c3d612559565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b612561565b6001905092915050565b6000611ce7611ce0612559565b8484612758565b6001905092915050565b600080600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611d5b576000611dbf565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866611df2610cce565b80519060200120611e01613130565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611f85573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612034576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f64656c656761746542795369673a20696e76616c6964207369676e617475726581525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505589146120f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f64656c656761746542795369673a20696e76616c6964206e6f6e63650000000081525060200191505060405180910390fd5b8742111561216c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f64656c656761746542795369673a207369676e6174757265206578706972656481525060200191505060405180910390fd5b612176818b612fbf565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000612213612559565b73ffffffffffffffffffffffffffffffffffffffff16612231611b1a565b73ffffffffffffffffffffffffffffffffffffffff16146122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82518110156122f9576122e28382815181106122d557fe5b6020026020010151611951565b156122ec57600191505b80806001019150506122bd565b50919050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600a602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b61236c612559565b73ffffffffffffffffffffffffffffffffffffffff1661238a611b1a565b73ffffffffffffffffffffffffffffffffffffffff1614612413576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806135796026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806136626024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061359f6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061363d6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612864576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806135566023913960400191505060405180910390fd5b61286f83838361313d565b6128da816040518060600160405280602681526020016135c1602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a199092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061296d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612ac6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a8b578082015181840152602081019050612a70565b50505050905090810190601f168015612ab85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082840390509392505050565b600080828401905083811015612b51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612c0a6000838361313d565b612c1f81600254612ad390919063ffffffff16565b600281905550612c76816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ad390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5e5750600081115b15612fba57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e8e576000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612e01576000612e65565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612e7c848361314290919063ffffffff16565b9050612e8a868484846131c5565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612fb9576000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff1611612f2c576000612f90565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b90506000612fa78483612ad390919063ffffffff16565b9050612fb5858484846131c5565b5050505b5b505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061302e846113d8565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a461312a828483612d22565b50505050565b6000804690508091505090565b505050565b6000828211156131ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b60006131e9436040518060600160405280602e815260200161360f602e9139613459565b905060008463ffffffff1611801561327e57508063ffffffff16600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156132ef5781600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff168152602001908152602001600020600101819055506133fc565b60405180604001604052808263ffffffff16815260200183815250600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b60006401000000008310829061350a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134cf5780820151818401526020810190506134b4565b50505050905090810190601f1680156134fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122099932a0a54aafa6e8a9daf130da6c2dc08d03d4010b5832c4debcc96606ddda664736f6c634300060c0033
Deployed ByteCode Sourcemap
15425:6216:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11604:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12498:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11905:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15834:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12675:321;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10802:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10511:283;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11806:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13004:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19055:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16382:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18044:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15697:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12021:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9240:148;;;:::i;:::-;;16738:1215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9950:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15588:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9017:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11703:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9684:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13230:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12156:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16507:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18156:789;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12339:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10209:294;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15963:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15755:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;9396:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11604:91;11649:13;11682:5;11675:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11604:91;:::o;12498:169::-;12581:4;12598:39;12607:12;:10;:12::i;:::-;12621:7;12630:6;12598:8;:39::i;:::-;12655:4;12648:11;;12498:169;;;;:::o;11905:108::-;11966:7;11993:12;;11986:19;;11905:108;:::o;15834:122::-;15876:80;15834:122;:::o;12675:321::-;12781:4;12798:36;12808:6;12816:9;12827:6;12798:9;:36::i;:::-;12845:121;12854:6;12862:12;:10;:12::i;:::-;12876:89;12914:6;12876:89;;;;;;;;;;;;;;;;;:11;:19;12888:6;12876:19;;;;;;;;;;;;;;;:33;12896:12;:10;:12::i;:::-;12876:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12845:8;:121::i;:::-;12984:4;12977:11;;12675:321;;;;;:::o;10802:304::-;10889:12;9163;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10919:9:::1;10914:160;10938:5;:12;10934:1;:16;10914:160;;;10976:36;11003:5;11009:1;11003:8;;;;;;;;;;;;;;10976:26;:36::i;:::-;10972:91;;;11043:4;11033:14;;10972:91;10952:3;;;;;;;10914:160;;;;10802:304:::0;;;:::o;10511:283::-;10586:12;9163;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10615:9:::1;:15;10625:4;10615:15;;;;;;;;;;;;;;;;;;;;;;;;;10611:151;;;10665:5;10647:9;:15;10657:4;10647:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;10690:31;10716:4;10690:31;;;;;;;;;;;;;;;;;;;;10746:4;10736:14;;10611:151;10511:283:::0;;;:::o;11806:91::-;11855:5;11880:9;;;;;;;;;;;11873:16;;11806:91;:::o;13004:218::-;13092:4;13109:83;13118:12;:10;:12::i;:::-;13132:7;13141:50;13180:10;13141:11;:25;13153:12;:10;:12::i;:::-;13141:25;;;;;;;;;;;;;;;:34;13167:7;13141:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;13109:8;:83::i;:::-;13210:4;13203:11;;13004:218;;;;:::o;19055:170::-;9884:9;:21;9894:10;9884:21;;;;;;;;;;;;;;;;;;;;;;;;;9876:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19135:19:::1;19141:3;19146:7;19135:5;:19::i;:::-;19165:52;19188:1;19192:10;:15;19203:3;19192:15;;;;;;;;;;;;;;;;;;;;;;;;;19209:7;19165:14;:52::i;:::-;19055:170:::0;;:::o;16382:117::-;16443:7;16470:10;:21;16481:9;16470:21;;;;;;;;;;;;;;;;;;;;;;;;;16463:28;;16382:117;;;:::o;18044:104::-;18108:32;18118:10;18130:9;18108;:32::i;:::-;18044:104;:::o;15697:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;12021:127::-;12095:7;12122:9;:18;12132:7;12122:18;;;;;;;;;;;;;;;;12115:25;;12021:127;;;:::o;9240:148::-;9163:12;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9347:1:::1;9310:40;;9331:6;;;;;;;;;;;9310:40;;;;;;;;;;;;9378:1;9361:6;;:19;;;;;;;;;;;;;;;;;;9240:148::o:0;16738:1215::-;16819:7;16861:12;16847:11;:26;16839:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16924:19;16946:14;:23;16961:7;16946:23;;;;;;;;;;;;;;;;;;;;;;;;;16924:45;;17000:1;16984:12;:17;;;16980:58;;;17025:1;17018:8;;;;;16980:58;17150:11;17098;:20;17110:7;17098:20;;;;;;;;;;;;;;;:38;17134:1;17119:12;:16;17098:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;17094:147;;17185:11;:20;17197:7;17185:20;;;;;;;;;;;;;;;:38;17221:1;17206:12;:16;17185:38;;;;;;;;;;;;;;;:44;;;17178:51;;;;;17094:147;17338:11;17302;:20;17314:7;17302:20;;;;;;;;;;;;;;;:23;17323:1;17302:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;17298:88;;;17373:1;17366:8;;;;;17298:88;17398:12;17425;17455:1;17440:12;:16;17425:31;;17467:428;17482:5;17474:13;;:5;:13;;;17467:428;;;17504:13;17546:1;17537:5;17529;:13;17528:19;;;;;;;;17520:5;:27;17504:43;;17589:20;;:::i;:::-;17612:11;:20;17624:7;17612:20;;;;;;;;;;;;;;;:28;17633:6;17612:28;;;;;;;;;;;;;;;17589:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17675:11;17659:2;:12;;;:27;;;17655:229;;;17714:2;:8;;;17707:15;;;;;;;;;17655:229;17763:11;17748:2;:12;;;:26;;;17744:140;;;17803:6;17795:14;;17744:140;;;17867:1;17858:6;:10;17850:18;;17744:140;17467:428;;;;;17912:11;:20;17924:7;17912:20;;;;;;;;;;;;;;;:27;17933:5;17912:27;;;;;;;;;;;;;;;:33;;;17905:40;;;;;16738:1215;;;;;:::o;9950:251::-;10020:12;9163;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10050:9:::1;:15;10060:4;10050:15;;;;;;;;;;;;;;;;;;;;;;;;;10045:149;;10100:4;10082:9;:15;10092:4;10082:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;10124:29;10148:4;10124:29;;;;;;;;;;;;;;;;;;;;10178:4;10168:14;;10045:149;9950:251:::0;;;:::o;15588:39::-;;;;;;;;;;;;;;;;;:::o;9017:87::-;9063:7;9090:6;;;;;;;;;;;9083:13;;9017:87;:::o;11703:95::-;11750:13;11783:7;11776:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11703:95;:::o;9684:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;13230:269::-;13323:4;13340:129;13349:12;:10;:12::i;:::-;13363:7;13372:96;13411:15;13372:96;;;;;;;;;;;;;;;;;:11;:25;13384:12;:10;:12::i;:::-;13372:25;;;;;;;;;;;;;;;:34;13398:7;13372:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13340:8;:129::i;:::-;13487:4;13480:11;;13230:269;;;;:::o;12156:175::-;12242:4;12259:42;12269:12;:10;:12::i;:::-;12283:9;12294:6;12259:9;:42::i;:::-;12319:4;12312:11;;12156:175;;;;:::o;16507:223::-;16572:7;16592:19;16614:14;:23;16629:7;16614:23;;;;;;;;;;;;;;;;;;;;;;;;;16592:45;;16670:1;16655:12;:16;;;:67;;16721:1;16655:67;;;16674:11;:20;16686:7;16674:20;;;;;;;;;;;;;;;:38;16710:1;16695:12;:16;16674:38;;;;;;;;;;;;;;;:44;;;16655:67;16648:74;;;16507:223;;;:::o;18156:789::-;18274:23;15876:80;18354:6;:4;:6::i;:::-;18338:24;;;;;;18364:12;:10;:12::i;:::-;18386:4;18310:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18300:93;;;;;;18274:119;;18404:18;16009:71;18467:9;18478:5;18485:6;18435:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18425:68;;;;;;18404:89;;18504:14;18560:15;18577:10;18531:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18521:68;;;;;;18504:85;;18602:17;18622:26;18632:6;18640:1;18643;18646;18622:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18602:46;;18690:1;18669:23;;:9;:23;;;;18661:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18757:6;:17;18764:9;18757:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;18748:5;:28;18740:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18835:6;18828:3;:13;;18820:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18906:31;18916:9;18927;18906;:31::i;:::-;18899:38;;;;18156:789;;;;;;:::o;12339:151::-;12428:7;12455:11;:18;12467:5;12455:18;;;;;;;;;;;;;;;:27;12474:7;12455:27;;;;;;;;;;;;;;;;12448:34;;12339:151;;;;:::o;10209:294::-;10291:12;9163;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10321:9:::1;10316:155;10340:5;:12;10336:1;:16;10316:155;;;10378:31;10400:5;10406:1;10400:8;;;;;;;;;;;;;;10378:21;:31::i;:::-;10374:86;;;10440:4;10430:14;;10374:86;10354:3;;;;;;;10316:155;;;;10209:294:::0;;;:::o;15963:117::-;16009:71;15963:117;:::o;15755:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9396:244::-;9163:12;:10;:12::i;:::-;9152:23;;:7;:5;:7::i;:::-;:23;;;9144:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9505:1:::1;9485:22;;:8;:22;;;;9477:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9595:8;9566:38;;9587:6;;;;;;;;;;;9566:38;;;;;;;;;;;;9624:8;9615:6;;:17;;;;;;;;;;;;;;;;;;9396:244:::0;:::o;8444:106::-;8497:15;8532:10;8525:17;;8444:106;:::o;14866:346::-;14985:1;14968:19;;:5;:19;;;;14960:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15066:1;15047:21;;:7;:21;;;;15039:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15150:6;15120:11;:18;15132:5;15120:18;;;;;;;;;;;;;;;:27;15139:7;15120:27;;;;;;;;;;;;;;;:36;;;;15188:7;15172:32;;15181:5;15172:32;;;15197:6;15172:32;;;;;;;;;;;;;;;;;;14866:346;;;:::o;13507:539::-;13631:1;13613:20;;:6;:20;;;;13605:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13715:1;13694:23;;:9;:23;;;;13686:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:47;13791:6;13799:9;13810:6;13770:20;:47::i;:::-;13850:71;13872:6;13850:71;;;;;;;;;;;;;;;;;:9;:17;13860:6;13850:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13830:9;:17;13840:6;13830:17;;;;;;;;;;;;;;;:91;;;;13955:32;13980:6;13955:9;:20;13965:9;13955:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13932:9;:20;13942:9;13932:20;;;;;;;;;;;;;;;:55;;;;14020:9;14003:35;;14012:6;14003:35;;;14031:6;14003:35;;;;;;;;;;;;;;;;;;13507:539;;;:::o;5187:166::-;5273:7;5306:1;5301;:6;;5309:12;5293:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5344:1;5340;:5;5333:12;;5187:166;;;;;:::o;4286:179::-;4344:7;4364:9;4380:1;4376;:5;4364:17;;4405:1;4400;:6;;4392:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4456:1;4449:8;;;4286:179;;;;:::o;14054:378::-;14157:1;14138:21;;:7;:21;;;;14130:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14208:49;14237:1;14241:7;14250:6;14208:20;:49::i;:::-;14285:24;14302:6;14285:12;;:16;;:24;;;;:::i;:::-;14270:12;:39;;;;14341:30;14364:6;14341:9;:18;14351:7;14341:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;14320:9;:18;14330:7;14320:18;;;;;;;;;;;;;;;:51;;;;14408:7;14387:37;;14404:1;14387:37;;;14417:6;14387:37;;;;;;;;;;;;;;;;;;14054:378;;:::o;19712:947::-;19818:6;19808:16;;:6;:16;;;;:30;;;;;19837:1;19828:6;:10;19808:30;19804:848;;;19877:1;19859:20;;:6;:20;;;19855:385;;19948:16;19967:14;:22;19982:6;19967:22;;;;;;;;;;;;;;;;;;;;;;;;;19948:41;;20008:17;20040:1;20028:9;:13;;;:60;;20087:1;20028:60;;;20044:11;:19;20056:6;20044:19;;;;;;;;;;;;;;;:34;20076:1;20064:9;:13;20044:34;;;;;;;;;;;;;;;:40;;;20028:60;20008:80;;20107:17;20127:21;20141:6;20127:9;:13;;:21;;;;:::i;:::-;20107:41;;20167:57;20184:6;20192:9;20203;20214;20167:16;:57::i;:::-;19855:385;;;;20278:1;20260:20;;:6;:20;;;20256:385;;20349:16;20368:14;:22;20383:6;20368:22;;;;;;;;;;;;;;;;;;;;;;;;;20349:41;;20409:17;20441:1;20429:9;:13;;;:60;;20488:1;20429:60;;;20445:11;:19;20457:6;20445:19;;;;;;;;;;;;;;;:34;20477:1;20465:9;:13;20445:34;;;;;;;;;;;;;;;:40;;;20429:60;20409:80;;20508:17;20528:21;20542:6;20528:9;:13;;:21;;;;:::i;:::-;20508:41;;20568:57;20585:6;20593:9;20604;20615;20568:16;:57::i;:::-;20256:385;;;;19804:848;19712:947;;;:::o;19325:379::-;19402:23;19428:10;:21;19439:9;19428:21;;;;;;;;;;;;;;;;;;;;;;;;;19402:47;;19460:24;19487:20;19497:9;19487;:20::i;:::-;19460:47;;19542:9;19518:10;:21;19529:9;19518:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19613:9;19569:54;;19596:15;19569:54;;19585:9;19569:54;;;;;;;;;;;;19636:60;19651:15;19668:9;19679:16;19636:14;:60::i;:::-;19325:379;;;;:::o;21485:153::-;21530:4;21547:15;21595:9;21584:20;;21623:7;21616:14;;;21485:153;:::o;15326:92::-;;;;:::o;4473:158::-;4531:7;4564:1;4559;:6;;4551:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4622:1;4618;:5;4611:12;;4473:158;;;;:::o;20667:641::-;20789:18;20810:70;20817:12;20810:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;20789:91;;20912:1;20897:12;:16;;;:85;;;;;20971:11;20917:65;;:11;:22;20929:9;20917:22;;;;;;;;;;;;;;;:40;20955:1;20940:12;:16;20917:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;20897:85;20893:339;;;21048:8;20999:11;:22;21011:9;20999:22;;;;;;;;;;;;;;;:40;21037:1;21022:12;:16;20999:40;;;;;;;;;;;;;;;:46;;:57;;;;20893:339;;;21128:33;;;;;;;;21139:11;21128:33;;;;;;21152:8;21128:33;;;21089:11;:22;21101:9;21089:22;;;;;;;;;;;;;;;:36;21112:12;21089:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21219:1;21204:12;:16;21176:14;:25;21191:9;21176:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;20893:339;21270:9;21249:51;;;21281:8;21291;21249:51;;;;;;;;;;;;;;;;;;;;;;;;20667:641;;;;;:::o;21316:161::-;21391:6;21422:5;21418:1;:9;21429:12;21410:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21467:1;21453:16;;21316:161;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://99932a0a54aafa6e8a9daf130da6c2dc08d03d4010b5832c4debcc96606ddda6
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.