Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Core
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-18 */ pragma solidity 0.5.17; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } 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 { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IOracle { function getPriceFeed() external view returns(uint[] memory); } interface IStakeLPToken { function notify(uint _deficit) external; function totalSupply() external view returns(uint); } contract IPeak { function updateFeed(uint[] calldata _prices) external; function portfolioValue() public view returns(uint); } interface IDUSD { function mint(address account, uint amount) external; function burn(address account, uint amount) external; function totalSupply() external view returns(uint); function burnForSelf(uint amount) external; } interface ICore { function mint(uint dusdAmount, address account) external returns(uint usd); function redeem(uint dusdAmount, address account) external returns(uint usd); function rewardDistributionCheckpoint(bool shouldDistribute) external returns(uint periodIncome); function lastPeriodIncome() external view returns(uint _totalAssets, uint _periodIncome, uint _adminFee); function usdToDusd(uint usd) external view returns(uint); function dusdToUsd(uint _dusd, bool fee) external view returns(uint usd); } contract Initializable { bool initialized = false; modifier notInitialized() { require(!initialized, "already initialized"); initialized = true; _; } // Reserved storage space to allow for layout changes in the future. uint256[50] private _gap; } contract Ownable { bytes32 constant OWNER_SLOT = keccak256("proxy.owner"); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() internal { _transferOwnership(msg.sender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns(address _owner) { bytes32 position = OWNER_SLOT; assembly { _owner := sload(position) } } modifier onlyOwner() { require(isOwner(), "NOT_OWNER"); _; } function isOwner() public view returns (bool) { return owner() == msg.sender; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(owner(), newOwner); bytes32 position = OWNER_SLOT; assembly { sstore(position, newOwner) } } } contract Core is Ownable, Initializable, ICore { using SafeERC20 for IERC20; using SafeMath for uint; uint constant FEE_PRECISION = 10000; IDUSD public dusd; IStakeLPToken public stakeLPToken; IOracle public oracle; address[] public systemCoins; uint public totalAssets; uint public unclaimedRewards; bool public inDeficit; uint public redeemFactor; uint public adminFee; // Interface contracts for third-party protocol integrations enum PeakState { Extinct, Active, Dormant } struct Peak { uint[] systemCoinIds; // system indices of the coins accepted by the peak PeakState state; } mapping(address => Peak) peaks; address[] public peaksAddresses; // END OF STORAGE VARIABLES event Mint(address indexed account, uint amount); event Redeem(address indexed account, uint amount); event FeedUpdated(uint[] feed); event TokenWhiteListed(address indexed token); event PeakWhitelisted(address indexed peak); event UpdateDeficitState(bool inDeficit); modifier checkAndNotifyDeficit() { _; uint supply = dusd.totalSupply(); if (supply > totalAssets) { if (!inDeficit) { emit UpdateDeficitState(true); inDeficit = true; } stakeLPToken.notify(supply.sub(totalAssets)); } else if (inDeficit) { inDeficit = false; emit UpdateDeficitState(false); stakeLPToken.notify(0); } } modifier onlyStakeLPToken() { require( msg.sender == address(stakeLPToken), "Only stakeLPToken" ); _; } /** * @dev Used to initialize contract state from the proxy */ function initialize( IDUSD _dusd, IStakeLPToken _stakeLPToken, IOracle _oracle, uint _redeemFactor, uint _adminFee ) public notInitialized { require( address(_dusd) != address(0) && address(_stakeLPToken) != address(0) && address(_oracle) != address(0), "0 address during initialization" ); dusd = _dusd; stakeLPToken = _stakeLPToken; oracle = _oracle; require( _redeemFactor <= FEE_PRECISION && _adminFee <= FEE_PRECISION, "Incorrect upper bound for fee" ); redeemFactor = _redeemFactor; adminFee = _adminFee; } /** * @notice Mint DUSD * @dev Only whitelisted peaks can call this function * @param dusdAmount DUSD amount to mint * @param account Account to mint DUSD to * @return dusdAmount DUSD amount minted */ function mint(uint usdDelta, address account) external checkAndNotifyDeficit returns(uint dusdAmount) { require(usdDelta > 0, "Minting 0"); Peak memory peak = peaks[msg.sender]; require( peak.state == PeakState.Active, "Peak is inactive" ); dusdAmount = usdToDusd(usdDelta); dusd.mint(account, dusdAmount); totalAssets = totalAssets.add(usdDelta); emit Mint(account, dusdAmount); } /** * @notice Redeem DUSD * @dev Only whitelisted peaks can call this function * @param dusdAmount DUSD amount to redeem. * @param account Account to burn DUSD from */ function redeem(uint dusdAmount, address account) external checkAndNotifyDeficit returns(uint usd) { require(dusdAmount > 0, "Redeeming 0"); Peak memory peak = peaks[msg.sender]; require( peak.state != PeakState.Extinct, "Peak is extinct" ); usd = dusdToUsd(dusdAmount, true); dusd.burn(account, dusdAmount); totalAssets = totalAssets.sub(usd); emit Redeem(account, dusdAmount); } /** * @notice Pull prices from the oracle and update system stats * @dev Anyone can call this */ function syncSystem() external checkAndNotifyDeficit { _updateFeed(); totalAssets = totalSystemAssets(); } function rewardDistributionCheckpoint(bool shouldDistribute) external onlyStakeLPToken checkAndNotifyDeficit returns(uint periodIncome) { uint _adminFee; (totalAssets, periodIncome, _adminFee) = lastPeriodIncome(); if (periodIncome == 0) { return 0; } // note that we do not account for devalued dusd here if (shouldDistribute) { dusd.mint(address(stakeLPToken), periodIncome); if (_adminFee > 0) { dusd.mint(address(this), _adminFee); } } else { // stakers don't get these, will act as extra volatility cushion unclaimedRewards = unclaimedRewards.add(periodIncome).add(_adminFee); } } /* ##### View functions ##### */ function lastPeriodIncome() public view returns(uint _totalAssets, uint periodIncome, uint _adminFee) { _totalAssets = totalSystemAssets(); uint supply = dusd.totalSupply().add(unclaimedRewards); if (_totalAssets > supply) { periodIncome = _totalAssets.sub(supply); if (adminFee > 0) { _adminFee = periodIncome.mul(adminFee).div(FEE_PRECISION); periodIncome = periodIncome.sub(_adminFee); } } } /** * @notice Returns the net system assets across all peaks * @return _totalAssets system assets denominated in dollars */ function totalSystemAssets() public view returns (uint _totalAssets) { for (uint i = 0; i < peaksAddresses.length; i++) { Peak memory peak = peaks[peaksAddresses[i]]; if (peak.state == PeakState.Extinct) { continue; } _totalAssets = _totalAssets.add(IPeak(peaksAddresses[i]).portfolioValue()); } } function usdToDusd(uint usd) public view returns(uint) { // system is healthy. Pegged at $1 if (!inDeficit) { return usd; } // system is in deficit, see if staked funds can make up for it uint supply = dusd.totalSupply(); uint perceivedSupply = supply.sub(stakeLPToken.totalSupply()); // staked funds make up for the deficit if (perceivedSupply <= totalAssets) { return usd; } return usd.mul(perceivedSupply).div(totalAssets); } function dusdToUsd(uint _dusd, bool fee) public view returns(uint usd) { // system is healthy. Pegged at $1 if (!inDeficit) { usd = _dusd; } else { // system is in deficit, see if staked funds can make up for it uint supply = dusd.totalSupply(); // do not perform a dusd.balanceOf(stakeLPToken) because that includes the reward tokens uint perceivedSupply = supply.sub(stakeLPToken.totalSupply()); // staked funds make up for the deficit if (perceivedSupply <= totalAssets) { usd = _dusd; } else { usd = _dusd.mul(totalAssets).div(perceivedSupply); } } if (fee) { usd = usd.mul(redeemFactor).div(FEE_PRECISION); } return usd; } /* ##### Admin functions ##### */ /** * @notice Whitelist new tokens supported by the peaks. * These are vanilla coins like DAI, USDC, USDT etc. * @dev onlyOwner ACL is provided by the whitelistToken call * @param tokens Token addresses to whitelist */ function whitelistTokens(address[] calldata tokens) external onlyOwner { for (uint i = 0; i < tokens.length; i++) { _whitelistToken(tokens[i]); } } /** * @notice Whitelist a new peak * @param peak Address of the contract that interfaces with the 3rd-party protocol * @param _systemCoins Indices of the system coins, the peak supports */ function whitelistPeak( address peak, uint[] calldata _systemCoins, bool shouldUpdateFeed ) external onlyOwner { uint numSystemCoins = systemCoins.length; for (uint i = 0; i < _systemCoins.length; i++) { require(_systemCoins[i] < numSystemCoins, "Invalid system coin index"); } require( peaks[peak].state == PeakState.Extinct, "Peak already exists" ); peaksAddresses.push(peak); peaks[peak] = Peak(_systemCoins, PeakState.Active); if (shouldUpdateFeed) { _updateFeed(); } emit PeakWhitelisted(peak); } /** * @notice Change a peaks status */ function setPeakStatus(address peak, PeakState state) external onlyOwner { require( peaks[peak].state != PeakState.Extinct, "Peak is extinct" ); peaks[peak].state = state; } function setFee(uint _redeemFactor, uint _adminFee) external onlyOwner { require( _redeemFactor <= FEE_PRECISION && _adminFee <= FEE_PRECISION, "Incorrect upper bound for fee" ); redeemFactor = _redeemFactor; adminFee = _adminFee; } function withdrawAdminFee(address destination) external onlyOwner { IERC20 _dusd = IERC20(address(dusd)); _dusd.safeTransfer(destination, _dusd.balanceOf(address(this))); } /* ##### Internal functions ##### */ function _updateFeed() internal { uint[] memory feed = oracle.getPriceFeed(); require(feed.length == systemCoins.length, "Invalid system state"); uint[] memory prices; Peak memory peak; for (uint i = 0; i < peaksAddresses.length; i++) { peak = peaks[peaksAddresses[i]]; prices = new uint[](peak.systemCoinIds.length); if (peak.state == PeakState.Extinct) { continue; } for (uint j = 0; j < prices.length; j++) { prices[j] = feed[peak.systemCoinIds[j]]; } IPeak(peaksAddresses[i]).updateFeed(prices); } emit FeedUpdated(feed); } function _whitelistToken(address token) internal { for (uint i = 0; i < systemCoins.length; i++) { require(systemCoins[i] != token, "Adding a duplicate token"); } systemCoins.push(token); emit TokenWhiteListed(token); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"feed","type":"uint256[]"}],"name":"FeedUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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":"peak","type":"address"}],"name":"PeakWhitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"TokenWhiteListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"inDeficit","type":"bool"}],"name":"UpdateDeficitState","type":"event"},{"constant":true,"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dusd","outputs":[{"internalType":"contract IDUSD","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_dusd","type":"uint256"},{"internalType":"bool","name":"fee","type":"bool"}],"name":"dusdToUsd","outputs":[{"internalType":"uint256","name":"usd","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inDeficit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IDUSD","name":"_dusd","type":"address"},{"internalType":"contract IStakeLPToken","name":"_stakeLPToken","type":"address"},{"internalType":"contract IOracle","name":"_oracle","type":"address"},{"internalType":"uint256","name":"_redeemFactor","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPeriodIncome","outputs":[{"internalType":"uint256","name":"_totalAssets","type":"uint256"},{"internalType":"uint256","name":"periodIncome","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"usdDelta","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"dusdAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"peaksAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"dusdAmount","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"usd","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"redeemFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"shouldDistribute","type":"bool"}],"name":"rewardDistributionCheckpoint","outputs":[{"internalType":"uint256","name":"periodIncome","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_redeemFactor","type":"uint256"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"name":"setFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"peak","type":"address"},{"internalType":"enum Core.PeakState","name":"state","type":"uint8"}],"name":"setPeakStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakeLPToken","outputs":[{"internalType":"contract IStakeLPToken","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"syncSystem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"systemCoins","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSystemAssets","outputs":[{"internalType":"uint256","name":"_totalAssets","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"unclaimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"usd","type":"uint256"}],"name":"usdToDusd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"peak","type":"address"},{"internalType":"uint256[]","name":"_systemCoins","type":"uint256[]"},{"internalType":"bool","name":"shouldUpdateFeed","type":"bool"}],"name":"whitelistPeak","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"whitelistTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"withdrawAdminFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260008060006101000a81548160ff0219169083151502179055506200002f336200003560201b60201c565b620001aa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180620043d56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16620000e46200016760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b019050604051809103902090508181555050565b60008060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b01905060405180910390209050805491505090565b61421b80620001ba6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637dc0d1d0116100f9578063cc3d44e211610097578063f245fe7a11610071578063f245fe7a14610871578063f2fde38b1461087b578063f6c35f50146108bf578063f85f91b414610903576101a9565b8063cc3d44e214610775578063d883c43d146107e3578063de1409ce14610827576101a9565b806394bf804d116100d357806394bf804d146105ef578063a019c64e14610651578063a0be06f9146106bf578063a6b63eb8146106dd576101a9565b80637dc0d1d0146105395780638da5cb5b146105835780638f32d59b146105cd576101a9565b80634a6b98991161016657806352f7c9881161014057806352f7c988146103ce5780637143438f1461040657806371766185146104ab5780637bde82f2146104d7576101a9565b80634a6b9899146102e65780634b6c5936146103375780634cb1e9e314610355576101a9565b806301e1d114146101ae57806308de3283146101cc57806316ca2518146101ee57806320784ff41461020c57806326695d961461024e5780634077969414610298575b600080fd5b6101b6610921565b6040518082815260200191505060405180910390f35b6101d4610927565b604051808215151515815260200191505060405180910390f35b6101f661093a565b6040518082815260200191505060405180910390f35b6102386004803603602081101561022257600080fd5b8101908080359060200190929190505050610b67565b6040518082815260200191505060405180910390f35b610256610d29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102d0600480360360408110156102ae57600080fd5b8101908080359060200190929190803515159060200190929190505050610d4f565b6040518082815260200191505060405180910390f35b610335600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050610f46565b005b61033f611103565b6040518082815260200191505060405180910390f35b6103cc6004803603602081101561036b57600080fd5b810190808035906020019064010000000081111561038857600080fd5b82018360208201111561039a57600080fd5b803590602001918460208302840111640100000000831117156103bc57600080fd5b9091929391929390505050611109565b005b610404600480360360408110156103e457600080fd5b8101908080359060200190929190803590602001909291905050506111d7565b005b6104a96004803603606081101561041c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561045957600080fd5b82018360208201111561046b57600080fd5b8035906020019184602083028401116401000000008311171561048d57600080fd5b90919293919293908035151590602001909291905050506112e9565b005b6104b3611697565b60405180848152602001838152602001828152602001935050505060405180910390f35b610523600480360360408110156104ed57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d1565b6040518082815260200191505060405180910390f35b610541611db0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61058b611dd6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d5611e19565b604051808215151515815260200191505060405180910390f35b61063b6004803603604081101561060557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e56565b6040518082815260200191505060405180910390f35b61067d6004803603602081101561066757600080fd5b8101908080359060200190929190505050612432565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c761246e565b6040518082815260200191505060405180910390f35b610773600480360360a08110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612474565b005b6107a16004803603602081101561078b57600080fd5b8101908080359060200190929190505050612783565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610825600480360360208110156107f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127bf565b005b61082f612946565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61087961296c565b005b6108bd6004803603602081101561089157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c44565b005b6108ed600480360360208110156108d557600080fd5b81019080803515159060200190929190505050612cca565b6040518082815260200191505060405180910390f35b61090b61326c565b6040518082815260200191505060405180910390f35b60375481565b603960009054906101000a900460ff1681565b600080600090505b603d80549050811015610b63576109576140de565b603c6000603d848154811061096857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610a2757602002820191906000526020600020905b815481526020019060010190808311610a13575b505050505081526020016001820160009054906101000a900460ff166002811115610a4e57fe5b6002811115610a5957fe5b81525050905060006002811115610a6c57fe5b81602001516002811115610a7c57fe5b1415610a885750610b56565b610b52603d8381548110610a9857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373acb5906040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b81019080805190602001909291905050508461327290919063ffffffff16565b9250505b8080600101915050610942565b5090565b6000603960009054906101000a900460ff16610b8557819050610d24565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b810190808051906020019092919050505090506000610ce3603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9957600080fd5b505afa158015610cad573d6000803e3d6000fd5b505050506040513d6020811015610cc357600080fd5b8101908080519060200190929190505050836132fa90919063ffffffff16565b90506037548111610cf8578392505050610d24565b610d1f603754610d11838761334490919063ffffffff16565b6133ca90919063ffffffff16565b925050505b919050565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603960009054906101000a900460ff16610d6d57829050610f0b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d6020811015610e0157600080fd5b810190808051906020019092919050505090506000610ecb603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d6020811015610eab57600080fd5b8101908080519060200190929190505050836132fa90919063ffffffff16565b90506037548111610ede57849250610f08565b610f0581610ef76037548861334490919063ffffffff16565b6133ca90919063ffffffff16565b92505b50505b8115610f3d57610f3a612710610f2c603a548461334490919063ffffffff16565b6133ca90919063ffffffff16565b90505b80905092915050565b610f4e611e19565b610fc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006002811115610fcd57fe5b603c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16600281111561102857fe5b141561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5065616b20697320657874696e6374000000000000000000000000000000000081525060200191505060405180910390fd5b80603c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908360028111156110fa57fe5b02179055505050565b603a5481565b611111611e19565b611183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b828290508110156111d2576111c58383838181106111a357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613414565b8080600101915050611189565b505050565b6111df611e19565b611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612710821115801561126557506127108111155b6112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e636f727265637420757070657220626f756e6420666f722066656500000081525060200191505060405180910390fd5b81603a8190555080603b819055505050565b6112f1611e19565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000603680549050905060008090505b84849050811015611412578185858381811061138b57fe5b9050602002013510611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e76616c69642073797374656d20636f696e20696e6465780000000000000081525060200191505060405180910390fd5b8080600101915050611373565b506000600281111561142057fe5b603c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16600281111561147b57fe5b146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5065616b20616c7265616479206578697374730000000000000000000000000081525060200191505060405180910390fd5b603d8590806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506040518060400160405280858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001600160028111156115b357fe5b815250603c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019080519060200190611611929190614103565b5060208201518160010160006101000a81548160ff0219169083600281111561163657fe5b0217905550905050811561164d5761164c6135ba565b5b8473ffffffffffffffffffffffffffffffffffffffff167ff6c9e81b270bf53daf66ad44e8b6990ffd59f37bf63d421609dc748739d7db8c60405160405180910390a25050505050565b60008060006116a461093a565b9250600061175f603854603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b810190808051906020019092919050505061327290919063ffffffff16565b9050808411156117cb5761177c81856132fa90919063ffffffff16565b92506000603b5411156117ca576117b26127106117a4603b548661334490919063ffffffff16565b6133ca90919063ffffffff16565b91506117c782846132fa90919063ffffffff16565b92505b5b50909192565b6000808311611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f52656465656d696e67203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118506140de565b603c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b8154815260200190600101908083116118d5575b505050505081526020016001820160009054906101000a900460ff16600281111561191057fe5b600281111561191b57fe5b8152505090506000600281111561192e57fe5b8160200151600281111561193e57fe5b14156119b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5065616b20697320657874696e6374000000000000000000000000000000000081525060200191505060405180910390fd5b6119bd846001610d4f565b9150603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b50505050611a95826037546132fa90919063ffffffff16565b6037819055508273ffffffffffffffffffffffffffffffffffffffff167f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6856040518082815260200191505060405180910390a2506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5457600080fd5b505afa158015611b68573d6000803e3d6000fd5b505050506040513d6020811015611b7e57600080fd5b81019080805190602001909291905050509050603754811115611cad57603960009054906101000a900460ff16611c07577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4611c5a603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b50505050611da9565b603960009054906101000a900460ff1615611da8576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d8f57600080fd5b505af1158015611da3573d6000803e3d6000fd5b505050505b5b5092915050565b603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b01905060405180910390209050805491505090565b60003373ffffffffffffffffffffffffffffffffffffffff16611e3a611dd6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000808311611ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4d696e74696e672030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611ed56140de565b603c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611f6e57602002820191906000526020600020905b815481526020019060010190808311611f5a575b505050505081526020016001820160009054906101000a900460ff166002811115611f9557fe5b6002811115611fa057fe5b81525050905060016002811115611fb357fe5b81602001516002811115611fc357fe5b14612036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5065616b20697320696e6163746976650000000000000000000000000000000081525060200191505060405180910390fd5b61203f84610b67565b9150603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156120ea57600080fd5b505af11580156120fe573d6000803e3d6000fd5b505050506121178460375461327290919063ffffffff16565b6037819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a2506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d657600080fd5b505afa1580156121ea573d6000803e3d6000fd5b505050506040513d602081101561220057600080fd5b8101908080519060200190929190505050905060375481111561232f57603960009054906101000a900460ff16612289577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b46122dc603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061242b565b603960009054906101000a900460ff161561242a576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561241157600080fd5b505af1158015612425573d6000803e3d6000fd5b505050505b5b5092915050565b6036818154811061243f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603b5481565b6000809054906101000a900460ff16156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561257a5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125b35750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f30206164647265737320647572696e6720696e697469616c697a6174696f6e0081525060200191505060405180910390fd5b84603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271082111580156126fc57506127108111155b61276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e636f727265637420757070657220626f756e6420666f722066656500000081525060200191505060405180910390fd5b81603a8190555080603b819055505050505050565b603d818154811061279057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127c7611e19565b612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612942828273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128e157600080fd5b505afa1580156128f5573d6000803e3d6000fd5b505050506040513d602081101561290b57600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff16613ac99092919063ffffffff16565b5050565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129746135ba565b61297c61093a565b6037819055506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d6020811015612a1657600080fd5b81019080805190602001909291905050509050603754811115612b4557603960009054906101000a900460ff16612a9f577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4612af2603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b2857600080fd5b505af1158015612b3c573d6000803e3d6000fd5b50505050612c41565b603960009054906101000a900460ff1615612c40576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050505b5b50565b612c4c611e19565b612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612cc781613b9a565b50565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4f6e6c79207374616b654c50546f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b6000612d99611697565b6037600082955083965084919050555050506000821415612dbe576000915050612fa7565b8215612f7757603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612e8f57600080fd5b505af1158015612ea3573d6000803e3d6000fd5b505050506000811115612f7257603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612f5957600080fd5b505af1158015612f6d573d6000803e3d6000fd5b505050505b612fa5565b612f9e81612f908460385461327290919063ffffffff16565b61327290919063ffffffff16565b6038819055505b505b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561301157600080fd5b505afa158015613025573d6000803e3d6000fd5b505050506040513d602081101561303b57600080fd5b8101908080519060200190929190505050905060375481111561316a57603960009054906101000a900460ff166130c4577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4613117603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b50505050613266565b603960009054906101000a900460ff1615613265576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050505b5b50919050565b60385481565b6000808284019050838110156132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061333c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cc2565b905092915050565b60008083141561335757600090506133c4565b600082840290508284828161336857fe5b04146133bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061419c6021913960400191505060405180910390fd5b809150505b92915050565b600061340c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d82565b905092915050565b60008090505b60368054905081101561350d578173ffffffffffffffffffffffffffffffffffffffff166036828154811061344b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416464696e672061206475706c696361746520746f6b656e000000000000000081525060200191505060405180910390fd5b808060010191505061341a565b5060368190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508073ffffffffffffffffffffffffffffffffffffffff167f1a5ada183a50009e8f59e8edd0e0d2befc9ce52bc2598ae1a46b4588e84c830d60405160405180910390a250565b6060603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e87a5cd6040518163ffffffff1660e01b815260040160006040518083038186803b15801561362457600080fd5b505afa158015613638573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561366257600080fd5b810190808051604051939291908464010000000082111561368257600080fd5b8382019150602082018581111561369857600080fd5b82518660208202830111640100000000821117156136b557600080fd5b8083526020830192505050908051906020019060200280838360005b838110156136ec5780820151818401526020810190506136d1565b505050509050016040525050509050603680549050815114613776576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642073797374656d20737461746500000000000000000000000081525060200191505060405180910390fd5b60606137806140de565b60008090505b603d80549050811015613a4b57603c6000603d83815481106137a457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820180548060200260200160405190810160405280929190818152602001828054801561386357602002820191906000526020600020905b81548152602001906001019080831161384f575b505050505081526020016001820160009054906101000a900460ff16600281111561388a57fe5b600281111561389557fe5b8152505091508160000151516040519080825280602002602001820160405280156138cf5781602001602082028038833980820191505090505b509250600060028111156138df57fe5b826020015160028111156138ef57fe5b14156138fa57613a3e565b60008090505b835181101561395957848360000151828151811061391a57fe5b60200260200101518151811061392c57fe5b602002602001015184828151811061394057fe5b6020026020010181815250508080600101915050613900565b50603d818154811061396757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c64f9741846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015613a005780820151818401526020810190506139e5565b5050505090500192505050600060405180830381600087803b158015613a2557600080fd5b505af1158015613a39573d6000803e3d6000fd5b505050505b8080600101915050613786565b507f603c8632ef5e622de6f8d344d8a907163121a20a8ae935419f27e46f79b0b742836040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015613ab1578082015181840152602081019050613a96565b505050509050019250505060405180910390a1505050565b613b95838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e48565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613c20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806141766026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16613c3f611dd6565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b019050604051809103902090508181555050565b6000838311158290613d6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d34578082015181840152602081019050613d19565b50505050905090810190601f168015613d615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613df3578082015181840152602081019050613dd8565b50505050905090810190601f168015613e205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613e3a57fe5b049050809150509392505050565b613e678273ffffffffffffffffffffffffffffffffffffffff16614093565b613ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310613f285780518252602082019150602081019050602083039250613f05565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f8a576040519150601f19603f3d011682016040523d82523d6000602084013e613f8f565b606091505b509150915081614007576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561408d5780806020019051602081101561402657600080fd5b810190808051906020019092919050505061408c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806141bd602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156140d557506000801b8214155b92505050919050565b604051806040016040528060608152602001600060028111156140fd57fe5b81525090565b82805482825590600052602060002090810192821561413f579160200282015b8281111561413e578251825591602001919060010190614123565b5b50905061414c9190614150565b5090565b61417291905b8082111561416e576000816000905550600101614156565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820a16f4e34fbf71637816092fb424e62550d6d536243fdd862315e1886df8351ae64736f6c634300051100324f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637dc0d1d0116100f9578063cc3d44e211610097578063f245fe7a11610071578063f245fe7a14610871578063f2fde38b1461087b578063f6c35f50146108bf578063f85f91b414610903576101a9565b8063cc3d44e214610775578063d883c43d146107e3578063de1409ce14610827576101a9565b806394bf804d116100d357806394bf804d146105ef578063a019c64e14610651578063a0be06f9146106bf578063a6b63eb8146106dd576101a9565b80637dc0d1d0146105395780638da5cb5b146105835780638f32d59b146105cd576101a9565b80634a6b98991161016657806352f7c9881161014057806352f7c988146103ce5780637143438f1461040657806371766185146104ab5780637bde82f2146104d7576101a9565b80634a6b9899146102e65780634b6c5936146103375780634cb1e9e314610355576101a9565b806301e1d114146101ae57806308de3283146101cc57806316ca2518146101ee57806320784ff41461020c57806326695d961461024e5780634077969414610298575b600080fd5b6101b6610921565b6040518082815260200191505060405180910390f35b6101d4610927565b604051808215151515815260200191505060405180910390f35b6101f661093a565b6040518082815260200191505060405180910390f35b6102386004803603602081101561022257600080fd5b8101908080359060200190929190505050610b67565b6040518082815260200191505060405180910390f35b610256610d29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102d0600480360360408110156102ae57600080fd5b8101908080359060200190929190803515159060200190929190505050610d4f565b6040518082815260200191505060405180910390f35b610335600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050610f46565b005b61033f611103565b6040518082815260200191505060405180910390f35b6103cc6004803603602081101561036b57600080fd5b810190808035906020019064010000000081111561038857600080fd5b82018360208201111561039a57600080fd5b803590602001918460208302840111640100000000831117156103bc57600080fd5b9091929391929390505050611109565b005b610404600480360360408110156103e457600080fd5b8101908080359060200190929190803590602001909291905050506111d7565b005b6104a96004803603606081101561041c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561045957600080fd5b82018360208201111561046b57600080fd5b8035906020019184602083028401116401000000008311171561048d57600080fd5b90919293919293908035151590602001909291905050506112e9565b005b6104b3611697565b60405180848152602001838152602001828152602001935050505060405180910390f35b610523600480360360408110156104ed57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117d1565b6040518082815260200191505060405180910390f35b610541611db0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61058b611dd6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d5611e19565b604051808215151515815260200191505060405180910390f35b61063b6004803603604081101561060557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e56565b6040518082815260200191505060405180910390f35b61067d6004803603602081101561066757600080fd5b8101908080359060200190929190505050612432565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c761246e565b6040518082815260200191505060405180910390f35b610773600480360360a08110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612474565b005b6107a16004803603602081101561078b57600080fd5b8101908080359060200190929190505050612783565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610825600480360360208110156107f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127bf565b005b61082f612946565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61087961296c565b005b6108bd6004803603602081101561089157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c44565b005b6108ed600480360360208110156108d557600080fd5b81019080803515159060200190929190505050612cca565b6040518082815260200191505060405180910390f35b61090b61326c565b6040518082815260200191505060405180910390f35b60375481565b603960009054906101000a900460ff1681565b600080600090505b603d80549050811015610b63576109576140de565b603c6000603d848154811061096857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015610a2757602002820191906000526020600020905b815481526020019060010190808311610a13575b505050505081526020016001820160009054906101000a900460ff166002811115610a4e57fe5b6002811115610a5957fe5b81525050905060006002811115610a6c57fe5b81602001516002811115610a7c57fe5b1415610a885750610b56565b610b52603d8381548110610a9857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373acb5906040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0857600080fd5b505afa158015610b1c573d6000803e3d6000fd5b505050506040513d6020811015610b3257600080fd5b81019080805190602001909291905050508461327290919063ffffffff16565b9250505b8080600101915050610942565b5090565b6000603960009054906101000a900460ff16610b8557819050610d24565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bef57600080fd5b505afa158015610c03573d6000803e3d6000fd5b505050506040513d6020811015610c1957600080fd5b810190808051906020019092919050505090506000610ce3603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9957600080fd5b505afa158015610cad573d6000803e3d6000fd5b505050506040513d6020811015610cc357600080fd5b8101908080519060200190929190505050836132fa90919063ffffffff16565b90506037548111610cf8578392505050610d24565b610d1f603754610d11838761334490919063ffffffff16565b6133ca90919063ffffffff16565b925050505b919050565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000603960009054906101000a900460ff16610d6d57829050610f0b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd757600080fd5b505afa158015610deb573d6000803e3d6000fd5b505050506040513d6020811015610e0157600080fd5b810190808051906020019092919050505090506000610ecb603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8157600080fd5b505afa158015610e95573d6000803e3d6000fd5b505050506040513d6020811015610eab57600080fd5b8101908080519060200190929190505050836132fa90919063ffffffff16565b90506037548111610ede57849250610f08565b610f0581610ef76037548861334490919063ffffffff16565b6133ca90919063ffffffff16565b92505b50505b8115610f3d57610f3a612710610f2c603a548461334490919063ffffffff16565b6133ca90919063ffffffff16565b90505b80905092915050565b610f4e611e19565b610fc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006002811115610fcd57fe5b603c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16600281111561102857fe5b141561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5065616b20697320657874696e6374000000000000000000000000000000000081525060200191505060405180910390fd5b80603c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908360028111156110fa57fe5b02179055505050565b603a5481565b611111611e19565b611183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008090505b828290508110156111d2576111c58383838181106111a357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16613414565b8080600101915050611189565b505050565b6111df611e19565b611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612710821115801561126557506127108111155b6112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e636f727265637420757070657220626f756e6420666f722066656500000081525060200191505060405180910390fd5b81603a8190555080603b819055505050565b6112f1611e19565b611363576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000603680549050905060008090505b84849050811015611412578185858381811061138b57fe5b9050602002013510611405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e76616c69642073797374656d20636f696e20696e6465780000000000000081525060200191505060405180910390fd5b8080600101915050611373565b506000600281111561142057fe5b603c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16600281111561147b57fe5b146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5065616b20616c7265616479206578697374730000000000000000000000000081525060200191505060405180910390fd5b603d8590806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506040518060400160405280858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508152602001600160028111156115b357fe5b815250603c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000019080519060200190611611929190614103565b5060208201518160010160006101000a81548160ff0219169083600281111561163657fe5b0217905550905050811561164d5761164c6135ba565b5b8473ffffffffffffffffffffffffffffffffffffffff167ff6c9e81b270bf53daf66ad44e8b6990ffd59f37bf63d421609dc748739d7db8c60405160405180910390a25050505050565b60008060006116a461093a565b9250600061175f603854603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b810190808051906020019092919050505061327290919063ffffffff16565b9050808411156117cb5761177c81856132fa90919063ffffffff16565b92506000603b5411156117ca576117b26127106117a4603b548661334490919063ffffffff16565b6133ca90919063ffffffff16565b91506117c782846132fa90919063ffffffff16565b92505b5b50909192565b6000808311611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f52656465656d696e67203000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6118506140de565b603c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054806020026020016040519081016040528092919081815260200182805480156118e957602002820191906000526020600020905b8154815260200190600101908083116118d5575b505050505081526020016001820160009054906101000a900460ff16600281111561191057fe5b600281111561191b57fe5b8152505090506000600281111561192e57fe5b8160200151600281111561193e57fe5b14156119b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f5065616b20697320657874696e6374000000000000000000000000000000000081525060200191505060405180910390fd5b6119bd846001610d4f565b9150603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac84866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a6857600080fd5b505af1158015611a7c573d6000803e3d6000fd5b50505050611a95826037546132fa90919063ffffffff16565b6037819055508273ffffffffffffffffffffffffffffffffffffffff167f222838db2794d11532d940e8dec38ae307ed0b63cd97c233322e221f998767a6856040518082815260200191505060405180910390a2506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5457600080fd5b505afa158015611b68573d6000803e3d6000fd5b505050506040513d6020811015611b7e57600080fd5b81019080805190602001909291905050509050603754811115611cad57603960009054906101000a900460ff16611c07577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4611c5a603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b50505050611da9565b603960009054906101000a900460ff1615611da8576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d8f57600080fd5b505af1158015611da3573d6000803e3d6000fd5b505050505b5b5092915050565b603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b01905060405180910390209050805491505090565b60003373ffffffffffffffffffffffffffffffffffffffff16611e3a611dd6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000808311611ecd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4d696e74696e672030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611ed56140de565b603c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611f6e57602002820191906000526020600020905b815481526020019060010190808311611f5a575b505050505081526020016001820160009054906101000a900460ff166002811115611f9557fe5b6002811115611fa057fe5b81525050905060016002811115611fb357fe5b81602001516002811115611fc357fe5b14612036576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5065616b20697320696e6163746976650000000000000000000000000000000081525060200191505060405180910390fd5b61203f84610b67565b9150603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156120ea57600080fd5b505af11580156120fe573d6000803e3d6000fd5b505050506121178460375461327290919063ffffffff16565b6037819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a2506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d657600080fd5b505afa1580156121ea573d6000803e3d6000fd5b505050506040513d602081101561220057600080fd5b8101908080519060200190929190505050905060375481111561232f57603960009054906101000a900460ff16612289577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b46122dc603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061242b565b603960009054906101000a900460ff161561242a576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561241157600080fd5b505af1158015612425573d6000803e3d6000fd5b505050505b5b5092915050565b6036818154811061243f57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b603b5481565b6000809054906101000a900460ff16156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f616c726561647920696e697469616c697a65640000000000000000000000000081525060200191505060405180910390fd5b60016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561257a5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156125b35750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f30206164647265737320647572696e6720696e697469616c697a6174696f6e0081525060200191505060405180910390fd5b84603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061271082111580156126fc57506127108111155b61276e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e636f727265637420757070657220626f756e6420666f722066656500000081525060200191505060405180910390fd5b81603a8190555080603b819055505050505050565b603d818154811061279057fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127c7611e19565b612839576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612942828273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156128e157600080fd5b505afa1580156128f5573d6000803e3d6000fd5b505050506040513d602081101561290b57600080fd5b81019080805190602001909291905050508373ffffffffffffffffffffffffffffffffffffffff16613ac99092919063ffffffff16565b5050565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6129746135ba565b61297c61093a565b6037819055506000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d6020811015612a1657600080fd5b81019080805190602001909291905050509050603754811115612b4557603960009054906101000a900460ff16612a9f577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4612af2603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612b2857600080fd5b505af1158015612b3c573d6000803e3d6000fd5b50505050612c41565b603960009054906101000a900460ff1615612c40576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050505b5b50565b612c4c611e19565b612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4e4f545f4f574e4552000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612cc781613b9a565b50565b6000603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4f6e6c79207374616b654c50546f6b656e00000000000000000000000000000081525060200191505060405180910390fd5b6000612d99611697565b6037600082955083965084919050555050506000821415612dbe576000915050612fa7565b8215612f7757603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612e8f57600080fd5b505af1158015612ea3573d6000803e3d6000fd5b505050506000811115612f7257603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612f5957600080fd5b505af1158015612f6d573d6000803e3d6000fd5b505050505b612fa5565b612f9e81612f908460385461327290919063ffffffff16565b61327290919063ffffffff16565b6038819055505b505b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561301157600080fd5b505afa158015613025573d6000803e3d6000fd5b505050506040513d602081101561303b57600080fd5b8101908080519060200190929190505050905060375481111561316a57603960009054906101000a900460ff166130c4577f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56001604051808215151515815260200191505060405180910390a16001603960006101000a81548160ff0219169083151502179055505b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b4613117603754846132fa90919063ffffffff16565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561314d57600080fd5b505af1158015613161573d6000803e3d6000fd5b50505050613266565b603960009054906101000a900460ff1615613265576000603960006101000a81548160ff0219169083151502179055507f9937964c2746fea3db575046572b95fa7c4c466884966529bb24b79f116e04c56000604051808215151515815260200191505060405180910390a1603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166398d078b460006040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561324c57600080fd5b505af1158015613260573d6000803e3d6000fd5b505050505b5b50919050565b60385481565b6000808284019050838110156132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061333c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cc2565b905092915050565b60008083141561335757600090506133c4565b600082840290508284828161336857fe5b04146133bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061419c6021913960400191505060405180910390fd5b809150505b92915050565b600061340c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d82565b905092915050565b60008090505b60368054905081101561350d578173ffffffffffffffffffffffffffffffffffffffff166036828154811061344b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f416464696e672061206475706c696361746520746f6b656e000000000000000081525060200191505060405180910390fd5b808060010191505061341a565b5060368190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508073ffffffffffffffffffffffffffffffffffffffff167f1a5ada183a50009e8f59e8edd0e0d2befc9ce52bc2598ae1a46b4588e84c830d60405160405180910390a250565b6060603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e87a5cd6040518163ffffffff1660e01b815260040160006040518083038186803b15801561362457600080fd5b505afa158015613638573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561366257600080fd5b810190808051604051939291908464010000000082111561368257600080fd5b8382019150602082018581111561369857600080fd5b82518660208202830111640100000000821117156136b557600080fd5b8083526020830192505050908051906020019060200280838360005b838110156136ec5780820151818401526020810190506136d1565b505050509050016040525050509050603680549050815114613776576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f496e76616c69642073797374656d20737461746500000000000000000000000081525060200191505060405180910390fd5b60606137806140de565b60008090505b603d80549050811015613a4b57603c6000603d83815481106137a457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820180548060200260200160405190810160405280929190818152602001828054801561386357602002820191906000526020600020905b81548152602001906001019080831161384f575b505050505081526020016001820160009054906101000a900460ff16600281111561388a57fe5b600281111561389557fe5b8152505091508160000151516040519080825280602002602001820160405280156138cf5781602001602082028038833980820191505090505b509250600060028111156138df57fe5b826020015160028111156138ef57fe5b14156138fa57613a3e565b60008090505b835181101561395957848360000151828151811061391a57fe5b60200260200101518151811061392c57fe5b602002602001015184828151811061394057fe5b6020026020010181815250508080600101915050613900565b50603d818154811061396757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c64f9741846040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019060200280838360005b83811015613a005780820151818401526020810190506139e5565b5050505090500192505050600060405180830381600087803b158015613a2557600080fd5b505af1158015613a39573d6000803e3d6000fd5b505050505b8080600101915050613786565b507f603c8632ef5e622de6f8d344d8a907163121a20a8ae935419f27e46f79b0b742836040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015613ab1578082015181840152602081019050613a96565b505050509050019250505060405180910390a1505050565b613b95838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613e48565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613c20576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806141766026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16613c3f611dd6565b73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600060405180807f70726f78792e6f776e6572000000000000000000000000000000000000000000815250600b019050604051809103902090508181555050565b6000838311158290613d6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d34578082015181840152602081019050613d19565b50505050905090810190601f168015613d615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613e2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613df3578082015181840152602081019050613dd8565b50505050905090810190601f168015613e205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613e3a57fe5b049050809150509392505050565b613e678273ffffffffffffffffffffffffffffffffffffffff16614093565b613ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310613f285780518252602082019150602081019050602083039250613f05565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613f8a576040519150601f19603f3d011682016040523d82523d6000602084013e613f8f565b606091505b509150915081614007576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561408d5780806020019051602081101561402657600080fd5b810190808051906020019092919050505061408c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806141bd602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156140d557506000801b8214155b92505050919050565b604051806040016040528060608152602001600060028111156140fd57fe5b81525090565b82805482825590600052602060002090810192821561413f579160200282015b8281111561413e578251825591602001919060010190614123565b5b50905061414c9190614150565b5090565b61417291905b8082111561416e576000816000905550600101614156565b5090565b9056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820a16f4e34fbf71637816092fb424e62550d6d536243fdd862315e1886df8351ae64736f6c63430005110032
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.