Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
1.715061512444408604 ETH
Eth Value
$6,573.78 (@ $3,832.97/ETH)Token Holdings
Latest 25 from a total of 1,438 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 13675718 | 1113 days ago | IN | 0 ETH | 0.02284727 | ||||
Withdraw | 13268754 | 1177 days ago | IN | 0 ETH | 0.01112227 | ||||
Withdraw | 13268394 | 1177 days ago | IN | 0 ETH | 0.00953166 | ||||
Withdraw | 13268350 | 1177 days ago | IN | 0 ETH | 0.00971263 | ||||
Withdraw | 13268077 | 1177 days ago | IN | 0 ETH | 0.00928693 | ||||
Withdraw | 13259367 | 1178 days ago | IN | 0 ETH | 0.00965656 | ||||
Withdraw | 13259198 | 1178 days ago | IN | 0 ETH | 0.00926206 | ||||
Withdraw | 13259130 | 1178 days ago | IN | 0 ETH | 0.00858379 | ||||
Withdraw | 13158993 | 1194 days ago | IN | 0 ETH | 0.01341049 | ||||
Withdraw | 13077921 | 1206 days ago | IN | 0 ETH | 0.00785621 | ||||
Withdraw | 13069434 | 1208 days ago | IN | 0 ETH | 0.00799308 | ||||
Withdraw | 13067161 | 1208 days ago | IN | 0 ETH | 0.00446558 | ||||
Withdraw | 13066138 | 1208 days ago | IN | 0 ETH | 0.00628746 | ||||
Withdraw | 13066108 | 1208 days ago | IN | 0 ETH | 0.00640221 | ||||
Withdraw | 13066104 | 1208 days ago | IN | 0 ETH | 0.00666192 | ||||
Withdraw | 13066101 | 1208 days ago | IN | 0 ETH | 0.00608227 | ||||
Withdraw | 13066091 | 1208 days ago | IN | 0 ETH | 0.00693787 | ||||
Withdraw | 13066086 | 1208 days ago | IN | 0 ETH | 0.00795338 | ||||
Withdraw | 13066072 | 1208 days ago | IN | 0 ETH | 0.007951 | ||||
Withdraw | 13066070 | 1208 days ago | IN | 0 ETH | 0.00835635 | ||||
Withdraw | 13066060 | 1208 days ago | IN | 0 ETH | 0.00738901 | ||||
Withdraw | 13066051 | 1208 days ago | IN | 0 ETH | 0.00971984 | ||||
Withdraw | 13066047 | 1208 days ago | IN | 0 ETH | 0.00909867 | ||||
Withdraw | 13066027 | 1208 days ago | IN | 0 ETH | 0.00855509 | ||||
Withdraw | 13062633 | 1209 days ago | IN | 0 ETH | 0.00855874 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13158993 | 1194 days ago | 0.9 ETH | ||||
13053764 | 1210 days ago | 0.0528637 ETH | ||||
13052654 | 1210 days ago | 0.01790443 ETH | ||||
13052654 | 1210 days ago | 0.34018417 ETH | ||||
13047367 | 1211 days ago | 0.13 ETH | ||||
13047319 | 1211 days ago | 0.16 ETH | ||||
13046777 | 1211 days ago | 0.6 ETH | ||||
13035155 | 1213 days ago | 0.2 ETH | ||||
13034910 | 1213 days ago | 0.1679277 ETH | ||||
13033863 | 1213 days ago | 0.11785255 ETH | ||||
13033592 | 1213 days ago | 0.0095 ETH | ||||
13033592 | 1213 days ago | 0.1805 ETH | ||||
13029038 | 1214 days ago | 0.22818859 ETH | ||||
13028669 | 1214 days ago | 0.083 ETH | ||||
13028179 | 1214 days ago | 0.13276471 ETH | ||||
13027754 | 1214 days ago | 0.31772694 ETH | ||||
13027748 | 1214 days ago | 0.20209438 ETH | ||||
13027725 | 1214 days ago | 1.46173639 ETH | ||||
13026840 | 1214 days ago | 0.0868873 ETH | ||||
13026608 | 1214 days ago | 0.09584869 ETH | ||||
13026172 | 1214 days ago | 0.1 ETH | ||||
13025984 | 1214 days ago | 0.26839605 ETH | ||||
13024098 | 1215 days ago | 0.00547161 ETH | ||||
13024098 | 1215 days ago | 0.10396069 ETH | ||||
13023680 | 1215 days ago | 0.02982711 ETH |
Loading...
Loading
Contract Name:
StakePool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; //import "./Base.sol"; import "./StakeSet.sol"; import "./SafeERC20.sol"; import "./Ownable.sol"; // contract Blog{ // function burnFrom(address account, uint256 amount) public; // } contract StakePool is Ownable{ using SafeMath for uint; using SafeERC20 for IERC20; using StakeSet for StakeSet.Set; ///////////////////////////////// constant ///////////////////////////////// //uint constant DECIMALS = 10 ** 18; uint[4] STAKE_PER = [20, 30, 50, 100]; uint[4] STAKE_POWER_RATE = [100, 120, 150, 200]; //mainnet:'0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', //ropsten:'0xc778417E063141139Fce010982780140Aa0cD5Ab', //rinkeby:'0xc778417E063141139Fce010982780140Aa0cD5Ab', //goerli:'0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6', //kovan:'0xd0A1E359811322d97991E03f863a0C30C2cF029C' // todo: wethToken address address constant wethToken = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address public payToken =address(0xdAC17F958D2ee523a2206206994597C13D831ec7); address public aToken = address(0x1e8433F5017B3006f634293Ed9Ecf0e9504CdB25); address public secretSigner; ///////////////////////////////// storage ///////////////////////////////// uint private _totalStakeToken; uint private _totalStakeEth; uint private _totalStakeUsdt; bool private _isOnlyToken; uint public currentId; uint private _totalOrders; uint private _totalWeight; // uint private _total_dynamic_hashrate; mapping(address => uint) private _userOrders; mapping(address => uint) private _weights; mapping(address => uint) private _withdrawalAmount; mapping (address => uint256) private _bypass; mapping(address => StakeSet.Set) private _stakeOf; mapping(uint => bool) public withdrawRewardIdOf; // tokenAddress => lpAddress mapping(address => address) public lpAddress; event Stake(address indexed user, uint indexed stakeType, uint indexed stakeId, uint payTokenAmount, uint amount); event Withdraw(address indexed user, uint indexed stakeId, uint payTokenAmount, uint amount); event WithdrawReward(address indexed _to, uint amount); function totalStakeUsdt() public view returns (uint) { return _totalStakeUsdt; } function totalStakeToken() public view returns (uint) { return _totalStakeToken; } function totalStakeEth() public view returns (uint) { return _totalStakeEth; } function userOrders(address account) public view returns (uint) { return _userOrders[account]; } function isOnlyToken() public view returns (bool) { return _isOnlyToken; } function totalOrders() public view returns (uint) { return _totalOrders; } function withdrawalAmount(address account) public view returns (uint) { return _withdrawalAmount[account]; } function bypass(address user) public view returns (uint) { return _bypass[user]; } function setPayToken(address _payToken) external onlyOwner returns (bool) { payToken = _payToken; return true; } function setAToken(address _aToken) external onlyOwner returns (bool) { aToken = _aToken; return true; } function setIsOnlyToken(bool _IsOnly) external onlyOwner returns (bool) { _isOnlyToken = _IsOnly; return true; } function setBypass(address user ,uint256 mode) public onlyOwner returns (bool) { _bypass[user]=mode; return true; } /** * @dev set swap pair address (aka. Lp Token address) */ function setLpAddress(address _token, address _lp) external onlyOwner returns (bool) { lpAddress[_token] = _lp; return true; } function totalWeight() public view returns (uint) { return _totalWeight; } // function totalDynamicHashrate() public view returns (uint) { // return _total_dynamic_hashrate; // } function weightOf(address account) public view returns (uint) { return _weights[account]; } function setSecretSigner(address _secretSigner) onlyOwner external { require(_secretSigner != address(0), "address invalid"); secretSigner = _secretSigner; } /** * @dev get stake item by '_account' and '_index' */ function getStakeOf(address _account, uint _index) external view returns (StakeSet.Item memory) { require(_stakeOf[_account].length() > _index, "getStakeOf: _stakeOf[_account].length() > _index"); return _stakeOf[_account].at(_index); } /** * @dev get '_account' stakes by page */ function getStakes(address _account, uint _index, uint _offset) external view returns (StakeSet.Item[] memory items) { uint totalSize = userOrders(_account); require(0 < totalSize && totalSize > _index, "getStakes: 0 < totalSize && totalSize > _index"); uint offset = _offset; if (totalSize < _index + offset) { offset = totalSize - _index; } items = new StakeSet.Item[](offset); for (uint i = 0; i < offset; i++) { items[i] = _stakeOf[_account].at(_index + i); } } /** * @dev stake * @param _stakeType type of stake rate 1: 8/2, 2: 7/3, 3: 5/5 (payTokenAmount/aTokenAmount) * @param _amount aToken amount */ function stake(uint _stakeType, uint _amount) external payable { require(0 < _stakeType && _stakeType <= 4, "stake: 0 < _stakeType && _stakeType <= 4"); require(0 < _amount, "stake: 0 < _amount"); uint256 tokenprice = getUSDTPrice(aToken); uint256 ethprice; uint256 tokenAmount; //address payTokenAddr; uint256 coinType; if(_stakeType==4){ if(!_isOnlyToken){ require(_bypass[msg.sender]==1, "stake: Temporarily not opened"); IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount); }else{ IERC20(aToken).safeTransferFrom(msg.sender, address(this), _amount); } tokenAmount=_amount; _totalStakeToken = _totalStakeToken.add(_amount); //payTokenAddr=address(0); }else{ ethprice = getUSDTPrice(wethToken); if (0 < msg.value) { // pay with ETH 25 // transfer to this require(msg.value>=(10**12)*4,"stake: msg.value>=(10**12)*4"); tokenAmount = ethprice.mul(msg.value).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice).div(10**12); IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount); //payTokenAddr = wethToken; coinType =1; _totalStakeEth = _totalStakeEth.add(msg.value); _totalStakeToken = _totalStakeToken.add(tokenAmount); } else { // pay with USDT // transfer to this require(4 <= _amount, "stake: 4 <= _amount"); tokenAmount = _amount.mul(10**6).mul(STAKE_PER[_stakeType - 1]).div(uint(100).sub(STAKE_PER[_stakeType - 1])).div(tokenprice); IERC20(payToken).safeTransferFrom(msg.sender, address(this), _amount); IERC20(aToken).safeTransferFrom(msg.sender, address(this), tokenAmount); //payTokenAddr = payToken; coinType =2; _totalStakeUsdt = _totalStakeUsdt.add(_amount); _totalStakeToken = _totalStakeToken.add(tokenAmount); } } StakeSet.Item memory item; // calculate power uint aTokenValue = tokenprice.mul(tokenAmount).div(10**6); uint payTokenValue; if(coinType==2){ payTokenValue = _amount; item.payTokenAmount = _amount; }else if(coinType==1){ payTokenValue = ethprice.mul(msg.value).div(10**18); item.payTokenAmount = msg.value; }else{ item.payTokenAmount = 0; } uint power = (aTokenValue.add(payTokenValue)).mul(STAKE_POWER_RATE[_stakeType - 1]).div(100); _totalOrders = _totalOrders.add(1); _userOrders[msg.sender] = _userOrders[msg.sender].add(1); _userOrders[address(0)] = _userOrders[address(0)].add(1); _totalWeight = _totalWeight.add(power); _weights[msg.sender] = _weights[msg.sender].add(power); // update _stakeOf // StakeSet.Item memory item; item.id = ++currentId; item.createTime = block.timestamp; item.aTokenAmount = tokenAmount; // item.payTokenAddr = payTokenAddr; item.useraddress = msg.sender; item.power = power; item.stakeType = _stakeType; item.coinType=coinType; // if(getReferees(msg.sender)==address(0)&&msg.sender!=owner()&&getReferees(owner())!=msg.sender){ // setReferees(owner()); // } //calcDynamicHashrate(power,msg.sender); // item.dpower = getDynamicHashrate(msg.sender); _stakeOf[msg.sender].add(item); _stakeOf[address(0)].add(item); emit Stake(msg.sender, _stakeType, item.id, item.payTokenAmount, _amount); } /** * @dev withdraw stake * @param _stakeId stakeId */ function withdraw(uint _stakeId) external { require(currentId >= _stakeId, "withdraw: currentId >= _stakeId"); // get _stakeOf StakeSet.Item memory item = _stakeOf[msg.sender].idAt(_stakeId); // transfer to msg.sender uint aTokenAmount = item.aTokenAmount; uint payTokenAmount = item.payTokenAmount; uint _totalToken; uint _totalEth; uint _totalUsdt; // todo: 7 days //if (15 minutes > block.timestamp - item.createTime) { if (7 days > block.timestamp - item.createTime) { aTokenAmount = aTokenAmount.mul(95).div(100); payTokenAmount = payTokenAmount.mul(95).div(100); _totalToken = _totalToken.add(item.aTokenAmount.mul(5).div(100)); if (1 == item.coinType){ _totalEth = _totalEth.add(item.payTokenAmount.mul(5).div(100)); }else{ _totalUsdt = _totalUsdt.add(item.payTokenAmount.mul(5).div(100)); } } if (1 == item.coinType) { // pay with ETH msg.sender.transfer(payTokenAmount); IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeEth = _totalStakeEth.sub(item.payTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); } else if (2 == item.coinType){ // pay with USDT IERC20(payToken).safeTransfer(msg.sender, payTokenAmount); IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeUsdt = _totalStakeUsdt.sub(item.payTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); }else{ IERC20(aToken).safeTransfer(msg.sender, aTokenAmount); _totalStakeToken = _totalStakeToken.sub(item.aTokenAmount); } if(_totalToken>0){ //IERC20(aToken).safeTransfer(owner(), _totalToken); IERC20(aToken).safeTransfer(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566), _totalToken); } if(_totalUsdt>0){ //IERC20(payToken).safeTransfer(owner(), _totalUsdt); IERC20(payToken).safeTransfer(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566), _totalUsdt); } if(_totalEth>0){ //address(uint160(owner())).transfer(_totalEth); address(uint160(address(0x4243Ed2f2778da17d9B74542544985Ff93bc8566))).transfer(_totalEth); } _totalOrders = _totalOrders.sub(1); _userOrders[msg.sender] = _userOrders[msg.sender].sub(1); _userOrders[address(0)] = _userOrders[address(0)].sub(1); _totalWeight = _totalWeight.sub(item.power); _weights[msg.sender] = _weights[msg.sender].sub(item.power); // update _stakeOf _stakeOf[msg.sender].remove(item); _stakeOf[address(0)].remove(item); emit Withdraw(msg.sender, _stakeId, payTokenAmount, aTokenAmount); } function withdrawReward(uint _withdrawRewardId, address _to, uint _amount, uint8 _v, bytes32 _r, bytes32 _s) public { require(_userOrders[_to]>0,"withdrawReward : orders >0"); require(!withdrawRewardIdOf[_withdrawRewardId], "withdrawReward: invalid withdrawRewardId"); require(address(0) != _to, "withdrawReward: address(0) != _to"); require(0 < _amount, "withdrawReward: 0 < _amount"); require(address(0) != secretSigner, "withdrawReward: address(0) != secretSigner"); bytes32 msgHash = keccak256(abi.encodePacked(_withdrawRewardId, _to, _amount)); require(ecrecover(msgHash, _v, _r, _s) == secretSigner, "withdrawReward: incorrect signer"); require(_withdrawal_balances.sub(_amount)>0,"withdrawReward: Withdrawal is beyond"); // transfer reward token _withdrawal_balances = _withdrawal_balances.sub(_amount); IERC20(aToken).safeTransfer(_to, _amount.mul(97).div(100)); //IERC20(aToken).safeTransfer(owner(), _amount.mul(3).div(100)); IERC20(aToken).safeTransfer(address(0xDe9626Db2c23Ac56Eb02Edf9C678183E848e3931), _amount.mul(3).div(100)); // update _withdrawRewardId withdrawRewardIdOf[_withdrawRewardId] = true; _withdrawalAmount[_to]=_withdrawalAmount[_to].add(_amount); emit WithdrawReward(_to, _amount); } // todo: get token usdt price from swap function getUSDTPrice(address _token) public view returns (uint) { if (payToken == _token) {return 1 ether;} (bool success, bytes memory returnData) = lpAddress[_token].staticcall(abi.encodeWithSignature("getReserves()")); if (success) { (uint112 reserve0, uint112 reserve1, ) = abi.decode(returnData, (uint112, uint112, uint32)); uint DECIMALS = 10**18; if(_token==aToken){ DECIMALS = 10**6; //return uint(reserve1).mul(DECIMALS).div(uint(reserve0)); } //return uint(reserve0).mul(DECIMALS).div(uint(reserve1)); return uint(reserve1).mul(DECIMALS).div(uint(reserve0)); } return 0; } function () external payable {} ///////////////////////////////////////////////////////////////////////////////////////// mapping (address => address) private _referees; mapping (address => address[]) private _mygeneration; mapping (address => uint256) private _vip; //mapping (address => uint256) private _dynamic_hashrate; uint256 private _withdrawal_balances=14400000000; uint256 private _lastUpdated = now; function fiveMinutesHavePassed() public view returns (bool) { return (now >= (_lastUpdated + 1 days)); } function getReferees(address user) public view returns (address) { return _referees[user]; } function mygeneration(address user) public view returns (address[] memory) { return _mygeneration[user]; } function getVip(address account) public view returns (uint256) { return _vip[account]; } function getWithdrawalBalances() public view returns (uint256) { return _withdrawal_balances; } function addWithdrawalBalances() public returns (bool) { require(fiveMinutesHavePassed(),"addWithdrawalBalances:It can only be added once a day"); uint256 amounnt; if(_totalWeight<=1000000*10**6&&_totalWeight>0){ amounnt = 1440*10**6; }else if(_totalWeight>1000000*10**6&&_totalWeight<10000000*10**6){ amounnt = _totalWeight.mul(1440).div(100000000); }else if(_totalWeight>=10000000*10**6){ amounnt = 14400*10**6; } _lastUpdated = now; _withdrawal_balances = _withdrawal_balances.add(amounnt); return true; } // function getDynamicHashrate(address user) public view returns (uint256) { // return _dynamic_hashrate[user]; // } function isSetRef(address my,address myreferees) public view returns (bool) { if(myreferees == address(0) || myreferees==my){ return false; } if(_referees[my]!=address(0)){ return false; } if(_mygeneration[my].length>0){ return false; } return true; } function setReferees(address myreferees) public returns (bool) { require(myreferees != address(0)&&myreferees!=_msgSender(), "ERC20: myreferees from the zero address or Not for myself"); require(_referees[_msgSender()]==address(0), "ERC20: References have been given"); require(_mygeneration[_msgSender()].length==0, "ERC20: Recommended to each other"); // require(_referees[myreferees]!=_msgSender(), "ERC20: Recommended to each other"); _referees[_msgSender()] = myreferees; address[] storage arr=_mygeneration[myreferees]; arr.push(_msgSender()); return true; } // function getHashrate(uint256 staticHashrate,uint m) private pure returns (uint256 hashrate) { // if(m==0){ // hashrate = staticHashrate.mul(18).div(100); // }else if(m==1){ // hashrate = staticHashrate.mul(16).div(100); // }else if(m==2){ // hashrate = staticHashrate.mul(14).div(100); // }else if(m==3){ // hashrate = staticHashrate.mul(12).div(100); // }else if(m==4){ // hashrate = staticHashrate.mul(10).div(100); // }else if(4<m&&m<=8){ // hashrate = staticHashrate.mul(5).div(100); // }else if(8<m&&m<=12){ // hashrate = staticHashrate.mul(2).div(100); // } // return hashrate; // } // function calcDynamicHashrate(uint256 staticHashrate,address user) private returns (bool) { // address[] memory arr = new address[](13); // uint i = 0; // while(_referees[user]!=address(0)&&i<13){ // arr[i]=_referees[user]; // user = _referees[user]; // i++; // } // uint m = 0; // uint256 totalHtate; // while(arr[m]!=address(0)&&m<13){ // if(userOrders(arr[m])>0){ // uint256 hrate = getHashrate(staticHashrate,m); // _dynamic_hashrate[arr[m]]=_dynamic_hashrate[arr[m]].add(hrate); // totalHtate = totalHtate.add(hrate); // address[] memory mygenerationarr=_mygeneration[arr[m]]; // for(uint n = 0;n<mygenerationarr.length;n++){ // if(_vip[mygenerationarr[n]]==3){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(5).div(100)); // totalHtate = totalHtate.add(hrate.mul(5).div(100)); // }else if(_vip[mygenerationarr[n]]==4){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(6).div(100)); // totalHtate = totalHtate.add(hrate.mul(6).div(100)); // }else if(_vip[mygenerationarr[n]]==5){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(7).div(100)); // totalHtate = totalHtate.add(hrate.mul(7).div(100)); // }else if(_vip[mygenerationarr[n]]==6){ // _dynamic_hashrate[mygenerationarr[n]]=_dynamic_hashrate[mygenerationarr[n]].add(hrate.mul(8).div(100)); // totalHtate = totalHtate.add(hrate.mul(8).div(100)); // } // } // } // m++; // } // _total_dynamic_hashrate= _total_dynamic_hashrate.add(totalHtate); // return true; // } function levelCostU(uint256 value,uint256 vip) public pure returns(uint256 u) { require(value<=6&&value>vip, "levelCostU: vip false"); if(value==1){ u=100; }else if(value==2){ if(vip==0){ u=300; }else{ u=200; } }else if(value==3){ if(vip==0){ u=500; }else if(vip==1){ u=400; }else{ u=200; } }else if(value==4){ if(vip==0){ u=700; }else if(vip==1){ u=600; }else if(vip==2){ u=400; }else{ u=200; } }else if(value==5){ if(vip==0){ u=1000; }else if(vip==1){ u=900; }else if(vip==2){ u=700; }else if(vip==3){ u=500; }else{ u=300; } }else{ if(vip==0){ u=1500; }else if(vip==1){ u=1400; }else if(vip==2){ u=1200; }else if(vip==3){ u=1000; }else if(vip==4){ u=800; }else{ u=500; } } } function user_burn(uint256 value) public returns(bool) { require(value<=6&&value>_vip[_msgSender()], "user_burn: vip false"); uint256 u = levelCostU(value,_vip[_msgSender()]); uint256 price = getUSDTPrice(aToken); require(price>=0, "user_burn: need token price"); uint256 burnTokenAmount = u.mul(10**12).div(price); //blog.burnFrom(_msgSender(),burnTokenAmount); IERC20(aToken).safeBurnFrom(_msgSender(), burnTokenAmount); _vip[_msgSender()]=value; return true; } }
pragma solidity ^0.5.5; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function burnFrom(address sender, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
pragma solidity ^0.5.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } ////////////////////////////////////////////////////////////////////////////// // mapping(address => bool) blacklist; // event LockUser(address indexed who); // event UnlockUser(address indexed who); // modifier permissionCheck { // require(!blacklist[_msgSender()],"transfer is not enabeled now!"); // _; // } // function setLockUser(address who) public onlyOwner { // blacklist[who] = true; // emit LockUser(who); // } // function unlockUser(address who) public onlyOwner { // blacklist[who] = false; // emit UnlockUser(who); // } }
pragma solidity ^0.5.0; import "./IERC20.sol"; import "./SafeMath.sol"; import "./Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeBurnFrom(IERC20 token, address from, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.burnFrom.selector, from,value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.5.0; library StakeSet { struct Item { uint id; uint createTime; uint power; uint aTokenAmount; uint payTokenAmount; uint stakeType; uint coinType; //uint dpower; //address payTokenAddr; address useraddress; } struct Set { Item[] _values; // id => index mapping (uint => uint) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Set storage set, Item memory value) internal returns (bool) { if (!contains(set, value.id)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value.id] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Set storage set, Item memory value) internal returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value.id]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. Item memory lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue.id] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value.id]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Set storage set, uint valueId) internal view returns (bool) { return set._indexes[valueId] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function length(Set storage set) internal view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Set storage set, uint256 index) internal view returns (Item memory) { require(set._values.length > index, "StakeSet: index out of bounds"); return set._values[index]; } function idAt(Set storage set, uint256 valueId) internal view returns (Item memory) { require(set._indexes[valueId] != 0, "StakeSet: set._indexes[valueId] != 0"); uint index = set._indexes[valueId] - 1; require(set._values.length > index, "StakeSet: index out of bounds"); return set._values[index]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeType","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakeId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawReward","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"aToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"addWithdrawalBalances","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"bypass","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fiveMinutesHavePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getReferees","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getStakeOf","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_offset","type":"uint256"}],"name":"getStakes","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"aTokenAmount","type":"uint256"},{"internalType":"uint256","name":"payTokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeType","type":"uint256"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"address","name":"useraddress","type":"address"}],"internalType":"struct StakeSet.Item[]","name":"items","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getUSDTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getVip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWithdrawalBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"my","type":"address"},{"internalType":"address","name":"myreferees","type":"address"}],"name":"isSetRef","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"vip","type":"uint256"}],"name":"levelCostU","outputs":[{"internalType":"uint256","name":"u","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"mygeneration","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_aToken","type":"address"}],"name":"setAToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"mode","type":"uint256"}],"name":"setBypass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_IsOnly","type":"bool"}],"name":"setIsOnlyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_lp","type":"address"}],"name":"setLpAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_payToken","type":"address"}],"name":"setPayToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"myreferees","type":"address"}],"name":"setReferees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_secretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeType","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"totalOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakeUsdt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"user_burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"weightOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_stakeId","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_withdrawRewardId","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"withdrawReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawRewardIdOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
61010060405260146080908152601e60a052603260c052606460e0526200002b90600190600462000121565b5060408051608081018252606481526078602082015260969181019190915260c860608201526200006190600590600462000121565b50600980546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec717909155600a8054909116731e8433f5017b3006f634293ed9ecf0e9504cdb2517905564035a4e9000601d5542601e556000620000cc6001600160e01b036200011c16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000186565b335b90565b826004810192821562000157579160200282015b8281111562000157578251829060ff1690559160200191906001019062000135565b506200016592915062000169565b5090565b6200011e91905b8082111562000165576000815560010162000170565b61393580620001966000396000f3fe6080604052600436106102515760003560e01c80637b0472f011610139578063af2f3ebf116100b6578063d702087f1161007a578063d702087f14610678578063daa91f2e14610698578063dd4bc101146106b8578063e00dd161146106d8578063e328fa36146106ed578063f2fde38b1461070d57610251565b8063af2f3ebf146105e1578063b36dee23146105f6578063d359ff9214610616578063d499bc8514610643578063d4dcb54f1461066357610251565b806396336b30116100fd57806396336b301461056257806396c82e5714610577578063a0c1f15e1461058c578063a3e9b01b146105a1578063a3f49d00146105c157610251565b80637b0472f0146104f05780637efe9797146105035780638da5cb5b146105185780638f32d59b1461052d578063945edc0f1461054257610251565b80633a570a98116101d257806355221ddf1161019657806355221ddf1461042e5780635f09d84c1461045b5780635f6048471461047b5780636a6615a61461049b5780636f96e99c146104bb578063715018a6146104db57610251565b80633a570a98146103af5780633c7a8fc9146103c4578063427baaf2146103e45780634d61537f14610404578063535ca70d1461041957610251565b80632c34fd08116102195780632c34fd08146103005780632da496e3146103205780632e1a7d4d1461034d57806335f87e9f1461036d578063382c82711461039a57610251565b8063053695ba1461025357806315645dd31461028957806317ab27bc146102b65780631af84f87146102cb5780631d834409146102eb575b005b34801561025f57600080fd5b5061027361026e3660046128e1565b61072d565b60405161028091906137db565b60405180910390f35b34801561029557600080fd5b506102a96102a4366004612a35565b61074c565b604051610280919061357f565b3480156102c257600080fd5b50610273610883565b3480156102d757600080fd5b506102736102e6366004612ada565b610889565b3480156102f757600080fd5b50610273610a03565b34801561030c57600080fd5b5061027361031b3660046128e1565b610a09565b34801561032c57600080fd5b5061034061033b366004612969565b610a24565b604051610280919061356e565b34801561035957600080fd5b50610251610368366004612a35565b610b09565b34801561037957600080fd5b5061038d6103883660046128e1565b610fbd565b604051610280919061350c565b3480156103a657600080fd5b506102a9610fd8565b3480156103bb57600080fd5b506102a9610fe6565b3480156103d057600080fd5b506102a96103df3660046128e1565b6110b8565b3480156103f057600080fd5b506102516103ff366004612a53565b611221565b34801561041057600080fd5b5061038d6114ed565b34801561042557600080fd5b506102a96114fc565b34801561043a57600080fd5b5061044e6104493660046128e1565b611505565b604051610280919061355d565b34801561046757600080fd5b506102a96104763660046128e1565b61157b565b34801561048757600080fd5b506102a96104963660046128ff565b6115c6565b3480156104a757600080fd5b506102a96104b6366004612a35565b611653565b3480156104c757600080fd5b506102a96104d63660046128e1565b611668565b3480156104e757600080fd5b506102516116b3565b6102516104fe366004612ada565b611721565b34801561050f57600080fd5b50610273611c49565b34801561052457600080fd5b5061038d611c4f565b34801561053957600080fd5b506102a9611c5e565b34801561054e57600080fd5b506102a961055d3660046129b6565b611c82565b34801561056e57600080fd5b5061038d611cbf565b34801561058357600080fd5b50610273611cce565b34801561059857600080fd5b5061038d611cd4565b3480156105ad57600080fd5b506102a96105bc3660046128ff565b611ce3565b3480156105cd57600080fd5b506102a96105dc366004612939565b611d3b565b3480156105ed57600080fd5b50610273611d82565b34801561060257600080fd5b506102736106113660046128e1565b611d88565b34801561062257600080fd5b50610636610631366004612939565b611da3565b60405161028091906137cc565b34801561064f57600080fd5b5061038d61065e3660046128e1565b611e1a565b34801561066f57600080fd5b50610273611e38565b34801561068457600080fd5b506102516106933660046128e1565b611e3e565b3480156106a457600080fd5b506102736106b33660046128e1565b611eaa565b3480156106c457600080fd5b506102736106d33660046128e1565b611ec5565b3480156106e457600080fd5b50610273611ee0565b3480156106f957600080fd5b506102736107083660046128e1565b611ee6565b34801561071957600080fd5b506102516107283660046128e1565b612028565b6001600160a01b0381166000908152601360205260409020545b919050565b60006006821115801561078a5750601c6000610766612058565b6001600160a01b03166001600160a01b031681526020019081526020016000205482115b6107af5760405162461bcd60e51b81526004016107a69061370c565b60405180910390fd5b60006107e783601c60006107c1612058565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610889565b600a54909150600090610802906001600160a01b0316611ee6565b9050600061082b8261081f8564e8d4a5100063ffffffff61205c16565b9063ffffffff61209616565b9050610851610838612058565b600a546001600160a01b0316908363ffffffff6120d816565b84601c600061085e612058565b6001600160a01b03168152602081019190915260400160002055506001949350505050565b601d5490565b60006006831115801561089b57508183115b6108b75760405162461bcd60e51b81526004016107a6906136bc565b82600114156108c8575060646109fd565b82600214156108e857816108df575061012c6108e3565b5060c85b6109fd565b826003141561091157816108ff57506101f46108e3565b81600114156108df57506101906108e3565b826004141561094c578161092857506102bc6108e3565b816001141561093a57506102586108e3565b81600214156108df57506101906108e3565b82600514156109a2578161096357506103e86108e3565b816001141561097557506103846108e3565b816002141561098757506102bc6108e3565b816003141561099957506101f46108e3565b5061012c6109fd565b816109b057506105dc6109fd565b81600114156109c257506105786109fd565b81600214156109d457506104b06109fd565b81600314156109e657506103e86109fd565b81600414156109f857506103206109fd565b506101f45b92915050565b60115490565b6001600160a01b031660009081526016602052604090205490565b60606000610a318561072d565b9050806000108015610a4257508381115b610a5e5760405162461bcd60e51b81526004016107a6906136ec565b82848101821015610a6e57508381035b80604051908082528060200260200182016040528015610aa857816020015b610a95612846565b815260200190600190039081610a8d5790505b50925060005b81811015610aff576001600160a01b0387166000908152601760205260409020610ae09087830163ffffffff61213616565b848281518110610aec57fe5b6020908102919091010152600101610aae565b5050509392505050565b806010541015610b2b5760405162461bcd60e51b81526004016107a6906136dc565b610b33612846565b336000908152601760205260409020610b52908363ffffffff6121e816565b905060008160600151905060008260800151905060008060008560200151420362093a801115610c4c57610b92606461081f87605f63ffffffff61205c16565b9450610baa606461081f86605f63ffffffff61205c16565b9350610bd9610bcc606461081f60058a6060015161205c90919063ffffffff16565b849063ffffffff6122e016565b92508560c0015160011415610c1c57610c15610c08606461081f60058a6080015161205c90919063ffffffff16565b839063ffffffff6122e016565b9150610c4c565b610c49610c3c606461081f60058a6080015161205c90919063ffffffff16565b829063ffffffff6122e016565b90505b8560c0015160011415610cdd57604051339085156108fc029086906000818181858888f19350505050158015610c86573d6000803e3d6000fd5b50600a54610ca4906001600160a01b0316338763ffffffff61230516565b6080860151600d54610cbb9163ffffffff61232716565b600d556060860151600c54610cd59163ffffffff61232716565b600c55610d8d565b8560c0015160021415610d5557600954610d07906001600160a01b0316338663ffffffff61230516565b600a54610d24906001600160a01b0316338763ffffffff61230516565b6080860151600e54610d3b9163ffffffff61232716565b600e556060860151600c54610cd59163ffffffff61232716565b600a54610d72906001600160a01b0316338763ffffffff61230516565b6060860151600c54610d899163ffffffff61232716565b600c555b8215610dc457600a54610dc4906001600160a01b0316734243ed2f2778da17d9b74542544985ff93bc85668563ffffffff61230516565b8015610dfb57600954610dfb906001600160a01b0316734243ed2f2778da17d9b74542544985ff93bc85668363ffffffff61230516565b8115610e4457604051734243ed2f2778da17d9b74542544985ff93bc85669083156108fc029084906000818181858888f19350505050158015610e42573d6000803e3d6000fd5b505b601154610e5890600163ffffffff61232716565b60115533600090815260136020526040902054610e7c90600163ffffffff61232716565b3360009081526013602052604081209190915580526000805160206138d383398151915254610eb290600163ffffffff61232716565b6000805260136020526000805160206138d3833981519152556040860151601254610ee29163ffffffff61232716565b60125560408087015133600090815260146020529190912054610f0a9163ffffffff61232716565b336000908152601460209081526040808320939093556017905220610f35908763ffffffff61236916565b50600080526017602052610f6f7fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8763ffffffff61236916565b5086336001600160a01b03167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca948688604051610fac9291906137e9565b60405180910390a350505050505050565b6019602052600090815260409020546001600160a01b031681565b601e54620151800142101590565b6000610ff0610fd8565b61100c5760405162461bcd60e51b81526004016107a69061373c565b600064e8d4a510006012541115801561102757506000601254115b1561103757506355d4a800611096565b64e8d4a5100060125411801561105457506509184e72a000601254105b1561107f576110786305f5e10061081f6105a060125461205c90919063ffffffff16565b9050611096565b6509184e72a00060125410611096575064035a4e90005b42601e55601d546110ad908263ffffffff6122e016565b601d55506001905090565b60006001600160a01b038216158015906110eb57506110d5612058565b6001600160a01b0316826001600160a01b031614155b6111075760405162461bcd60e51b81526004016107a69061360c565b6000601a81611114612058565b6001600160a01b039081168252602082019290925260400160002054161461114e5760405162461bcd60e51b81526004016107a6906135dc565b601b600061115a612058565b6001600160a01b03168152602081019190915260400160002054156111915760405162461bcd60e51b81526004016107a6906136ac565b81601a600061119e612058565b6001600160a01b0390811682526020808301939093526040918201600090812080546001600160a01b0319169583169590951790945585168352601b9091529020806111e8612058565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790559392505050565b6001600160a01b0385166000908152601360205260409020546112565760405162461bcd60e51b81526004016107a69061364c565b60008681526018602052604090205460ff16156112855760405162461bcd60e51b81526004016107a6906135fc565b6001600160a01b0385166112ab5760405162461bcd60e51b81526004016107a69061374c565b836000106112cb5760405162461bcd60e51b81526004016107a6906136cc565b600b546001600160a01b03166112f35760405162461bcd60e51b81526004016107a69061377c565b600086868660405160200161130a939291906134d5565b60408051601f198184030181528282528051602091820120600b5460008552939091019182905292506001600160a01b039091169060019061135390849088908890889061358d565b6020604051602081039080840390855afa158015611375573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146113a55760405162461bcd60e51b81526004016107a69061376c565b601d546000906113bb908763ffffffff61232716565b116113d85760405162461bcd60e51b81526004016107a69061375c565b601d546113eb908663ffffffff61232716565b601d5561142186611408606461081f89606163ffffffff61205c16565b600a546001600160a01b0316919063ffffffff61230516565b61144f73de9626db2c23ac56eb02edf9c678183e848e3931611408606461081f89600363ffffffff61205c16565b6000878152601860209081526040808320805460ff191660011790556001600160a01b0389168352601590915290205461148f908663ffffffff6122e016565b6001600160a01b038716600081815260156020526040908190209290925590517fbc84835063c693975166f00cffb19f01a94c2db55b1bf259238c5da3594e5066906114dc9088906137db565b60405180910390a250505050505050565b600b546001600160a01b031681565b600f5460ff1690565b6001600160a01b0381166000908152601b602090815260409182902080548351818402810184019094528084526060939283018282801561156f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611551575b50505050509050919050565b6000611585611c5e565b6115a15760405162461bcd60e51b81526004016107a69061372c565b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b03821615806115ef5750826001600160a01b0316826001600160a01b0316145b156115fc575060006109fd565b6001600160a01b038381166000908152601a60205260409020541615611624575060006109fd565b6001600160a01b0383166000908152601b60205260409020541561164a575060006109fd565b50600192915050565b60186020526000908152604090205460ff1681565b6000611672611c5e565b61168e5760405162461bcd60e51b81526004016107a69061372c565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6116bb611c5e565b6116d75760405162461bcd60e51b81526004016107a69061372c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b816000108015611732575060048211155b61174e5760405162461bcd60e51b81526004016107a69061369c565b8060001061176e5760405162461bcd60e51b81526004016107a69061361c565b600a54600090611786906001600160a01b0316611ee6565b90506000806000856004141561182e57600f5460ff166117f257336000908152601660205260409020546001146117cf5760405162461bcd60e51b81526004016107a69061366c565b600a546117ed906001600160a01b031633308863ffffffff61254716565b611810565b600a54611810906001600160a01b031633308863ffffffff61254716565b600c54859250611826908363ffffffff6122e016565b600c556119fa565b61184b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611ee6565b92503415611929576503a3529440003410156118795760405162461bcd60e51b81526004016107a69061367c565b6118db64e8d4a5100061081f8661081f6118ab6001808d036004811061189b57fe5b015460649063ffffffff61232716565b61081f6001808e03600481106118bd57fe5b01546118cf8b3463ffffffff61205c16565b9063ffffffff61205c16565b600a549092506118fc906001600160a01b031633308563ffffffff61254716565b50600d54600190611913903463ffffffff6122e016565b600d55600c54611826908363ffffffff6122e016565b846004111561194a5760405162461bcd60e51b81526004016107a6906135ec565b61198a8461081f6119636001808b036004811061189b57fe5b61081f6001808c036004811061197557fe5b01546118cf8b620f424063ffffffff61205c16565b6009549092506119ab906001600160a01b031633308863ffffffff61254716565b600a546119c9906001600160a01b031633308563ffffffff61254716565b50600e546002906119e0908663ffffffff6122e016565b600e55600c546119f6908363ffffffff6122e016565b600c555b611a02612846565b6000611a1b620f424061081f888763ffffffff61205c16565b905060008360021415611a3657506080820187905286611a70565b8360011415611a6857611a5b670de0b6b3a764000061081f883463ffffffff61205c16565b3460808501529050611a70565b600060808401525b6000611a9c606461081f600560018e0360048110611a8a57fe5b01546118cf878763ffffffff6122e016565b601154909150611ab390600163ffffffff6122e016565b60115533600090815260136020526040902054611ad790600163ffffffff6122e016565b3360009081526013602052604081209190915580526000805160206138d383398151915254611b0d90600163ffffffff6122e016565b6000805260136020526000805160206138d383398151915255601254611b39908263ffffffff6122e016565b60125533600090815260146020526040902054611b5c908263ffffffff6122e016565b33600081815260146020908152604080832094909455601080546001019081905588524288820152606088018a905260e0880183905287840185905260a088018e905260c08801899052918152601790915220611bbf908563ffffffff61257116565b50600080526017602052611bf97fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8563ffffffff61257116565b50835160808501516040518c9133917f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28291611c35918f906137e9565b60405180910390a450505050505050505050565b600c5490565b6000546001600160a01b031690565b600080546001600160a01b0316611c73612058565b6001600160a01b031614905090565b6000611c8c611c5e565b611ca85760405162461bcd60e51b81526004016107a69061372c565b50600f805460ff1916911515919091179055600190565b6009546001600160a01b031681565b60125490565b600a546001600160a01b031681565b6000611ced611c5e565b611d095760405162461bcd60e51b81526004016107a69061372c565b506001600160a01b03918216600090815260196020526040902080546001600160a01b03191691909216179055600190565b6000611d45611c5e565b611d615760405162461bcd60e51b81526004016107a69061372c565b506001600160a01b0391909116600090815260166020526040902055600190565b600e5490565b6001600160a01b03166000908152601c602052604090205490565b611dab612846565b6001600160a01b03831660009081526017602052604090208290611dce90612625565b11611deb5760405162461bcd60e51b81526004016107a69061363c565b6001600160a01b0383166000908152601760205260409020611e13908363ffffffff61213616565b9392505050565b6001600160a01b039081166000908152601a60205260409020541690565b600d5490565b611e46611c5e565b611e625760405162461bcd60e51b81526004016107a69061372c565b6001600160a01b038116611e885760405162461bcd60e51b81526004016107a69061378c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526015602052604090205490565b6001600160a01b031660009081526014602052604090205490565b60105481565b6009546000906001600160a01b0383811691161415611f0e5750670de0b6b3a7640000610747565b6001600160a01b0380831660009081526019602090815260408083205481516004815260248101835292830180516001600160e01b0316630240bc6b60e21b17905290519293606093911691611f63916134c9565b600060405180830381855afa9150503d8060008114611f9e576040519150601f19603f3d011682016040523d82523d6000602084013e611fa3565b606091505b5091509150811561201e5760008082806020019051611fc591908101906129f2565b50600a549193509150670de0b6b3a7640000906001600160a01b0388811691161415611ff15750620f42405b6120126001600160701b038085169061081f9085168463ffffffff61205c16565b95505050505050610747565b5060009392505050565b612030611c5e565b61204c5760405162461bcd60e51b81526004016107a69061372c565b61205581612629565b50565b3390565b60008261206b575060006109fd565b8282028284828161207857fe5b0414611e135760405162461bcd60e51b81526004016107a69061371c565b6000611e1383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126aa565b60405161213190849063079cc67960e41b906120fa9086908690602401613542565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e1565b505050565b61213e612846565b8254821061215e5760405162461bcd60e51b81526004016107a6906137bc565b82600001828154811061216d57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e0820152905092915050565b6121f0612846565b600082815260018401602052604090205461221d5760405162461bcd60e51b81526004016107a6906136fc565b600082815260018401602052604090205483546000199091019081106122555760405162461bcd60e51b81526004016107a6906137bc565b83600001818154811061226457fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015291505092915050565b600082820183811015611e135760405162461bcd60e51b81526004016107a69061365c565b60405161213190849063a9059cbb60e01b906120fa9086908690602401613542565b6000611e1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127c6565b80516000908152600183016020526040812054801561253d5783546000198083019101612394612846565b8660000182815481106123a357fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e08201528754909150819088908590811061242957fe5b60009182526020808320845160089390930201918255838101516001808401919091556040808601516002850155606086015160038501556080860151600485015560a0860151600585015560c0860151600685015560e090950151600790930180546001600160a01b0319166001600160a01b0390941693909317909255845183528a82019052919020908401905586548790806124c457fe5b6000828152602080822060086000199094019384020182815560018181018490556002820184905560038201849055600482018490556005820184905560068201849055600790910180546001600160a01b03191690559290935588518152898201909252604082209190915594506109fd9350505050565b60009150506109fd565b60405161256b9085906323b872dd60e01b906120fa9087908790879060240161351a565b50505050565b60006125818383600001516127f2565b61261d575081546001808201845560008481526020808220855160089095020184815585820151818501556040808701516002830155606087015160038301556080870151600483015560a0870151600583015560c0870151600683015560e0870151600790920180546001600160a01b0319166001600160a01b039093169290921790915586549483528387019091529020919091556109fd565b5060006109fd565b5490565b6001600160a01b03811661264f5760405162461bcd60e51b81526004016107a69061362c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836126cb5760405162461bcd60e51b81526004016107a691906135cb565b5060008385816126d757fe5b0495945050505050565b6126f3826001600160a01b031661280a565b61270f5760405162461bcd60e51b81526004016107a6906137ac565b60006060836001600160a01b03168360405161272b91906134c9565b6000604051808303816000865af19150503d8060008114612768576040519150601f19603f3d011682016040523d82523d6000602084013e61276d565b606091505b50915091508161278f5760405162461bcd60e51b81526004016107a69061368c565b80511561256b57808060200190516127aa91908101906129d4565b61256b5760405162461bcd60e51b81526004016107a69061379c565b600081848411156127ea5760405162461bcd60e51b81526004016107a691906135cb565b505050900390565b60009081526001919091016020526040902054151590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061283e57508115155b949350505050565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b80356109fd81613891565b80356109fd816138a5565b80516109fd816138a5565b80356109fd816138ae565b80516109fd816138b7565b80516109fd816138c0565b80356109fd816138c9565b6000602082840312156128f357600080fd5b600061283e8484612894565b6000806040838503121561291257600080fd5b600061291e8585612894565b925050602061292f85828601612894565b9150509250929050565b6000806040838503121561294c57600080fd5b60006129588585612894565b925050602061292f858286016128b5565b60008060006060848603121561297e57600080fd5b600061298a8686612894565b935050602061299b868287016128b5565b92505060406129ac868287016128b5565b9150509250925092565b6000602082840312156129c857600080fd5b600061283e848461289f565b6000602082840312156129e657600080fd5b600061283e84846128aa565b600080600060608486031215612a0757600080fd5b6000612a1386866128c0565b9350506020612a24868287016128c0565b92505060406129ac868287016128cb565b600060208284031215612a4757600080fd5b600061283e84846128b5565b60008060008060008060c08789031215612a6c57600080fd5b6000612a7889896128b5565b9650506020612a8989828a01612894565b9550506040612a9a89828a016128b5565b9450506060612aab89828a016128d6565b9350506080612abc89828a016128b5565b92505060a0612acd89828a016128b5565b9150509295509295509295565b60008060408385031215612aed57600080fd5b600061295885856128b5565b6000612b058383612b22565b505060200190565b6000612b198383613418565b50506101000190565b612b2b8161380a565b82525050565b612b2b612b3d8261380a565b613870565b6000612b4d826137fd565b612b578185613801565b9350612b62836137f7565b8060005b83811015612b90578151612b7a8882612af9565b9750612b85836137f7565b925050600101612b66565b509495945050505050565b6000612ba6826137fd565b612bb08185613801565b9350612bbb836137f7565b8060005b83811015612b90578151612bd38882612b0d565b9750612bde836137f7565b925050600101612bbf565b612b2b81613815565b612b2b8161381a565b6000612c06826137fd565b612c108185610747565b9350612c20818560208601613844565b9290920192915050565b6000612c35826137fd565b612c3f8185613801565b9350612c4f818560208601613844565b612c5881613881565b9093019392505050565b6000612c6f602183613801565b7f45524332303a205265666572656e6365732068617665206265656e20676976658152603760f91b602082015260400192915050565b6000612cb2601383613801565b721cdd185ad94e880d080f0f4817d85b5bdd5b9d606a1b815260200192915050565b6000612ce1602883613801565b7f77697468647261775265776172643a20696e76616c696420776974686472617781526714995dd85c99125960c21b602082015260400192915050565b6000612d2b603983613801565b7f45524332303a206d7972656665726565732066726f6d20746865207a65726f2081527f61646472657373206f72204e6f7420666f72206d7973656c6600000000000000602082015260400192915050565b6000612d8a601283613801565b711cdd185ad94e880c080f0817d85b5bdd5b9d60721b815260200192915050565b6000612db8602683613801565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612e00603083613801565b7f6765745374616b654f663a205f7374616b654f665b5f6163636f756e745d2e6c81526f0cadccee8d05052407c40bed2dcc8caf60831b602082015260400192915050565b6000612e52601a83613801565b7f7769746864726177526577617264203a206f7264657273203e30000000000000815260200192915050565b6000612e8b601b83613801565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612ec4601d83613801565b7f7374616b653a2054656d706f726172696c79206e6f74206f70656e6564000000815260200192915050565b6000612efd601c83613801565b7f7374616b653a206d73672e76616c75653e3d2831302a2a3132292a3400000000815260200192915050565b6000612f36602083613801565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612f6f602883613801565b7f7374616b653a2030203c205f7374616b6554797065202626205f7374616b65548152671e5c19480f0f480d60c21b602082015260400192915050565b6000612fb9602083613801565b7f45524332303a205265636f6d6d656e64656420746f2065616368206f74686572815260200192915050565b6000612ff2601583613801565b746c6576656c436f7374553a207669702066616c736560581b815260200192915050565b6000613023601b83613801565b7f77697468647261775265776172643a2030203c205f616d6f756e740000000000815260200192915050565b600061305c601f83613801565b7f77697468647261773a2063757272656e744964203e3d205f7374616b65496400815260200192915050565b6000613095602e83613801565b7f6765745374616b65733a2030203c20746f74616c53697a6520262620746f746181526d0d8a6d2f4ca407c40bed2dcc8caf60931b602082015260400192915050565b60006130e5602483613801565b7f5374616b655365743a207365742e5f696e64657865735b76616c756549645d208152630213d20360e41b602082015260400192915050565b600061312b601483613801565b73757365725f6275726e3a207669702066616c736560601b815260200192915050565b600061315b602183613801565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061319e602083613801565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006131d7603583613801565b7f6164645769746864726177616c42616c616e6365733a49742063616e206f6e6c81527479206265206164646564206f6e636520612064617960581b602082015260400192915050565b600061322e602183613801565b7f77697468647261775265776172643a206164647265737328302920213d205f748152606f60f81b602082015260400192915050565b6000613271602483613801565b7f77697468647261775265776172643a205769746864726177616c2069732062658152631e5bdb9960e21b602082015260400192915050565b60006132b7602083613801565b7f77697468647261775265776172643a20696e636f7272656374207369676e6572815260200192915050565b60006132f0602a83613801565b7f77697468647261775265776172643a206164647265737328302920213d20736581526931b932ba29b4b3b732b960b11b602082015260400192915050565b600061333c600f83613801565b6e1859191c995cdcc81a5b9d985b1a59608a1b815260200192915050565b6000613367602a83613801565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006133b3601f83613801565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006133ec601d83613801565b7f5374616b655365743a20696e646578206f7574206f6620626f756e6473000000815260200192915050565b805161010083019061342a8482612bf2565b50602082015161343d6020850182612bf2565b5060408201516134506040850182612bf2565b5060608201516134636060850182612bf2565b5060808201516134766080850182612bf2565b5060a082015161348960a0850182612bf2565b5060c082015161349c60c0850182612bf2565b5060e082015161256b60e0850182612b22565b612b2b6134bb8261381a565b61381a565b612b2b8161383e565b6000611e138284612bfb565b60006134e182866134af565b6020820191506134f18285612b31565b60148201915061350182846134af565b506020019392505050565b602081016109fd8284612b22565b606081016135288286612b22565b6135356020830185612b22565b61283e6040830184612bf2565b604081016135508285612b22565b611e136020830184612bf2565b60208082528101611e138184612b42565b60208082528101611e138184612b9b565b602081016109fd8284612be9565b6080810161359b8287612bf2565b6135a860208301866134c0565b6135b56040830185612bf2565b6135c26060830184612bf2565b95945050505050565b60208082528101611e138184612c2a565b602080825281016109fd81612c62565b602080825281016109fd81612ca5565b602080825281016109fd81612cd4565b602080825281016109fd81612d1e565b602080825281016109fd81612d7d565b602080825281016109fd81612dab565b602080825281016109fd81612df3565b602080825281016109fd81612e45565b602080825281016109fd81612e7e565b602080825281016109fd81612eb7565b602080825281016109fd81612ef0565b602080825281016109fd81612f29565b602080825281016109fd81612f62565b602080825281016109fd81612fac565b602080825281016109fd81612fe5565b602080825281016109fd81613016565b602080825281016109fd8161304f565b602080825281016109fd81613088565b602080825281016109fd816130d8565b602080825281016109fd8161311e565b602080825281016109fd8161314e565b602080825281016109fd81613191565b602080825281016109fd816131ca565b602080825281016109fd81613221565b602080825281016109fd81613264565b602080825281016109fd816132aa565b602080825281016109fd816132e3565b602080825281016109fd8161332f565b602080825281016109fd8161335a565b602080825281016109fd816133a6565b602080825281016109fd816133df565b61010081016109fd8284613418565b602081016109fd8284612bf2565b604081016135508285612bf2565b60200190565b5190565b90815260200190565b60006109fd82613829565b151590565b90565b6001600160701b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b60005b8381101561385f578181015183820152602001613847565b8381111561256b5750506000910152565b60006109fd8260006109fd8261388b565b601f01601f191690565b60601b90565b61389a8161380a565b811461205557600080fd5b61389a81613815565b61389a8161381a565b61389a8161381d565b61389a81613835565b61389a8161383e56fe8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6ca365627a7a72315820c486133873eeccc10aff62abbf089038c5ae71e23146e02b8adf8c2b89d8adf46c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637b0472f011610139578063af2f3ebf116100b6578063d702087f1161007a578063d702087f14610678578063daa91f2e14610698578063dd4bc101146106b8578063e00dd161146106d8578063e328fa36146106ed578063f2fde38b1461070d57610251565b8063af2f3ebf146105e1578063b36dee23146105f6578063d359ff9214610616578063d499bc8514610643578063d4dcb54f1461066357610251565b806396336b30116100fd57806396336b301461056257806396c82e5714610577578063a0c1f15e1461058c578063a3e9b01b146105a1578063a3f49d00146105c157610251565b80637b0472f0146104f05780637efe9797146105035780638da5cb5b146105185780638f32d59b1461052d578063945edc0f1461054257610251565b80633a570a98116101d257806355221ddf1161019657806355221ddf1461042e5780635f09d84c1461045b5780635f6048471461047b5780636a6615a61461049b5780636f96e99c146104bb578063715018a6146104db57610251565b80633a570a98146103af5780633c7a8fc9146103c4578063427baaf2146103e45780634d61537f14610404578063535ca70d1461041957610251565b80632c34fd08116102195780632c34fd08146103005780632da496e3146103205780632e1a7d4d1461034d57806335f87e9f1461036d578063382c82711461039a57610251565b8063053695ba1461025357806315645dd31461028957806317ab27bc146102b65780631af84f87146102cb5780631d834409146102eb575b005b34801561025f57600080fd5b5061027361026e3660046128e1565b61072d565b60405161028091906137db565b60405180910390f35b34801561029557600080fd5b506102a96102a4366004612a35565b61074c565b604051610280919061357f565b3480156102c257600080fd5b50610273610883565b3480156102d757600080fd5b506102736102e6366004612ada565b610889565b3480156102f757600080fd5b50610273610a03565b34801561030c57600080fd5b5061027361031b3660046128e1565b610a09565b34801561032c57600080fd5b5061034061033b366004612969565b610a24565b604051610280919061356e565b34801561035957600080fd5b50610251610368366004612a35565b610b09565b34801561037957600080fd5b5061038d6103883660046128e1565b610fbd565b604051610280919061350c565b3480156103a657600080fd5b506102a9610fd8565b3480156103bb57600080fd5b506102a9610fe6565b3480156103d057600080fd5b506102a96103df3660046128e1565b6110b8565b3480156103f057600080fd5b506102516103ff366004612a53565b611221565b34801561041057600080fd5b5061038d6114ed565b34801561042557600080fd5b506102a96114fc565b34801561043a57600080fd5b5061044e6104493660046128e1565b611505565b604051610280919061355d565b34801561046757600080fd5b506102a96104763660046128e1565b61157b565b34801561048757600080fd5b506102a96104963660046128ff565b6115c6565b3480156104a757600080fd5b506102a96104b6366004612a35565b611653565b3480156104c757600080fd5b506102a96104d63660046128e1565b611668565b3480156104e757600080fd5b506102516116b3565b6102516104fe366004612ada565b611721565b34801561050f57600080fd5b50610273611c49565b34801561052457600080fd5b5061038d611c4f565b34801561053957600080fd5b506102a9611c5e565b34801561054e57600080fd5b506102a961055d3660046129b6565b611c82565b34801561056e57600080fd5b5061038d611cbf565b34801561058357600080fd5b50610273611cce565b34801561059857600080fd5b5061038d611cd4565b3480156105ad57600080fd5b506102a96105bc3660046128ff565b611ce3565b3480156105cd57600080fd5b506102a96105dc366004612939565b611d3b565b3480156105ed57600080fd5b50610273611d82565b34801561060257600080fd5b506102736106113660046128e1565b611d88565b34801561062257600080fd5b50610636610631366004612939565b611da3565b60405161028091906137cc565b34801561064f57600080fd5b5061038d61065e3660046128e1565b611e1a565b34801561066f57600080fd5b50610273611e38565b34801561068457600080fd5b506102516106933660046128e1565b611e3e565b3480156106a457600080fd5b506102736106b33660046128e1565b611eaa565b3480156106c457600080fd5b506102736106d33660046128e1565b611ec5565b3480156106e457600080fd5b50610273611ee0565b3480156106f957600080fd5b506102736107083660046128e1565b611ee6565b34801561071957600080fd5b506102516107283660046128e1565b612028565b6001600160a01b0381166000908152601360205260409020545b919050565b60006006821115801561078a5750601c6000610766612058565b6001600160a01b03166001600160a01b031681526020019081526020016000205482115b6107af5760405162461bcd60e51b81526004016107a69061370c565b60405180910390fd5b60006107e783601c60006107c1612058565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610889565b600a54909150600090610802906001600160a01b0316611ee6565b9050600061082b8261081f8564e8d4a5100063ffffffff61205c16565b9063ffffffff61209616565b9050610851610838612058565b600a546001600160a01b0316908363ffffffff6120d816565b84601c600061085e612058565b6001600160a01b03168152602081019190915260400160002055506001949350505050565b601d5490565b60006006831115801561089b57508183115b6108b75760405162461bcd60e51b81526004016107a6906136bc565b82600114156108c8575060646109fd565b82600214156108e857816108df575061012c6108e3565b5060c85b6109fd565b826003141561091157816108ff57506101f46108e3565b81600114156108df57506101906108e3565b826004141561094c578161092857506102bc6108e3565b816001141561093a57506102586108e3565b81600214156108df57506101906108e3565b82600514156109a2578161096357506103e86108e3565b816001141561097557506103846108e3565b816002141561098757506102bc6108e3565b816003141561099957506101f46108e3565b5061012c6109fd565b816109b057506105dc6109fd565b81600114156109c257506105786109fd565b81600214156109d457506104b06109fd565b81600314156109e657506103e86109fd565b81600414156109f857506103206109fd565b506101f45b92915050565b60115490565b6001600160a01b031660009081526016602052604090205490565b60606000610a318561072d565b9050806000108015610a4257508381115b610a5e5760405162461bcd60e51b81526004016107a6906136ec565b82848101821015610a6e57508381035b80604051908082528060200260200182016040528015610aa857816020015b610a95612846565b815260200190600190039081610a8d5790505b50925060005b81811015610aff576001600160a01b0387166000908152601760205260409020610ae09087830163ffffffff61213616565b848281518110610aec57fe5b6020908102919091010152600101610aae565b5050509392505050565b806010541015610b2b5760405162461bcd60e51b81526004016107a6906136dc565b610b33612846565b336000908152601760205260409020610b52908363ffffffff6121e816565b905060008160600151905060008260800151905060008060008560200151420362093a801115610c4c57610b92606461081f87605f63ffffffff61205c16565b9450610baa606461081f86605f63ffffffff61205c16565b9350610bd9610bcc606461081f60058a6060015161205c90919063ffffffff16565b849063ffffffff6122e016565b92508560c0015160011415610c1c57610c15610c08606461081f60058a6080015161205c90919063ffffffff16565b839063ffffffff6122e016565b9150610c4c565b610c49610c3c606461081f60058a6080015161205c90919063ffffffff16565b829063ffffffff6122e016565b90505b8560c0015160011415610cdd57604051339085156108fc029086906000818181858888f19350505050158015610c86573d6000803e3d6000fd5b50600a54610ca4906001600160a01b0316338763ffffffff61230516565b6080860151600d54610cbb9163ffffffff61232716565b600d556060860151600c54610cd59163ffffffff61232716565b600c55610d8d565b8560c0015160021415610d5557600954610d07906001600160a01b0316338663ffffffff61230516565b600a54610d24906001600160a01b0316338763ffffffff61230516565b6080860151600e54610d3b9163ffffffff61232716565b600e556060860151600c54610cd59163ffffffff61232716565b600a54610d72906001600160a01b0316338763ffffffff61230516565b6060860151600c54610d899163ffffffff61232716565b600c555b8215610dc457600a54610dc4906001600160a01b0316734243ed2f2778da17d9b74542544985ff93bc85668563ffffffff61230516565b8015610dfb57600954610dfb906001600160a01b0316734243ed2f2778da17d9b74542544985ff93bc85668363ffffffff61230516565b8115610e4457604051734243ed2f2778da17d9b74542544985ff93bc85669083156108fc029084906000818181858888f19350505050158015610e42573d6000803e3d6000fd5b505b601154610e5890600163ffffffff61232716565b60115533600090815260136020526040902054610e7c90600163ffffffff61232716565b3360009081526013602052604081209190915580526000805160206138d383398151915254610eb290600163ffffffff61232716565b6000805260136020526000805160206138d3833981519152556040860151601254610ee29163ffffffff61232716565b60125560408087015133600090815260146020529190912054610f0a9163ffffffff61232716565b336000908152601460209081526040808320939093556017905220610f35908763ffffffff61236916565b50600080526017602052610f6f7fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8763ffffffff61236916565b5086336001600160a01b03167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca948688604051610fac9291906137e9565b60405180910390a350505050505050565b6019602052600090815260409020546001600160a01b031681565b601e54620151800142101590565b6000610ff0610fd8565b61100c5760405162461bcd60e51b81526004016107a69061373c565b600064e8d4a510006012541115801561102757506000601254115b1561103757506355d4a800611096565b64e8d4a5100060125411801561105457506509184e72a000601254105b1561107f576110786305f5e10061081f6105a060125461205c90919063ffffffff16565b9050611096565b6509184e72a00060125410611096575064035a4e90005b42601e55601d546110ad908263ffffffff6122e016565b601d55506001905090565b60006001600160a01b038216158015906110eb57506110d5612058565b6001600160a01b0316826001600160a01b031614155b6111075760405162461bcd60e51b81526004016107a69061360c565b6000601a81611114612058565b6001600160a01b039081168252602082019290925260400160002054161461114e5760405162461bcd60e51b81526004016107a6906135dc565b601b600061115a612058565b6001600160a01b03168152602081019190915260400160002054156111915760405162461bcd60e51b81526004016107a6906136ac565b81601a600061119e612058565b6001600160a01b0390811682526020808301939093526040918201600090812080546001600160a01b0319169583169590951790945585168352601b9091529020806111e8612058565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b03929092169190911790559392505050565b6001600160a01b0385166000908152601360205260409020546112565760405162461bcd60e51b81526004016107a69061364c565b60008681526018602052604090205460ff16156112855760405162461bcd60e51b81526004016107a6906135fc565b6001600160a01b0385166112ab5760405162461bcd60e51b81526004016107a69061374c565b836000106112cb5760405162461bcd60e51b81526004016107a6906136cc565b600b546001600160a01b03166112f35760405162461bcd60e51b81526004016107a69061377c565b600086868660405160200161130a939291906134d5565b60408051601f198184030181528282528051602091820120600b5460008552939091019182905292506001600160a01b039091169060019061135390849088908890889061358d565b6020604051602081039080840390855afa158015611375573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146113a55760405162461bcd60e51b81526004016107a69061376c565b601d546000906113bb908763ffffffff61232716565b116113d85760405162461bcd60e51b81526004016107a69061375c565b601d546113eb908663ffffffff61232716565b601d5561142186611408606461081f89606163ffffffff61205c16565b600a546001600160a01b0316919063ffffffff61230516565b61144f73de9626db2c23ac56eb02edf9c678183e848e3931611408606461081f89600363ffffffff61205c16565b6000878152601860209081526040808320805460ff191660011790556001600160a01b0389168352601590915290205461148f908663ffffffff6122e016565b6001600160a01b038716600081815260156020526040908190209290925590517fbc84835063c693975166f00cffb19f01a94c2db55b1bf259238c5da3594e5066906114dc9088906137db565b60405180910390a250505050505050565b600b546001600160a01b031681565b600f5460ff1690565b6001600160a01b0381166000908152601b602090815260409182902080548351818402810184019094528084526060939283018282801561156f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611551575b50505050509050919050565b6000611585611c5e565b6115a15760405162461bcd60e51b81526004016107a69061372c565b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b60006001600160a01b03821615806115ef5750826001600160a01b0316826001600160a01b0316145b156115fc575060006109fd565b6001600160a01b038381166000908152601a60205260409020541615611624575060006109fd565b6001600160a01b0383166000908152601b60205260409020541561164a575060006109fd565b50600192915050565b60186020526000908152604090205460ff1681565b6000611672611c5e565b61168e5760405162461bcd60e51b81526004016107a69061372c565b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6116bb611c5e565b6116d75760405162461bcd60e51b81526004016107a69061372c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b816000108015611732575060048211155b61174e5760405162461bcd60e51b81526004016107a69061369c565b8060001061176e5760405162461bcd60e51b81526004016107a69061361c565b600a54600090611786906001600160a01b0316611ee6565b90506000806000856004141561182e57600f5460ff166117f257336000908152601660205260409020546001146117cf5760405162461bcd60e51b81526004016107a69061366c565b600a546117ed906001600160a01b031633308863ffffffff61254716565b611810565b600a54611810906001600160a01b031633308863ffffffff61254716565b600c54859250611826908363ffffffff6122e016565b600c556119fa565b61184b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2611ee6565b92503415611929576503a3529440003410156118795760405162461bcd60e51b81526004016107a69061367c565b6118db64e8d4a5100061081f8661081f6118ab6001808d036004811061189b57fe5b015460649063ffffffff61232716565b61081f6001808e03600481106118bd57fe5b01546118cf8b3463ffffffff61205c16565b9063ffffffff61205c16565b600a549092506118fc906001600160a01b031633308563ffffffff61254716565b50600d54600190611913903463ffffffff6122e016565b600d55600c54611826908363ffffffff6122e016565b846004111561194a5760405162461bcd60e51b81526004016107a6906135ec565b61198a8461081f6119636001808b036004811061189b57fe5b61081f6001808c036004811061197557fe5b01546118cf8b620f424063ffffffff61205c16565b6009549092506119ab906001600160a01b031633308863ffffffff61254716565b600a546119c9906001600160a01b031633308563ffffffff61254716565b50600e546002906119e0908663ffffffff6122e016565b600e55600c546119f6908363ffffffff6122e016565b600c555b611a02612846565b6000611a1b620f424061081f888763ffffffff61205c16565b905060008360021415611a3657506080820187905286611a70565b8360011415611a6857611a5b670de0b6b3a764000061081f883463ffffffff61205c16565b3460808501529050611a70565b600060808401525b6000611a9c606461081f600560018e0360048110611a8a57fe5b01546118cf878763ffffffff6122e016565b601154909150611ab390600163ffffffff6122e016565b60115533600090815260136020526040902054611ad790600163ffffffff6122e016565b3360009081526013602052604081209190915580526000805160206138d383398151915254611b0d90600163ffffffff6122e016565b6000805260136020526000805160206138d383398151915255601254611b39908263ffffffff6122e016565b60125533600090815260146020526040902054611b5c908263ffffffff6122e016565b33600081815260146020908152604080832094909455601080546001019081905588524288820152606088018a905260e0880183905287840185905260a088018e905260c08801899052918152601790915220611bbf908563ffffffff61257116565b50600080526017602052611bf97fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b8563ffffffff61257116565b50835160808501516040518c9133917f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde28291611c35918f906137e9565b60405180910390a450505050505050505050565b600c5490565b6000546001600160a01b031690565b600080546001600160a01b0316611c73612058565b6001600160a01b031614905090565b6000611c8c611c5e565b611ca85760405162461bcd60e51b81526004016107a69061372c565b50600f805460ff1916911515919091179055600190565b6009546001600160a01b031681565b60125490565b600a546001600160a01b031681565b6000611ced611c5e565b611d095760405162461bcd60e51b81526004016107a69061372c565b506001600160a01b03918216600090815260196020526040902080546001600160a01b03191691909216179055600190565b6000611d45611c5e565b611d615760405162461bcd60e51b81526004016107a69061372c565b506001600160a01b0391909116600090815260166020526040902055600190565b600e5490565b6001600160a01b03166000908152601c602052604090205490565b611dab612846565b6001600160a01b03831660009081526017602052604090208290611dce90612625565b11611deb5760405162461bcd60e51b81526004016107a69061363c565b6001600160a01b0383166000908152601760205260409020611e13908363ffffffff61213616565b9392505050565b6001600160a01b039081166000908152601a60205260409020541690565b600d5490565b611e46611c5e565b611e625760405162461bcd60e51b81526004016107a69061372c565b6001600160a01b038116611e885760405162461bcd60e51b81526004016107a69061378c565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526015602052604090205490565b6001600160a01b031660009081526014602052604090205490565b60105481565b6009546000906001600160a01b0383811691161415611f0e5750670de0b6b3a7640000610747565b6001600160a01b0380831660009081526019602090815260408083205481516004815260248101835292830180516001600160e01b0316630240bc6b60e21b17905290519293606093911691611f63916134c9565b600060405180830381855afa9150503d8060008114611f9e576040519150601f19603f3d011682016040523d82523d6000602084013e611fa3565b606091505b5091509150811561201e5760008082806020019051611fc591908101906129f2565b50600a549193509150670de0b6b3a7640000906001600160a01b0388811691161415611ff15750620f42405b6120126001600160701b038085169061081f9085168463ffffffff61205c16565b95505050505050610747565b5060009392505050565b612030611c5e565b61204c5760405162461bcd60e51b81526004016107a69061372c565b61205581612629565b50565b3390565b60008261206b575060006109fd565b8282028284828161207857fe5b0414611e135760405162461bcd60e51b81526004016107a69061371c565b6000611e1383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126aa565b60405161213190849063079cc67960e41b906120fa9086908690602401613542565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526126e1565b505050565b61213e612846565b8254821061215e5760405162461bcd60e51b81526004016107a6906137bc565b82600001828154811061216d57fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e0820152905092915050565b6121f0612846565b600082815260018401602052604090205461221d5760405162461bcd60e51b81526004016107a6906136fc565b600082815260018401602052604090205483546000199091019081106122555760405162461bcd60e51b81526004016107a6906137bc565b83600001818154811061226457fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e082015291505092915050565b600082820183811015611e135760405162461bcd60e51b81526004016107a69061365c565b60405161213190849063a9059cbb60e01b906120fa9086908690602401613542565b6000611e1383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506127c6565b80516000908152600183016020526040812054801561253d5783546000198083019101612394612846565b8660000182815481106123a357fe5b600091825260209182902060408051610100810182526008909302909101805483526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007909101546001600160a01b031660e08201528754909150819088908590811061242957fe5b60009182526020808320845160089390930201918255838101516001808401919091556040808601516002850155606086015160038501556080860151600485015560a0860151600585015560c0860151600685015560e090950151600790930180546001600160a01b0319166001600160a01b0390941693909317909255845183528a82019052919020908401905586548790806124c457fe5b6000828152602080822060086000199094019384020182815560018181018490556002820184905560038201849055600482018490556005820184905560068201849055600790910180546001600160a01b03191690559290935588518152898201909252604082209190915594506109fd9350505050565b60009150506109fd565b60405161256b9085906323b872dd60e01b906120fa9087908790879060240161351a565b50505050565b60006125818383600001516127f2565b61261d575081546001808201845560008481526020808220855160089095020184815585820151818501556040808701516002830155606087015160038301556080870151600483015560a0870151600583015560c0870151600683015560e0870151600790920180546001600160a01b0319166001600160a01b039093169290921790915586549483528387019091529020919091556109fd565b5060006109fd565b5490565b6001600160a01b03811661264f5760405162461bcd60e51b81526004016107a69061362c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836126cb5760405162461bcd60e51b81526004016107a691906135cb565b5060008385816126d757fe5b0495945050505050565b6126f3826001600160a01b031661280a565b61270f5760405162461bcd60e51b81526004016107a6906137ac565b60006060836001600160a01b03168360405161272b91906134c9565b6000604051808303816000865af19150503d8060008114612768576040519150601f19603f3d011682016040523d82523d6000602084013e61276d565b606091505b50915091508161278f5760405162461bcd60e51b81526004016107a69061368c565b80511561256b57808060200190516127aa91908101906129d4565b61256b5760405162461bcd60e51b81526004016107a69061379c565b600081848411156127ea5760405162461bcd60e51b81526004016107a691906135cb565b505050900390565b60009081526001919091016020526040902054151590565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061283e57508115155b949350505050565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b80356109fd81613891565b80356109fd816138a5565b80516109fd816138a5565b80356109fd816138ae565b80516109fd816138b7565b80516109fd816138c0565b80356109fd816138c9565b6000602082840312156128f357600080fd5b600061283e8484612894565b6000806040838503121561291257600080fd5b600061291e8585612894565b925050602061292f85828601612894565b9150509250929050565b6000806040838503121561294c57600080fd5b60006129588585612894565b925050602061292f858286016128b5565b60008060006060848603121561297e57600080fd5b600061298a8686612894565b935050602061299b868287016128b5565b92505060406129ac868287016128b5565b9150509250925092565b6000602082840312156129c857600080fd5b600061283e848461289f565b6000602082840312156129e657600080fd5b600061283e84846128aa565b600080600060608486031215612a0757600080fd5b6000612a1386866128c0565b9350506020612a24868287016128c0565b92505060406129ac868287016128cb565b600060208284031215612a4757600080fd5b600061283e84846128b5565b60008060008060008060c08789031215612a6c57600080fd5b6000612a7889896128b5565b9650506020612a8989828a01612894565b9550506040612a9a89828a016128b5565b9450506060612aab89828a016128d6565b9350506080612abc89828a016128b5565b92505060a0612acd89828a016128b5565b9150509295509295509295565b60008060408385031215612aed57600080fd5b600061295885856128b5565b6000612b058383612b22565b505060200190565b6000612b198383613418565b50506101000190565b612b2b8161380a565b82525050565b612b2b612b3d8261380a565b613870565b6000612b4d826137fd565b612b578185613801565b9350612b62836137f7565b8060005b83811015612b90578151612b7a8882612af9565b9750612b85836137f7565b925050600101612b66565b509495945050505050565b6000612ba6826137fd565b612bb08185613801565b9350612bbb836137f7565b8060005b83811015612b90578151612bd38882612b0d565b9750612bde836137f7565b925050600101612bbf565b612b2b81613815565b612b2b8161381a565b6000612c06826137fd565b612c108185610747565b9350612c20818560208601613844565b9290920192915050565b6000612c35826137fd565b612c3f8185613801565b9350612c4f818560208601613844565b612c5881613881565b9093019392505050565b6000612c6f602183613801565b7f45524332303a205265666572656e6365732068617665206265656e20676976658152603760f91b602082015260400192915050565b6000612cb2601383613801565b721cdd185ad94e880d080f0f4817d85b5bdd5b9d606a1b815260200192915050565b6000612ce1602883613801565b7f77697468647261775265776172643a20696e76616c696420776974686472617781526714995dd85c99125960c21b602082015260400192915050565b6000612d2b603983613801565b7f45524332303a206d7972656665726565732066726f6d20746865207a65726f2081527f61646472657373206f72204e6f7420666f72206d7973656c6600000000000000602082015260400192915050565b6000612d8a601283613801565b711cdd185ad94e880c080f0817d85b5bdd5b9d60721b815260200192915050565b6000612db8602683613801565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612e00603083613801565b7f6765745374616b654f663a205f7374616b654f665b5f6163636f756e745d2e6c81526f0cadccee8d05052407c40bed2dcc8caf60831b602082015260400192915050565b6000612e52601a83613801565b7f7769746864726177526577617264203a206f7264657273203e30000000000000815260200192915050565b6000612e8b601b83613801565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612ec4601d83613801565b7f7374616b653a2054656d706f726172696c79206e6f74206f70656e6564000000815260200192915050565b6000612efd601c83613801565b7f7374616b653a206d73672e76616c75653e3d2831302a2a3132292a3400000000815260200192915050565b6000612f36602083613801565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000612f6f602883613801565b7f7374616b653a2030203c205f7374616b6554797065202626205f7374616b65548152671e5c19480f0f480d60c21b602082015260400192915050565b6000612fb9602083613801565b7f45524332303a205265636f6d6d656e64656420746f2065616368206f74686572815260200192915050565b6000612ff2601583613801565b746c6576656c436f7374553a207669702066616c736560581b815260200192915050565b6000613023601b83613801565b7f77697468647261775265776172643a2030203c205f616d6f756e740000000000815260200192915050565b600061305c601f83613801565b7f77697468647261773a2063757272656e744964203e3d205f7374616b65496400815260200192915050565b6000613095602e83613801565b7f6765745374616b65733a2030203c20746f74616c53697a6520262620746f746181526d0d8a6d2f4ca407c40bed2dcc8caf60931b602082015260400192915050565b60006130e5602483613801565b7f5374616b655365743a207365742e5f696e64657865735b76616c756549645d208152630213d20360e41b602082015260400192915050565b600061312b601483613801565b73757365725f6275726e3a207669702066616c736560601b815260200192915050565b600061315b602183613801565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061319e602083613801565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006131d7603583613801565b7f6164645769746864726177616c42616c616e6365733a49742063616e206f6e6c81527479206265206164646564206f6e636520612064617960581b602082015260400192915050565b600061322e602183613801565b7f77697468647261775265776172643a206164647265737328302920213d205f748152606f60f81b602082015260400192915050565b6000613271602483613801565b7f77697468647261775265776172643a205769746864726177616c2069732062658152631e5bdb9960e21b602082015260400192915050565b60006132b7602083613801565b7f77697468647261775265776172643a20696e636f7272656374207369676e6572815260200192915050565b60006132f0602a83613801565b7f77697468647261775265776172643a206164647265737328302920213d20736581526931b932ba29b4b3b732b960b11b602082015260400192915050565b600061333c600f83613801565b6e1859191c995cdcc81a5b9d985b1a59608a1b815260200192915050565b6000613367602a83613801565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b60006133b3601f83613801565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b60006133ec601d83613801565b7f5374616b655365743a20696e646578206f7574206f6620626f756e6473000000815260200192915050565b805161010083019061342a8482612bf2565b50602082015161343d6020850182612bf2565b5060408201516134506040850182612bf2565b5060608201516134636060850182612bf2565b5060808201516134766080850182612bf2565b5060a082015161348960a0850182612bf2565b5060c082015161349c60c0850182612bf2565b5060e082015161256b60e0850182612b22565b612b2b6134bb8261381a565b61381a565b612b2b8161383e565b6000611e138284612bfb565b60006134e182866134af565b6020820191506134f18285612b31565b60148201915061350182846134af565b506020019392505050565b602081016109fd8284612b22565b606081016135288286612b22565b6135356020830185612b22565b61283e6040830184612bf2565b604081016135508285612b22565b611e136020830184612bf2565b60208082528101611e138184612b42565b60208082528101611e138184612b9b565b602081016109fd8284612be9565b6080810161359b8287612bf2565b6135a860208301866134c0565b6135b56040830185612bf2565b6135c26060830184612bf2565b95945050505050565b60208082528101611e138184612c2a565b602080825281016109fd81612c62565b602080825281016109fd81612ca5565b602080825281016109fd81612cd4565b602080825281016109fd81612d1e565b602080825281016109fd81612d7d565b602080825281016109fd81612dab565b602080825281016109fd81612df3565b602080825281016109fd81612e45565b602080825281016109fd81612e7e565b602080825281016109fd81612eb7565b602080825281016109fd81612ef0565b602080825281016109fd81612f29565b602080825281016109fd81612f62565b602080825281016109fd81612fac565b602080825281016109fd81612fe5565b602080825281016109fd81613016565b602080825281016109fd8161304f565b602080825281016109fd81613088565b602080825281016109fd816130d8565b602080825281016109fd8161311e565b602080825281016109fd8161314e565b602080825281016109fd81613191565b602080825281016109fd816131ca565b602080825281016109fd81613221565b602080825281016109fd81613264565b602080825281016109fd816132aa565b602080825281016109fd816132e3565b602080825281016109fd8161332f565b602080825281016109fd8161335a565b602080825281016109fd816133a6565b602080825281016109fd816133df565b61010081016109fd8284613418565b602081016109fd8284612bf2565b604081016135508285612bf2565b60200190565b5190565b90815260200190565b60006109fd82613829565b151590565b90565b6001600160701b031690565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b60005b8381101561385f578181015183820152602001613847565b8381111561256b5750506000910152565b60006109fd8260006109fd8261388b565b601f01601f191690565b60601b90565b61389a8161380a565b811461205557600080fd5b61389a81613815565b61389a8161381a565b61389a8161381d565b61389a81613835565b61389a8161383e56fe8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6ca365627a7a72315820c486133873eeccc10aff62abbf089038c5ae71e23146e02b8adf8c2b89d8adf46c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode Sourcemap
295:22807:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2654:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2654:110:6;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;22545:549;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22545:549:6;;;;;;;;:::i;:::-;;;;;;;;15914:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15914:109:6;;;:::i;20889:1644::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20889:1644:6;;;;;;;;:::i;2876:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2876:88:6;;;:::i;3110:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3110:96:6;;;;;;;;:::i;4954:570::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4954:570:6;;;;;;;;:::i;:::-;;;;;;;;9734:3000;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9734:3000:6;;;;;;;;:::i;1997:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1997:44:6;;;;;;;;:::i;:::-;;;;;;;;15396:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15396:116:6;;;:::i;16041:635::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16041:635:6;;;:::i;17215:643::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17215:643:6;;;;;;;;:::i;12746:1371::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12746:1371:6;;;;;;;;:::i;1247:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1247:27:6;;;:::i;2776:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2776:88:6;;;:::i;15652:120::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15652:120:6;;;;;;;;:::i;:::-;;;;;;;;3357:127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3357:127:6;;;;;;;;:::i;16836:361::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16836:361:6;;;;;;;;:::i;1901:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1901:47:6;;;;;;;;:::i;3214:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3214:135:6;;;;;;;;:::i;1734:140:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1734:140:3;;;:::i;5719:3928:6:-;;;;;;;;;:::i;2442:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2442:96:6;;;:::i;923:79:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;923:79:3;;;:::i;1289:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1289:94:3;;;:::i;3496:135:6:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3496:135:6;;;;;;;;:::i;1082:76::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1082:76:6;;;:::i;4023:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4023:88:6;;;:::i;1165:75::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1165:75:6;;;:::i;3866:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3866:149:6;;;;;;;;:::i;3643:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3643:138:6;;;;;;;;:::i;2340:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2340:94:6;;;:::i;15784:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15784:112:6;;;;;;;;:::i;4626:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4626:259:6;;;;;;;;:::i;:::-;;;;;;;;15528:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15528:106:6;;;;;;;;:::i;2550:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2550:92:6;;;:::i;4365:180::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4365:180:6;;;;;;;;:::i;2976:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2976:122:6;;;;;;;;:::i;4248:105::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4248:105:6;;;;;;;;:::i;1501:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1501:21:6;;;:::i;14172:749::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14172:749:6;;;;;;;;:::i;2029:109:3:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2029:109:3;;;;;;;;:::i;2654:110:6:-;-1:-1:-1;;;;;2736:20:6;;2712:4;2736:20;;;:11;:20;;;;;;2654:110;;;;:::o;22545:549::-;22595:4;22627:1;22620:5;:8;;:34;;;;;22636:4;:18;22641:12;:10;:12::i;:::-;-1:-1:-1;;;;;22636:18:6;-1:-1:-1;;;;;22636:18:6;;;;;;;;;;;;;22630:5;:24;22620:34;22612:67;;;;-1:-1:-1;;;22612:67:6;;;;;;;;;;;;;;;;;22690:9;22702:36;22713:5;22719:4;:18;22724:12;:10;:12::i;:::-;-1:-1:-1;;;;;22719:18:6;-1:-1:-1;;;;;22719:18:6;;;;;;;;;;;;;22702:10;:36::i;:::-;22778:6;;22690:48;;-1:-1:-1;22749:13:6;;22765:20;;-1:-1:-1;;;;;22778:6:6;22765:12;:20::i;:::-;22749:36;-1:-1:-1;22855:23:6;22881:24;22899:5;22881:13;:1;22887:6;22881:13;:5;:13;:::i;:::-;:17;:24;:17;:24;:::i;:::-;22855:50;;22972:58;23000:12;:10;:12::i;:::-;22979:6;;-1:-1:-1;;;;;22979:6:6;;23014:15;22972:58;:27;:58;:::i;:::-;23061:5;23042:4;:18;23047:12;:10;:12::i;:::-;-1:-1:-1;;;;;23042:18:6;;;;;;;;;;;;-1:-1:-1;23042:18:6;:24;-1:-1:-1;23082:4:6;;22545:549;-1:-1:-1;;;;22545:549:6:o;15914:109::-;15995:20;;15914:109;:::o;20889:1644::-;20956:9;20993:1;20986:5;:8;;:19;;;;;21002:3;20996:5;:9;20986:19;20978:53;;;;-1:-1:-1;;;20978:53:6;;;;;;;;;21049:5;21056:1;21049:8;21046:1480;;;-1:-1:-1;21079:3:6;21046:1480;;;21106:5;21113:1;21106:8;21103:1423;;;21137:6;21134:110;;-1:-1:-1;21169:3:6;21134:110;;;-1:-1:-1;21221:3:6;21134:110;21103:1423;;;21267:5;21274:1;21267:8;21264:1262;;;21298:6;21295:173;;-1:-1:-1;21330:3:6;21295:173;;;21361:3;21366:1;21361:6;21358:110;;;-1:-1:-1;21393:3:6;21358:110;;21264:1262;21491:5;21498:1;21491:8;21488:1038;;;21522:6;21519:236;;-1:-1:-1;21554:3:6;21519:236;;;21585:3;21590:1;21585:6;21582:173;;;-1:-1:-1;21617:3:6;21582:173;;;21648:3;21653:1;21648:6;21645:110;;;-1:-1:-1;21680:3:6;21645:110;;21488:1038;21778:5;21785:1;21778:8;21775:751;;;21809:6;21806:300;;-1:-1:-1;21841:4:6;21806:300;;;21873:3;21878:1;21873:6;21870:236;;;-1:-1:-1;21905:3:6;21870:236;;;21936:3;21941:1;21936:6;21933:173;;;-1:-1:-1;21968:3:6;21933:173;;;21999:3;22004:1;21999:6;21996:110;;;-1:-1:-1;22031:3:6;21996:110;;;-1:-1:-1;22083:3:6;21775:751;;;22147:6;22144:367;;-1:-1:-1;22179:4:6;22144:367;;;22211:3;22216:1;22211:6;22208:303;;;-1:-1:-1;22243:4:6;22208:303;;;22275:3;22280:1;22275:6;22272:239;;;-1:-1:-1;22307:4:6;22272:239;;;22339:3;22344:1;22339:6;22336:175;;;-1:-1:-1;22371:4:6;22336:175;;;22403:3;22408:1;22403:6;22400:111;;;-1:-1:-1;22435:3:6;22400:111;;;-1:-1:-1;22488:3:6;22400:111;20889:1644;;;;:::o;2876:88::-;2944:12;;2876:88;:::o;3110:96::-;-1:-1:-1;;;;;3185:13:6;3161:4;3185:13;;;:7;:13;;;;;;;3110:96::o;4954:570::-;5041:28;5082:14;5099:20;5110:8;5099:10;:20::i;:::-;5082:37;;5142:9;5138:1;:13;:35;;;;;5167:6;5155:9;:18;5138:35;5130:94;;;;-1:-1:-1;;;5130:94:6;;;;;;;;;5249:7;5283:15;;;5271:27;;5267:87;;;-1:-1:-1;5324:18:6;;;5267:87;5394:6;5374:27;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;5366:35:6;-1:-1:-1;5417:6:6;5412:105;5433:6;5429:1;:10;5412:105;;;-1:-1:-1;;;;;5472:18:6;;;;;;:8;:18;;;;;:33;;5494:10;;;5472:33;:21;:33;:::i;:::-;5461:5;5467:1;5461:8;;;;;;;;;;;;;;;;;:44;5441:3;;5412:105;;;;4954:570;;;;;;;:::o;9734:3000::-;9808:8;9795:9;;:21;;9787:65;;;;-1:-1:-1;;;9787:65:6;;;;;;;;;9890:25;;:::i;:::-;9927:10;9918:20;;;;:8;:20;;;;;:35;;9944:8;9918:35;:25;:35;:::i;:::-;9890:63;;9999:17;10019:4;:17;;;9999:37;;10047:19;10069:4;:19;;;10047:41;;10099:16;10126:14;10151:15;10298:4;:15;;;10280;:33;10271:6;:42;10267:498;;;10345:29;10370:3;10345:20;:12;10362:2;10345:20;:16;:20;:::i;:29::-;10330:44;-1:-1:-1;10406:31:6;10433:3;10406:22;:14;10425:2;10406:22;:18;:22;:::i;:31::-;10389:48;;10466:50;10482:33;10511:3;10482:24;10504:1;10482:4;:17;;;:21;;:24;;;;:::i;:33::-;10466:11;;:50;:15;:50;:::i;:::-;10452:64;;10540:4;:13;;;10535:1;:18;10531:223;;;10585:50;10599:35;10630:3;10599:26;10623:1;10599:4;:19;;;:23;;:26;;;;:::i;:35::-;10585:9;;:50;:13;:50;:::i;:::-;10573:62;;10531:223;;;10687:51;10702:35;10733:3;10702:26;10726:1;10702:4;:19;;;:23;;:26;;;;:::i;:35::-;10687:10;;:51;:14;:51;:::i;:::-;10674:64;;10531:223;10784:4;:13;;;10779:1;:18;10775:815;;;10830:35;;:10;;:35;;;;;10850:14;;10830:35;;;;10850:14;10830:10;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;10887:6:6;;10880:53;;-1:-1:-1;;;;;10887:6:6;10908:10;10920:12;10880:53;:27;:53;:::i;:::-;10984:19;;;;10965:14;;:39;;;:18;:39;:::i;:::-;10948:14;:56;11059:17;;;;11038:16;;:39;;;:20;:39;:::i;:::-;11019:16;:58;10775:815;;;11104:4;:13;;;11099:1;:18;11095:495;;;11157:8;;11150:57;;-1:-1:-1;;;;;11157:8:6;11180:10;11192:14;11150:57;:29;:57;:::i;:::-;11229:6;;11222:53;;-1:-1:-1;;;;;11229:6:6;11250:10;11262:12;11222:53;:27;:53;:::i;:::-;11328:19;;;;11308:15;;:40;;;:19;:40;:::i;:::-;11290:15;:58;11403:17;;;;11382:16;;:39;;;:20;:39;:::i;11095:495::-;11459:6;;11452:53;;-1:-1:-1;;;;;11459:6:6;11480:10;11492:12;11452:53;:27;:53;:::i;:::-;11560:17;;;;11539:16;;:39;;;:20;:39;:::i;:::-;11520:16;:58;11095:495;11603:13;;11600:203;;11705:6;;11698:93;;-1:-1:-1;;;;;11705:6:6;11734:42;11779:11;11698:93;:27;:93;:::i;:::-;11816:12;;11813:204;;11918:8;;11911:94;;-1:-1:-1;;;;;11918:8:6;11949:42;11994:10;11911:94;:29;:94;:::i;:::-;12030:11;;12027:193;;12119:89;;12143:42;;12119:89;;;;;12198:9;;12119:89;;;;12198:9;12143:42;12119:89;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12119:89:6;12027:193;12255:12;;:19;;12272:1;12255:19;:16;:19;:::i;:::-;12240:12;:34;12323:10;12311:23;;;;:11;:23;;;;;;:30;;12339:1;12311:30;:27;:30;:::i;:::-;12297:10;12285:23;;;;:11;:23;;;;;:56;;;;12378:23;;-1:-1:-1;;;;;;;;;;;12378:23:6;:30;;12406:1;12378:30;:27;:30;:::i;:::-;12352:23;;;:11;:23;;-1:-1:-1;;;;;;;;;;;12352:56:6;:23;12451:10;;;12434:12;;:28;;;:16;:28;:::i;:::-;12419:12;:43;12521:10;;;;;12505;12496:20;;;;:8;:20;;;;;;;:36;;;:24;:36;:::i;:::-;12482:10;12473:20;;;;:8;:20;;;;;;;;:59;;;;12573:8;:20;;;:33;;12601:4;12573:33;:27;:33;:::i;:::-;-1:-1:-1;12617:20:6;;;:8;:20;;:33;:20;12645:4;12617:33;:27;:33;:::i;:::-;;12687:8;12675:10;-1:-1:-1;;;;;12666:60:6;;12697:14;12713:12;12666:60;;;;;;;;;;;;;;;;9734:3000;;;;;;;:::o;1997:44::-;;;;;;;;;;;;-1:-1:-1;;;;;1997:44:6;;:::o;15396:116::-;15481:12;;15496:6;15481:21;15473:3;:30;;15396:116;:::o;16041:635::-;16091:4;16116:23;:21;:23::i;:::-;16108:88;;;;-1:-1:-1;;;16108:88:6;;;;;;;;;16207:15;16250:13;16236:12;;:27;;:43;;;;;16278:1;16265:12;;:14;16236:43;16233:317;;;-1:-1:-1;16305:10:6;16233:317;;;16348:13;16335:12;;:26;:55;;;;;16376:14;16363:12;;:27;16335:55;16332:218;;;16416:37;16443:9;16416:22;16433:4;16416:12;;:16;;:22;;;;:::i;:37::-;16406:47;;16332:218;;;16487:14;16473:12;;:28;16470:80;;-1:-1:-1;16527:11:6;16470:80;16576:3;16561:12;:18;16613:20;;:33;;16638:7;16613:33;:24;:33;:::i;:::-;16590:20;:56;-1:-1:-1;16664:4:6;;-1:-1:-1;16041:635:6;:::o;17215:643::-;17273:4;-1:-1:-1;;;;;17298:24:6;;;;;;:50;;;17336:12;:10;:12::i;:::-;-1:-1:-1;;;;;17324:24:6;:10;-1:-1:-1;;;;;17324:24:6;;;17298:50;17290:120;;;;-1:-1:-1;;;17290:120:6;;;;;;;;;17462:1;17429:9;17462:1;17439:12;:10;:12::i;:::-;-1:-1:-1;;;;;17429:23:6;;;;;;;;;;;;;;-1:-1:-1;17429:23:6;;;:35;17421:81;;;;-1:-1:-1;;;17421:81:6;;;;;;;;;17521:13;:27;17535:12;:10;:12::i;:::-;-1:-1:-1;;;;;17521:27:6;;;;;;;;;;;;-1:-1:-1;17521:27:6;:34;:37;17513:82;;;;-1:-1:-1;;;17513:82:6;;;;;;;;;17726:10;17700:9;:23;17710:12;:10;:12::i;:::-;-1:-1:-1;;;;;17700:23:6;;;;;;;;;;;;;;;;;-1:-1:-1;17700:23:6;;;:36;;-1:-1:-1;;;;;;17700:36:6;;;;;;;;;;;17769:25;;;;:13;:25;;;;;;17814:12;:10;:12::i;:::-;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;17805:22:6;;;;;;;;;;-1:-1:-1;;;;;;17805:22:6;-1:-1:-1;;;;;17805:22:6;;;;;;;;;;39:1:-1;17215:643:6;-1:-1:-1;;;17215:643:6:o;12746:1371::-;-1:-1:-1;;;;;12881:16:6;;12898:1;12881:16;;;:11;:16;;;;;;12873:56;;;;-1:-1:-1;;;12873:56:6;;;;;;;;;12949:37;;;;:18;:37;;;;;;;;12948:38;12940:91;;;;-1:-1:-1;;;12940:91:6;;;;;;;;;-1:-1:-1;;;;;13050:17:6;;13042:63;;;;-1:-1:-1;;;13042:63:6;;;;;;;;;13128:7;13124:1;:11;13116:51;;;;-1:-1:-1;;;13116:51:6;;;;;;;;;13200:12;;-1:-1:-1;;;;;13200:12:6;13178:81;;;;-1:-1:-1;;;13178:81:6;;;;;;;;;13270:15;13315:17;13334:3;13339:7;13298:49;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;13298::6;;;13288:60;;49:4:-1;13288:60:6;;;;13401:12;;;13367:30;;;;;;;;;;13288:60;-1:-1:-1;;;;;;13401:12:6;;;;;;13367:30;;13288:60;;13386:2;;13390;;13394;;13367:30;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13367:30:6;;;;;;;;-1:-1:-1;;;;;13367:46:6;;13359:91;;;;-1:-1:-1;;;13359:91:6;;;;;;;;;13469:20;;13503:1;;13469:33;;13494:7;13469:33;:24;:33;:::i;:::-;:35;13461:83;;;;-1:-1:-1;;;13461:83:6;;;;;;;;;13612:20;;:33;;13637:7;13612:33;:24;:33;:::i;:::-;13589:20;:56;13656:58;13684:3;13689:24;13709:3;13689:15;:7;13701:2;13689:15;:11;:15;:::i;:24::-;13663:6;;-1:-1:-1;;;;;13663:6:6;;13656:58;;:27;:58;:::i;:::-;13799:105;13835:42;13880:23;13899:3;13880:14;:7;13892:1;13880:14;:11;:14;:::i;13799:105::-;13952:37;;;;:18;:37;;;;;;;;:44;;-1:-1:-1;;13952:44:6;13992:4;13952:44;;;-1:-1:-1;;;;;14030:22:6;;;;:17;:22;;;;;;:35;;14057:7;14030:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;14007:22:6;;;;;;:17;:22;;;;;;;:58;;;;14081:28;;;;;;14101:7;;14081:28;;;;;;;;;;12746:1371;;;;;;;:::o;1247:27::-;;;-1:-1:-1;;;;;1247:27:6;;:::o;2776:88::-;2844:12;;;;2776:88;:::o;15652:120::-;-1:-1:-1;;;;;15745:19:6;;;;;;:13;:19;;;;;;;;;15738:26;;;;;;;;;;;;;;;;;15709:16;;15738:26;;;15745:19;15738:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15738:26:6;;;;;;;;;;;;;;;;;;;;;;;15652:120;;;:::o;3357:127::-;3421:4;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;3438:6:6;:16;;-1:-1:-1;;;;;3438:16:6;;-1:-1:-1;;;;;;3438:16:6;;;;;;;3357:127;;;:::o;16836:361::-;16906:4;-1:-1:-1;;;;;16926:24:6;;;;:42;;;16966:2;-1:-1:-1;;;;;16954:14:6;:10;-1:-1:-1;;;;;16954:14:6;;16926:42;16923:86;;;-1:-1:-1;16991:5:6;16984:12;;16923:86;-1:-1:-1;;;;;17022:13:6;;;17045:1;17022:13;;;:9;:13;;;;;;;:25;17019:69;;-1:-1:-1;17070:5:6;17063:12;;17019:69;-1:-1:-1;;;;;17101:17:6;;17126:1;17101:17;;;:13;:17;;;;;:24;:26;17098:70;;-1:-1:-1;17150:5:6;17143:12;;17098:70;-1:-1:-1;17185:4:6;16836:361;;;;:::o;1901:47::-;;;;;;;;;;;;;;;:::o;3214:135::-;3282:4;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;3299:8:6;:20;;-1:-1:-1;;;;;3299:20:6;;-1:-1:-1;;;;;;3299:20:6;;;;;;;3214:135;;;:::o;1734:140:3:-;1135:9;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;1833:1;1817:6;;1796:40;;-1:-1:-1;;;;;1817:6:3;;;;1796:40;;1833:1;;1796:40;1864:1;1847:19;;-1:-1:-1;;;;;;1847:19:3;;;1734:140::o;5719:3928:6:-;5805:10;5801:1;:14;:33;;;;;5833:1;5819:10;:15;;5801:33;5793:86;;;;-1:-1:-1;;;5793:86:6;;;;;;;;;5902:7;5898:1;:11;5890:42;;;;-1:-1:-1;;;5890:42:6;;;;;;;;;5977:6;;5943:18;;5964:20;;-1:-1:-1;;;;;5977:6:6;5964:12;:20::i;:::-;5943:41;;5995:16;6022:19;6085:16;6115:10;6127:1;6115:13;6112:1840;;;6148:12;;;;6144:308;;6196:10;6188:19;;;;:7;:19;;;;;;6209:1;6188:22;6180:64;;;;-1:-1:-1;;;6180:64:6;;;;;;;;;6270:6;;6263:67;;-1:-1:-1;;;;;6270:6:6;6295:10;6315:4;6322:7;6263:67;:31;:67;:::i;:::-;6144:308;;;6376:6;;6369:67;;-1:-1:-1;;;;;6376:6:6;6401:10;6421:4;6428:7;6369:67;:31;:67;:::i;:::-;6519:16;;6478:7;;-1:-1:-1;6519:29:6;;6478:7;6519:29;:20;:29;:::i;:::-;6500:16;:48;6112:1840;;;6630:23;1032:42;6630:12;:23::i;:::-;6619:34;-1:-1:-1;6676:9:6;6672:13;6668:1273;;6774:10;6763:9;:21;;6755:61;;;;-1:-1:-1;;;6755:61:6;;;;;;;;;6845:128;6966:6;6845:116;6950:10;6845:100;6904:40;6918:9;6941:1;6928:10;:14;6918:25;;;;;;;;;6909:3;;6904:40;:13;:40;:::i;:::-;6845:54;6873:9;6896:1;6883:10;:14;6873:25;;;;;;;;;6845:23;:8;6858:9;6845:23;:12;:23;:::i;:::-;:27;:54;:27;:54;:::i;:128::-;6995:6;;6831:142;;-1:-1:-1;6988:71:6;;-1:-1:-1;;;;;6995:6:6;7020:10;7040:4;6831:142;6988:71;:31;:71;:::i;:::-;-1:-1:-1;7158:14:6;;7125:1;;7158:29;;7177:9;7158:29;:18;:29;:::i;:::-;7141:14;:46;7221:16;;:33;;7242:11;7221:33;:20;:33;:::i;6668:1273::-;7362:7;7357:1;:12;;7349:44;;;;-1:-1:-1;;;7349:44:6;;;;;;;;;7426:111;7526:10;7426:95;7480:40;7494:9;7517:1;7504:10;:14;7494:25;;;;;;7480:40;7426:49;7449:9;7472:1;7459:10;:14;7449:25;;;;;;;;;7426:18;:7;7438:5;7426:18;:11;:18;:::i;:111::-;7563:8;;7412:125;;-1:-1:-1;7556:69:6;;-1:-1:-1;;;;;7563:8:6;7590:10;7610:4;7617:7;7556:69;:33;:69;:::i;:::-;7651:6;;7644:71;;-1:-1:-1;;;;;7651:6:6;7676:10;7696:4;7703:11;7644:71;:31;:71;:::i;:::-;-1:-1:-1;7826:15:6;;7788:1;;7826:28;;7846:7;7826:28;:19;:28;:::i;:::-;7808:15;:46;7892:16;;:33;;7913:11;7892:33;:20;:33;:::i;:::-;7873:16;:52;6668:1273;7962:25;;:::i;:::-;8026:16;8045:38;8077:5;8045:27;:10;8060:11;8045:27;:14;:27;:::i;:38::-;8026:57;;8094:18;8126:8;8136:1;8126:11;8123:307;;;-1:-1:-1;8191:19:6;;;:29;;;8169:7;8123:307;;;8240:8;8250:1;8240:11;8237:193;;;8283:35;8311:6;8283:23;:8;8296:9;8283:23;:12;:23;:::i;:35::-;8355:9;8333:19;;;:31;8267:51;-1:-1:-1;8237:193:6;;;8417:1;8395:19;;;:23;8237:193;8440:10;8453:79;8528:3;8453:70;8490:16;8520:1;8507:10;:14;8490:32;;;;;;;;;8454:30;:11;8470:13;8454:30;:15;:30;:::i;8453:79::-;8560:12;;8440:92;;-1:-1:-1;8560:19:6;;8577:1;8560:19;:16;:19;:::i;:::-;8545:12;:34;8628:10;8616:23;;;;:11;:23;;;;;;:30;;8644:1;8616:30;:27;:30;:::i;:::-;8602:10;8590:23;;;;:11;:23;;;;;:56;;;;8683:23;;-1:-1:-1;;;;;;;;;;;8683:23:6;:30;;8711:1;8683:30;:27;:30;:::i;:::-;8657:23;;;:11;:23;;-1:-1:-1;;;;;;;;;;;8657:56:6;8739:12;;:23;;8756:5;8739:23;:16;:23;:::i;:::-;8724:12;:38;8805:10;8796:20;;;;:8;:20;;;;;;:31;;8821:5;8796:31;:24;:31;:::i;:::-;8782:10;8773:20;;;;:8;:20;;;;;;;;:54;;;;8918:9;8916:11;;;;;;;;8906:21;;8956:15;8938;;;:33;8982:17;;;:31;;;9070:16;;;:29;;;9110:10;;;:18;;;-1:-1:-1;9139:14:6;;:27;;;9177:13;;;:22;;;9482:20;;;:8;:20;;;;:30;;8906:4;9482:30;:24;:30;:::i;:::-;-1:-1:-1;9523:20:6;;;:8;:20;;:30;:20;9548:4;9523:30;:24;:30;:::i;:::-;-1:-1:-1;9601:7:6;;9610:19;;;;9571:68;;9589:10;;9577;;9571:68;;;;9631:7;;9571:68;;;;;;;;;;5719:3928;;;;;;;;;;:::o;2442:96::-;2514:16;;2442:96;:::o;923:79:3:-;961:7;988:6;-1:-1:-1;;;;;988:6:3;923:79;:::o;1289:94::-;1329:4;1369:6;;-1:-1:-1;;;;;1369:6:3;1353:12;:10;:12::i;:::-;-1:-1:-1;;;;;1353:22:3;;1346:29;;1289:94;:::o;3496:135:6:-;3562:4;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;3579:12:6;:22;;-1:-1:-1;;3579:22:6;;;;;;;;;;-1:-1:-1;;3496:135:6:o;1082:76::-;;;-1:-1:-1;;;;;1082:76:6;;:::o;4023:88::-;4091:12;;4023:88;:::o;1165:75::-;;;-1:-1:-1;;;;;1165:75:6;;:::o;3866:149::-;3945:4;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;;;;;;3962:17:6;;;;;;;:9;:17;;;;;:23;;-1:-1:-1;;;;;;3962:23:6;;;;;;;;-1:-1:-1;;3866:149:6:o;3643:138::-;3716:4;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;;;;;;3733:13:6;;;;;;;;:7;:13;;;;;:18;3769:4;;3643:138::o;2340:94::-;2411:15;;2340:94;:::o;15784:112::-;-1:-1:-1;;;;;15865:13:6;15838:7;15865:13;;;:4;:13;;;;;;;15784:112::o;4626:259::-;4700:20;;:::i;:::-;-1:-1:-1;;;;;4741:18:6;;;;;;:8;:18;;;;;4771:6;;4741:27;;:25;:27::i;:::-;:36;4733:97;;;;-1:-1:-1;;;4733:97:6;;;;;;;;;-1:-1:-1;;;;;4848:18:6;;;;;;:8;:18;;;;;:29;;4870:6;4848:29;:21;:29;:::i;:::-;4841:36;4626:259;-1:-1:-1;;;4626:259:6:o;15528:106::-;-1:-1:-1;;;;;15611:15:6;;;15584:7;15611:15;;;:9;:15;;;;;;;;15528:106::o;2550:92::-;2620:14;;2550:92;:::o;4365:180::-;1135:9:3;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;-1:-1:-1;;;;;4451:27:6;;4443:55;;;;-1:-1:-1;;;4443:55:6;;;;;;;;;4509:12;:28;;-1:-1:-1;;;;;;4509:28:6;-1:-1:-1;;;;;4509:28:6;;;;;;;;;;4365:180::o;2976:122::-;-1:-1:-1;;;;;3064:26:6;3040:4;3064:26;;;:17;:26;;;;;;;2976:122::o;4248:105::-;-1:-1:-1;;;;;4328:17:6;4304:4;4328:17;;;:8;:17;;;;;;;4248:105::o;1501:21::-;;;;:::o;14172:749::-;14254:8;;14231:4;;-1:-1:-1;;;;;14254:18:6;;;:8;;:18;14250:41;;;-1:-1:-1;14282:7:6;14275:14;;14250:41;-1:-1:-1;;;;;14343:17:6;;;14302:12;14343:17;;;:9;:17;;;;;;;;;14372:40;;22:32:-1;6:49;;14372:40:6;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14343:70:6;;14302:12;;14316:23;;14343:17;;;:70;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14301:112:6;;;;14428:7;14424:469;;;14453:16;14471;14504:10;14493:50;;;;;;;;;;;;;;-1:-1:-1;14606:6:6;;14452:91;;-1:-1:-1;14452:91:6;-1:-1:-1;14574:6:6;;-1:-1:-1;;;;;14598:14:6;;;14606:6;;14598:14;14595:145;;;-1:-1:-1;14643:5:6;14595:145;14833:48;-1:-1:-1;;;;;14866:14:6;;;;14833:28;;:14;;14852:8;14833:28;:18;:28;:::i;:48::-;14826:55;;;;;;;;;14424:469;-1:-1:-1;14912:1:6;;14172:749;-1:-1:-1;;;14172:749:6:o;2029:109:3:-;1135:9;:7;:9::i;:::-;1127:54;;;;-1:-1:-1;;;1127:54:3;;;;;;;;;2102:28;2121:8;2102:18;:28::i;:::-;2029:109;:::o;806:98:1:-;886:10;806:98;:::o;2231:471:5:-;2289:7;2534:6;2530:47;;-1:-1:-1;2564:1:5;2557:8;;2530:47;2601:5;;;2605:1;2601;:5;:1;2625:5;;;;;:10;2617:56;;;;-1:-1:-1;;;2617:56:5;;;;;;;;3170:132;3228:7;3255:39;3259:1;3262;3255:39;;;;;;;;;;;;;;;;;:3;:39::i;1039:177:4:-;1149:59;;1123:86;;1142:5;;-1:-1:-1;;;1172:23:4;1149:59;;1197:4;;1202:5;;1149:59;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;1149:59:4;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;1149:59:4;;;179:29:-1;;;;160:49;;;1123:18:4;:86::i;:::-;1039:177;;;:::o;3482:200:7:-;3549:11;;:::i;:::-;3580:18;;:26;-1:-1:-1;3572:68:7;;;;-1:-1:-1;;;3572:68:7;;;;;;;;;3657:3;:11;;3669:5;3657:18;;;;;;;;;;;;;;;;;3650:25;;;;;;;;3657:18;;;;;;;3650:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3650:25:7;;;;;;-1:-1:-1;3482:200:7;;;;:::o;3688:337::-;3759:11;;:::i;:::-;3790:21;;;;:12;;;:21;;;;;;3782:75;;;;-1:-1:-1;;;3782:75:7;;;;;;;;;3867:10;3880:21;;;3904:1;3880:12;;:21;;;;;;3923:18;;-1:-1:-1;;3880:25:7;;;;3923:26;-1:-1:-1;3915:68:7;;;;-1:-1:-1;;;3915:68:7;;;;;;;;;4000:3;:11;;4012:5;4000:18;;;;;;;;;;;;;;;;;3993:25;;;;;;;;4000:18;;;;;;;3993:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3993:25:7;;;;;;-1:-1:-1;;3688:337:7;;;;:::o;859:181:5:-;917:7;949:5;;;973:6;;;;965:46;;;;-1:-1:-1;;;965:46:5;;;;;;;;647:174:4;755:58;;729:85;;748:5;;-1:-1:-1;;;778:23:4;755:58;;803:2;;807:5;;755:58;;;;1315:136:5;1373:7;1400:43;1404:1;1407;1400:43;;;;;;;;;;;;;;;;;:3;:43::i;1214:1529:7:-;1434:8;;1284:4;1421:22;;;:12;;;:22;;;;;;1458:15;;1454:1283;;1887:18;;-1:-1:-1;;1839:14:7;;;;1887:22;2149:21;;:::i;:::-;2173:3;:11;;2185:9;2173:22;;;;;;;;;;;;;;;;;2149:46;;;;;;;;2173:22;;;;;;;2149:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2149:46:7;;;;;2287:26;;2149:46;;-1:-1:-1;2149:46:7;;2287:3;;2299:13;;2287:26;;;;;;;;;;;;;;:38;;:26;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2287:38:7;-1:-1:-1;;;;;2287:38:7;;;;;;;;;;2404:12;;2391:26;;:12;;;:26;;;;;2420:17;;;2391:46;;2543:17;;2391:12;;2543:17;;;;;;;;;;;;;;-1:-1:-1;;2543:17:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2543:17:7;;;;;;;2648:8;;2635:22;;:12;;;:22;;;;;;2628:29;;;;2543:17;-1:-1:-1;2672:11:7;;-1:-1:-1;;;;2672:11:7;1454:1283;2721:5;2714:12;;;;;827:202:4;953:68;;927:95;;946:5;;-1:-1:-1;;;976:27:4;953:68;;1005:4;;1011:2;;1015:5;;953:68;;;;927:95;827:202;;;;:::o;633:413:7:-;700:4;721:23;730:3;735:5;:8;;;721;:23::i;:::-;716:324;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;-1:-1;760:23:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;760:23:7;-1:-1:-1;;;;;760:23:7;;;;;;;;;;943:18;;918:22;;;:12;;;:22;;;;;:43;;;;975:11;;716:324;-1:-1:-1;1024:5:7;1017:12;;3033:107;3115:18;;3033:107::o;2244:229:3:-;-1:-1:-1;;;;;2318:22:3;;2310:73;;;;-1:-1:-1;;;2310:73:3;;;;;;;;;2420:6;;;2399:38;;-1:-1:-1;;;;;2399:38:3;;;;2420:6;;;2399:38;;;2448:6;:17;;-1:-1:-1;;;;;;2448:17:3;-1:-1:-1;;;;;2448:17:3;;;;;;;;;;2244:229::o;3832:345:5:-;3918:7;4020:12;4013:5;4005:28;;;;-1:-1:-1;;;4005:28:5;;;;;;;;;;;4044:9;4060:1;4056;:5;;;;;;;3832:345;-1:-1:-1;;;;;3832:345:5:o;2838:1095:4:-;3433:27;3441:5;-1:-1:-1;;;;;3433:25:4;;:27::i;:::-;3425:71;;;;-1:-1:-1;;;3425:71:4;;;;;;;;;3567:12;3581:23;3616:5;-1:-1:-1;;;;;3608:19:4;3628:4;3608:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;3566:67:4;;;;3651:7;3643:52;;;;-1:-1:-1;;;3643:52:4;;;;;;;;;3710:17;;:21;3706:221;;3850:10;3839:30;;;;;;;;;;;;;;3831:85;;;;-1:-1:-1;;;3831:85:4;;;;;;;;1788:192:5;1874:7;1910:12;1902:6;;;;1894:29;;;;-1:-1:-1;;;1894:29:5;;;;;;;;;;-1:-1:-1;;;1946:5:5;;;1788:192::o;2824:128:7:-;2896:4;2919:21;;;:12;;;;;:21;;;;;;:26;;;2824:128::o;709:619:0:-;769:4;1237:20;;1080:66;1277:23;;;;;;:42;;-1:-1:-1;1304:15:0;;;1277:42;1269:51;709:619;-1:-1:-1;;;;709:619:0:o;295:22807:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;295:22807:6;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;408:130;475:20;;500:33;475:20;500:33;;545:134;623:13;;641:33;623:13;641:33;;823:132;900:13;;918:32;900:13;918:32;;962:126;1027:20;;1052:31;1027:20;1052:31;;1095:241;;1199:2;1187:9;1178:7;1174:23;1170:32;1167:2;;;1215:1;1212;1205:12;1167:2;1250:1;1267:53;1312:7;1292:9;1267:53;;1343:366;;;1464:2;1452:9;1443:7;1439:23;1435:32;1432:2;;;1480:1;1477;1470:12;1432:2;1515:1;1532:53;1577:7;1557:9;1532:53;;;1522:63;;1494:97;1622:2;1640:53;1685:7;1676:6;1665:9;1661:22;1640:53;;;1630:63;;1601:98;1426:283;;;;;;1716:366;;;1837:2;1825:9;1816:7;1812:23;1808:32;1805:2;;;1853:1;1850;1843:12;1805:2;1888:1;1905:53;1950:7;1930:9;1905:53;;;1895:63;;1867:97;1995:2;2013:53;2058:7;2049:6;2038:9;2034:22;2013:53;;2089:491;;;;2227:2;2215:9;2206:7;2202:23;2198:32;2195:2;;;2243:1;2240;2233:12;2195:2;2278:1;2295:53;2340:7;2320:9;2295:53;;;2285:63;;2257:97;2385:2;2403:53;2448:7;2439:6;2428:9;2424:22;2403:53;;;2393:63;;2364:98;2493:2;2511:53;2556:7;2547:6;2536:9;2532:22;2511:53;;;2501:63;;2472:98;2189:391;;;;;;2587:235;;2688:2;2676:9;2667:7;2663:23;2659:32;2656:2;;;2704:1;2701;2694:12;2656:2;2739:1;2756:50;2798:7;2778:9;2756:50;;2829:257;;2941:2;2929:9;2920:7;2916:23;2912:32;2909:2;;;2957:1;2954;2947:12;2909:2;2992:1;3009:61;3062:7;3042:9;3009:61;;3093:533;;;;3241:2;3229:9;3220:7;3216:23;3212:32;3209:2;;;3257:1;3254;3247:12;3209:2;3292:1;3309:64;3365:7;3345:9;3309:64;;;3299:74;;3271:108;3410:2;3428:64;3484:7;3475:6;3464:9;3460:22;3428:64;;;3418:74;;3389:109;3529:2;3547:63;3602:7;3593:6;3582:9;3578:22;3547:63;;3633:241;;3737:2;3725:9;3716:7;3712:23;3708:32;3705:2;;;3753:1;3750;3743:12;3705:2;3788:1;3805:53;3850:7;3830:9;3805:53;;3881:865;;;;;;;4068:3;4056:9;4047:7;4043:23;4039:33;4036:2;;;4085:1;4082;4075:12;4036:2;4120:1;4137:53;4182:7;4162:9;4137:53;;;4127:63;;4099:97;4227:2;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;;;4235:63;;4206:98;4335:2;4353:53;4398:7;4389:6;4378:9;4374:22;4353:53;;;4343:63;;4314:98;4443:2;4461:51;4504:7;4495:6;4484:9;4480:22;4461:51;;;4451:61;;4422:96;4549:3;4568:53;4613:7;4604:6;4593:9;4589:22;4568:53;;;4558:63;;4528:99;4658:3;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;;;4667:63;;4637:99;4030:716;;;;;;;;;4753:366;;;4874:2;4862:9;4853:7;4849:23;4845:32;4842:2;;;4890:1;4887;4880:12;4842:2;4925:1;4942:53;4987:7;4967:9;4942:53;;5127:173;;5214:46;5256:3;5248:6;5214:46;;;-1:-1;;5289:4;5280:14;;5207:93;5309:251;;5432:86;5514:3;5506:6;5432:86;;;-1:-1;;5547:6;5538:16;;5425:135;5568:103;5641:24;5659:5;5641:24;;;5636:3;5629:37;5623:48;;;5798:152;5899:45;5919:24;5937:5;5919:24;;;5899:45;;5988:690;;6133:54;6181:5;6133:54;;;6200:86;6279:6;6274:3;6200:86;;;6193:93;;6307:56;6357:5;6307:56;;;6383:7;6411:1;6396:260;6421:6;6418:1;6415:13;6396:260;;;6488:6;6482:13;6509:63;6568:3;6553:13;6509:63;;;6502:70;;6589:60;6642:6;6589:60;;;6579:70;-1:-1;;6443:1;6436:9;6396:260;;;-1:-1;6669:3;;6112:566;-1:-1;;;;;6112:566;6743:834;;6924:72;6990:5;6924:72;;;7009:104;7106:6;7101:3;7009:104;;;7002:111;;7134:74;7202:5;7134:74;;;7228:7;7256:1;7241:314;7266:6;7263:1;7260:13;7241:314;;;7333:6;7327:13;7354:99;7449:3;7434:13;7354:99;;;7347:106;;7470:78;7541:6;7470:78;;;7460:88;-1:-1;;7288:1;7281:9;7241:314;;7585:104;7662:21;7677:5;7662:21;;7696:113;7779:24;7797:5;7779:24;;7816:356;;7944:38;7976:5;7944:38;;;7994:88;8075:6;8070:3;7994:88;;;7987:95;;8087:52;8132:6;8127:3;8120:4;8113:5;8109:16;8087:52;;;8151:16;;;;;7924:248;-1:-1;;7924:248;8179:347;;8291:39;8324:5;8291:39;;;8342:71;8406:6;8401:3;8342:71;;;8335:78;;8418:52;8463:6;8458:3;8451:4;8444:5;8440:16;8418:52;;;8491:29;8513:6;8491:29;;;8482:39;;;;8271:255;-1:-1;;;8271:255;8534:370;;8694:67;8758:2;8753:3;8694:67;;;8794:34;8774:55;;-1:-1;;;8858:2;8849:12;;8842:25;8895:2;8886:12;;8680:224;-1:-1;;8680:224;8913:319;;9073:67;9137:2;9132:3;9073:67;;;-1:-1;;;9153:42;;9223:2;9214:12;;9059:173;-1:-1;;9059:173;9241:377;;9401:67;9465:2;9460:3;9401:67;;;9501:34;9481:55;;-1:-1;;;9565:2;9556:12;;9549:32;9609:2;9600:12;;9387:231;-1:-1;;9387:231;9627:394;;9787:67;9851:2;9846:3;9787:67;;;9887:34;9867:55;;9956:27;9951:2;9942:12;;9935:49;10012:2;10003:12;;9773:248;-1:-1;;9773:248;10030:318;;10190:67;10254:2;10249:3;10190:67;;;-1:-1;;;10270:41;;10339:2;10330:12;;10176:172;-1:-1;;10176:172;10357:375;;10517:67;10581:2;10576:3;10517:67;;;10617:34;10597:55;;-1:-1;;;10681:2;10672:12;;10665:30;10723:2;10714:12;;10503:229;-1:-1;;10503:229;10741:385;;10901:67;10965:2;10960:3;10901:67;;;11001:34;10981:55;;-1:-1;;;11065:2;11056:12;;11049:40;11117:2;11108:12;;10887:239;-1:-1;;10887:239;11135:326;;11295:67;11359:2;11354:3;11295:67;;;11395:28;11375:49;;11452:2;11443:12;;11281:180;-1:-1;;11281:180;11470:327;;11630:67;11694:2;11689:3;11630:67;;;11730:29;11710:50;;11788:2;11779:12;;11616:181;-1:-1;;11616:181;11806:329;;11966:67;12030:2;12025:3;11966:67;;;12066:31;12046:52;;12126:2;12117:12;;11952:183;-1:-1;;11952:183;12144:328;;12304:67;12368:2;12363:3;12304:67;;;12404:30;12384:51;;12463:2;12454:12;;12290:182;-1:-1;;12290:182;12481:332;;12641:67;12705:2;12700:3;12641:67;;;12741:34;12721:55;;12804:2;12795:12;;12627:186;-1:-1;;12627:186;12822:377;;12982:67;13046:2;13041:3;12982:67;;;13082:34;13062:55;;-1:-1;;;13146:2;13137:12;;13130:32;13190:2;13181:12;;12968:231;-1:-1;;12968:231;13208:332;;13368:67;13432:2;13427:3;13368:67;;;13468:34;13448:55;;13531:2;13522:12;;13354:186;-1:-1;;13354:186;13549:321;;13709:67;13773:2;13768:3;13709:67;;;-1:-1;;;13789:44;;13861:2;13852:12;;13695:175;-1:-1;;13695:175;13879:327;;14039:67;14103:2;14098:3;14039:67;;;14139:29;14119:50;;14197:2;14188:12;;14025:181;-1:-1;;14025:181;14215:331;;14375:67;14439:2;14434:3;14375:67;;;14475:33;14455:54;;14537:2;14528:12;;14361:185;-1:-1;;14361:185;14555:383;;14715:67;14779:2;14774:3;14715:67;;;14815:34;14795:55;;-1:-1;;;14879:2;14870:12;;14863:38;14929:2;14920:12;;14701:237;-1:-1;;14701:237;14947:373;;15107:67;15171:2;15166:3;15107:67;;;15207:34;15187:55;;-1:-1;;;15271:2;15262:12;;15255:28;15311:2;15302:12;;15093:227;-1:-1;;15093:227;15329:320;;15489:67;15553:2;15548:3;15489:67;;;-1:-1;;;15569:43;;15640:2;15631:12;;15475:174;-1:-1;;15475:174;15994:370;;16154:67;16218:2;16213:3;16154:67;;;16254:34;16234:55;;-1:-1;;;16318:2;16309:12;;16302:25;16355:2;16346:12;;16140:224;-1:-1;;16140:224;16373:332;;16533:67;16597:2;16592:3;16533:67;;;16633:34;16613:55;;16696:2;16687:12;;16519:186;-1:-1;;16519:186;16714:390;;16874:67;16938:2;16933:3;16874:67;;;16974:34;16954:55;;-1:-1;;;17038:2;17029:12;;17022:45;17095:2;17086:12;;16860:244;-1:-1;;16860:244;17113:370;;17273:67;17337:2;17332:3;17273:67;;;17373:34;17353:55;;-1:-1;;;17437:2;17428:12;;17421:25;17474:2;17465:12;;17259:224;-1:-1;;17259:224;17492:373;;17652:67;17716:2;17711:3;17652:67;;;17752:34;17732:55;;-1:-1;;;17816:2;17807:12;;17800:28;17856:2;17847:12;;17638:227;-1:-1;;17638:227;17874:332;;18034:67;18098:2;18093:3;18034:67;;;18134:34;18114:55;;18197:2;18188:12;;18020:186;-1:-1;;18020:186;18215:379;;18375:67;18439:2;18434:3;18375:67;;;18475:34;18455:55;;-1:-1;;;18539:2;18530:12;;18523:34;18585:2;18576:12;;18361:233;-1:-1;;18361:233;18603:315;;18763:67;18827:2;18822:3;18763:67;;;-1:-1;;;18843:38;;18909:2;18900:12;;18749:169;-1:-1;;18749:169;18927:379;;19087:67;19151:2;19146:3;19087:67;;;19187:34;19167:55;;-1:-1;;;19251:2;19242:12;;19235:34;19297:2;19288:12;;19073:233;-1:-1;;19073:233;19315:331;;19475:67;19539:2;19534:3;19475:67;;;19575:33;19555:54;;19637:2;19628:12;;19461:185;-1:-1;;19461:185;19655:329;;19815:67;19879:2;19874:3;19815:67;;;19915:31;19895:52;;19975:2;19966:12;;19801:183;-1:-1;;19801:183;20043:1435;20246:23;;20180:6;20171:16;;;20275:63;20175:3;20246:23;20275:63;;;20202:142;20423:4;20416:5;20412:16;20406:23;20435:63;20492:4;20487:3;20483:14;20469:12;20435:63;;;20354:150;20578:4;20571:5;20567:16;20561:23;20590:63;20647:4;20642:3;20638:14;20624:12;20590:63;;;20514:145;20740:4;20733:5;20729:16;20723:23;20752:63;20809:4;20804:3;20800:14;20786:12;20752:63;;;20669:152;20904:4;20897:5;20893:16;20887:23;20916:63;20973:4;20968:3;20964:14;20950:12;20916:63;;;20831:154;21063:4;21056:5;21052:16;21046:23;21075:63;21132:4;21127:3;21123:14;21109:12;21075:63;;;20995:149;21221:4;21214:5;21210:16;21204:23;21233:63;21290:4;21285:3;21281:14;21267:12;21233:63;;;21154:148;21382:4;21375:5;21371:16;21365:23;21394:63;21451:4;21446:3;21442:14;21428:12;21394:63;;23194:152;23295:45;23315:24;23333:5;23315:24;;;23295:45;;23353:107;23432:22;23448:5;23432:22;;23467:262;;23611:93;23700:3;23691:6;23611:93;;23736:522;;23911:75;23982:3;23973:6;23911:75;;;24008:2;24003:3;23999:12;23992:19;;24022:75;24093:3;24084:6;24022:75;;;24119:2;24114:3;24110:12;24103:19;;24133:75;24204:3;24195:6;24133:75;;;-1:-1;24230:2;24221:12;;23899:359;-1:-1;;;23899:359;24265:213;24383:2;24368:18;;24397:71;24372:9;24441:6;24397:71;;24485:435;24659:2;24644:18;;24673:71;24648:9;24717:6;24673:71;;;24755:72;24823:2;24812:9;24808:18;24799:6;24755:72;;;24838;24906:2;24895:9;24891:18;24882:6;24838:72;;24927:324;25073:2;25058:18;;25087:71;25062:9;25131:6;25087:71;;;25169:72;25237:2;25226:9;25222:18;25213:6;25169:72;;25258:361;25426:2;25440:47;;;25411:18;;25501:108;25411:18;25595:6;25501:108;;25626:433;25830:2;25844:47;;;25815:18;;25905:144;25815:18;26035:6;25905:144;;26066:201;26178:2;26163:18;;26192:65;26167:9;26230:6;26192:65;;26274:539;26472:3;26457:19;;26487:71;26461:9;26531:6;26487:71;;;26569:68;26633:2;26622:9;26618:18;26609:6;26569:68;;;26648:72;26716:2;26705:9;26701:18;26692:6;26648:72;;;26731;26799:2;26788:9;26784:18;26775:6;26731:72;;;26443:370;;;;;;;;26820:301;26958:2;26972:47;;;26943:18;;27033:78;26943:18;27097:6;27033:78;;27128:407;27319:2;27333:47;;;27304:18;;27394:131;27304:18;27394:131;;27542:407;27733:2;27747:47;;;27718:18;;27808:131;27718:18;27808:131;;27956:407;28147:2;28161:47;;;28132:18;;28222:131;28132:18;28222:131;;28370:407;28561:2;28575:47;;;28546:18;;28636:131;28546:18;28636:131;;28784:407;28975:2;28989:47;;;28960:18;;29050:131;28960:18;29050:131;;29198:407;29389:2;29403:47;;;29374:18;;29464:131;29374:18;29464:131;;29612:407;29803:2;29817:47;;;29788:18;;29878:131;29788:18;29878:131;;30026:407;30217:2;30231:47;;;30202:18;;30292:131;30202:18;30292:131;;30440:407;30631:2;30645:47;;;30616:18;;30706:131;30616:18;30706:131;;30854:407;31045:2;31059:47;;;31030:18;;31120:131;31030:18;31120:131;;31268:407;31459:2;31473:47;;;31444:18;;31534:131;31444:18;31534:131;;31682:407;31873:2;31887:47;;;31858:18;;31948:131;31858:18;31948:131;;32096:407;32287:2;32301:47;;;32272:18;;32362:131;32272:18;32362:131;;32510:407;32701:2;32715:47;;;32686:18;;32776:131;32686:18;32776:131;;32924:407;33115:2;33129:47;;;33100:18;;33190:131;33100:18;33190:131;;33338:407;33529:2;33543:47;;;33514:18;;33604:131;33514:18;33604:131;;33752:407;33943:2;33957:47;;;33928:18;;34018:131;33928:18;34018:131;;34166:407;34357:2;34371:47;;;34342:18;;34432:131;34342:18;34432:131;;34580:407;34771:2;34785:47;;;34756:18;;34846:131;34756:18;34846:131;;34994:407;35185:2;35199:47;;;35170:18;;35260:131;35170:18;35260:131;;35822:407;36013:2;36027:47;;;35998:18;;36088:131;35998:18;36088:131;;36236:407;36427:2;36441:47;;;36412:18;;36502:131;36412:18;36502:131;;36650:407;36841:2;36855:47;;;36826:18;;36916:131;36826:18;36916:131;;37064:407;37255:2;37269:47;;;37240:18;;37330:131;37240:18;37330:131;;37478:407;37669:2;37683:47;;;37654:18;;37744:131;37654:18;37744:131;;37892:407;38083:2;38097:47;;;38068:18;;38158:131;38068:18;38158:131;;38306:407;38497:2;38511:47;;;38482:18;;38572:131;38482:18;38572:131;;38720:407;38911:2;38925:47;;;38896:18;;38986:131;38896:18;38986:131;;39134:407;39325:2;39339:47;;;39310:18;;39400:131;39310:18;39400:131;;39548:407;39739:2;39753:47;;;39724:18;;39814:131;39724:18;39814:131;;39962:407;40153:2;40167:47;;;40138:18;;40228:131;40138:18;40228:131;;40376:302;40538:3;40523:19;;40553:115;40527:9;40641:6;40553:115;;40685:213;40803:2;40788:18;;40817:71;40792:9;40861:6;40817:71;;40905:324;41051:2;41036:18;;41065:71;41040:9;41109:6;41065:71;;41236:151;41360:4;41351:14;;41308:79;41570:137;41673:12;;41644:63;42382:178;42500:19;;;42549:4;42540:14;;42493:67;43098:91;;43160:24;43178:5;43160:24;;43196:85;43262:13;43255:21;;43238:43;43288:72;43350:5;43333:27;43367:109;-1:-1;;;;;43429:42;;43412:64;43483:121;-1:-1;;;;;43545:54;;43528:76;43690:88;43762:10;43751:22;;43734:44;43785:81;43856:4;43845:16;;43828:38;43874:268;43939:1;43946:101;43960:6;43957:1;43954:13;43946:101;;;44027:11;;;44021:18;44008:11;;;44001:39;43982:2;43975:10;43946:101;;;44062:6;44059:1;44056:13;44053:2;;;-1:-1;;44127:1;44109:16;;44102:27;43923:219;44150:95;;44214:26;44234:5;44252:89;44316:20;44330:5;44316:20;;44429:97;44517:2;44497:14;-1:-1;;44493:28;;44477:49;44534:94;44608:2;44604:14;;44576:52;44636:117;44705:24;44723:5;44705:24;;;44698:5;44695:35;44685:2;;44744:1;44741;44734:12;44760:111;44826:21;44841:5;44826:21;;44878:117;44947:24;44965:5;44947:24;;45002:117;45071:24;45089:5;45071:24;;45250:115;45318:23;45335:5;45318:23;;45372:113;45439:22;45455:5;45439:22;
Swarm Source
bzzr://c486133873eeccc10aff62abbf089038c5ae71e23146e02b8adf8c2b89d8adf4
Loading...
Loading
Loading...
Loading
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.