More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 94 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 8193399 | 2053 days ago | IN | 1.24 ETH | 0.0532557 | ||||
Transfer | 8193379 | 2053 days ago | IN | 1.3 ETH | 0.00018735 | ||||
Transfer | 8046934 | 2076 days ago | IN | 1 ETH | 0.11841242 | ||||
Transfer | 8046929 | 2076 days ago | IN | 1 ETH | 0.0004258 | ||||
Transfer | 8045034 | 2076 days ago | IN | 1.2 ETH | 0.0004258 | ||||
Transfer | 8045013 | 2076 days ago | IN | 1.2 ETH | 0.0004258 | ||||
Transfer | 8044999 | 2076 days ago | IN | 1.2 ETH | 0.0004258 | ||||
Transfer | 8044983 | 2076 days ago | IN | 1.2 ETH | 0.0004258 | ||||
Transfer | 8044901 | 2076 days ago | IN | 2.9 ETH | 0.05918879 | ||||
Rescue Tokens | 8041249 | 2077 days ago | IN | 0 ETH | 0.00116464 | ||||
Transfer | 8040766 | 2077 days ago | IN | 0.2 ETH | 0.01866104 | ||||
Transfer | 8040281 | 2077 days ago | IN | 1.1 ETH | 0.002129 | ||||
Transfer | 8040201 | 2077 days ago | IN | 1 ETH | 0.0004258 | ||||
Transfer | 8040199 | 2077 days ago | IN | 1 ETH | 0.0004258 | ||||
Transfer | 8039701 | 2077 days ago | IN | 1.1 ETH | 0.002129 | ||||
Transfer | 8039559 | 2077 days ago | IN | 1.05 ETH | 0.0061504 | ||||
Transfer | 8039544 | 2077 days ago | IN | 4.5 ETH | 0.01813885 | ||||
Transfer | 8039538 | 2077 days ago | IN | 1.09 ETH | 0.00689297 | ||||
Transfer | 8039512 | 2077 days ago | IN | 0.2 ETH | 0.01866104 | ||||
Transfer | 8039470 | 2077 days ago | IN | 0.2 ETH | 0.00347365 | ||||
Transfer | 8039447 | 2077 days ago | IN | 0.2 ETH | 0.0004258 | ||||
Transfer | 8039419 | 2077 days ago | IN | 0.2 ETH | 0.0004258 | ||||
Transfer | 8039367 | 2077 days ago | IN | 0.2 ETH | 0.01602059 | ||||
Transfer | 8039365 | 2077 days ago | IN | 1.1 ETH | 0.002129 | ||||
Transfer | 8039295 | 2077 days ago | IN | 1 ETH | 0.00053863 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
8040766 | 2077 days ago | 0.048 ETH | ||||
8040766 | 2077 days ago | 0.01 ETH | ||||
8040766 | 2077 days ago | 0.012 ETH | ||||
8039559 | 2077 days ago | 0.252 ETH | ||||
8039559 | 2077 days ago | 0.0525 ETH | ||||
8039559 | 2077 days ago | 0.063 ETH | ||||
8039544 | 2077 days ago | 0.54 ETH | ||||
8039544 | 2077 days ago | 0.09 ETH | ||||
8039544 | 2077 days ago | 0.18 ETH | ||||
8039544 | 2077 days ago | 0.225 ETH | ||||
8039544 | 2077 days ago | 0.27 ETH | ||||
8039544 | 2077 days ago | 0.27 ETH | ||||
8039538 | 2077 days ago | 0.2616 ETH | ||||
8039538 | 2077 days ago | 0.0545 ETH | ||||
8039538 | 2077 days ago | 0.0654 ETH | ||||
8039512 | 2077 days ago | 0.048 ETH | ||||
8039512 | 2077 days ago | 0.01 ETH | ||||
8039512 | 2077 days ago | 0.012 ETH | ||||
8039470 | 2077 days ago | 0.07 ETH | ||||
8039367 | 2077 days ago | 0.058 ETH | ||||
8039367 | 2077 days ago | 0.012 ETH | ||||
8039264 | 2077 days ago | 0.07 ETH | ||||
8039251 | 2077 days ago | 0.0385 ETH | ||||
8039239 | 2077 days ago | 0.24 ETH | ||||
8039239 | 2077 days ago | 0.05 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
WesionPublicSale
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-06-21 */ pragma solidity ^0.5.7; // WESION Public Sale /** * @title SafeMath for uint256 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath256 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } /** * @title SafeMath for uint16 * @dev Unsigned math operations with safety checks that revert on error. */ library SafeMath16 { /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint16 a, uint16 b) internal pure returns (uint16 c) { c = a + b; assert(c >= a); return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint16 a, uint16 b) internal pure returns (uint16) { assert(b <= a); return a - b; } /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint16 a, uint16 b) internal pure returns (uint16 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, * reverts on division by zero. */ function div(uint16 a, uint16 b) internal pure returns (uint16) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return a / b; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint16 a, uint16 b) internal pure returns (uint16) { require(b != 0); return a % b; } } /** * @title Ownable */ contract Ownable { address private _owner; address payable internal _receiver; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event ReceiverChanged(address indexed previousReceiver, address indexed newReceiver); /** * @dev The Ownable constructor sets the original `owner` of the contract * to the sender account. */ constructor () internal { _owner = msg.sender; _receiver = msg.sender; } /** * @return The address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0)); address __previousOwner = _owner; _owner = newOwner; emit OwnershipTransferred(__previousOwner, newOwner); } /** * @dev Change receiver. */ function changeReceiver(address payable newReceiver) external onlyOwner { require(newReceiver != address(0)); address __previousReceiver = _receiver; _receiver = newReceiver; emit ReceiverChanged(__previousReceiver, newReceiver); } /** * @dev Rescue compatible ERC20 Token * * @param tokenAddr ERC20 The address of the ERC20 token contract * @param receiver The address of the receiver * @param amount uint256 */ function rescueTokens(address tokenAddr, address receiver, uint256 amount) external onlyOwner { IERC20 _token = IERC20(tokenAddr); require(receiver != address(0)); uint256 balance = _token.balanceOf(address(this)); require(balance >= amount); assert(_token.transfer(receiver, amount)); } /** * @dev Withdraw ether */ function withdrawEther(address payable to, uint256 amount) external onlyOwner { require(to != address(0)); uint256 balance = address(this).balance; require(balance >= amount); to.transfer(amount); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { bool private _paused; event Paused(address account); event Unpaused(address account); constructor () internal { _paused = false; } /** * @return Returns true if the contract is paused, false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Paused."); _; } /** * @dev Called by a pauser to pause, triggers stopped state. */ function setPaused(bool state) external onlyOwner { if (_paused && !state) { _paused = false; emit Unpaused(msg.sender); } else if (!_paused && state) { _paused = true; emit Paused(msg.sender); } } } /** * @title ERC20 interface * @dev see https://eips.ethereum.org/EIPS/eip-20 */ interface IERC20 { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); } /** * @title WESION interface */ interface IWesion { function balanceOf(address owner) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function inWhitelist(address account) external view returns (bool); function referrer(address account) external view returns (address); function refCount(address account) external view returns (uint256); } /** * @title WESION Public Sale */ contract WesionPublicSale is Ownable, Pausable{ using SafeMath16 for uint16; using SafeMath256 for uint256; // WESION IWesion public WESION = IWesion(0x2c1564A74F07757765642ACef62a583B38d5A213); // Start timestamp uint32 _startTimestamp; // Audit ether price uint256 private _etherPrice; // 1 Ether = xx.xxxxxx USD, with 6 decimals // Referral rewards, 35% for 15 levels uint16 private WHITELIST_REF_REWARDS_PCT_SUM = 35; uint16[15] private WHITELIST_REF_REWARDS_PCT = [ 6, // 6% for Level.1 6, // 6% for Level.2 5, // 5% for Level.3 4, // 4% for Level.4 3, // 3% for Level.5 2, // 2% for Level.6 1, // 1% for Level.7 1, // 1% for Level.8 1, // 1% for Level.9 1, // 1% for Level.10 1, // 1% for Level.11 1, // 1% for Level.12 1, // 1% for Level.13 1, // 1% for Level.14 1 // 1% for Level.15 ]; // Wei & Gas uint72 private WEI_MIN = 0.1 ether; // 0.1 Ether Minimum uint72 private WEI_MAX = 100 ether; // 100 Ether Maximum uint72 private WEI_BONUS = 10 ether; // >10 Ether for Bonus uint24 private GAS_MIN = 3000000; // 3.0 Mwei gas Mininum uint24 private GAS_EX = 1500000; // 1.5 Mwei gas for ex // Price uint256 private WESION_USD_PRICE_START = 1000; // $ 0.00100 USD uint256 private WESION_USD_PRICE_STEP = 10; // $ + 0.00001 USD uint256 private STAGE_USD_CAP_START = 100000000; // $ 100 USD uint256 private STAGE_USD_CAP_STEP = 1000000; // $ +1 USD uint256 private STAGE_USD_CAP_MAX = 15100000000; // $ 15,100 USD uint256 private _WESIONUsdPrice = WESION_USD_PRICE_START; // Progress uint16 private STAGE_MAX = 60000; // 60,000 stages total uint16 private SEASON_MAX = 100; // 100 seasons total uint16 private SEASON_STAGES = 600; // each 600 stages is a season uint16 private _stage; uint16 private _season; // Sum uint256 private _txs; uint256 private _WESIONTxs; uint256 private _WESIONBonusTxs; uint256 private _WESIONWhitelistTxs; uint256 private _WESIONIssued; uint256 private _WESIONBonus; uint256 private _WESIONWhitelist; uint256 private _weiSold; uint256 private _weiRefRewarded; uint256 private _weiTopSales; uint256 private _weiTeam; uint256 private _weiPending; uint256 private _weiPendingTransfered; // Top-Sales uint256 private TOP_SALES_RATIO_START = 15000000; // 15%, with 8 decimals uint256 private TOP_SALES_RATIO_DISTANCE = 50000000; // 50%, with 8 decimals uint256 private _topSalesRatio = TOP_SALES_RATIO_START; // 15% + 50% x(_stage/_stageMax) // During tx bool private _inWhitelist_; uint256 private _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; uint16[] private _rewards_; address[] private _referrers_; // Audit ether price auditor mapping (address => bool) private _etherPriceAuditors; // Stage mapping (uint16 => uint256) private _stageUsdSold; mapping (uint16 => uint256) private _stageWESIONIssued; // Season mapping (uint16 => uint256) private _seasonWeiSold; mapping (uint16 => uint256) private _seasonWeiTopSales; mapping (uint16 => uint256) private _seasonWeiTopSalesTransfered; // Account mapping (address => uint256) private _accountWESIONIssued; mapping (address => uint256) private _accountWESIONBonus; mapping (address => uint256) private _accountWESIONWhitelisted; mapping (address => uint256) private _accountWeiPurchased; mapping (address => uint256) private _accountWeiRefRewarded; // Ref mapping (uint16 => address[]) private _seasonRefAccounts; mapping (uint16 => mapping (address => bool)) private _seasonHasRefAccount; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountPurchased; mapping (uint16 => mapping (address => uint256)) private _usdSeasonAccountRef; // Events event AuditEtherPriceChanged(uint256 value, address indexed account); event AuditEtherPriceAuditorChanged(address indexed account, bool state); event WESIONBonusTransfered(address indexed to, uint256 amount); event WESIONWhitelistTransfered(address indexed to, uint256 amount); event WESIONIssuedTransfered(uint16 stageIndex, address indexed to, uint256 WESIONAmount, uint256 auditEtherPrice, uint256 weiUsed); event StageClosed(uint256 _stageNumber, address indexed account); event SeasonClosed(uint16 _seasonNumber, address indexed account); event SeasonTopSalesWeiTransfered(uint16 seasonNumber, address indexed to, uint256 amount); event TeamWeiTransfered(address indexed to, uint256 amount); event PendingWeiTransfered(address indexed to, uint256 amount); /** * @dev Start timestamp. */ function startTimestamp() public view returns (uint32) { return _startTimestamp; } /** * @dev Set start timestamp. */ function setStartTimestamp(uint32 timestamp) external onlyOwner { _startTimestamp = timestamp; } /** * @dev Throws if not ether price auditor. */ modifier onlyEtherPriceAuditor() { require(_etherPriceAuditors[msg.sender]); _; } /** * @dev Set audit ether price. */ function setEtherPrice(uint256 value) external onlyEtherPriceAuditor { _etherPrice = value; emit AuditEtherPriceChanged(value, msg.sender); } /** * @dev Get ether price auditor state. */ function etherPriceAuditor(address account) public view returns (bool) { return _etherPriceAuditors[account]; } /** * @dev Get ether price auditor state. */ function setEtherPriceAuditor(address account, bool state) external onlyOwner { _etherPriceAuditors[account] = state; emit AuditEtherPriceAuditorChanged(account, state); } /** * @dev Stage WESION price in USD, by stage index. */ function stageWESIONUsdPrice(uint16 stageIndex) private view returns (uint256) { return WESION_USD_PRICE_START.add(WESION_USD_PRICE_STEP.mul(stageIndex)); } /** * @dev wei => USD */ function wei2usd(uint256 amount) private view returns (uint256) { return amount.mul(_etherPrice).div(1 ether); } /** * @dev USD => wei */ function usd2wei(uint256 amount) private view returns (uint256) { return amount.mul(1 ether).div(_etherPrice); } /** * @dev USD => WESION */ function usd2WESION(uint256 usdAmount) private view returns (uint256) { return usdAmount.mul(1000000).div(_WESIONUsdPrice); } /** * @dev USD => WESION */ function usd2WESIONByStage(uint256 usdAmount, uint16 stageIndex) public view returns (uint256) { return usdAmount.mul(1000000).div(stageWESIONUsdPrice(stageIndex)); } /** * @dev Calculate season number, by stage index. */ function calcSeason(uint16 stageIndex) private view returns (uint16) { if (stageIndex > 0) { uint16 __seasonNumber = stageIndex.div(SEASON_STAGES); if (stageIndex.mod(SEASON_STAGES) > 0) { return __seasonNumber.add(1); } return __seasonNumber; } return 1; } /** * @dev Transfer Top-Sales wei, by season number. */ function transferTopSales(uint16 seasonNumber, address payable to) external onlyOwner { uint256 __weiRemain = seasonTopSalesRemain(seasonNumber); require(to != address(0)); _seasonWeiTopSalesTransfered[seasonNumber] = _seasonWeiTopSalesTransfered[seasonNumber].add(__weiRemain); emit SeasonTopSalesWeiTransfered(seasonNumber, to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Pending remain, in wei. */ function pendingRemain() private view returns (uint256) { return _weiPending.sub(_weiPendingTransfered); } /** * @dev Transfer pending wei. */ function transferPending(address payable to) external onlyOwner { uint256 __weiRemain = pendingRemain(); require(to != address(0)); _weiPendingTransfered = _weiPendingTransfered.add(__weiRemain); emit PendingWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Transfer team wei. */ function transferTeam(address payable to) external onlyOwner { uint256 __weiRemain = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); require(to != address(0)); _weiTeam = _weiTeam.add(__weiRemain); emit TeamWeiTransfered(to, __weiRemain); to.transfer(__weiRemain); } /** * @dev Status. */ function status() public view returns (uint256 auditEtherPrice, uint16 stage, uint16 season, uint256 WESIONUsdPrice, uint256 currentTopSalesRatio, uint256 txs, uint256 WESIONTxs, uint256 WESIONBonusTxs, uint256 WESIONWhitelistTxs, uint256 WESIONIssued, uint256 WESIONBonus, uint256 WESIONWhitelist) { auditEtherPrice = _etherPrice; if (_stage > STAGE_MAX) { stage = STAGE_MAX; season = SEASON_MAX; } else { stage = _stage; season = _season; } WESIONUsdPrice = _WESIONUsdPrice; currentTopSalesRatio = _topSalesRatio; txs = _txs; WESIONTxs = _WESIONTxs; WESIONBonusTxs = _WESIONBonusTxs; WESIONWhitelistTxs = _WESIONWhitelistTxs; WESIONIssued = _WESIONIssued; WESIONBonus = _WESIONBonus; WESIONWhitelist = _WESIONWhitelist; } /** * @dev Sum. */ function sum() public view returns(uint256 weiSold, uint256 weiReferralRewarded, uint256 weiTopSales, uint256 weiTeam, uint256 weiPending, uint256 weiPendingTransfered, uint256 weiPendingRemain) { weiSold = _weiSold; weiReferralRewarded = _weiRefRewarded; weiTopSales = _weiTopSales; weiTeam = _weiTeam; weiPending = _weiPending; weiPendingTransfered = _weiPendingTransfered; weiPendingRemain = pendingRemain(); } /** * @dev Throws if gas is not enough. */ modifier enoughGas() { require(gasleft() > GAS_MIN); _; } /** * @dev Throws if not started. */ modifier onlyOnSale() { require(_startTimestamp > 0 && now > _startTimestamp, "WESION Public-Sale has not started yet."); require(_etherPrice > 0, "Audit ETH price must be greater than zero."); require(!paused(), "WESION Public-Sale is paused."); require(_stage <= STAGE_MAX, "WESION Public-Sale Closed."); _; } /** * @dev Top-Sales ratio. */ function topSalesRatio(uint16 stageIndex) private view returns (uint256) { return TOP_SALES_RATIO_START.add(TOP_SALES_RATIO_DISTANCE.mul(stageIndex).div(STAGE_MAX)); } /** * @dev USD => wei, for Top-Sales */ function usd2weiTopSales(uint256 usdAmount) private view returns (uint256) { return usd2wei(usdAmount.mul(_topSalesRatio).div(100000000)); } /** * @dev Calculate stage dollor cap, by stage index. */ function stageUsdCap(uint16 stageIndex) private view returns (uint256) { uint256 __usdCap = STAGE_USD_CAP_START.add(STAGE_USD_CAP_STEP.mul(stageIndex)); if (__usdCap > STAGE_USD_CAP_MAX) { return STAGE_USD_CAP_MAX; } return __usdCap; } /** * @dev Stage Vokdn cap, by stage index. */ function stageWESIONCap(uint16 stageIndex) private view returns (uint256) { return usd2WESIONByStage(stageUsdCap(stageIndex), stageIndex); } /** * @dev Stage status, by stage index. */ function stageStatus(uint16 stageIndex) public view returns (uint256 WESIONUsdPrice, uint256 WESIONCap, uint256 WESIONOnSale, uint256 WESIONSold, uint256 usdCap, uint256 usdOnSale, uint256 usdSold, uint256 weiTopSalesRatio) { if (stageIndex > STAGE_MAX) { return (0, 0, 0, 0, 0, 0, 0, 0); } WESIONUsdPrice = stageWESIONUsdPrice(stageIndex); WESIONSold = _stageWESIONIssued[stageIndex]; WESIONCap = stageWESIONCap(stageIndex); WESIONOnSale = WESIONCap.sub(WESIONSold); usdSold = _stageUsdSold[stageIndex]; usdCap = stageUsdCap(stageIndex); usdOnSale = usdCap.sub(usdSold); weiTopSalesRatio = topSalesRatio(stageIndex); } /** * @dev Season Top-Sales remain, in wei. */ function seasonTopSalesRemain(uint16 seasonNumber) private view returns (uint256) { return _seasonWeiTopSales[seasonNumber].sub(_seasonWeiTopSalesTransfered[seasonNumber]); } /** * @dev Season Top-Sales rewards, by season number, in wei. */ function seasonTopSalesRewards(uint16 seasonNumber) public view returns (uint256 weiSold, uint256 weiTopSales, uint256 weiTopSalesTransfered, uint256 weiTopSalesRemain) { weiSold = _seasonWeiSold[seasonNumber]; weiTopSales = _seasonWeiTopSales[seasonNumber]; weiTopSalesTransfered = _seasonWeiTopSalesTransfered[seasonNumber]; weiTopSalesRemain = seasonTopSalesRemain(seasonNumber); } /** * @dev Query account. */ function accountQuery(address account) public view returns (uint256 WESIONIssued, uint256 WESIONBonus, uint256 WESIONWhitelisted, uint256 weiPurchased, uint256 weiReferralRewarded) { WESIONIssued = _accountWESIONIssued[account]; WESIONBonus = _accountWESIONBonus[account]; WESIONWhitelisted = _accountWESIONWhitelisted[account]; weiPurchased = _accountWeiPurchased[account]; weiReferralRewarded = _accountWeiRefRewarded[account]; } /** * @dev Accounts in a specific season. */ function seasonRefAccounts(uint16 seasonNumber) public view returns (address[] memory accounts) { accounts = _seasonRefAccounts[seasonNumber]; } /** * @dev Season number => account => USD purchased. */ function usdSeasonAccountPurchased(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountPurchased[seasonNumber][account]; } /** * @dev Season number => account => referral dollors. */ function usdSeasonAccountRef(uint16 seasonNumber, address account) public view returns (uint256) { return _usdSeasonAccountRef[seasonNumber][account]; } /** * @dev constructor */ constructor () public { _etherPriceAuditors[msg.sender] = true; _stage = 0; _season = 1; } /** * @dev Receive ETH, and send WESIONs. */ function () external payable enoughGas onlyOnSale { require(msg.value >= WEI_MIN); require(msg.value <= WEI_MAX); // Set temporary variables. setTemporaryVariables(); uint256 __usdAmount = wei2usd(msg.value); uint256 __usdRemain = __usdAmount; uint256 __WESIONIssued; uint256 __WESIONBonus; uint256 __usdUsed; uint256 __weiUsed; // USD => WESION while (gasleft() > GAS_EX && __usdRemain > 0 && _stage <= STAGE_MAX) { uint256 __txWESIONIssued; (__txWESIONIssued, __usdRemain) = ex(__usdRemain); __WESIONIssued = __WESIONIssued.add(__txWESIONIssued); } // Used __usdUsed = __usdAmount.sub(__usdRemain); __weiUsed = usd2wei(__usdUsed); // Bonus 10% if (msg.value >= WEI_BONUS) { __WESIONBonus = __WESIONIssued.div(10); assert(transferWESIONBonus(__WESIONBonus)); } // Whitelisted // BUY-ONE-AND-GET-ONE-MORE-FREE if (_inWhitelist_ && __WESIONIssued > 0) { // both issued and bonus assert(transferWESIONWhitelisted(__WESIONIssued.add(__WESIONBonus))); // 35% for 15 levels sendWhitelistReferralRewards(__weiUsed); } // If wei remains, refund. if (__usdRemain > 0) { uint256 __weiRemain = usd2wei(__usdRemain); __weiUsed = msg.value.sub(__weiRemain); // Refund wei back msg.sender.transfer(__weiRemain); } // Counter if (__weiUsed > 0) { _txs = _txs.add(1); _weiSold = _weiSold.add(__weiUsed); _accountWeiPurchased[msg.sender] = _accountWeiPurchased[msg.sender].add(__weiUsed); } // Wei team uint256 __weiTeam; if (_season > SEASON_MAX) __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam); else __weiTeam = _weiSold.sub(_weiRefRewarded).sub(_weiTopSales).sub(_weiPending).sub(_weiTeam).div(0.01 ether).mul(0.01 ether); _weiTeam = _weiTeam.add(__weiTeam); _receiver.transfer(__weiTeam); // Assert finished assert(true); } /** * @dev Set temporary variables. */ function setTemporaryVariables() private { delete _referrers_; delete _rewards_; _inWhitelist_ = WESION.inWhitelist(msg.sender); _pending_ = WHITELIST_REF_REWARDS_PCT_SUM; address __cursor = msg.sender; for(uint16 i = 0; i < WHITELIST_REF_REWARDS_PCT.length; i++) { address __refAccount = WESION.referrer(__cursor); if (__cursor == __refAccount) { _rewards_.push(uint16(_pending_)); _referrers_.push(address(this)); _pending_ = 0; break; } if (WESION.refCount(__refAccount) > i) { if (!_seasonHasRefAccount[_season][__refAccount]) { _seasonRefAccounts[_season].push(__refAccount); _seasonHasRefAccount[_season][__refAccount] = true; } _pending_ = _pending_.sub(WHITELIST_REF_REWARDS_PCT[i]); _rewards_.push(WHITELIST_REF_REWARDS_PCT[i]); _referrers_.push(__refAccount); } __cursor = __refAccount; } } /** * @dev USD => WESION */ function ex(uint256 usdAmount) private returns (uint256, uint256) { uint256 __stageUsdCap = stageUsdCap(_stage); uint256 __WESIONIssued; // in stage if (_stageUsdSold[_stage].add(usdAmount) <= __stageUsdCap) { exCount(usdAmount); __WESIONIssued = usd2WESION(usdAmount); assert(transferWESIONIssued(__WESIONIssued, usdAmount)); // close stage, if stage dollor cap reached if (__stageUsdCap == _stageUsdSold[_stage]) { assert(closeStage()); } return (__WESIONIssued, 0); } // close stage uint256 __usdUsed = __stageUsdCap.sub(_stageUsdSold[_stage]); uint256 __usdRemain = usdAmount.sub(__usdUsed); exCount(__usdUsed); __WESIONIssued = usd2WESION(__usdUsed); assert(transferWESIONIssued(__WESIONIssued, __usdUsed)); assert(closeStage()); return (__WESIONIssued, __usdRemain); } /** * @dev Ex counter. */ function exCount(uint256 usdAmount) private { uint256 __weiSold = usd2wei(usdAmount); uint256 __weiTopSales = usd2weiTopSales(usdAmount); _usdSeasonAccountPurchased[_season][msg.sender] = _usdSeasonAccountPurchased[_season][msg.sender].add(usdAmount); // season => address => purchased, in USD _stageUsdSold[_stage] = _stageUsdSold[_stage].add(usdAmount); // stage sold, in USD _seasonWeiSold[_season] = _seasonWeiSold[_season].add(__weiSold); // season sold, in wei _seasonWeiTopSales[_season] = _seasonWeiTopSales[_season].add(__weiTopSales); // season Top-Sales, in wei _weiTopSales = _weiTopSales.add(__weiTopSales); // sum Top-Sales, in wei // season referral account if (_inWhitelist_) { for (uint16 i = 0; i < _rewards_.length; i++) { _usdSeasonAccountRef[_season][_referrers_[i]] = _usdSeasonAccountRef[_season][_referrers_[i]].add(usdAmount); } } } /** * @dev Transfer WESION issued. */ function transferWESIONIssued(uint256 amount, uint256 usdAmount) private returns (bool) { _WESIONTxs = _WESIONTxs.add(1); _WESIONIssued = _WESIONIssued.add(amount); _stageWESIONIssued[_stage] = _stageWESIONIssued[_stage].add(amount); _accountWESIONIssued[msg.sender] = _accountWESIONIssued[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONIssuedTransfered(_stage, msg.sender, amount, _etherPrice, usdAmount); return true; } /** * @dev Transfer WESION bonus. */ function transferWESIONBonus(uint256 amount) private returns (bool) { _WESIONBonusTxs = _WESIONBonusTxs.add(1); _WESIONBonus = _WESIONBonus.add(amount); _accountWESIONBonus[msg.sender] = _accountWESIONBonus[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONBonusTransfered(msg.sender, amount); return true; } /** * @dev Transfer WESION whitelisted. */ function transferWESIONWhitelisted(uint256 amount) private returns (bool) { _WESIONWhitelistTxs = _WESIONWhitelistTxs.add(1); _WESIONWhitelist = _WESIONWhitelist.add(amount); _accountWESIONWhitelisted[msg.sender] = _accountWESIONWhitelisted[msg.sender].add(amount); assert(WESION.transfer(msg.sender, amount)); emit WESIONWhitelistTransfered(msg.sender, amount); return true; } /** * Close current stage. */ function closeStage() private returns (bool) { emit StageClosed(_stage, msg.sender); _stage = _stage.add(1); _WESIONUsdPrice = stageWESIONUsdPrice(_stage); _topSalesRatio = topSalesRatio(_stage); // Close current season uint16 __seasonNumber = calcSeason(_stage); if (_season < __seasonNumber) { emit SeasonClosed(_season, msg.sender); _season = __seasonNumber; } return true; } /** * @dev Send whitelist referral rewards. */ function sendWhitelistReferralRewards(uint256 weiAmount) private { uint256 __weiRemain = weiAmount; for (uint16 i = 0; i < _rewards_.length; i++) { uint256 __weiReward = weiAmount.mul(_rewards_[i]).div(100); address payable __receiver = address(uint160(_referrers_[i])); _weiRefRewarded = _weiRefRewarded.add(__weiReward); _accountWeiRefRewarded[__receiver] = _accountWeiRefRewarded[__receiver].add(__weiReward); __weiRemain = __weiRemain.sub(__weiReward); __receiver.transfer(__weiReward); } if (_pending_ > 0) _weiPending = _weiPending.add(weiAmount.mul(_pending_).div(100)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"state","type":"bool"}],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"status","outputs":[{"name":"auditEtherPrice","type":"uint256"},{"name":"stage","type":"uint16"},{"name":"season","type":"uint16"},{"name":"WESIONUsdPrice","type":"uint256"},{"name":"currentTopSalesRatio","type":"uint256"},{"name":"txs","type":"uint256"},{"name":"WESIONTxs","type":"uint256"},{"name":"WESIONBonusTxs","type":"uint256"},{"name":"WESIONWhitelistTxs","type":"uint256"},{"name":"WESIONIssued","type":"uint256"},{"name":"WESIONBonus","type":"uint256"},{"name":"WESIONWhitelist","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"etherPriceAuditor","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"state","type":"bool"}],"name":"setEtherPriceAuditor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"setEtherPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferPending","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"stageIndex","type":"uint16"}],"name":"stageStatus","outputs":[{"name":"WESIONUsdPrice","type":"uint256"},{"name":"WESIONCap","type":"uint256"},{"name":"WESIONOnSale","type":"uint256"},{"name":"WESIONSold","type":"uint256"},{"name":"usdCap","type":"uint256"},{"name":"usdOnSale","type":"uint256"},{"name":"usdSold","type":"uint256"},{"name":"weiTopSalesRatio","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"}],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newReceiver","type":"address"}],"name":"changeReceiver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"transferTeam","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"sum","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTeam","type":"uint256"},{"name":"weiPending","type":"uint256"},{"name":"weiPendingTransfered","type":"uint256"},{"name":"weiPendingRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"usdAmount","type":"uint256"},{"name":"stageIndex","type":"uint16"}],"name":"usd2WESIONByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountRef","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"account","type":"address"}],"name":"usdSeasonAccountPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WESION","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"seasonNumber","type":"uint16"},{"name":"to","type":"address"}],"name":"transferTopSales","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"},{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonTopSalesRewards","outputs":[{"name":"weiSold","type":"uint256"},{"name":"weiTopSales","type":"uint256"},{"name":"weiTopSalesTransfered","type":"uint256"},{"name":"weiTopSalesRemain","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"timestamp","type":"uint32"}],"name":"setStartTimestamp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startTimestamp","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"accountQuery","outputs":[{"name":"WESIONIssued","type":"uint256"},{"name":"WESIONBonus","type":"uint256"},{"name":"WESIONWhitelisted","type":"uint256"},{"name":"weiPurchased","type":"uint256"},{"name":"weiReferralRewarded","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"seasonNumber","type":"uint16"}],"name":"seasonRefAccounts","outputs":[{"name":"accounts","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"AuditEtherPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":false,"name":"state","type":"bool"}],"name":"AuditEtherPriceAuditorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WESIONBonusTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WESIONWhitelistTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stageIndex","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"WESIONAmount","type":"uint256"},{"indexed":false,"name":"auditEtherPrice","type":"uint256"},{"indexed":false,"name":"weiUsed","type":"uint256"}],"name":"WESIONIssuedTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stageNumber","type":"uint256"},{"indexed":true,"name":"account","type":"address"}],"name":"StageClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_seasonNumber","type":"uint16"},{"indexed":true,"name":"account","type":"address"}],"name":"SeasonClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"seasonNumber","type":"uint16"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"SeasonTopSalesWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TeamWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PendingWeiTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousReceiver","type":"address"},{"indexed":true,"name":"newReceiver","type":"address"}],"name":"ReceiverChanged","type":"event"}]
Contract Creation Code
600280546001600160a01b031916732c1564a74f07757765642acef62a583b38d5a2131781556004805461ffff191660231781556102606040526006608081815260a091909152600560c081905260e0929092526003610100526101209290925260016101408190526101608190526101808190526101a08190526101c08190526101e081905261020081905261022081905261024052620000a391600f62000233565b506006805467016345785d8a00006001600160481b031990911617600160481b600160901b03191671056bc75e2d6310000000000000000000000017600160901b600160d81b031916798ac7230489e8000000000000000000000000000000000000000017600160d81b62ffffff0219167d2dc6c0000000000000000000000000000000000000000000000000000000179055600780546216e36062ffffff199091161790556103e86008819055600a60098190556305f5e1009055620f4240600b5564038407b700600c55600d55600e805461ea6061ffff199091161763ffff00001916626400001765ffff0000000019166502580000000017905562e4e1c0601c8190556302faf080601d55601e5560045461ffff16602055348015620001cb57600080fd5b5060008054336001600160a01b031991821681178355600180549092168117600160a01b60ff0219168255825260236020526040909120805460ff19169091179055600e80546801000000000000000069ffffffff00000000000019909116179055620002f4565b600183019183908215620002bd5791602002820160005b838211156200028b57835183826101000a81548161ffff021916908360ff16021790555092602001926002016020816001010492830192600103026200024a565b8015620002bb5782816101000a81549061ffff02191690556002016020816001010492830192600103026200028b565b505b50620002cb929150620002cf565b5090565b620002f191905b80821115620002cb57805461ffff19168155600101620002d6565b90565b61296f80620003046000396000f3fe6080604052600436106101665760003560e01c80638da5cb5b116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610b13578063f2e2934114610b41578063f2fde38b14610b9f578063f5f56b7a14610bd257610166565b8063cea9d26f14610a4c578063d4eeb6ad14610a8f578063de8f246c14610ae357610166565b80638da5cb5b14610909578063aab79a681461093a578063ac5cf93414610980578063b7352bee146109bd578063b92693a1146109fa578063c225135d14610a0f57610166565b806348d3297c1161012357806348d3297c14610799578063522f681514610808578063547e3f06146108415780635c975abb1461087457806363b26e7614610889578063853255cc146108bc57610166565b806316c38b3c14610611578063200d2ed21461063f578063223e8eff146106ba57806322c8c2cc14610701578063271879911461073c578063294b2ed014610766575b600654600160d81b900462ffffff165a1161018057600080fd5b600254600160a01b900463ffffffff16158015906101ac5750600254600160a01b900463ffffffff1642115b6101ea57604051600160e51b62461bcd02815260040180806020018281038252602781526020018061291d6027913960400191505060405180910390fd5b60006003541161022e57604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806128f3602a913960400191505060405180910390fd5b610236610c50565b1561028b5760408051600160e51b62461bcd02815260206004820152601d60248201527f574553494f4e205075626c69632d53616c65206973207061757365642e000000604482015290519081900360640190fd5b600e5461ffff808216600160301b9092041611156102f35760408051600160e51b62461bcd02815260206004820152601a60248201527f574553494f4e205075626c69632d53616c6520436c6f7365642e000000000000604482015290519081900360640190fd5b60065468ffffffffffffffffff1634101561030d57600080fd5b6006546901000000000000000000900468ffffffffffffffffff1634111561033457600080fd5b61033c610c61565b600061034734611087565b90508060008080805b60075462ffffff165a1180156103665750600085115b80156103825750600e5461ffff808216600160301b9092041611155b156103ae576000610392866110b2565b965090506103a6858263ffffffff6111e316565b945050610350565b6103be868663ffffffff6111f616565b91506103c982611208565b600654909150600160901b900468ffffffffffffffffff163410610409576103f884600a63ffffffff61122a16565b92506104038361126b565b61040957fe5b601f5460ff16801561041b5750600084115b1561044757610438610433858563ffffffff6111e316565b611393565b61043e57fe5b610447816114bb565b841561049d57600061045886611208565b905061046a348263ffffffff6111f616565b604051909250339082156108fc029083906000818181858888f1935050505015801561049a573d6000803e3d6000fd5b50505b801561050157600f546104b790600163ffffffff6111e316565b600f556016546104cd908263ffffffff6111e316565b601655336000908152602c60205260409020546104f0908263ffffffff6111e316565b336000908152602c60205260409020555b600e5460009061ffff6201000082048116600160401b90920416111561055d5761055660195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b9063ffffffff6111f616565b90506105b7565b6105b4662386f26fc100006105a8662386f26fc1000061059c60195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b9063ffffffff61122a16565b9063ffffffff61162516565b90505b6019546105ca908263ffffffff6111e316565b6019556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610607573d6000803e3d6000fd5b5050505050505050005b34801561061d57600080fd5b5061063d6004803603602081101561063457600080fd5b5035151561164a565b005b34801561064b57600080fd5b5061065461172e565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106c657600080fd5b506106ed600480360360208110156106dd57600080fd5b50356001600160a01b03166117d2565b604080519115158252519081900360200190f35b34801561070d57600080fd5b5061063d6004803603604081101561072457600080fd5b506001600160a01b03813516906020013515156117f0565b34801561074857600080fd5b5061063d6004803603602081101561075f57600080fd5b5035611867565b34801561077257600080fd5b5061063d6004803603602081101561078957600080fd5b50356001600160a01b03166118c1565b3480156107a557600080fd5b506107c7600480360360208110156107bc57600080fd5b503561ffff16611987565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561081457600080fd5b5061063d6004803603604081101561082b57600080fd5b506001600160a01b038135169060200135611a5a565b34801561084d57600080fd5b5061063d6004803603602081101561086457600080fd5b50356001600160a01b0316611acf565b34801561088057600080fd5b506106ed610c50565b34801561089557600080fd5b5061063d600480360360208110156108ac57600080fd5b50356001600160a01b0316611b4b565b3480156108c857600080fd5b506108d1611c2d565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561091557600080fd5b5061091e611c54565b604080516001600160a01b039092168252519081900360200190f35b34801561094657600080fd5b5061096e6004803603604081101561095d57600080fd5b508035906020013561ffff16611c63565b60408051918252519081900360200190f35b34801561098c57600080fd5b5061096e600480360360408110156109a357600080fd5b50803561ffff1690602001356001600160a01b0316611c8b565b3480156109c957600080fd5b5061096e600480360360408110156109e057600080fd5b50803561ffff1690602001356001600160a01b0316611cb9565b348015610a0657600080fd5b5061091e611ce7565b348015610a1b57600080fd5b5061063d60048036036040811015610a3257600080fd5b50803561ffff1690602001356001600160a01b0316611cf6565b348015610a5857600080fd5b5061063d60048036036060811015610a6f57600080fd5b506001600160a01b03813581169160208101359091169060400135611de2565b348015610a9b57600080fd5b50610abd60048036036020811015610ab257600080fd5b503561ffff16611f2e565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610aef57600080fd5b5061063d60048036036020811015610b0657600080fd5b503563ffffffff16611f6a565b348015610b1f57600080fd5b50610b28611fb8565b6040805163ffffffff9092168252519081900360200190f35b348015610b4d57600080fd5b50610b7460048036036020811015610b6457600080fd5b50356001600160a01b0316611fcb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bab57600080fd5b5061063d60048036036020811015610bc257600080fd5b50356001600160a01b031661200f565b348015610bde57600080fd5b50610c0060048036036020811015610bf557600080fd5b503561ffff16612089565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c3c578181015183820152602001610c24565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610c6d60226000612895565b610c79602160006128b3565b60025460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051601f805460ff191691151591909117905560045461ffff166020553360005b600f8161ffff1610156110835760025460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d6020811015610d9d57600080fd5b505190506001600160a01b038381169082161415610e5b5750602080546021805460018082019092557f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060108204018054600f9092166002026101000a61ffff8181021990931692909416939093021790915560228054918201815560009081527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5109091018054306001600160a01b03199091161790559055611083565b60025460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610eb257600080fd5b505afa158015610ec6573d6000803e3d6000fd5b505050506040513d6020811015610edc57600080fd5b5051111561107957600e54600160401b900461ffff166000908152602f602090815260408083206001600160a01b038516845290915290205460ff16610f9457600e805461ffff600160401b9182900481166000908152602e602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b031990911681179091559654959095049093168252602f815282822094825293909352909120805460ff191690911790555b610fca60058361ffff16600f8110610fa857fe5b60108104919091015460205491600f166002026101000a900461ffff166111f6565b6020556021600561ffff8416600f8110610fe057fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556022805491820181559091527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b0319166001600160a01b0383161790555b9150600101610d12565b5050565b60006110aa670de0b6b3a764000061059c6003548561162590919063ffffffff16565b90505b919050565b60008060006110d0600e60069054906101000a900461ffff166120fa565b600e54600160301b900461ffff166000908152602460205260408120549192509082906110fd90876111e3565b116111655761110b8561213e565b6111148561237f565b9050611120818661239c565b61112657fe5b600e54600160301b900461ffff166000908152602460205260409020548214156111585761115261252a565b61115857fe5b9250600091506111de9050565b600e54600160301b900461ffff1660009081526024602052604081205461118d9084906111f6565b905060006111a1878363ffffffff6111f616565b90506111ac8261213e565b6111b58261237f565b92506111c1838361239c565b6111c757fe5b6111cf61252a565b6111d557fe5b91945090925050505b915091565b818101828110156111f057fe5b92915050565b60008282111561120257fe5b50900390565b6003546000906110aa9061059c84670de0b6b3a764000063ffffffff61162516565b600080821161123557fe5b600082848161124057fe5b04905082848161124c57fe5b0681840201841461125957fe5b82848161126257fe5b04949350505050565b60115460009061128290600163ffffffff6111e316565b601155601454611298908363ffffffff6111e316565b601455336000908152602a60205260409020546112bb908363ffffffff6111e316565b336000818152602a60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506040513d602081101561134d57600080fd5b505161135557fe5b60408051838152905133917f8cef011d049c0be8d14f16155c3f72d75dac8e53b3ef9f891271bf21e4f2ad59919081900360200190a2506001919050565b6012546000906113aa90600163ffffffff6111e316565b6012556015546113c0908363ffffffff6111e316565b601555336000908152602b60205260409020546113e3908363ffffffff6111e316565b336000818152602b60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b505050506040513d602081101561147557600080fd5b505161147d57fe5b60408051838152905133917f9ad543bbf8e55db3c0825f34dfd2be0bb9c9fd5ad3dfb31fa72fed925d7706a2919081900360200190a2506001919050565b8060005b60215461ffff821610156115e957600061150f606461059c60218561ffff16815481106114e857fe5b600091825260209091206010820401548891600f166002026101000a900461ffff16611625565b9050600060228361ffff168154811061152457fe5b6000918252602090912001546017546001600160a01b039091169150611550908363ffffffff6111e316565b6017556001600160a01b0381166000908152602d602052604090205461157c908363ffffffff6111e316565b6001600160a01b0382166000908152602d60205260409020556115a5848363ffffffff6111f616565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156115de573d6000803e3d6000fd5b5050506001016114bf565b50602054156110835761161e61160f606461059c6020548661162590919063ffffffff16565b601a549063ffffffff6111e316565b601a555050565b600082611634575060006111f0565b508181028183828161164257fe5b04146111f057fe5b6000546001600160a01b0316331461166157600080fd5b600154600160a01b900460ff168015611678575080155b156116c55760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a161172b565b600154600160a01b900460ff161580156116dc5750805b1561172b5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600354600e54600090819081908190819081908190819081908190819061ffff808216600160301b90920416111561177a57600e5461ffff8082169c5062010000909104169950611797565b600e5461ffff600160301b820481169c50600160401b9091041699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6001600160a01b031660009081526023602052604090205460ff1690565b6000546001600160a01b0316331461180757600080fd5b6001600160a01b038216600081815260236020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526023602052604090205460ff1661188357600080fd5b600381905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b031633146118d857600080fd5b60006118e2612679565b90506001600160a01b0382166118f757600080fd5b601b5461190a908263ffffffff6111e316565b601b556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611982573d6000803e3d6000fd5b505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff1611156119d057506000965086955085945084935083925082915081905080611a4f565b6119d989612697565b61ffff8a1660009081526025602052604090205490985094506119fb896126c4565b9650611a0d878663ffffffff6111f616565b61ffff8a166000908152602460205260409020549096509150611a2f896120fa565b9350611a41848363ffffffff6111f616565b9250611a4c896126d8565b90505b919395975091939597565b6000546001600160a01b03163314611a7157600080fd5b6001600160a01b038216611a8457600080fd5b303181811015611a9357600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611ac9573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611ae657600080fd5b6001600160a01b038116611af957600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611b6257600080fd5b6000611b8d60195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b90506001600160a01b038216611ba257600080fd5b601954611bb5908263ffffffff6111e316565b6019556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611982573d6000803e3d6000fd5b601654601754601854601954601a54601b546000611c49612679565b905090919293949596565b6000546001600160a01b031690565b6000611c84611c7183612697565b61059c85620f424063ffffffff61162516565b9392505050565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526030602090815260408083206001600160a01b038516845290915290205492915050565b6002546001600160a01b031681565b6000546001600160a01b03163314611d0d57600080fd5b6000611d1883612710565b90506001600160a01b038216611d2d57600080fd5b61ffff8316600090815260286020526040902054611d51908263ffffffff6111e316565b61ffff841660008181526028602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ac9573d6000803e3d6000fd5b6000546001600160a01b03163314611df957600080fd5b826001600160a01b038316611e0d57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611e5a57600080fd5b505afa158015611e6e573d6000803e3d6000fd5b505050506040513d6020811015611e8457600080fd5b5051905082811015611e9557600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ef557600080fd5b505af1158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b5051611f2757fe5b5050505050565b61ffff811660009081526026602090815260408083205460278352818420546028909352908320549092611f6185612710565b90509193509193565b6000546001600160a01b03163314611f8157600080fd5b6002805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600254600160a01b900463ffffffff1690565b6001600160a01b0316600090815260296020908152604080832054602a835281842054602b845282852054602c855283862054602d90955292909420549094919291565b6000546001600160a01b0316331461202657600080fd5b6001600160a01b03811661203957600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602e60209081526040918290208054835181840281018401909452808452606093928301828280156120ee57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120d0575b50505050509050919050565b6000806121286121198461ffff16600b5461162590919063ffffffff16565b600a549063ffffffff6111e316565b9050600c548111156110aa575050600c546110ad565b600061214982611208565b905060006121568361273e565b600e54600160401b900461ffff16600090815260306020908152604080832033845290915290205490915061218b90846111e3565b600e805461ffff600160401b909104811660009081526030602090815260408083203384528252808320959095559254600160301b90049091168152602490915220546121de908463ffffffff6111e316565b600e805461ffff600160301b90910481166000908152602460209081526040808320959095559254600160401b9004909116815260269091522054612229908363ffffffff6111e316565b600e805461ffff600160401b91829004811660009081526026602090815260408083209690965593549290920416815260279091522054612270908263ffffffff6111e316565b600e54600160401b900461ffff1660009081526027602052604090205560185461229a90826111e3565b601855601f5460ff16156119825760005b60215461ffff82161015611ac957600e5461ffff600160401b909104811660009081526031602052604081206022805461232094899492919087169081106122ef57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff6111e316565b600e5461ffff600160401b90910481166000908152603160205260408120602280549193909190861690811061235257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556001016122ab565b600d546000906110aa9061059c84620f424063ffffffff61162516565b6010546000906123b390600163ffffffff6111e316565b6010556013546123c9908463ffffffff6111e316565b601355600e54600160301b900461ffff166000908152602560205260409020546123f390846111e3565b600e54600160301b900461ffff1660009081526025602090815260408083209390935533825260299052205461242990846111e3565b336000818152602960209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561249157600080fd5b505af11580156124a5573d6000803e3d6000fd5b505050506040513d60208110156124bb57600080fd5b50516124c357fe5b600e546003546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f6157a4b729216e44c36dedcad906c31c6808c4c80ea68ecddf83aa5c0066fa0b919081900360800190a250600192915050565b600e5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600e5461258990600160301b900461ffff166001612765565b600e805467ffff0000000000001916600160301b61ffff938416810291909117918290556125b992910416612697565b600d55600e546125d390600160301b900461ffff166126d8565b601e55600e546000906125f090600160301b900461ffff16612779565b600e5490915061ffff808316600160401b90920416101561267157600e546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600e805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b6000612692601b54601a546111f690919063ffffffff16565b905090565b60006110aa6126b58361ffff1660095461162590919063ffffffff16565b6008549063ffffffff6111e316565b60006110aa6126d2836120fa565b83611c63565b600e54601d546000916110aa916127019161ffff9081169161059c91871663ffffffff61162516565b601c549063ffffffff6111e316565b61ffff811660009081526028602090815260408083205460279092528220546110aa9163ffffffff6111f616565b60006110aa6127606305f5e10061059c601e548661162590919063ffffffff16565b611208565b81810161ffff80841690821610156111f057fe5b600061ffff82161561280057600e546000906127aa9061ffff8581169164010000000090041663ffffffff61280816565b600e549091506000906127d29061ffff8681169164010000000090041663ffffffff61286c16565b61ffff1611156127f9576127f161ffff8216600163ffffffff61276516565b9150506110ad565b90506110ad565b506001919050565b6000808261ffff161161281757fe5b60008261ffff168461ffff168161282a57fe5b0461ffff1690508261ffff168461ffff168161284257fe5b0661ffff16818461ffff1602018461ffff161461285b57fe5b8261ffff168461ffff168161126257fe5b600061ffff821661287c57600080fd5b8161ffff168361ffff168161288d57fe5b069392505050565b508054600082559060005260206000209081019061172b91906128d4565b50805460008255600f01601090049060005260206000209081019061172b91905b610c5e91905b808211156128ee57600081556001016128da565b509056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e574553494f4e205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a723058208b4d451d67920d625330bb0825b0ff3928593b8100fedbe3b6d12957c0883d780029
Deployed Bytecode
0x6080604052600436106101665760003560e01c80638da5cb5b116100d1578063cea9d26f1161008a578063e6fd48bc11610064578063e6fd48bc14610b13578063f2e2934114610b41578063f2fde38b14610b9f578063f5f56b7a14610bd257610166565b8063cea9d26f14610a4c578063d4eeb6ad14610a8f578063de8f246c14610ae357610166565b80638da5cb5b14610909578063aab79a681461093a578063ac5cf93414610980578063b7352bee146109bd578063b92693a1146109fa578063c225135d14610a0f57610166565b806348d3297c1161012357806348d3297c14610799578063522f681514610808578063547e3f06146108415780635c975abb1461087457806363b26e7614610889578063853255cc146108bc57610166565b806316c38b3c14610611578063200d2ed21461063f578063223e8eff146106ba57806322c8c2cc14610701578063271879911461073c578063294b2ed014610766575b600654600160d81b900462ffffff165a1161018057600080fd5b600254600160a01b900463ffffffff16158015906101ac5750600254600160a01b900463ffffffff1642115b6101ea57604051600160e51b62461bcd02815260040180806020018281038252602781526020018061291d6027913960400191505060405180910390fd5b60006003541161022e57604051600160e51b62461bcd02815260040180806020018281038252602a8152602001806128f3602a913960400191505060405180910390fd5b610236610c50565b1561028b5760408051600160e51b62461bcd02815260206004820152601d60248201527f574553494f4e205075626c69632d53616c65206973207061757365642e000000604482015290519081900360640190fd5b600e5461ffff808216600160301b9092041611156102f35760408051600160e51b62461bcd02815260206004820152601a60248201527f574553494f4e205075626c69632d53616c6520436c6f7365642e000000000000604482015290519081900360640190fd5b60065468ffffffffffffffffff1634101561030d57600080fd5b6006546901000000000000000000900468ffffffffffffffffff1634111561033457600080fd5b61033c610c61565b600061034734611087565b90508060008080805b60075462ffffff165a1180156103665750600085115b80156103825750600e5461ffff808216600160301b9092041611155b156103ae576000610392866110b2565b965090506103a6858263ffffffff6111e316565b945050610350565b6103be868663ffffffff6111f616565b91506103c982611208565b600654909150600160901b900468ffffffffffffffffff163410610409576103f884600a63ffffffff61122a16565b92506104038361126b565b61040957fe5b601f5460ff16801561041b5750600084115b1561044757610438610433858563ffffffff6111e316565b611393565b61043e57fe5b610447816114bb565b841561049d57600061045886611208565b905061046a348263ffffffff6111f616565b604051909250339082156108fc029083906000818181858888f1935050505015801561049a573d6000803e3d6000fd5b50505b801561050157600f546104b790600163ffffffff6111e316565b600f556016546104cd908263ffffffff6111e316565b601655336000908152602c60205260409020546104f0908263ffffffff6111e316565b336000908152602c60205260409020555b600e5460009061ffff6201000082048116600160401b90920416111561055d5761055660195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b9063ffffffff6111f616565b90506105b7565b6105b4662386f26fc100006105a8662386f26fc1000061059c60195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b9063ffffffff61122a16565b9063ffffffff61162516565b90505b6019546105ca908263ffffffff6111e316565b6019556001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610607573d6000803e3d6000fd5b5050505050505050005b34801561061d57600080fd5b5061063d6004803603602081101561063457600080fd5b5035151561164a565b005b34801561064b57600080fd5b5061065461172e565b604080519c8d5261ffff9b8c1660208e015299909a168b8a015260608b019790975260808a019590955260a089019390935260c088019190915260e087015261010086015261012085015261014084015261016083019190915251908190036101800190f35b3480156106c657600080fd5b506106ed600480360360208110156106dd57600080fd5b50356001600160a01b03166117d2565b604080519115158252519081900360200190f35b34801561070d57600080fd5b5061063d6004803603604081101561072457600080fd5b506001600160a01b03813516906020013515156117f0565b34801561074857600080fd5b5061063d6004803603602081101561075f57600080fd5b5035611867565b34801561077257600080fd5b5061063d6004803603602081101561078957600080fd5b50356001600160a01b03166118c1565b3480156107a557600080fd5b506107c7600480360360208110156107bc57600080fd5b503561ffff16611987565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561081457600080fd5b5061063d6004803603604081101561082b57600080fd5b506001600160a01b038135169060200135611a5a565b34801561084d57600080fd5b5061063d6004803603602081101561086457600080fd5b50356001600160a01b0316611acf565b34801561088057600080fd5b506106ed610c50565b34801561089557600080fd5b5061063d600480360360208110156108ac57600080fd5b50356001600160a01b0316611b4b565b3480156108c857600080fd5b506108d1611c2d565b604080519788526020880196909652868601949094526060860192909252608085015260a084015260c0830152519081900360e00190f35b34801561091557600080fd5b5061091e611c54565b604080516001600160a01b039092168252519081900360200190f35b34801561094657600080fd5b5061096e6004803603604081101561095d57600080fd5b508035906020013561ffff16611c63565b60408051918252519081900360200190f35b34801561098c57600080fd5b5061096e600480360360408110156109a357600080fd5b50803561ffff1690602001356001600160a01b0316611c8b565b3480156109c957600080fd5b5061096e600480360360408110156109e057600080fd5b50803561ffff1690602001356001600160a01b0316611cb9565b348015610a0657600080fd5b5061091e611ce7565b348015610a1b57600080fd5b5061063d60048036036040811015610a3257600080fd5b50803561ffff1690602001356001600160a01b0316611cf6565b348015610a5857600080fd5b5061063d60048036036060811015610a6f57600080fd5b506001600160a01b03813581169160208101359091169060400135611de2565b348015610a9b57600080fd5b50610abd60048036036020811015610ab257600080fd5b503561ffff16611f2e565b604080519485526020850193909352838301919091526060830152519081900360800190f35b348015610aef57600080fd5b5061063d60048036036020811015610b0657600080fd5b503563ffffffff16611f6a565b348015610b1f57600080fd5b50610b28611fb8565b6040805163ffffffff9092168252519081900360200190f35b348015610b4d57600080fd5b50610b7460048036036020811015610b6457600080fd5b50356001600160a01b0316611fcb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b348015610bab57600080fd5b5061063d60048036036020811015610bc257600080fd5b50356001600160a01b031661200f565b348015610bde57600080fd5b50610c0060048036036020811015610bf557600080fd5b503561ffff16612089565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610c3c578181015183820152602001610c24565b505050509050019250505060405180910390f35b600154600160a01b900460ff165b90565b610c6d60226000612895565b610c79602160006128b3565b60025460408051600160e01b63e2aafa2102815233600482015290516001600160a01b039092169163e2aafa2191602480820192602092909190829003018186803b158015610cc757600080fd5b505afa158015610cdb573d6000803e3d6000fd5b505050506040513d6020811015610cf157600080fd5b5051601f805460ff191691151591909117905560045461ffff166020553360005b600f8161ffff1610156110835760025460408051600160e11b63167801e10281526001600160a01b03858116600483015291516000939290921691632cf003c291602480820192602092909190829003018186803b158015610d7357600080fd5b505afa158015610d87573d6000803e3d6000fd5b505050506040513d6020811015610d9d57600080fd5b505190506001600160a01b038381169082161415610e5b5750602080546021805460018082019092557f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b57060108204018054600f9092166002026101000a61ffff8181021990931692909416939093021790915560228054918201815560009081527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5109091018054306001600160a01b03199091161790559055611083565b60025460408051600160e21b633b23e57f0281526001600160a01b038481166004830152915161ffff861693929092169163ec8f95fc91602480820192602092909190829003018186803b158015610eb257600080fd5b505afa158015610ec6573d6000803e3d6000fd5b505050506040513d6020811015610edc57600080fd5b5051111561107957600e54600160401b900461ffff166000908152602f602090815260408083206001600160a01b038516845290915290205460ff16610f9457600e805461ffff600160401b9182900481166000908152602e602090815260408083208054600181810183559185528385200180546001600160a01b038a166001600160a01b031990911681179091559654959095049093168252602f815282822094825293909352909120805460ff191690911790555b610fca60058361ffff16600f8110610fa857fe5b60108104919091015460205491600f166002026101000a900461ffff166111f6565b6020556021600561ffff8416600f8110610fe057fe5b60108082049290920154835460018082018655600095865260208620948204909401805461ffff6002600f948516810261010090810a83810219909416959097160290950a9093049093169091021790556022805491820181559091527f61035b26e3e9eee00e0d72fd1ee8ddca6894550dca6916ea2ac6baa90d11e5100180546001600160a01b0319166001600160a01b0383161790555b9150600101610d12565b5050565b60006110aa670de0b6b3a764000061059c6003548561162590919063ffffffff16565b90505b919050565b60008060006110d0600e60069054906101000a900461ffff166120fa565b600e54600160301b900461ffff166000908152602460205260408120549192509082906110fd90876111e3565b116111655761110b8561213e565b6111148561237f565b9050611120818661239c565b61112657fe5b600e54600160301b900461ffff166000908152602460205260409020548214156111585761115261252a565b61115857fe5b9250600091506111de9050565b600e54600160301b900461ffff1660009081526024602052604081205461118d9084906111f6565b905060006111a1878363ffffffff6111f616565b90506111ac8261213e565b6111b58261237f565b92506111c1838361239c565b6111c757fe5b6111cf61252a565b6111d557fe5b91945090925050505b915091565b818101828110156111f057fe5b92915050565b60008282111561120257fe5b50900390565b6003546000906110aa9061059c84670de0b6b3a764000063ffffffff61162516565b600080821161123557fe5b600082848161124057fe5b04905082848161124c57fe5b0681840201841461125957fe5b82848161126257fe5b04949350505050565b60115460009061128290600163ffffffff6111e316565b601155601454611298908363ffffffff6111e316565b601455336000908152602a60205260409020546112bb908363ffffffff6111e316565b336000818152602a60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506040513d602081101561134d57600080fd5b505161135557fe5b60408051838152905133917f8cef011d049c0be8d14f16155c3f72d75dac8e53b3ef9f891271bf21e4f2ad59919081900360200190a2506001919050565b6012546000906113aa90600163ffffffff6111e316565b6012556015546113c0908363ffffffff6111e316565b601555336000908152602b60205260409020546113e3908363ffffffff6111e316565b336000818152602b60209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840187905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561144b57600080fd5b505af115801561145f573d6000803e3d6000fd5b505050506040513d602081101561147557600080fd5b505161147d57fe5b60408051838152905133917f9ad543bbf8e55db3c0825f34dfd2be0bb9c9fd5ad3dfb31fa72fed925d7706a2919081900360200190a2506001919050565b8060005b60215461ffff821610156115e957600061150f606461059c60218561ffff16815481106114e857fe5b600091825260209091206010820401548891600f166002026101000a900461ffff16611625565b9050600060228361ffff168154811061152457fe5b6000918252602090912001546017546001600160a01b039091169150611550908363ffffffff6111e316565b6017556001600160a01b0381166000908152602d602052604090205461157c908363ffffffff6111e316565b6001600160a01b0382166000908152602d60205260409020556115a5848363ffffffff6111f616565b6040519094506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156115de573d6000803e3d6000fd5b5050506001016114bf565b50602054156110835761161e61160f606461059c6020548661162590919063ffffffff16565b601a549063ffffffff6111e316565b601a555050565b600082611634575060006111f0565b508181028183828161164257fe5b04146111f057fe5b6000546001600160a01b0316331461166157600080fd5b600154600160a01b900460ff168015611678575080155b156116c55760018054600160a01b60ff02191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a161172b565b600154600160a01b900460ff161580156116dc5750805b1561172b5760018054600160a01b60ff021916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a15b50565b600354600e54600090819081908190819081908190819081908190819061ffff808216600160301b90920416111561177a57600e5461ffff8082169c5062010000909104169950611797565b600e5461ffff600160301b820481169c50600160401b9091041699505b600d549850601e549750600f549650601054955060115494506012549350601354925060145491506015549050909192939495969798999a9b565b6001600160a01b031660009081526023602052604090205460ff1690565b6000546001600160a01b0316331461180757600080fd5b6001600160a01b038216600081815260236020908152604091829020805460ff1916851515908117909155825190815291517f7309a1bee0ae3b528b2e9f11ab2abd82b54426646b40c5bef678f09554bd7c8f9281900390910190a25050565b3360009081526023602052604090205460ff1661188357600080fd5b600381905560408051828152905133917f4c93251017d1829354b31aa6cb37ab6ec1b2af6a073553f6073a7a3420cf7393919081900360200190a250565b6000546001600160a01b031633146118d857600080fd5b60006118e2612679565b90506001600160a01b0382166118f757600080fd5b601b5461190a908263ffffffff6111e316565b601b556040805182815290516001600160a01b038416917ffcd200d7cba84a55eb61ba9209300062477f6f08297653f398fa5489b65a1704919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611982573d6000803e3d6000fd5b505050565b600080600080600080600080600e60009054906101000a900461ffff1661ffff168961ffff1611156119d057506000965086955085945084935083925082915081905080611a4f565b6119d989612697565b61ffff8a1660009081526025602052604090205490985094506119fb896126c4565b9650611a0d878663ffffffff6111f616565b61ffff8a166000908152602460205260409020549096509150611a2f896120fa565b9350611a41848363ffffffff6111f616565b9250611a4c896126d8565b90505b919395975091939597565b6000546001600160a01b03163314611a7157600080fd5b6001600160a01b038216611a8457600080fd5b303181811015611a9357600080fd5b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611ac9573d6000803e3d6000fd5b50505050565b6000546001600160a01b03163314611ae657600080fd5b6001600160a01b038116611af957600080fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fd36aafedb017e43b79d3cf6aa1987d3fbb9fff33e1738c71dbf6b2abaadbded090600090a35050565b6000546001600160a01b03163314611b6257600080fd5b6000611b8d60195461054a601a5461054a60185461054a6017546016546111f690919063ffffffff16565b90506001600160a01b038216611ba257600080fd5b601954611bb5908263ffffffff6111e316565b6019556040805182815290516001600160a01b038416917fe4de4c8dc6ab2404c805abf5db58633d76fc08b6c8b2c0a34d3a47bfb73663bf919081900360200190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611982573d6000803e3d6000fd5b601654601754601854601954601a54601b546000611c49612679565b905090919293949596565b6000546001600160a01b031690565b6000611c84611c7183612697565b61059c85620f424063ffffffff61162516565b9392505050565b61ffff821660009081526031602090815260408083206001600160a01b038516845290915290205492915050565b61ffff821660009081526030602090815260408083206001600160a01b038516845290915290205492915050565b6002546001600160a01b031681565b6000546001600160a01b03163314611d0d57600080fd5b6000611d1883612710565b90506001600160a01b038216611d2d57600080fd5b61ffff8316600090815260286020526040902054611d51908263ffffffff6111e316565b61ffff841660008181526028602090815260409182902093909355805191825291810183905281516001600160a01b038516927f69ccd39c099e91512b4f9c8d1664c05f38430681d4d594a1deec4ace4e7a6e0d928290030190a26040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ac9573d6000803e3d6000fd5b6000546001600160a01b03163314611df957600080fd5b826001600160a01b038316611e0d57600080fd5b60408051600160e01b6370a0823102815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015611e5a57600080fd5b505afa158015611e6e573d6000803e3d6000fd5b505050506040513d6020811015611e8457600080fd5b5051905082811015611e9557600080fd5b816001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611ef557600080fd5b505af1158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b5051611f2757fe5b5050505050565b61ffff811660009081526026602090815260408083205460278352818420546028909352908320549092611f6185612710565b90509193509193565b6000546001600160a01b03163314611f8157600080fd5b6002805463ffffffff909216600160a01b0277ffffffff000000000000000000000000000000000000000019909216919091179055565b600254600160a01b900463ffffffff1690565b6001600160a01b0316600090815260296020908152604080832054602a835281842054602b845282852054602c855283862054602d90955292909420549094919291565b6000546001600160a01b0316331461202657600080fd5b6001600160a01b03811661203957600080fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61ffff81166000908152602e60209081526040918290208054835181840281018401909452808452606093928301828280156120ee57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116120d0575b50505050509050919050565b6000806121286121198461ffff16600b5461162590919063ffffffff16565b600a549063ffffffff6111e316565b9050600c548111156110aa575050600c546110ad565b600061214982611208565b905060006121568361273e565b600e54600160401b900461ffff16600090815260306020908152604080832033845290915290205490915061218b90846111e3565b600e805461ffff600160401b909104811660009081526030602090815260408083203384528252808320959095559254600160301b90049091168152602490915220546121de908463ffffffff6111e316565b600e805461ffff600160301b90910481166000908152602460209081526040808320959095559254600160401b9004909116815260269091522054612229908363ffffffff6111e316565b600e805461ffff600160401b91829004811660009081526026602090815260408083209690965593549290920416815260279091522054612270908263ffffffff6111e316565b600e54600160401b900461ffff1660009081526027602052604090205560185461229a90826111e3565b601855601f5460ff16156119825760005b60215461ffff82161015611ac957600e5461ffff600160401b909104811660009081526031602052604081206022805461232094899492919087169081106122ef57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549063ffffffff6111e316565b600e5461ffff600160401b90910481166000908152603160205260408120602280549193909190861690811061235257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556001016122ab565b600d546000906110aa9061059c84620f424063ffffffff61162516565b6010546000906123b390600163ffffffff6111e316565b6010556013546123c9908463ffffffff6111e316565b601355600e54600160301b900461ffff166000908152602560205260409020546123f390846111e3565b600e54600160301b900461ffff1660009081526025602090815260408083209390935533825260299052205461242990846111e3565b336000818152602960209081526040808320949094556002548451600160e01b63a9059cbb02815260048101949094526024840188905293516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561249157600080fd5b505af11580156124a5573d6000803e3d6000fd5b505050506040513d60208110156124bb57600080fd5b50516124c357fe5b600e546003546040805161ffff600160301b9094049390931683526020830186905282810191909152606082018490525133917f6157a4b729216e44c36dedcad906c31c6808c4c80ea68ecddf83aa5c0066fa0b919081900360800190a250600192915050565b600e5460408051600160301b90920461ffff1682525160009133917feb233b5b7ba017d2651d779b7619d1a70758bcd13049019e0dd121077a1e1a2f916020908290030190a2600e5461258990600160301b900461ffff166001612765565b600e805467ffff0000000000001916600160301b61ffff938416810291909117918290556125b992910416612697565b600d55600e546125d390600160301b900461ffff166126d8565b601e55600e546000906125f090600160301b900461ffff16612779565b600e5490915061ffff808316600160401b90920416101561267157600e546040805161ffff600160401b9093049290921682525133917f7d2797fdf1b9f35ccf52e7b904a608332c1db1d8c7f2ff7f28ea7f2d6f87996c919081900360200190a2600e805469ffff00000000000000001916600160401b61ffff8416021790555b600191505090565b6000612692601b54601a546111f690919063ffffffff16565b905090565b60006110aa6126b58361ffff1660095461162590919063ffffffff16565b6008549063ffffffff6111e316565b60006110aa6126d2836120fa565b83611c63565b600e54601d546000916110aa916127019161ffff9081169161059c91871663ffffffff61162516565b601c549063ffffffff6111e316565b61ffff811660009081526028602090815260408083205460279092528220546110aa9163ffffffff6111f616565b60006110aa6127606305f5e10061059c601e548661162590919063ffffffff16565b611208565b81810161ffff80841690821610156111f057fe5b600061ffff82161561280057600e546000906127aa9061ffff8581169164010000000090041663ffffffff61280816565b600e549091506000906127d29061ffff8681169164010000000090041663ffffffff61286c16565b61ffff1611156127f9576127f161ffff8216600163ffffffff61276516565b9150506110ad565b90506110ad565b506001919050565b6000808261ffff161161281757fe5b60008261ffff168461ffff168161282a57fe5b0461ffff1690508261ffff168461ffff168161284257fe5b0661ffff16818461ffff1602018461ffff161461285b57fe5b8261ffff168461ffff168161126257fe5b600061ffff821661287c57600080fd5b8161ffff168361ffff168161288d57fe5b069392505050565b508054600082559060005260206000209081019061172b91906128d4565b50805460008255600f01601090049060005260206000209081019061172b91905b610c5e91905b808211156128ee57600081556001016128da565b509056fe417564697420455448207072696365206d7573742062652067726561746572207468616e207a65726f2e574553494f4e205075626c69632d53616c6520686173206e6f742073746172746564207965742ea165627a7a723058208b4d451d67920d625330bb0825b0ff3928593b8100fedbe3b6d12957c0883d780029
Deployed Bytecode Sourcemap
7412:25689:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18874:7;;-1:-1:-1;;;18874:7:0;;;;18862:9;:19;18854:28;;;;;;19005:15;;-1:-1:-1;;;19005:15:0;;;;:19;;;;:44;;-1:-1:-1;19034:15:0;;-1:-1:-1;;;19034:15:0;;;;19028:3;:21;19005:44;18997:96;;;;-1:-1:-1;;;;;18997:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19126:1;19112:11;;:15;19104:70;;;;-1:-1:-1;;;;;19104:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19194:8;:6;:8::i;:::-;19193:9;19185:51;;;;;-1:-1:-1;;;;;19185:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19265:9;;;;;;-1:-1:-1;;;19255:6:0;;;;:19;;19247:58;;;;;-1:-1:-1;;;;;19247:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24518:7;;;;24505:9;:20;;24497:29;;;;;;24558:7;;;;;;;24545:9;:20;;24537:29;;;;;;24616:23;:21;:23::i;:::-;24650:19;24672:18;24680:9;24672:7;:18::i;:::-;24650:40;-1:-1:-1;24650:40:0;24701:19;;;;24894:252;24913:6;;;;24901:9;:18;:37;;;;;24937:1;24923:11;:15;24901:37;:60;;;;-1:-1:-1;24952:9:0;;;;;;-1:-1:-1;;;24942:6:0;;;;:19;;24901:60;24894:252;;;24978:24;25051:15;25054:11;25051:2;:15::i;:::-;25017:49;-1:-1:-1;25017:49:0;-1:-1:-1;25098:36:0;:14;25017:49;25098:36;:18;:36;:::i;:::-;25081:53;;24894:252;;;;25187:28;:11;25203;25187:28;:15;:28;:::i;:::-;25175:40;;25238:18;25246:9;25238:7;:18::i;:::-;25308:9;;25226:30;;-1:-1:-1;;;;25308:9:0;;;;25295;:22;25291:150;;25350:22;:14;25369:2;25350:22;:18;:22;:::i;:::-;25334:38;;25394:34;25414:13;25394:19;:34::i;:::-;25387:42;;;;25523:13;;;;:35;;;;;25557:1;25540:14;:18;25523:35;25519:264;;;25620:60;25646:33;:14;25665:13;25646:33;:18;:33;:::i;:::-;25620:25;:60::i;:::-;25613:68;;;;25732:39;25761:9;25732:28;:39::i;:::-;25835:15;;25831:226;;25867:19;25889:20;25897:11;25889:7;:20::i;:::-;25867:42;-1:-1:-1;25938:26:0;:9;25867:42;25938:26;:13;:26;:::i;:::-;26013:32;;25926:38;;-1:-1:-1;26013:10:0;;:32;;;;;26033:11;;26013:32;;;;26033:11;26013:10;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26013:32:0;25831:226;;26093:13;;26089:210;;26130:4;;:11;;26139:1;26130:11;:8;:11;:::i;:::-;26123:4;:18;26167:8;;:23;;26180:9;26167:23;:12;:23;:::i;:::-;26156:8;:34;26261:10;26240:32;;;;:20;:32;;;;;;:47;;26277:9;26240:47;:36;:47;:::i;:::-;26226:10;26205:32;;;;:20;:32;;;;;:82;26089:210;26374:10;;26332:17;;26374:10;;;;;;-1:-1:-1;;;26364:7:0;;;;:20;26360:280;;;26411:78;26480:8;;26411:64;26463:11;;26411:47;26445:12;;26411:29;26424:15;;26411:8;;:12;;:29;;;;:::i;:::-;:33;:47;:33;:47;:::i;:78::-;26399:90;;26360:280;;;26530:110;26629:10;26530:94;26613:10;26530:78;26599:8;;26530:64;26582:11;;26530:47;26564:12;;26530:29;26543:15;;26530:8;;:12;;:29;;;;:::i;:78::-;:82;:94;:82;:94;:::i;:::-;:98;:110;:98;:110;:::i;:::-;26518:122;;26360:280;26664:8;;:23;;26677:9;26664:23;:12;:23;:::i;:::-;26653:8;:34;26698:9;;:29;;-1:-1:-1;;;;;26698:9:0;;;;:29;;;;;26717:9;;26698;:29;:9;:29;26717:9;26698;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;19316:1:0;;;;;;;7412:25689;6388:281;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6388:281:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6388:281:0;;;;:::i;:::-;;16602:1387;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16602:1387:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13218:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13218:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13218:125:0;-1:-1:-1;;;;;13218:125:0;;:::i;:::-;;;;;;;;;;;;;;;;;;13413:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13413:194:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13413:194:0;;;;;;;;;;:::i;12984:164::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12984:164:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12984:164:0;;:::i;15828:319::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15828:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15828:319:0;-1:-1:-1;;;;;15828:319:0;;:::i;20452:1197::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20452:1197:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20452:1197:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5355:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5355:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5355:241:0;;;;;;;;:::i;4460:272::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4460:272:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4460:272:0;-1:-1:-1;;;;;4460:272:0;;:::i;6020:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6020:78:0;;;:::i;16205:350::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16205:350:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16205:350:0;-1:-1:-1;;;;;16205:350:0;;:::i;18033:721::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18033:721:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3726:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3726:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;3726:79:0;;;;;;;;;;;;;;14456:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14456:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14456:180:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24027:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24027:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24027:166:0;;;;;;;;-1:-1:-1;;;;;24027:166:0;;:::i;23764:178::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23764:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23764:178:0;;;;;;;;-1:-1:-1;;;;;23764:178:0;;:::i;7552:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7552:75:0;;;:::i;15161:423::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15161:423:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15161:423:0;;;;;;;;-1:-1:-1;;;;;15161:423:0;;:::i;4962:339::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4962:339:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4962:339:0;;;;;;;;;;;;;;;;;:::i;22000:659::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22000:659:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22000:659:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12634:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12634:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12634:110:0;;;;:::i;12478:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12478:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22713:741;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22713:741:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22713:741:0;-1:-1:-1;;;;;22713:741:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4156:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4156:248:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4156:248:0;-1:-1:-1;;;;;4156:248:0;;:::i;23524:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23524:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23524:158:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;23524:158:0;;;;;;;;;;;;;;;;;6020:78;6083:7;;-1:-1:-1;;;6083:7:0;;;;6020:78;;:::o;26852:1153::-;26904:18;26911:11;;26904:18;:::i;:::-;26933:16;26940:9;;26933:16;:::i;:::-;26978:6;;:30;;;-1:-1:-1;;;;;26978:30:0;;26997:10;26978:30;;;;;;-1:-1:-1;;;;;26978:6:0;;;;:18;;:30;;;;;;;;;;;;;;;:6;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;26978:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26978:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26978:30:0;26962:13;:46;;-1:-1:-1;;26962:46:0;;;;;;;;;;27031:29;;;;26978:30;27019:41;27092:10;-1:-1:-1;27113:885:0;27135:32;27131:1;:36;;;27113:885;;;27212:6;;:25;;;-1:-1:-1;;;;;27212:25:0;;-1:-1:-1;;;;;27212:25:0;;;;;;;;;27189:20;;27212:6;;;;;:15;;:25;;;;;;;;;;;;;;;:6;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;27212:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27212:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27212:25:0;;-1:-1:-1;;;;;;27258:24:0;;;;;;;27254:204;;;-1:-1:-1;27325:9:0;;;27303;27:10:-1;;39:1;23:18;;;45:23;;;27303:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27355:11;27:10:-1;;23:18;;;45:23;;-1:-1;27355:31:0;;;;;;;;;27380:4;-1:-1:-1;;;;;;27355:31:0;;;;;;27405:13;;27437:5;;27254:204;27478:6;;:29;;;-1:-1:-1;;;;;27478:29:0;;-1:-1:-1;;;;;27478:29:0;;;;;;;;;:33;;;;:6;;;;;:15;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;27478:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27478:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27478:29:0;:33;27474:473;;;27558:7;;-1:-1:-1;;;27558:7:0;;;;27537:29;;;;:20;:29;;;;;;;;-1:-1:-1;;;;;27537:43:0;;;;;;;;;;;;27532:212;;27624:7;;;;-1:-1:-1;;;27624:7:0;;;;;;27605:27;;;;:18;:27;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;27605:46:0;;;;;;;;;-1:-1:-1;;;;;27605:46:0;;-1:-1:-1;;;;;;27605:46:0;;;;;;;;27695:7;;;;;;;;;27674:29;;:20;:29;;;;;:43;;;;;;;;;;:50;;-1:-1:-1;;27674:50:0;;;;;;27532:212;27776:43;27790:25;27816:1;27790:28;;;;;;;;;;;;;;;;;27776:9;;;27790:28;;;;;;;;;;27776:13;:43::i;:::-;27764:9;:55;27838:9;27853:25;:28;;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;27838:44:0;;;;;;;;;;;;;;27853:28;;;27838:44;;;;;27853:28;27838:44;;;;;;;;;;27853:28;;;;;;;;;;;;;;27838:44;;;;;;27901:11;27:10:-1;;23:18;;;45:23;;27901:30:0;;;;;;;-1:-1:-1;;;;;;27901:30:0;-1:-1:-1;;;;;27901:30:0;;;;;27474:473;27974:12;-1:-1:-1;27169:3:0;;27113:885;;;;26852:1153;:::o;13909:126::-;13964:7;13991:36;14019:7;13991:23;14002:11;;13991:6;:10;;:23;;;;:::i;:36::-;13984:43;;13909:126;;;;:::o;28058:1020::-;28106:7;28115;28135:21;28159:19;28171:6;;;;;;;;;;;28159:11;:19::i;:::-;28263:6;;-1:-1:-1;;;28263:6:0;;;;28189:22;28249:21;;;:13;:21;;;;;;28135:43;;-1:-1:-1;28189:22:0;28135:43;;28249:36;;28275:9;28249:25;:36::i;:::-;:53;28245:444;;28319:18;28327:9;28319:7;:18::i;:::-;28371:21;28382:9;28371:10;:21::i;:::-;28354:38;;28414:47;28435:14;28451:9;28414:20;:47::i;:::-;28407:55;;;;28571:6;;-1:-1:-1;;;28571:6:0;;;;28557:21;;;;:13;:21;;;;;;28540:38;;28536:99;;;28606:12;:10;:12::i;:::-;28599:20;;;;28659:14;-1:-1:-1;28675:1:0;;-1:-1:-1;28651:26:0;;-1:-1:-1;28651:26:0;28245:444;28777:6;;-1:-1:-1;;;28777:6:0;;;;28725:17;28763:21;;;:13;:21;;;;;;28745:40;;:13;;:17;:40::i;:::-;28725:60;-1:-1:-1;28796:19:0;28818:24;:9;28725:60;28818:24;:13;:24;:::i;:::-;28796:46;;28855:18;28863:9;28855:7;:18::i;:::-;28903:21;28914:9;28903:10;:21::i;:::-;28886:38;;28942:47;28963:14;28979:9;28942:20;:47::i;:::-;28935:55;;;;29008:12;:10;:12::i;:::-;29001:20;;;;29042:14;;-1:-1:-1;29058:11:0;;-1:-1:-1;;;28058:1020:0;;;;:::o;278:141::-;362:5;;;385:6;;;;378:14;;;;278:141;;;;:::o;557:123::-;615:7;647:1;642;:6;;635:14;;;;-1:-1:-1;667:5:0;;;557:123::o;14085:126::-;14191:11;;14140:7;;14167:36;;:19;:6;14178:7;14167:19;:10;:19;:::i;1119:187::-;1177:7;1208:1;1204;:5;1197:13;;;;1221:9;1237:1;1233;:5;;;;;;1221:17;;1273:1;1269;:5;;;;;;1265:1;1261;:5;:13;1256:1;:18;1249:26;;;;1297:1;1293;:5;;;;;;;1119:187;-1:-1:-1;;;;1119:187:0:o;30850:402::-;30947:15;;30912:4;;30947:22;;30967:1;30947:22;:19;:22;:::i;:::-;30929:15;:40;30997:12;;:24;;31014:6;30997:24;:16;:24;:::i;:::-;30982:12;:39;31086:10;31066:31;;;;:19;:31;;;;;;:43;;31102:6;31066:43;:35;:43;:::i;:::-;31052:10;31032:31;;;;:19;:31;;;;;;;;:77;;;;31129:6;;:35;;-1:-1:-1;;;;;31129:35:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31129:6:0;;;;:15;;:35;;;;;;;;;;;;;:6;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;31129:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31129:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31129:35:0;31122:43;;;;31181:41;;;;;;;;31203:10;;31181:41;;;;;;;;;;-1:-1:-1;31240:4:0;30850:402;;;:::o;31320:440::-;31427:19;;31388:4;;31427:26;;31451:1;31427:26;:23;:26;:::i;:::-;31405:19;:48;31485:16;;:28;;31506:6;31485:28;:20;:28;:::i;:::-;31466:16;:47;31590:10;31564:37;;;;:25;:37;;;;;;:49;;31606:6;31564:49;:41;:49;:::i;:::-;31550:10;31524:37;;;;:25;:37;;;;;;;;:89;;;;31633:6;;:35;;-1:-1:-1;;;;;31633:35:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31633:6:0;;;;:15;;:35;;;;;;;;;;;;;:6;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;31633:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31633:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31633:35:0;31626:43;;;;31685:45;;;;;;;;31711:10;;31685:45;;;;;;;;;;-1:-1:-1;31748:4:0;31320:440;;;:::o;32381:717::-;32479:9;32457:19;32499:483;32522:9;:16;32518:20;;;;32499:483;;;32560:19;32582:36;32614:3;32582:27;32596:9;32606:1;32596:12;;;;;;;;;;;;;;;;;;;;;;;32582:9;;32596:12;;;;;;;;;;32582:13;:27::i;:36::-;32560:58;;32633:26;32678:11;32690:1;32678:14;;;;;;;;;;;;;;;;;;;;32729:15;;-1:-1:-1;;;;;32678:14:0;;;;-1:-1:-1;32729:32:0;;32749:11;32729:32;:19;:32;:::i;:::-;32711:15;:50;-1:-1:-1;;;;;32813:34:0;;;;;;:22;:34;;;;;;:51;;32852:11;32813:51;:38;:51;:::i;:::-;-1:-1:-1;;;;;32776:34:0;;;;;;:22;:34;;;;;:88;32893:28;:11;32909;32893:28;:15;:28;:::i;:::-;32938:32;;32879:42;;-1:-1:-1;;;;;;32938:19:0;;;:32;;;;;32958:11;;32938:32;;;;32958:11;32938:19;:32;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;32540:3:0;;32499:483;;;-1:-1:-1;32998:9:0;;:13;32994:96;;33040:50;33056:33;33085:3;33056:24;33070:9;;33056;:13;;:24;;;;:::i;:33::-;33040:11;;;:50;:15;:50;:::i;:::-;33026:11;:64;32381:717;;:::o;774:202::-;832:9;858:6;854:47;;-1:-1:-1;888:1:0;881:8;;854:47;-1:-1:-1;915:5:0;;;919:1;915;:5;:1;938:5;;;;;:10;931:18;;;6388:281;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;6453:7;;-1:-1:-1;;;6453:7:0;;;;:17;;;;;6465:5;6464:6;6453:17;6449:213;;;6487:7;:15;;-1:-1:-1;;;;;;6487:15:0;;;6522:20;;;6531:10;6522:20;;;;;;;;;;;;;6449:213;;;6565:7;;-1:-1:-1;;;6565:7:0;;;;6564:8;:17;;;;;6576:5;6564:17;6560:102;;;6608:4;6598:14;;-1:-1:-1;;;;;;6598:14:0;-1:-1:-1;;;6598:14:0;;;6632:18;;;6639:10;6632:18;;;;;;;;;;;;;6560:102;6388:281;:::o;16602:1387::-;17414:11;;17451:9;;16641:23;;;;;;;;;;;;;;;;;;;;;;17451:9;;;;-1:-1:-1;;;17442:6:0;;;;:18;17438:180;;;17485:9;;;;;;;-1:-1:-1;17518:10:0;;;;;;-1:-1:-1;17438:180:0;;;17569:6;;;-1:-1:-1;;;17569:6:0;;;;;-1:-1:-1;;;;17599:7:0;;;;;-1:-1:-1;17438:180:0;17647:15;;17630:32;;17696:14;;17673:37;;17729:4;;17723:10;;17756;;17744:22;;17794:15;;17777:32;;17841:19;;17820:40;;17886:13;;17871:28;;17924:12;;17910:26;;17965:16;;17947:34;;16602:1387;;;;;;;;;;;;:::o;13218:125::-;-1:-1:-1;;;;;13307:28:0;13283:4;13307:28;;;:19;:28;;;;;;;;;13218:125::o;13413:194::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;-1:-1:-1;;;;;13502:28:0;;;;;;:19;:28;;;;;;;;;:36;;-1:-1:-1;;13502:36:0;;;;;;;;;;13554:45;;;;;;;;;;;;;;;;;13413:194;;:::o;12984:164::-;12890:10;12870:31;;;;:19;:31;;;;;;;;12862:40;;;;;;13064:11;:19;;;13099:41;;;;;;;;13129:10;;13099:41;;;;;;;;;;12984:164;:::o;15828:319::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;15903:19;15925:15;:13;:15::i;:::-;15903:37;-1:-1:-1;;;;;;15959:16:0;;15951:25;;;;;;16013:21;;:38;;16039:11;16013:38;:25;:38;:::i;:::-;15989:21;:62;16067:37;;;;;;;;-1:-1:-1;;;;;16067:37:0;;;;;;;;;;;;;16115:24;;-1:-1:-1;;;;;16115:11:0;;;:24;;;;;16127:11;;16115:24;;;;16127:11;16115;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16115:24:0;3970:1;15828:319;:::o;20452:1197::-;20513:22;20603:17;20688:20;20776:18;20862:14;20944:17;21029:15;21112:24;21166:9;;;;;;;;;;;21153:22;;:10;:22;;;21149:86;;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;;-1:-1:-1;21200:1:0;21192:31;;21149:86;21264:31;21284:10;21264:19;:31::i;:::-;21321:30;;;;;;;:18;:30;;;;;;21247:48;;-1:-1:-1;21321:30:0;-1:-1:-1;21374:26:0;21340:10;21374:14;:26::i;:::-;21362:38;-1:-1:-1;21426:25:0;21362:38;21440:10;21426:25;:13;:25;:::i;:::-;21474;;;;;;;:13;:25;;;;;;21411:40;;-1:-1:-1;21474:25:0;-1:-1:-1;21519:23:0;21488:10;21519:11;:23::i;:::-;21510:32;-1:-1:-1;21565:19:0;21510:32;21576:7;21565:19;:10;:19;:::i;:::-;21553:31;;21616:25;21630:10;21616:13;:25::i;:::-;21597:44;;20452:1197;;;;;;;;;;:::o;5355:241::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;-1:-1:-1;;;;;5452:16:0;;5444:25;;;;;;5506:4;5498:21;5538:17;;;;5530:26;;;;;;5569:19;;-1:-1:-1;;;;;5569:11:0;;;:19;;;;;5581:6;;5569:19;;;;5581:6;5569:11;:19;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5569:19:0;3970:1;5355:241;;:::o;4460:272::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;-1:-1:-1;;;;;4551:25:0;;4543:34;;;;;;4617:9;;;-1:-1:-1;;;;;4637:23:0;;;-1:-1:-1;;;;;;4637:23:0;;;;;;;4676:48;;4617:9;;;4637:23;4617:9;;4676:48;;4588:26;;4676:48;3970:1;4460:272;:::o;16205:350::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;16277:19;16299:78;16368:8;;16299:64;16351:11;;16299:47;16333:12;;16299:29;16312:15;;16299:8;;:12;;:29;;;;:::i;:78::-;16277:100;-1:-1:-1;;;;;;16396:16:0;;16388:25;;;;;;16437:8;;:25;;16450:11;16437:25;:12;:25;:::i;:::-;16426:8;:36;16478:34;;;;;;;;-1:-1:-1;;;;;16478:34:0;;;;;;;;;;;;;16523:24;;-1:-1:-1;;;;;16523:11:0;;;:24;;;;;16535:11;;16523:24;;;;16535:11;16523;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;18033:721:0;18489:8;;18530:15;;18570:12;;18603:8;;18635:11;;18680:21;;18068:15;18731;:13;:15::i;:::-;18712:34;;18033:721;;;;;;;:::o;3726:79::-;3764:7;3791:6;-1:-1:-1;;;;;3791:6:0;3726:79;:::o;14456:180::-;14542:7;14569:59;14596:31;14616:10;14596:19;:31::i;:::-;14569:22;:9;14583:7;14569:22;:13;:22;:::i;:59::-;14562:66;14456:180;-1:-1:-1;;;14456:180:0:o;24027:166::-;24142:34;;;24115:7;24142:34;;;:20;:34;;;;;;;;-1:-1:-1;;;;;24142:43:0;;;;;;;;;;24027:166;;;;:::o;23764:178::-;23885:40;;;23858:7;23885:40;;;:26;:40;;;;;;;;-1:-1:-1;;;;;23885:49:0;;;;;;;;;;23764:178;;;;:::o;7552:75::-;;;-1:-1:-1;;;;;7552:75:0;;:::o;15161:423::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;15258:19;15280:34;15301:12;15280:20;:34::i;:::-;15258:56;-1:-1:-1;;;;;;15333:16:0;;15325:25;;;;;;15408:42;;;;;;;:28;:42;;;;;;:59;;15455:11;15408:59;:46;:59;:::i;:::-;15363:42;;;;;;;:28;:42;;;;;;;;;:104;;;;15483:58;;;;;;;;;;;;;-1:-1:-1;;;;;15483:58:0;;;;;;;;;;;15552:24;;-1:-1:-1;;;;;15552:11:0;;;:24;;;;;15564:11;;15552:24;;;;15564:11;15552;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;4962:339:0;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;5090:9;-1:-1:-1;;;;;5119:22:0;;5111:31;;;;;;5171;;;-1:-1:-1;;;;;5171:31:0;;5196:4;5171:31;;;;;;5153:15;;-1:-1:-1;;;;;5171:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;5171:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5171:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5171:31:0;;-1:-1:-1;5221:17:0;;;;5213:26;;;;;;5259:6;-1:-1:-1;;;;;5259:15:0;;5275:8;5285:6;5259:33;;;;;;;;;;;;;-1:-1:-1;;;;;5259:33:0;-1:-1:-1;;;;;5259:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5259:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5259:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5259:33:0;5252:41;;;;3970:1;;4962:339;;;:::o;22000:659::-;22424:28;;;22073:15;22424:28;;;:14;:28;;;;;;;;;22477:18;:32;;;;;;22544:28;:42;;;;;;;22424:28;;22617:34;22439:12;22617:20;:34::i;:::-;22597:54;;22000:659;;;;;:::o;12634:110::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;12709:15;:27;;;;;;-1:-1:-1;;;12709:27:0;-1:-1:-1;;12709:27:0;;;;;;;;;12634:110::o;12478:96::-;12551:15;;-1:-1:-1;;;12551:15:0;;;;;12478:96::o;22713:741::-;-1:-1:-1;;;;;23180:29:0;22773:20;23180:29;;;:20;:29;;;;;;;;;23234:19;:28;;;;;;23293:25;:34;;;;;;23353:20;:29;;;;;;23415:22;:31;;;;;;;;23180:29;;23293:34;;23353:29;22713:741::o;4156:248::-;3952:6;;-1:-1:-1;;;;;3952:6:0;3938:10;:20;3930:29;;;;;;-1:-1:-1;;;;;4239:22:0;;4231:31;;;;;;4273:23;4299:6;;-1:-1:-1;;;;;4316:17:0;;;-1:-1:-1;;;;;;4316:17:0;;;;;;4349:47;;4299:6;;;;;;;4349:47;;4273:23;4349:47;3970:1;4156:248;:::o;23524:158::-;23642:32;;;;;;;:18;:32;;;;;;;;;23631:43;;;;;;;;;;;;;;;;;23593:25;;23631:43;;;23642:32;23631:43;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23631:43:0;;;;;;;;;;;;;;;;;;;;;;;23524:158;;;:::o;19864:293::-;19926:7;19946:16;19965:59;19989:34;20012:10;19989:34;;:18;;:22;;:34;;;;:::i;:::-;19965:19;;;:59;:23;:59;:::i;:::-;19946:78;;20052:17;;20041:8;:28;20037:85;;;-1:-1:-1;;20093:17:0;;20086:24;;29129:1069;29184:17;29204:18;29212:9;29204:7;:18::i;:::-;29184:38;;29233:21;29257:26;29273:9;29257:15;:26::i;:::-;29373:7;;-1:-1:-1;;;29373:7:0;;;;29346:35;;;;:26;:35;;;;;;;;29382:10;29346:47;;;;;;;;29233:50;;-1:-1:-1;29346:62:0;;29398:9;29346:51;:62::i;:::-;29323:7;;;;-1:-1:-1;;;29323:7:0;;;;;29296:35;;;;:26;:35;;;;;;;;29332:10;29296:47;;;;;;;:112;;;;29503:6;;-1:-1:-1;;;29503:6:0;;;;;29489:21;;:13;:21;;;;;:36;;29515:9;29489:36;:25;:36;:::i;:::-;29479:6;;;;-1:-1:-1;;;29479:6:0;;;;;29465:21;;;;:13;:21;;;;;;;;:60;;;;29617:7;;-1:-1:-1;;;29617:7:0;;;;;29602:23;;:14;:23;;;;;:38;;29630:9;29602:38;:27;:38;:::i;:::-;29591:7;;;;-1:-1:-1;;;29591:7:0;;;;;;29576:23;;;;:14;:23;;;;;;;;:64;;;;29737:7;;;;;;;29718:27;;:18;:27;;;;;:46;;29750:13;29718:46;:31;:46;:::i;:::-;29707:7;;-1:-1:-1;;;29707:7:0;;;;29688:27;;;;:18;:27;;;;;:76;29820:12;;:31;;29837:13;29820:16;:31::i;:::-;29805:12;:46;29961:13;;;;29957:234;;;29996:8;29991:189;30014:9;:16;30010:20;;;;29991:189;;;30125:7;;;-1:-1:-1;;;30125:7:0;;;;;30104:29;;;;:20;:29;;;;;30134:11;:14;;30104:60;;30154:9;;30104:29;30134:11;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30134:14:0;30104:45;;;;;;;;;;;;;;:60;:49;:60;:::i;:::-;30077:7;;;-1:-1:-1;;;30077:7:0;;;;;30056:29;;;;:20;:29;;;;;30086:11;:14;;30056:29;;30086:11;;:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30086:14:0;30056:45;;;;;;;;;;;;:108;30086:14;30032:3;29991:189;;14264:139;14379:15;;14325:7;;14352:43;;:22;:9;14366:7;14352:22;:13;:22;:::i;30261:527::-;30373:10;;30343:4;;30373:17;;30388:1;30373:17;:14;:17;:::i;:::-;30360:10;:30;30419:13;;:25;;30437:6;30419:25;:17;:25;:::i;:::-;30403:13;:41;30503:6;;-1:-1:-1;;;30503:6:0;;;;30484:26;;;;:18;:26;;;;;;:38;;30515:6;30484:30;:38::i;:::-;30474:6;;-1:-1:-1;;;30474:6:0;;;;30455:26;;;;:18;:26;;;;;;;;:67;;;;30589:10;30568:32;;:20;:32;;;;:44;;30605:6;30568:36;:44::i;:::-;30554:10;30533:32;;;;:20;:32;;;;;;;;:79;;;;30632:6;;:35;;-1:-1:-1;;;;;30632:35:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30632:6:0;;;;:15;;:35;;;;;;;;;;;;;:6;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;30632:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30632:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30632:35:0;30625:43;;;;30707:6;;30735:11;;30684:74;;;30707:6;-1:-1:-1;;;30707:6:0;;;;;;;30684:74;;;;;;;;;;;;;;;;;;;;;;30715:10;;30684:74;;;;;;;;;;-1:-1:-1;30776:4:0;30261:527;;;;:::o;31815:494::-;31888:6;;31876:31;;;-1:-1:-1;;;31888:6:0;;;;;31876:31;;;31854:4;;31896:10;;31876:31;;;;;;;;;;31927:6;;:13;;-1:-1:-1;;;31927:6:0;;;;31938:1;31927:10;:13::i;:::-;31918:6;:22;;-1:-1:-1;;31918:22:0;-1:-1:-1;;;31918:22:0;;;;;;;;;;;;;;31969:27;;31989:6;;;31969:19;:27::i;:::-;31951:15;:45;32038:6;;32024:21;;-1:-1:-1;;;32038:6:0;;;;32024:13;:21::i;:::-;32007:14;:38;32126:6;;32091:21;;32115:18;;-1:-1:-1;;;32126:6:0;;;;32115:10;:18::i;:::-;32148:7;;32091:42;;-1:-1:-1;32148:24:0;;;;-1:-1:-1;;;32148:7:0;;;;:24;32144:134;;;32207:7;;32194:33;;;32207:7;-1:-1:-1;;;32207:7:0;;;;;;;32194:33;;;32216:10;;32194:33;;;;;;;;;;32242:7;:24;;-1:-1:-1;;32242:24:0;-1:-1:-1;;;32242:24:0;;;;;;;32144:134;32297:4;32290:11;;;31815:494;:::o;15647:120::-;15694:7;15721:38;15737:21;;15721:11;;:15;;:38;;;;:::i;:::-;15714:45;;15647:120;:::o;13689:170::-;13759:7;13786:65;13813:37;13839:10;13813:37;;:21;;:25;;:37;;;;:::i;:::-;13786:22;;;:65;:26;:65;:::i;20229:154::-;20294:7;20321:54;20339:23;20351:10;20339:11;:23::i;:::-;20364:10;20321:17;:54::i;19381:181::-;19543:9;;19498:24;;19445:7;;19472:82;;19498:55;;19543:9;;;;;19498:40;;;;;:28;:40;:::i;:55::-;19472:21;;;:82;:25;:82;:::i;21721:188::-;21858:42;;;21794:7;21858:42;;;:28;:42;;;;;;;;;21821:18;:32;;;;;;:80;;;:36;:80;:::i;19627:154::-;19693:7;19720:53;19728:44;19762:9;19728:29;19742:14;;19728:9;:13;;:29;;;;:::i;:44::-;19720:7;:53::i;1820:138::-;1901:5;;;1924:6;;;;;;;;;1917:14;;;14716:364;14777:6;14800:14;;;;14796:256;;14870:13;;14831:21;;14855:29;;14870:13;14855:14;;;;14870:13;;;;14855:29;:14;:29;:::i;:::-;14920:13;;14831:53;;-1:-1:-1;14937:1:0;;14905:29;;14920:13;14905:14;;;;14920:13;;;;14905:29;:14;:29;:::i;:::-;:33;;;14901:102;;;14966:21;:18;;;14985:1;14966:21;:18;:21;:::i;:::-;14959:28;;;;;14901:102;15026:14;-1:-1:-1;15019:21:0;;14796:256;-1:-1:-1;15071:1:0;14716:364;;;:::o;2652:184::-;2708:6;2738:1;2734;:5;;;2727:13;;;;2751:9;2767:1;2763:5;;:1;:5;;;;;;;;2751:17;;;;2803:1;2799:5;;:1;:5;;;;;;;;2791:13;;2795:1;2791;:5;;;:13;2786:1;:18;;;2779:26;;;;2827:1;2823:5;;:1;:5;;;;;;2997:121;3053:6;3080;;;3072:15;;;;;;3109:1;3105:5;;:1;:5;;;;;;;;;2997:121;-1:-1:-1;;;2997:121:0:o;7412:25689::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://8b4d451d67920d625330bb0825b0ff3928593b8100fedbe3b6d12957c0883d78
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $2,165.96 | 0.03 | $64.98 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.