ETH Price: $3,419.50 (+3.74%)

Contract

0x99896BA5fde6CED06569CF848982d2c7779d2694
 
Transaction Hash
Method
Block
From
To
Approve130041382021-08-11 13:23:341200 days ago1628688214IN
0x99896BA5...7779d2694
0 ETH0.0011905947.57236608
Approve130022312021-08-11 6:14:141200 days ago1628662454IN
0x99896BA5...7779d2694
0 ETH0.000954438.13491442
Approve130022242021-08-11 6:12:411200 days ago1628662361IN
0x99896BA5...7779d2694
0 ETH0.0009760539
Withdraw Investm...129166632021-07-28 21:02:581213 days ago1627506178IN
0x99896BA5...7779d2694
0 ETH0.0037850637
Withdraw Investm...128110912021-07-12 7:19:441230 days ago1626074384IN
0x99896BA5...7779d2694
0 ETH0.001214946
Withdraw Investm...128110912021-07-12 7:19:441230 days ago1626074384IN
0x99896BA5...7779d2694
0 ETH0.001214946
Withdraw Investm...128110912021-07-12 7:19:441230 days ago1626074384IN
0x99896BA5...7779d2694
0 ETH0.001214946
Withdraw Investm...128110912021-07-12 7:19:441230 days ago1626074384IN
0x99896BA5...7779d2694
0 ETH0.0010749240.7
Withdraw Investm...127872542021-07-08 14:35:461233 days ago1625754946IN
0x99896BA5...7779d2694
0 ETH0.0024063836.1
Withdraw Investm...127694882021-07-05 19:47:281236 days ago1625514448IN
0x99896BA5...7779d2694
0 ETH0.0007455110
Withdraw Investm...127655382021-07-05 5:17:121237 days ago1625462232IN
0x99896BA5...7779d2694
0 ETH0.000867111
Withdraw Investm...127655362021-07-05 5:16:461237 days ago1625462206IN
0x99896BA5...7779d2694
0 ETH0.0007337911
Withdraw Investm...127655362021-07-05 5:16:461237 days ago1625462206IN
0x99896BA5...7779d2694
0 ETH0.0006692811
Withdraw Investm...127617032021-07-04 14:57:471237 days ago1625410667IN
0x99896BA5...7779d2694
0 ETH0.0006383410
Withdraw Investm...127435282021-07-01 19:03:481240 days ago1625166228IN
0x99896BA5...7779d2694
0 ETH0.0058895279
Withdraw Investm...127263522021-06-29 2:37:131243 days ago1624934233IN
0x99896BA5...7779d2694
0 ETH0.0011182615
Withdraw Investm...127261392021-06-29 1:48:451243 days ago1624931325IN
0x99896BA5...7779d2694
0 ETH0.0005743910
Withdraw Investm...127261062021-06-29 1:42:381243 days ago1624930958IN
0x99896BA5...7779d2694
0 ETH0.0007455110
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0010749240.7
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0010749240.7
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0010749240.7
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0010458739.6
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0010458739.6
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0007923330
Withdraw Investm...127257312021-06-29 0:20:021243 days ago1624926002IN
0x99896BA5...7779d2694
0 ETH0.0002641110
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
125166612021-05-27 13:36:441275 days ago1622122604
0x99896BA5...7779d2694
0.09998 ETH
125166602021-05-27 13:36:281275 days ago1622122588
0x99896BA5...7779d2694
0.19996 ETH
125166542021-05-27 13:35:481275 days ago1622122548
0x99896BA5...7779d2694
0.14997 ETH
125166522021-05-27 13:35:121275 days ago1622122512
0x99896BA5...7779d2694
0.1419716 ETH
125166512021-05-27 13:35:111275 days ago1622122511
0x99896BA5...7779d2694
0.159968 ETH
125166472021-05-27 13:34:441275 days ago1622122484
0x99896BA5...7779d2694
0.04999 ETH
125166472021-05-27 13:34:441275 days ago1622122484
0x99896BA5...7779d2694
0.07138572 ETH
125166462021-05-27 13:34:141275 days ago1622122454
0x99896BA5...7779d2694
0.4999 ETH
125166432021-05-27 13:33:151276 days ago1622122395
0x99896BA5...7779d2694
0.04999 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.4999 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.4999 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.4999 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.9998 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.9998 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.4999 ETH
125166422021-05-27 13:31:431276 days ago1622122303
0x99896BA5...7779d2694
0.19996 ETH
125166412021-05-27 13:31:331276 days ago1622122293
0x99896BA5...7779d2694
0.9998 ETH
125166412021-05-27 13:31:331276 days ago1622122293
0x99896BA5...7779d2694
0.39992 ETH
125166412021-05-27 13:31:331276 days ago1622122293
0x99896BA5...7779d2694
0.4999 ETH
125166402021-05-27 13:30:571276 days ago1622122257
0x99896BA5...7779d2694
0.09998 ETH
125166402021-05-27 13:30:571276 days ago1622122257
0x99896BA5...7779d2694
0.119976 ETH
125166402021-05-27 13:30:571276 days ago1622122257
0x99896BA5...7779d2694
0.4999 ETH
125166402021-05-27 13:30:571276 days ago1622122257
0x99896BA5...7779d2694
0.9998 ETH
125166402021-05-27 13:30:571276 days ago1622122257
0x99896BA5...7779d2694
0.0959808 ETH
125166392021-05-27 13:30:111276 days ago1622122211
0x99896BA5...7779d2694
0.9998 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ThePoolz

Compiler Version
v0.4.26+commit.4563c3fc

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-07
*/

pragma solidity ^0.4.24;/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view returns (uint256);

  function transferFrom(address _from, address _to, uint256 _value)
    public returns (bool);

  function approve(address _spender, uint256 _value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() public onlyOwner whenPaused {
    paused = false;
    emit Unpause();
  }
}// SPDX-License-Identifier: MIT





contract GovManager is Pausable {
    address public GovernerContract;

    modifier onlyOwnerOrGov() {
        require(msg.sender == owner || msg.sender == GovernerContract, "Authorization Error");
        _;
    }

    function setGovernerContract(address _address) external onlyOwnerOrGov{
        GovernerContract = _address;
    }

    constructor() public {
        GovernerContract = address(0);
    }
}// SPDX-License-Identifier: MIT







contract ERC20Helper is GovManager {
    event TransferOut(uint256 Amount, address To, address Token);
    event TransferIn(uint256 Amount, address From, address Token);
    modifier TestAllownce(
        address _token,
        address _owner,
        uint256 _amount
    ) {
        require(
            ERC20(_token).allowance(_owner, address(this)) >= _amount,
            "no allowance"
        );
        _;
    }

    function TransferToken(
        address _Token,
        address _Reciver,
        uint256 _Amount
    ) internal {
        uint256 OldBalance = CheckBalance(_Token, address(this));
        emit TransferOut(_Amount, _Reciver, _Token);
        ERC20(_Token).transfer(_Reciver, _Amount);
        require(
            (SafeMath.add(CheckBalance(_Token, address(this)), _Amount)) == OldBalance
                ,
            "recive wrong amount of tokens"
        );
    }

    function CheckBalance(address _Token, address _Subject)
        internal
        view
        returns (uint256)
    {
        return ERC20(_Token).balanceOf(_Subject);
    }

    function TransferInToken(
        address _Token,
        address _Subject,
        uint256 _Amount
    ) internal TestAllownce(_Token, _Subject, _Amount) {
        require(_Amount > 0);
        uint256 OldBalance = CheckBalance(_Token, address(this));
        ERC20(_Token).transferFrom(_Subject, address(this), _Amount);
        emit TransferIn(_Amount, _Subject, _Token);
        require(
            (SafeMath.add(OldBalance, _Amount)) ==
                CheckBalance(_Token, address(this)),
            "recive wrong amount of tokens"
        );
    }
}// SPDX-License-Identifier: MIT



//True POZ Token will have this, 
interface IPOZBenefit {
    function IsPOZHolder(address _Subject) external view returns(bool);
}// SPDX-License-Identifier: MIT






contract PozBenefit is ERC20Helper {
    constructor() public {
        PozFee = 15; // *10000
        PozTimer = 1000; // *10000
    
       // POZ_Address = address(0x0);
       // POZBenefit_Address = address(0x0);
    }

    uint256 public PozFee; // the fee for the first part of the pool
    uint256 public PozTimer; //the timer for the first part fo the pool
    
    modifier PercentCheckOk(uint256 _percent) {
        if (_percent < 10000) _;
        else revert("Not in range");
    }
    modifier LeftIsBigger(uint256 _left, uint256 _right) {
        if (_left > _right) _;
        else revert("Not bigger");
    }

    function SetPozTimer(uint256 _pozTimer)
        public
        onlyOwnerOrGov
        PercentCheckOk(_pozTimer)
    {
        PozTimer = _pozTimer;
    }

    
}// SPDX-License-Identifier: MIT





contract ETHHelper is PozBenefit {
    constructor() public {
        IsPayble = false;
    }

    modifier ReceivETH(uint256 msgValue, address msgSender, uint256 _MinETHInvest) {
        require(msgValue >= _MinETHInvest, "Send ETH to invest");
        emit TransferInETH(msgValue, msgSender);
        _;
    }

    //@dev not/allow contract to receive funds
    function() public payable {
        if (!IsPayble) revert();
    }

    event TransferOutETH(uint256 Amount, address To);
    event TransferInETH(uint256 Amount, address From);

    bool public IsPayble;
 
    function SwitchIsPayble() public onlyOwner {
        IsPayble = !IsPayble;
    }

    function TransferETH(address _Reciver, uint256 _ammount) internal {
        emit TransferOutETH(_ammount, _Reciver);
        uint256 beforeBalance = address(_Reciver).balance;
        _Reciver.transfer(_ammount);
        require(
            SafeMath.add(beforeBalance, _ammount) == address(_Reciver).balance,
            "The transfer did not complite"
        );
    }
 
}// SPDX-License-Identifier: MIT



//For whitelist, 
interface IWhiteList {
    function Check(address _Subject, uint256 _Id) external view returns(uint);
    function Register(address _Subject,uint256 _Id,uint256 _Amount) external;
    function IsNeedRegister(uint256 _Id) external view returns(bool);
}// SPDX-License-Identifier: MIT






contract Manageable is ETHHelper {
    constructor() public {
        Fee = 20; // *10000
        //MinDuration = 0; //need to set
        //PoolPrice = 0; // Price for create a pool
        MaxDuration = 60 * 60 * 24 * 30 * 6; // half year
        MinETHInvest = 10000; // for percent calc
        MaxETHInvest = 100 * 10**18; // 100 eth per wallet
        //WhiteList_Address = address(0x0);
    }

    mapping(address => uint256) FeeMap;
    //@dev for percent use uint16
    uint256 public Fee; //the fee for the pool
    uint256 public MinDuration; //the minimum duration of a pool, in seconds
    uint256 public MaxDuration; //the maximum duration of a pool from the creation, in seconds
    uint256 public PoolPrice;
    uint256 public MinETHInvest;
    uint256 public MaxETHInvest;
    address public WhiteList_Address; //The address of the Whitelist contract

    bool public IsTokenFilterOn;
    uint256 public TokenWhitelistId;
    uint256 public MCWhitelistId; // Main Coin WhiteList ID

    function SwapTokenFilter() public onlyOwner {
        IsTokenFilterOn = !IsTokenFilterOn;
    }

    function setTokenWhitelistId(uint256 _whiteListId) external onlyOwnerOrGov{
        TokenWhitelistId = _whiteListId;
    }

    function setMCWhitelistId(uint256 _whiteListId) external onlyOwnerOrGov{
        MCWhitelistId = _whiteListId;
    }

    function IsValidToken(address _address) public view returns (bool) {
        return !IsTokenFilterOn || (IWhiteList(WhiteList_Address).Check(_address, TokenWhitelistId) > 0);
    }

    function IsERC20Maincoin(address _address) public view returns (bool) {
        return !IsTokenFilterOn || IWhiteList(WhiteList_Address).Check(_address, MCWhitelistId) > 0;
    }
    
    function SetWhiteList_Address(address _WhiteList_Address) public onlyOwnerOrGov {
        WhiteList_Address = _WhiteList_Address;
    }

    function SetMinMaxETHInvest(uint256 _MinETHInvest, uint256 _MaxETHInvest)
        public
        onlyOwnerOrGov
    {
        MinETHInvest = _MinETHInvest;
        MaxETHInvest = _MaxETHInvest;
    }

    function SetMinMaxDuration(uint256 _minDuration, uint256 _maxDuration)
        public
        onlyOwnerOrGov
    {
        MinDuration = _minDuration;
        MaxDuration = _maxDuration;
    }

    function SetPoolPrice(uint256 _PoolPrice) public onlyOwnerOrGov {
        PoolPrice = _PoolPrice;
    }

    function SetFee(uint256 _fee)
        public
        onlyOwnerOrGov
        PercentCheckOk(_fee)
        LeftIsBigger(_fee, PozFee)
    {
        Fee = _fee;
    }

    function SetPOZFee(uint256 _fee)
        public
        onlyOwnerOrGov
        PercentCheckOk(_fee)
        LeftIsBigger(Fee, _fee)
    {
        PozFee = _fee;
    }

    
}// SPDX-License-Identifier: MIT






contract Pools is Manageable {
    event NewPool(address token, uint256 id);
    event FinishPool(uint256 id);
    event PoolUpdate(uint256 id);

    constructor() public {
        //  poolsCount = 0; //Start with 0
    }

    uint256 public poolsCount; // the ids of the pool
    mapping(uint256 => Pool) public pools; //the id of the pool with the data
    mapping(address => uint256[]) public poolsMap; //the address and all of the pools id's
    struct Pool {
        PoolBaseData BaseData;
        PoolMoreData MoreData;
    }
    struct PoolBaseData {
        address Token; //the address of the erc20 toke for sale
        address Creator; //the project owner
        uint256 FinishTime; //Until what time the pool is active
        uint256 Rate; //for eth Wei, in token, by the decemal. the cost of 1 token
        uint256 POZRate; //the rate for the until OpenForAll, if the same as Rate , OpenForAll = StartTime .
        address Maincoin; // on adress.zero = ETH
        uint256 StartAmount; //The total amount of the tokens for sale
    }
    struct PoolMoreData {
        uint64 LockedUntil; // true - the investors getting the tokens after the FinishTime. false - intant deal
        uint256 Lefttokens; // the ammount of tokens left for sale
        uint256 StartTime; // the time the pool open //TODO Maybe Delete this?
        uint256 OpenForAll; // The Time that all investors can invest
        uint256 UnlockedTokens; //for locked pools
        uint256 WhiteListId; // 0 is turn off, the Id of the whitelist from the contract.
        bool TookLeftOvers; //The Creator took the left overs after the pool finished
        bool Is21DecimalRate; //If true, the rate will be rate*10^-21
    }

    function isPoolLocked(uint256 _id) public view returns(bool){
        return pools[_id].MoreData.LockedUntil > now;
    }

    //create a new pool
    function CreatePool(
        address _Token, //token to sell address
        uint256 _FinishTime, //Until what time the pool will work
        uint256 _Rate, //the rate of the trade
        uint256 _POZRate, //the rate for POZ Holders, how much each token = main coin
        uint256 _StartAmount, //Total amount of the tokens to sell in the pool
        uint64 _LockedUntil, //False = DSP or True = TLP
        address _MainCoin, // address(0x0) = ETH, address of main token
        bool _Is21Decimal, //focus the for smaller tokens.
        uint256 _Now, //Start Time - can be 0 to not change current flow
        uint256 _WhiteListId // the Id of the Whitelist contract, 0 For turn-off
    ) public payable whenNotPaused {
        require(msg.value >= PoolPrice, "Need to pay for the pool");
        require(IsValidToken(_Token), "Need Valid ERC20 Token"); //check if _Token is ERC20
        require(
            _MainCoin == address(0x0) || IsERC20Maincoin(_MainCoin),
            "Main coin not in list"
        );
        require(_FinishTime  < SafeMath.add(MaxDuration, now), "Pool duration can't be that long");
        require(_LockedUntil < SafeMath.add(MaxDuration, now) , "Locked value can't be that long");
        require(
            _Rate <= _POZRate,
            "POZ holders need to have better price (or the same)"
        );
        require(_POZRate > 0, "It will not work");
        if (_Now < now) _Now = now;
        require(
            SafeMath.add(now, MinDuration) <= _FinishTime,
            "Need more then MinDuration"
        ); // check if the time is OK
        TransferInToken(_Token, msg.sender, _StartAmount);
        uint256 Openforall =
            (_WhiteListId == 0) 
                ? _Now //and this
                : SafeMath.add(
                    SafeMath.div(
                        SafeMath.mul(SafeMath.sub(_FinishTime, _Now), PozTimer),
                        10000
                    ),
                    _Now
                );
        //register the pool
        pools[poolsCount] = Pool(
            PoolBaseData(
                _Token,
                msg.sender,
                _FinishTime,
                _Rate,
                _POZRate,
                _MainCoin,
                _StartAmount
            ),
            PoolMoreData(
                _LockedUntil,
                _StartAmount,
                _Now,
                Openforall,
                0,
                _WhiteListId,
                false,
                _Is21Decimal
            )
        );
        poolsMap[msg.sender].push(poolsCount);
        emit NewPool(_Token, poolsCount);
        poolsCount = SafeMath.add(poolsCount, 1); //joke - overflowfrom 0 on int256 = 1.16E77
    }
}// SPDX-License-Identifier: MIT




contract PoolsData is Pools {
    enum PoolStatus {Created, Open, PreMade, OutOfstock, Finished, Close} //the status of the pools

    modifier PoolId(uint256 _id) {
        require(_id < poolsCount, "Wrong pool id, Can't get Status");
        _;
    }

    function GetMyPoolsId() public view returns (uint256[]) {
        return poolsMap[msg.sender];
    }

    function GetPoolBaseData(uint256 _Id)
        public
        view
        PoolId(_Id)
        returns (
            address,
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return (
            pools[_Id].BaseData.Token,
            pools[_Id].BaseData.Creator,
            pools[_Id].BaseData.FinishTime,
            pools[_Id].BaseData.Rate,
            pools[_Id].BaseData.POZRate,
            pools[_Id].BaseData.StartAmount
        );
    }

    function GetPoolMoreData(uint256 _Id)
        public
        view
        PoolId(_Id)
        returns (
            uint64,
            uint256,
            uint256,
            uint256,
            uint256,
            bool
        )
    {
        return (
            pools[_Id].MoreData.LockedUntil,
            pools[_Id].MoreData.Lefttokens,
            pools[_Id].MoreData.StartTime,
            pools[_Id].MoreData.OpenForAll,
            pools[_Id].MoreData.UnlockedTokens,
            pools[_Id].MoreData.Is21DecimalRate
        );
    }

    function GetPoolExtraData(uint256 _Id)
        public
        view
        PoolId(_Id)
        returns (
            bool,
            uint256,
            address
        )
    {
        return (
            pools[_Id].MoreData.TookLeftOvers,
            pools[_Id].MoreData.WhiteListId,
            pools[_Id].BaseData.Maincoin
        );
    }

    function IsReadyWithdrawLeftOvers(uint256 _PoolId)
        public
        view
        PoolId(_PoolId)
        returns (bool)
    {
        return
            pools[_PoolId].BaseData.FinishTime <= now &&
            pools[_PoolId].MoreData.Lefttokens > 0 &&
            !pools[_PoolId].MoreData.TookLeftOvers;
    }

    //@dev no use of revert to make sure the loop will work
    function WithdrawLeftOvers(uint256 _PoolId) public PoolId(_PoolId) returns (bool) {
        //pool is finished + got left overs + did not took them
        if (IsReadyWithdrawLeftOvers(_PoolId)) {
            pools[_PoolId].MoreData.TookLeftOvers = true;
            TransferToken(
                pools[_PoolId].BaseData.Token,
                pools[_PoolId].BaseData.Creator,
                pools[_PoolId].MoreData.Lefttokens
            );
            return true;
        }
        return false;
    }

    //calculate the status of a pool
    function GetPoolStatus(uint256 _id)
        public
        view
        PoolId(_id)
        returns (PoolStatus)
    {
        //Don't like the logic here - ToDo Boolean checks (truth table)
        if (now < pools[_id].MoreData.StartTime) return PoolStatus.PreMade;
        if (
            now < pools[_id].MoreData.OpenForAll &&
            pools[_id].MoreData.Lefttokens > 0
        ) {
            //got tokens + only poz investors
            return (PoolStatus.Created);
        }
        if (
            now >= pools[_id].MoreData.OpenForAll &&
            pools[_id].MoreData.Lefttokens > 0 &&
            now < pools[_id].BaseData.FinishTime
        ) {
            //got tokens + all investors
            return (PoolStatus.Open);
        }
        if (
            pools[_id].MoreData.Lefttokens == 0 &&
            isPoolLocked(_id) &&
            now < pools[_id].BaseData.FinishTime
        ) //no tokens on locked pool, got time
        {
            return (PoolStatus.OutOfstock);
        }
        if (
            pools[_id].MoreData.Lefttokens == 0 && !isPoolLocked(_id)
        ) //no tokens on direct pool
        {
            return (PoolStatus.Close);
        }
        if (
            now >= pools[_id].BaseData.FinishTime &&
            !isPoolLocked(_id)
        ) {
            // After finish time - not locked
            if (pools[_id].MoreData.TookLeftOvers) return (PoolStatus.Close);
            return (PoolStatus.Finished);
        }
        if (
            (pools[_id].MoreData.TookLeftOvers ||
                pools[_id].MoreData.Lefttokens == 0) &&
            (pools[_id].MoreData.UnlockedTokens +
                pools[_id].MoreData.Lefttokens ==
                pools[_id].BaseData.StartAmount)
        ) return (PoolStatus.Close);
        return (PoolStatus.Finished);
    }
}// SPDX-License-Identifier: MIT





contract Invest is PoolsData {
    event NewInvestorEvent(uint256 Investor_ID, address Investor_Address);

    modifier CheckTime(uint256 _Time) {
        require(now >= _Time, "Pool not open yet");
        _;
    }

    //using SafeMath for uint256;
    constructor() public {
        //TotalInvestors = 0;
    }

    //Investorsr Data
    uint256 internal TotalInvestors;
    mapping(uint256 => Investor) Investors;
    mapping(address => uint256[]) InvestorsMap;
    struct Investor {
        uint256 Poolid; //the id of the pool, he got the rate info and the token, check if looked pool
        address InvestorAddress; //
        uint256 MainCoin; //the amount of the main coin invested (eth/dai), calc with rate
        uint256 TokensOwn; //the amount of Tokens the investor needto get from the contract
        uint256 InvestTime; //the time that investment made
    }

    function getTotalInvestor() external view returns(uint256){
        return TotalInvestors;
    }
    
    //@dev Send in wei
    function InvestETH(uint256 _PoolId)
        external
        payable
        ReceivETH(msg.value, msg.sender, MinETHInvest)
        whenNotPaused
        CheckTime(pools[_PoolId].MoreData.StartTime)
    {
        require(_PoolId < poolsCount, "Wrong pool id, InvestETH fail");
        require(pools[_PoolId].BaseData.Maincoin == address(0x0), "Pool is not for ETH");
        require(
            msg.value >= MinETHInvest && msg.value <= MaxETHInvest,
            "Investment amount not valid"
        );
        require(
            msg.sender == tx.origin && !isContract(msg.sender),
            "Some thing wrong with the msgSender"
        );
        uint256 ThisInvestor = NewInvestor(msg.sender, msg.value, _PoolId);
        uint256 Tokens = CalcTokens(_PoolId, msg.value, msg.sender);
        
        TokenAllocate(_PoolId, ThisInvestor, Tokens);

        uint256 EthMinusFee =
            SafeMath.div(
                SafeMath.mul(msg.value, SafeMath.sub(10000, CalcFee(_PoolId))),
                10000
            );
        // send money to project owner - the fee stays on contract
        TransferETH(pools[_PoolId].BaseData.Creator, EthMinusFee); 
        RegisterInvest(_PoolId, Tokens);
    }

    function InvestERC20(uint256 _PoolId, uint256 _Amount)
        external
        whenNotPaused
        CheckTime(pools[_PoolId].MoreData.StartTime)
    {
        require(_PoolId < poolsCount, "Wrong pool id, InvestERC20 fail");
        require(
            pools[_PoolId].BaseData.Maincoin != address(0x0),
            "Pool is for ETH, use InvetETH"
        );
        require(_Amount > 10000, "Need invest more then 10000");
        require(
            msg.sender == tx.origin && !isContract(msg.sender),
            "Some thing wrong with the msgSender"
        );
        TransferInToken(pools[_PoolId].BaseData.Maincoin, msg.sender, _Amount);
        uint256 ThisInvestor = NewInvestor(msg.sender, _Amount, _PoolId);
        uint256 Tokens = CalcTokens(_PoolId, _Amount, msg.sender);

        TokenAllocate(_PoolId, ThisInvestor, Tokens);

        uint256 RegularFeePay =
            SafeMath.div(SafeMath.mul(_Amount, CalcFee(_PoolId)), 10000);

        uint256 RegularPaymentMinusFee = SafeMath.sub(_Amount, RegularFeePay);
        FeeMap[pools[_PoolId].BaseData.Maincoin] = SafeMath.add(
            FeeMap[pools[_PoolId].BaseData.Maincoin],
            RegularFeePay
        );
        TransferToken(
            pools[_PoolId].BaseData.Maincoin,
            pools[_PoolId].BaseData.Creator,
            RegularPaymentMinusFee
        ); // send money to project owner - the fee stays on contract
        RegisterInvest(_PoolId, Tokens);
    }

    function TokenAllocate(uint256 _PoolId, uint256 _ThisInvestor, uint256 _Tokens) internal {
        if (isPoolLocked(_PoolId)) {
            Investors[_ThisInvestor].TokensOwn = SafeMath.add(
                Investors[_ThisInvestor].TokensOwn,
                _Tokens
            );
        } else {
            // not locked, will transfer the tokens
            TransferToken(pools[_PoolId].BaseData.Token, Investors[_ThisInvestor].InvestorAddress, _Tokens);
        }
    }

    function RegisterInvest(uint256 _PoolId, uint256 _Tokens) internal {
        require(
            _Tokens <= pools[_PoolId].MoreData.Lefttokens,
            "Not enough tokens in the pool"
        );
        pools[_PoolId].MoreData.Lefttokens = SafeMath.sub(
            pools[_PoolId].MoreData.Lefttokens,
            _Tokens
        );
        if (pools[_PoolId].MoreData.Lefttokens == 0) emit FinishPool(_PoolId);
        else emit PoolUpdate(_PoolId);
    }

    function NewInvestor(
        address _Sender,
        uint256 _Amount,
        uint256 _Pid
    ) internal returns (uint256) {
        Investors[TotalInvestors] = Investor(
            _Pid,
            _Sender,
            _Amount,
            0,
            block.timestamp
        );
        InvestorsMap[msg.sender].push(TotalInvestors);
        emit NewInvestorEvent(TotalInvestors, _Sender);
        TotalInvestors = SafeMath.add(TotalInvestors, 1);
        return SafeMath.sub(TotalInvestors, 1);
    }

    function CalcTokens(
        uint256 _Pid,
        uint256 _Amount,
        address _Sender
    ) internal returns (uint256) {
        uint256 msgValue = _Amount;
        uint256 result = 0;
        if (GetPoolStatus(_Pid) == PoolStatus.Created) {
            IsWhiteList(_Sender, pools[_Pid].MoreData.WhiteListId, _Amount);
            result = SafeMath.mul(msgValue, pools[_Pid].BaseData.POZRate);
        }
        if (GetPoolStatus(_Pid) == PoolStatus.Open) {
            result = SafeMath.mul(msgValue, pools[_Pid].BaseData.Rate);
        }
        if (result >= 10**21) {
            if (pools[_Pid].MoreData.Is21DecimalRate) {
                result = SafeMath.div(result, 10**21);
            }
            return result;
        }
        revert("Wrong pool status to CalcTokens");
    }

    function CalcFee(uint256 _Pid) internal view returns (uint256) {
        if (GetPoolStatus(_Pid) == PoolStatus.Created) {
            return PozFee;
        }
        if (GetPoolStatus(_Pid) == PoolStatus.Open) {
            return Fee;
        }
        //will not get here, will fail on CalcTokens
    }

    //@dev use it with  require(msg.sender == tx.origin)
    function isContract(address _addr) internal view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    //  no need register - will return true or false base on Check
    //  if need register - revert or true
    function IsWhiteList(
        address _Investor,
        uint256 _Id,
        uint256 _Amount
    ) internal returns (bool) {
        if (_Id == 0) return true; //turn-off
        IWhiteList(WhiteList_Address).Register(_Investor, _Id, _Amount); //will revert if fail
        return true;
    }
}// SPDX-License-Identifier: MIT





contract InvestorData is Invest {
    function IsReadyWithdrawInvestment(uint256 _id) public view returns (bool) {
        return
            _id <= TotalInvestors &&
            Investors[_id].TokensOwn > 0 &&
            pools[Investors[_id].Poolid].MoreData.LockedUntil <= now;
    }

    function WithdrawInvestment(uint256 _id) public returns (bool) {
        if (IsReadyWithdrawInvestment(_id)) {
            uint256 temp = Investors[_id].TokensOwn;
            Investors[_id].TokensOwn = 0;
            TransferToken(
                pools[Investors[_id].Poolid].BaseData.Token,
                Investors[_id].InvestorAddress,
                temp
            );
            pools[Investors[_id].Poolid].MoreData.UnlockedTokens = SafeMath.add(
                pools[Investors[_id].Poolid].MoreData.UnlockedTokens,
                temp
            );

            return true;
        }
        return false;
    }

    //Give all the id's of the investment  by sender address
    function GetMyInvestmentIds() public view returns (uint256[]) {
        return InvestorsMap[msg.sender];
    }

    function GetInvestmentData(uint256 _id)
        public
        view
        returns (
            uint256,
            address,
            uint256,
            uint256,
            uint256
        )
    {
        return (
            Investors[_id].Poolid,
            Investors[_id].InvestorAddress,
            Investors[_id].MainCoin,
            Investors[_id].TokensOwn,
            Investors[_id].InvestTime
        );
    }
}// SPDX-License-Identifier: MIT




contract ThePoolz is InvestorData {
    constructor() public {    }

    function WithdrawETHFee(address _to) public onlyOwner {
        _to.transfer(address(this).balance); // keeps only fee eth on contract //To Do need to take 16% to burn!!!
    }

    function WithdrawERC20Fee(address _Token, address _to) public onlyOwner {
        uint256 temp = FeeMap[_Token];
        FeeMap[_Token] = 0;
        TransferToken(_Token, _to, temp);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"SetFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MCWhitelistId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"SwapTokenFilter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"GovernerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"GetPoolStatus","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"IsValidToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TokenWhitelistId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MinDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_MinETHInvest","type":"uint256"},{"name":"_MaxETHInvest","type":"uint256"}],"name":"SetMinMaxETHInvest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolMoreData","outputs":[{"name":"","type":"uint64"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PozFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"poolsMap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IsTokenFilterOn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"GetInvestmentData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolBaseData","outputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GetMyPoolsId","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGovernerContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalInvestor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"isPoolLocked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MaxDuration","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"WithdrawInvestment","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"poolsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GetMyInvestmentIds","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WhiteList_Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"WithdrawETHFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"IsReadyWithdrawLeftOvers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"SetPOZFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MaxETHInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"SwitchIsPayble","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PozTimer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pools","outputs":[{"components":[{"name":"Token","type":"address"},{"name":"Creator","type":"address"},{"name":"FinishTime","type":"uint256"},{"name":"Rate","type":"uint256"},{"name":"POZRate","type":"uint256"},{"name":"Maincoin","type":"address"},{"name":"StartAmount","type":"uint256"}],"name":"BaseData","type":"tuple"},{"components":[{"name":"LockedUntil","type":"uint64"},{"name":"Lefttokens","type":"uint256"},{"name":"StartTime","type":"uint256"},{"name":"OpenForAll","type":"uint256"},{"name":"UnlockedTokens","type":"uint256"},{"name":"WhiteListId","type":"uint256"},{"name":"TookLeftOvers","type":"bool"},{"name":"Is21DecimalRate","type":"bool"}],"name":"MoreData","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IsPayble","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_minDuration","type":"uint256"},{"name":"_maxDuration","type":"uint256"}],"name":"SetMinMaxDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_WhiteList_Address","type":"address"}],"name":"SetWhiteList_Address","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolPrice","type":"uint256"}],"name":"SetPoolPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"},{"name":"_Amount","type":"uint256"}],"name":"InvestERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PoolPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Fee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MinETHInvest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListId","type":"uint256"}],"name":"setTokenWhitelistId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_Id","type":"uint256"}],"name":"GetPoolExtraData","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"IsReadyWithdrawInvestment","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_Token","type":"address"},{"name":"_FinishTime","type":"uint256"},{"name":"_Rate","type":"uint256"},{"name":"_POZRate","type":"uint256"},{"name":"_StartAmount","type":"uint256"},{"name":"_LockedUntil","type":"uint64"},{"name":"_MainCoin","type":"address"},{"name":"_Is21Decimal","type":"bool"},{"name":"_Now","type":"uint256"},{"name":"_WhiteListId","type":"uint256"}],"name":"CreatePool","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"IsERC20Maincoin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whiteListId","type":"uint256"}],"name":"setMCWhitelistId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"InvestETH","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_pozTimer","type":"uint256"}],"name":"SetPozTimer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_Token","type":"address"},{"name":"_to","type":"address"}],"name":"WithdrawERC20Fee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_PoolId","type":"uint256"}],"name":"WithdrawLeftOvers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Investor_ID","type":"uint256"},{"indexed":false,"name":"Investor_Address","type":"address"}],"name":"NewInvestorEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"id","type":"uint256"}],"name":"NewPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"}],"name":"FinishPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"uint256"}],"name":"PoolUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"To","type":"address"}],"name":"TransferOutETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"From","type":"address"}],"name":"TransferInETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"To","type":"address"},{"indexed":false,"name":"Token","type":"address"}],"name":"TransferOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"Amount","type":"uint256"},{"indexed":false,"name":"From","type":"address"},{"indexed":false,"name":"Token","type":"address"}],"name":"TransferIn","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526000805460a060020a60ff021916905534801561002057600080fd5b5060008054600160a060020a03199081163317909155600180549091169055600f6002556103e86003556004805460ff19169055601460065562ed4e00600855612710600a5568056bc75e2d63100000600b556134b6806100826000396000f3006080604052600436106102785763ffffffff60e060020a600035041662172ddf811461028b578063043d520b146102a357806307b027ed146102ca5780630cd8e965146102df5780630d08caa014610310578063114fa9bd1461034c57806318c9be4a1461038157806327ca36ec146103965780633e90eea7146103ab5780633f4ba83a146103c657806341004025146103db57806353eb31671461043357806356793bc7146104485780635c975abb1461046c5780635cdddc7c1461048157806360f9e80a1461049657806360fdd7c4146104e157806363552a4914610538578063668189671461059d5780636b1fe0b6146105be5780636b58f2f6146105d3578063715018a6146105eb57806375c64dd1146106005780638456cb591461061557806387e3c5991461062a5780638c788de0146106425780638da5cb5b1461065757806391314dde1461066c5780639642ec0c14610681578063991e979a14610696578063a73ff128146106b7578063a87d2be4146106cf578063aa825486146106e7578063aac5da5c146106fc578063abb7add214610711578063ac4afa3814610726578063b5f98b8e14610757578063b7d9b6f11461076c578063b973d7bc14610787578063b977eddf146107a8578063be33a3ec146107c0578063bed06041146107db578063bef7a2f0146107f0578063cab1704614610805578063ccb801bf1461081a578063d0f5291014610832578063e34c777214610873578063e4ec0f681461088b578063e8906716146108d0578063ee63e8bd146108f1578063f04be48b14610909578063f2fde38b14610914578063f318824814610935578063fc1a86ff1461094d578063fd711a5514610974575b60045460ff16151561028957600080fd5b005b34801561029757600080fd5b5061028960043561098c565b3480156102af57600080fd5b506102b8610abf565b60408051918252519081900360200190f35b3480156102d657600080fd5b50610289610ac5565b3480156102eb57600080fd5b506102f4610b0e565b60408051600160a060020a039092168252519081900360200190f35b34801561031c57600080fd5b50610328600435610b1d565b6040518082600581111561033857fe5b60ff16815260200191505060405180910390f35b34801561035857600080fd5b5061036d600160a060020a0360043516610d6c565b604080519115158252519081900360200190f35b34801561038d57600080fd5b506102b8610e2f565b3480156103a257600080fd5b506102b8610e35565b3480156103b757600080fd5b50610289600435602435610e3b565b3480156103d257600080fd5b50610289610ead565b3480156103e757600080fd5b506103f3600435610f23565b6040805167ffffffffffffffff909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b34801561043f57600080fd5b506102b8610fc9565b34801561045457600080fd5b506102b8600160a060020a0360043516602435610fcf565b34801561047857600080fd5b5061036d610fff565b34801561048d57600080fd5b5061036d61100f565b3480156104a257600080fd5b506104ae60043561101f565b60408051958652600160a060020a0390941660208601528484019290925260608401526080830152519081900360a00190f35b3480156104ed57600080fd5b506104f9600435611058565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561054457600080fd5b5061054d6110f4565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610589578181015183820152602001610571565b505050509050019250505060405180910390f35b3480156105a957600080fd5b50610289600160a060020a0360043516611155565b3480156105ca57600080fd5b506102b86111eb565b3480156105df57600080fd5b5061036d6004356111f1565b3480156105f757600080fd5b50610289611214565b34801561060c57600080fd5b506102b8611280565b34801561062157600080fd5b50610289611286565b34801561063657600080fd5b5061036d600435611301565b34801561064e57600080fd5b506102b86113bb565b34801561066357600080fd5b506102f46113c1565b34801561067857600080fd5b5061054d6113d0565b34801561068d57600080fd5b506102f461142f565b3480156106a257600080fd5b50610289600160a060020a036004351661143e565b3480156106c357600080fd5b5061036d60043561148b565b3480156106db57600080fd5b5061028960043561152c565b3480156106f357600080fd5b506102b86115b4565b34801561070857600080fd5b506102896115ba565b34801561071d57600080fd5b506102b86115e5565b34801561073257600080fd5b5061073e6004356115eb565b6040805192835260208301919091528051918290030190f35b34801561076357600080fd5b5061036d6116e3565b34801561077857600080fd5b506102896004356024356116ec565b34801561079357600080fd5b50610289600160a060020a036004351661175e565b3480156107b457600080fd5b506102896004356117f4565b3480156107cc57600080fd5b50610289600435602435611860565b3480156107e757600080fd5b506102b8611ba4565b3480156107fc57600080fd5b506102b8611baa565b34801561081157600080fd5b506102b8611bb0565b34801561082657600080fd5b50610289600435611bb6565b34801561083e57600080fd5b5061084a600435611c22565b6040805193151584526020840192909252600160a060020a031682820152519081900360600190f35b34801561087f57600080fd5b5061036d600435611ca7565b610289600160a060020a036004358116906024359060443590606435906084359067ffffffffffffffff60a435169060c4351660e43515156101043561012435611d03565b3480156108dc57600080fd5b5061036d600160a060020a036004351661237e565b3480156108fd57600080fd5b5061028960043561240b565b610289600435612477565b34801561092057600080fd5b50610289600160a060020a03600435166127df565b34801561094157600080fd5b50610289600435612802565b34801561095957600080fd5b50610289600160a060020a036004358116906024351661287e565b34801561098057600080fd5b5061036d6004356128c4565b600054600160a060020a03163314806109af5750600154600160a060020a031633145b15156109f3576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b578160025480821115610a14576006849055610a64565b6040805160e560020a62461bcd02815260206004820152600a60248201527f4e6f742062696767657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610abb565b6040805160e560020a62461bcd02815260206004820152600c60248201527f4e6f7420696e2072616e67650000000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600e5481565b600054600160a060020a03163314610adc57600080fd5b600c805474ff000000000000000000000000000000000000000019811660a060020a9182900460ff1615909102179055565b600154600160a060020a031681565b600081600f5481101515610b69576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b600083815260106020526040902060090154421015610b8b5760029150610d66565b6000838152601060205260409020600a015442108015610bba5750600083815260106020526040812060080154115b15610bc85760009150610d66565b6000838152601060205260409020600a01544210801590610bf85750600083815260106020526040812060080154115b8015610c14575060008381526010602052604090206002015442105b15610c225760019150610d66565b600083815260106020526040902060080154158015610c455750610c45836111f1565b8015610c61575060008381526010602052604090206002015442105b15610c6f5760039150610d66565b600083815260106020526040902060080154158015610c945750610c92836111f1565b155b15610ca25760059150610d66565b6000838152601060205260409020600201544210801590610cc95750610cc7836111f1565b155b15610cfa576000838152601060205260409020600d015460ff1615610cf15760059150610d66565b60049150610d66565b6000838152601060205260409020600d015460ff1680610d295750600083815260106020526040902060080154155b8015610d535750600083815260106020526040902060068101546008820154600b90920154909101145b15610d615760059150610d66565b600491505b50919050565b600c5460009060a060020a900460ff161580610e275750600c54600d54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d6020811015610e2357600080fd5b5051115b90505b919050565b600d5481565b60075481565b600054600160a060020a0316331480610e5e5750600154600160a060020a031633145b1515610ea2576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600a91909155600b55565b600054600160a060020a03163314610ec457600080fd5b60005460a060020a900460ff161515610edc57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008060008060008086600f5481101515610f76576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600094855250506010602052505060409020600781015460088201546009830154600a840154600b850154600d9095015467ffffffffffffffff9094169592949193909261010090910460ff1690565b60025481565b601160205281600052604060002081815481101515610fea57fe5b90600052602060002001600091509150505481565b60005460a060020a900460ff1681565b600c5460a060020a900460ff1681565b600090815260136020526040902080546001820154600283015460038401546004909401549294600160a060020a039092169390929091565b60008060008060008086600f54811015156110ab576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b50505060009485525050601060205250506040902080546001820154600283015460038401546004850154600690950154600160a060020a039485169694909316949193909290565b3360009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561114b57602002820191906000526020600020905b815481526020019060010190808311611137575b5050505050905090565b600054600160a060020a03163314806111785750600154600160a060020a031633145b15156111bc576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60125490565b6000908152601060205260409020600701544267ffffffffffffffff9091161190565b600054600160a060020a0316331461122b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600054600160a060020a0316331461129d57600080fd5b60005460a060020a900460ff16156112b457600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008061130d83611ca7565b156113b257506000828152601360208181526040808420600381018054908690558154865260108452918520549487905292909152600190910154909161136191600160a060020a0391821691168361296a565b600083815260136020908152604080832054835260109091529020600b015461138a9082612abc565b600084815260136020908152604080832054835260109091529020600b015560019150610d66565b50600092915050565b600f5481565b600054600160a060020a031681565b3360009081526014602090815260409182902080548351818402810184019094528084526060939283018282801561114b5760200282019190600052602060002090815481526020019060010190808311611137575050505050905090565b600c54600160a060020a031681565b600054600160a060020a0316331461145557600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610abb573d6000803e3d6000fd5b600081600f54811015156114d7576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b60008381526010602052604090206002015442108015906115075750600083815260106020526040812060080154115b801561152557506000838152601060205260409020600d015460ff16155b9392505050565b600054600160a060020a031633148061154f5750600154600160a060020a031633145b1515611593576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576006548280821115610a14576002849055610a64565b600b5481565b600054600160a060020a031633146115d157600080fd5b6004805460ff19811660ff90911615179055565b60035481565b601060209081526000918252604091829020825160e081810185528254600160a060020a039081168352600184015481168386015260028401548387015260038401546060808501919091526004850154608080860191909152600586015490921660a080860191909152600686015460c08087019190915288516101008181018b52600789015467ffffffffffffffff168252600889015499820199909952600988015499810199909952600a87015492890192909252600b86015492880192909252600c85015491870191909152600d9093015460ff808216151594870194909452939093049091161515918301919091529082565b60045460ff1681565b600054600160a060020a031633148061170f5750600154600160a060020a031633145b1515611753576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600791909155600855565b600054600160a060020a03163314806117815750600154600160a060020a031633145b15156117c5576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314806118175750600154600160a060020a031633145b151561185b576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600955565b6000805481908190819060a060020a900460ff161561187e57600080fd5b600086815260106020526040902060090154428111156118e8576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f548710611941576040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2069642c20496e766573744552433230206661696c00604482015290519081900360640190fd5b600087815260106020526040902060050154600160a060020a031615156119b2576040805160e560020a62461bcd02815260206004820152601d60248201527f506f6f6c20697320666f72204554482c2075736520496e766574455448000000604482015290519081900360640190fd5b6127108611611a0b576040805160e560020a62461bcd02815260206004820152601b60248201527f4e65656420696e76657374206d6f7265207468656e2031303030300000000000604482015290519081900360640190fd5b3332148015611a205750611a1e33612acf565b155b1515611a9c576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600087815260106020526040902060050154611ac290600160a060020a03163388612add565b611acd338789612d44565b9450611ada878733612e4c565b9350611ae7878686612f8c565b611b04611afc87611af78a613005565b613050565b612710613079565b9250611b10868461308e565b6000888152601060209081526040808320600590810154600160a060020a03168452909152902054909250611b459084612abc565b600088815260106020818152604080842060058181018054600160a060020a03908116885291855292862096909655938c905291905254600190910154611b919291821691168461296a565b611b9b87856130a0565b50505050505050565b60095481565b60065481565b600a5481565b600054600160a060020a0316331480611bd95750600154600160a060020a031633145b1515611c1d576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600d55565b600080600083600f5481101515611c71576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600091825250601060205260409020600d810154600c82015460059092015460ff90911692600160a060020a0390911690565b60006012548211158015611cca5750600082815260136020526040812060030154115b8015610e27575050600090815260136020908152604080832054835260109091529020600701544267ffffffffffffffff909116111590565b6000805460a060020a900460ff1615611d1b57600080fd5b600954341015611d75576040805160e560020a62461bcd02815260206004820152601860248201527f4e65656420746f2070617920666f722074686520706f6f6c0000000000000000604482015290519081900360640190fd5b611d7e8b610d6c565b1515611dd4576040805160e560020a62461bcd02815260206004820152601660248201527f4e6565642056616c696420455243323020546f6b656e00000000000000000000604482015290519081900360640190fd5b600160a060020a0385161580611dee5750611dee8561237e565b1515611e44576040805160e560020a62461bcd02815260206004820152601560248201527f4d61696e20636f696e206e6f7420696e206c6973740000000000000000000000604482015290519081900360640190fd5b611e5060085442612abc565b8a10611ea6576040805160e560020a62461bcd02815260206004820181905260248201527f506f6f6c206475726174696f6e2063616e27742062652074686174206c6f6e67604482015290519081900360640190fd5b611eb260085442612abc565b67ffffffffffffffff871610611f12576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6f636b65642076616c75652063616e27742062652074686174206c6f6e6700604482015290519081900360640190fd5b87891115611f90576040805160e560020a62461bcd02815260206004820152603360248201527f504f5a20686f6c64657273206e65656420746f2068617665206265747465722060448201527f707269636520286f72207468652073616d652900000000000000000000000000606482015290519081900360840190fd5b60008811611fe8576040805160e560020a62461bcd02815260206004820152601060248201527f49742077696c6c206e6f7420776f726b00000000000000000000000000000000604482015290519081900360640190fd5b42831015611ff4574292505b8961200142600754612abc565b1115612057576040805160e560020a62461bcd02815260206004820152601a60248201527f4e656564206d6f7265207468656e204d696e4475726174696f6e000000000000604482015290519081900360640190fd5b6120628b3389612add565b811561208e57612089612083611afc61207b8d8761308e565b600354613050565b84612abc565b612090565b825b9050604080519081016040528060e0604051908101604052808e600160a060020a0316815260200133600160a060020a031681526020018d81526020018c81526020018b815260200188600160a060020a031681526020018a8152508152602001610100604051908101604052808967ffffffffffffffff1681526020018a81526020018681526020018481526020016000815260200185815260200160001515815260200187151581525081525060106000600f54815260200190815260200160002060008201518160000160008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160060155505060208201518160070160008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555050509050506011600033600160a060020a0316600160a060020a03168152602001908152602001600020600f5490806001815401808255809150509060018203906000526020600020016000909192909190915055507fbe4222bc407cb12031595fc55b46531e46308d31e4572c9c4360d8ae790e1a318b600f546040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a161236e600f546001612abc565b600f555050505050505050505050565b600c5460009060a060020a900460ff161580610e275750600c54600e54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b600054600160a060020a031633148061242e5750600154600160a060020a031633145b1515612472576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600e55565b60008060003433600a548083101515156124db576040805160e560020a62461bcd02815260206004820152601260248201527f53656e642045544820746f20696e766573740000000000000000000000000000604482015290519081900360640190fd5b60408051848152600160a060020a038416602082015281517f3a32cdd14cdfd431946dfa0b2aef5ace661340411aaadcaee6aef6738d302326929181900390910190a160005460a060020a900460ff161561253557600080fd5b6000878152601060205260409020600901544281111561259f576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f5488106125f8576040805160e560020a62461bcd02815260206004820152601d60248201527f57726f6e6720706f6f6c2069642c20496e76657374455448206661696c000000604482015290519081900360640190fd5b600088815260106020526040902060050154600160a060020a031615612668576040805160e560020a62461bcd02815260206004820152601360248201527f506f6f6c206973206e6f7420666f722045544800000000000000000000000000604482015290519081900360640190fd5b600a54341015801561267c5750600b543411155b15156126d2576040805160e560020a62461bcd02815260206004820152601b60248201527f496e766573746d656e7420616d6f756e74206e6f742076616c69640000000000604482015290519081900360640190fd5b33321480156126e757506126e533612acf565b155b1515612763576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61276e33348a612d44565b965061277b883433612e4c565b9550612788888888612f8c565b6127a3611afc34611af761271061279e8d613005565b61308e565b6000898152601060205260409020600101549095506127cb90600160a060020a0316866131ae565b6127d588876130a0565b5050505050505050565b600054600160a060020a031633146127f657600080fd5b6127ff81613295565b50565b600054600160a060020a03163314806128255750600154600160a060020a031633145b1515612869576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576003829055610abb565b60008054600160a060020a0316331461289657600080fd5b50600160a060020a038216600090815260056020526040812080549190556128bf83838361296a565b505050565b600081600f5481101515612910576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b6129198361148b565b156113b2576000838152601060205260409020600d8101805460ff1916600190811790915581549082015460089092015461296192600160a060020a0392831692169061296a565b60019150610d66565b60006129768430613312565b60408051848152600160a060020a03808716602083015287168183015290519192507fe4d818e6f992efbd60db553f3edce819a199baec79a784b95c89bc8ee86f2584919081900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612a2657600080fd5b505af1158015612a3a573d6000803e3d6000fd5b505050506040513d6020811015612a5057600080fd5b50819050612a616120838630613312565b14612ab6576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b50505050565b81810182811015612ac957fe5b92915050565b6000903b63ffffffff161190565b60008383838083600160a060020a031663dd62ed3e84306040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050506040513d6020811015612b8257600080fd5b50511015612bda576040805160e560020a62461bcd02815260206004820152600c60248201527f6e6f20616c6c6f77616e63650000000000000000000000000000000000000000604482015290519081900360640190fd5b60008511612be757600080fd5b612bf18730613312565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152306024830152604482018990529151929650908916916323b872dd916064808201926020929091908290030181600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6020811015612c9057600080fd5b505060408051868152600160a060020a03808916602083015289168183015290517f1fecf4702e692891a7c2f0d328779b085efb5edd094fa5558bd5cd147a1679229181900360600190a1612ce58730613312565b612cef8587612abc565b14611b9b576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b6040805160a081018252828152600160a060020a0385811660208084018281528486018881526000606087018181524260808901908152601280548452601387528a842099518a5594516001808b01805473ffffffffffffffffffffffffffffffffffffffff191692909a169190911790985592516002890155516003880155905160049096019590955533855260148252858520815481549586018255908652828620909401939093559154845190815291820152825191927ff4d99203a75a5961a6c1decf46e41b27f411990cda8e317361361339f8dffa5592918290030190a1612e346012546001612abc565b6012819055612e4490600161308e565b949350505050565b6000828180612e5a87610b1d565b6005811115612e6557fe5b1415612eaa576000868152601060205260409020600c0154612e89908590876133a2565b50600086815260106020526040902060040154612ea7908390613050565b90505b6001612eb587610b1d565b6005811115612ec057fe5b1415612ee657600086815260106020526040902060030154612ee3908390613050565b90505b683635c9adc5dea000008110612f33576000868152601060205260409020600d0154610100900460ff1615612f2b57612f2881683635c9adc5dea00000613079565b90505b809250612f83565b6040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2073746174757320746f2043616c63546f6b656e7300604482015290519081900360640190fd5b50509392505050565b612f95836111f1565b15612fcd57600082815260136020526040902060030154612fb69082612abc565b6000838152601360205260409020600301556128bf565b6000838152601060209081526040808320548584526013909252909120600101546128bf91600160a060020a0390811691168361296a565b60008061301183610b1d565b600581111561301c57fe5b141561302b5750600254610e2a565b600161303683610b1d565b600581111561304157fe5b1415610e2a5750600654610e2a565b600082151561306157506000612ac9565b5081810281838281151561307157fe5b0414612ac957fe5b6000818381151561308657fe5b049392505050565b60008282111561309a57fe5b50900390565b600082815260106020526040902060080154811115613109576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520706f6f6c000000604482015290519081900360640190fd5b600082815260106020526040902060080154613125908261308e565b60008381526010602052604090206008018190551515613177576040805183815290517f5aa793a17b0774b891ce2b0dd5dbe8f04132e547df384ab1053d32470050b5fa9181900360200190a1610abb565b6040805183815290517f46074c56f8b8129e3ada6879521255be1596856f97bf16070e5cdd3a10dc1df79181900360200190a15050565b60408051828152600160a060020a038416602082015281516000927feca5ae7bd9109b0f7d228f3f8a8cc834a1f995af62df6dc226dc3ab3f38dc7b3928290030190a150604051600160a060020a03831680319183156108fc029084906000818181858888f1935050505015801561322a573d6000803e3d6000fd5b5082600160a060020a0316316132408284612abc565b146128bf576040805160e560020a62461bcd02815260206004820152601d60248201527f546865207472616e7366657220646964206e6f7420636f6d706c697465000000604482015290519081900360640190fd5b600160a060020a03811615156132aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082600160a060020a03166370a08231836040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561336f57600080fd5b505af1158015613383573d6000803e3d6000fd5b505050506040513d602081101561339957600080fd5b50519392505050565b60008215156133b357506001611525565b600c54604080517f1d759fb2000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152602482018790526044820186905291519190921691631d759fb291606480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b506001979650505050505050560057726f6e6720706f6f6c2069642c2043616e2774206765742053746174757300417574686f72697a6174696f6e204572726f7200000000000000000000000000a165627a7a72305820a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b020029

Deployed Bytecode

0x6080604052600436106102785763ffffffff60e060020a600035041662172ddf811461028b578063043d520b146102a357806307b027ed146102ca5780630cd8e965146102df5780630d08caa014610310578063114fa9bd1461034c57806318c9be4a1461038157806327ca36ec146103965780633e90eea7146103ab5780633f4ba83a146103c657806341004025146103db57806353eb31671461043357806356793bc7146104485780635c975abb1461046c5780635cdddc7c1461048157806360f9e80a1461049657806360fdd7c4146104e157806363552a4914610538578063668189671461059d5780636b1fe0b6146105be5780636b58f2f6146105d3578063715018a6146105eb57806375c64dd1146106005780638456cb591461061557806387e3c5991461062a5780638c788de0146106425780638da5cb5b1461065757806391314dde1461066c5780639642ec0c14610681578063991e979a14610696578063a73ff128146106b7578063a87d2be4146106cf578063aa825486146106e7578063aac5da5c146106fc578063abb7add214610711578063ac4afa3814610726578063b5f98b8e14610757578063b7d9b6f11461076c578063b973d7bc14610787578063b977eddf146107a8578063be33a3ec146107c0578063bed06041146107db578063bef7a2f0146107f0578063cab1704614610805578063ccb801bf1461081a578063d0f5291014610832578063e34c777214610873578063e4ec0f681461088b578063e8906716146108d0578063ee63e8bd146108f1578063f04be48b14610909578063f2fde38b14610914578063f318824814610935578063fc1a86ff1461094d578063fd711a5514610974575b60045460ff16151561028957600080fd5b005b34801561029757600080fd5b5061028960043561098c565b3480156102af57600080fd5b506102b8610abf565b60408051918252519081900360200190f35b3480156102d657600080fd5b50610289610ac5565b3480156102eb57600080fd5b506102f4610b0e565b60408051600160a060020a039092168252519081900360200190f35b34801561031c57600080fd5b50610328600435610b1d565b6040518082600581111561033857fe5b60ff16815260200191505060405180910390f35b34801561035857600080fd5b5061036d600160a060020a0360043516610d6c565b604080519115158252519081900360200190f35b34801561038d57600080fd5b506102b8610e2f565b3480156103a257600080fd5b506102b8610e35565b3480156103b757600080fd5b50610289600435602435610e3b565b3480156103d257600080fd5b50610289610ead565b3480156103e757600080fd5b506103f3600435610f23565b6040805167ffffffffffffffff909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b34801561043f57600080fd5b506102b8610fc9565b34801561045457600080fd5b506102b8600160a060020a0360043516602435610fcf565b34801561047857600080fd5b5061036d610fff565b34801561048d57600080fd5b5061036d61100f565b3480156104a257600080fd5b506104ae60043561101f565b60408051958652600160a060020a0390941660208601528484019290925260608401526080830152519081900360a00190f35b3480156104ed57600080fd5b506104f9600435611058565b60408051600160a060020a039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b34801561054457600080fd5b5061054d6110f4565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610589578181015183820152602001610571565b505050509050019250505060405180910390f35b3480156105a957600080fd5b50610289600160a060020a0360043516611155565b3480156105ca57600080fd5b506102b86111eb565b3480156105df57600080fd5b5061036d6004356111f1565b3480156105f757600080fd5b50610289611214565b34801561060c57600080fd5b506102b8611280565b34801561062157600080fd5b50610289611286565b34801561063657600080fd5b5061036d600435611301565b34801561064e57600080fd5b506102b86113bb565b34801561066357600080fd5b506102f46113c1565b34801561067857600080fd5b5061054d6113d0565b34801561068d57600080fd5b506102f461142f565b3480156106a257600080fd5b50610289600160a060020a036004351661143e565b3480156106c357600080fd5b5061036d60043561148b565b3480156106db57600080fd5b5061028960043561152c565b3480156106f357600080fd5b506102b86115b4565b34801561070857600080fd5b506102896115ba565b34801561071d57600080fd5b506102b86115e5565b34801561073257600080fd5b5061073e6004356115eb565b6040805192835260208301919091528051918290030190f35b34801561076357600080fd5b5061036d6116e3565b34801561077857600080fd5b506102896004356024356116ec565b34801561079357600080fd5b50610289600160a060020a036004351661175e565b3480156107b457600080fd5b506102896004356117f4565b3480156107cc57600080fd5b50610289600435602435611860565b3480156107e757600080fd5b506102b8611ba4565b3480156107fc57600080fd5b506102b8611baa565b34801561081157600080fd5b506102b8611bb0565b34801561082657600080fd5b50610289600435611bb6565b34801561083e57600080fd5b5061084a600435611c22565b6040805193151584526020840192909252600160a060020a031682820152519081900360600190f35b34801561087f57600080fd5b5061036d600435611ca7565b610289600160a060020a036004358116906024359060443590606435906084359067ffffffffffffffff60a435169060c4351660e43515156101043561012435611d03565b3480156108dc57600080fd5b5061036d600160a060020a036004351661237e565b3480156108fd57600080fd5b5061028960043561240b565b610289600435612477565b34801561092057600080fd5b50610289600160a060020a03600435166127df565b34801561094157600080fd5b50610289600435612802565b34801561095957600080fd5b50610289600160a060020a036004358116906024351661287e565b34801561098057600080fd5b5061036d6004356128c4565b600054600160a060020a03163314806109af5750600154600160a060020a031633145b15156109f3576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b578160025480821115610a14576006849055610a64565b6040805160e560020a62461bcd02815260206004820152600a60248201527f4e6f742062696767657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610abb565b6040805160e560020a62461bcd02815260206004820152600c60248201527f4e6f7420696e2072616e67650000000000000000000000000000000000000000604482015290519081900360640190fd5b5050565b600e5481565b600054600160a060020a03163314610adc57600080fd5b600c805474ff000000000000000000000000000000000000000019811660a060020a9182900460ff1615909102179055565b600154600160a060020a031681565b600081600f5481101515610b69576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b600083815260106020526040902060090154421015610b8b5760029150610d66565b6000838152601060205260409020600a015442108015610bba5750600083815260106020526040812060080154115b15610bc85760009150610d66565b6000838152601060205260409020600a01544210801590610bf85750600083815260106020526040812060080154115b8015610c14575060008381526010602052604090206002015442105b15610c225760019150610d66565b600083815260106020526040902060080154158015610c455750610c45836111f1565b8015610c61575060008381526010602052604090206002015442105b15610c6f5760039150610d66565b600083815260106020526040902060080154158015610c945750610c92836111f1565b155b15610ca25760059150610d66565b6000838152601060205260409020600201544210801590610cc95750610cc7836111f1565b155b15610cfa576000838152601060205260409020600d015460ff1615610cf15760059150610d66565b60049150610d66565b6000838152601060205260409020600d015460ff1680610d295750600083815260106020526040902060080154155b8015610d535750600083815260106020526040902060068101546008820154600b90920154909101145b15610d615760059150610d66565b600491505b50919050565b600c5460009060a060020a900460ff161580610e275750600c54600d54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050506040513d6020811015610e2357600080fd5b5051115b90505b919050565b600d5481565b60075481565b600054600160a060020a0316331480610e5e5750600154600160a060020a031633145b1515610ea2576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600a91909155600b55565b600054600160a060020a03163314610ec457600080fd5b60005460a060020a900460ff161515610edc57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60008060008060008086600f5481101515610f76576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600094855250506010602052505060409020600781015460088201546009830154600a840154600b850154600d9095015467ffffffffffffffff9094169592949193909261010090910460ff1690565b60025481565b601160205281600052604060002081815481101515610fea57fe5b90600052602060002001600091509150505481565b60005460a060020a900460ff1681565b600c5460a060020a900460ff1681565b600090815260136020526040902080546001820154600283015460038401546004909401549294600160a060020a039092169390929091565b60008060008060008086600f54811015156110ab576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b50505060009485525050601060205250506040902080546001820154600283015460038401546004850154600690950154600160a060020a039485169694909316949193909290565b3360009081526011602090815260409182902080548351818402810184019094528084526060939283018282801561114b57602002820191906000526020600020905b815481526020019060010190808311611137575b5050505050905090565b600054600160a060020a03163314806111785750600154600160a060020a031633145b15156111bc576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60125490565b6000908152601060205260409020600701544267ffffffffffffffff9091161190565b600054600160a060020a0316331461122b57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b60085481565b600054600160a060020a0316331461129d57600080fd5b60005460a060020a900460ff16156112b457600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b60008061130d83611ca7565b156113b257506000828152601360208181526040808420600381018054908690558154865260108452918520549487905292909152600190910154909161136191600160a060020a0391821691168361296a565b600083815260136020908152604080832054835260109091529020600b015461138a9082612abc565b600084815260136020908152604080832054835260109091529020600b015560019150610d66565b50600092915050565b600f5481565b600054600160a060020a031681565b3360009081526014602090815260409182902080548351818402810184019094528084526060939283018282801561114b5760200282019190600052602060002090815481526020019060010190808311611137575050505050905090565b600c54600160a060020a031681565b600054600160a060020a0316331461145557600080fd5b604051600160a060020a03821690303180156108fc02916000818181858888f19350505050158015610abb573d6000803e3d6000fd5b600081600f54811015156114d7576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b60008381526010602052604090206002015442108015906115075750600083815260106020526040812060080154115b801561152557506000838152601060205260409020600d015460ff16155b9392505050565b600054600160a060020a031633148061154f5750600154600160a060020a031633145b1515611593576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576006548280821115610a14576002849055610a64565b600b5481565b600054600160a060020a031633146115d157600080fd5b6004805460ff19811660ff90911615179055565b60035481565b601060209081526000918252604091829020825160e081810185528254600160a060020a039081168352600184015481168386015260028401548387015260038401546060808501919091526004850154608080860191909152600586015490921660a080860191909152600686015460c08087019190915288516101008181018b52600789015467ffffffffffffffff168252600889015499820199909952600988015499810199909952600a87015492890192909252600b86015492880192909252600c85015491870191909152600d9093015460ff808216151594870194909452939093049091161515918301919091529082565b60045460ff1681565b600054600160a060020a031633148061170f5750600154600160a060020a031633145b1515611753576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600791909155600855565b600054600160a060020a03163314806117815750600154600160a060020a031633145b15156117c5576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a03163314806118175750600154600160a060020a031633145b151561185b576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600955565b6000805481908190819060a060020a900460ff161561187e57600080fd5b600086815260106020526040902060090154428111156118e8576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f548710611941576040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2069642c20496e766573744552433230206661696c00604482015290519081900360640190fd5b600087815260106020526040902060050154600160a060020a031615156119b2576040805160e560020a62461bcd02815260206004820152601d60248201527f506f6f6c20697320666f72204554482c2075736520496e766574455448000000604482015290519081900360640190fd5b6127108611611a0b576040805160e560020a62461bcd02815260206004820152601b60248201527f4e65656420696e76657374206d6f7265207468656e2031303030300000000000604482015290519081900360640190fd5b3332148015611a205750611a1e33612acf565b155b1515611a9c576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600087815260106020526040902060050154611ac290600160a060020a03163388612add565b611acd338789612d44565b9450611ada878733612e4c565b9350611ae7878686612f8c565b611b04611afc87611af78a613005565b613050565b612710613079565b9250611b10868461308e565b6000888152601060209081526040808320600590810154600160a060020a03168452909152902054909250611b459084612abc565b600088815260106020818152604080842060058181018054600160a060020a03908116885291855292862096909655938c905291905254600190910154611b919291821691168461296a565b611b9b87856130a0565b50505050505050565b60095481565b60065481565b600a5481565b600054600160a060020a0316331480611bd95750600154600160a060020a031633145b1515611c1d576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600d55565b600080600083600f5481101515611c71576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b505050600091825250601060205260409020600d810154600c82015460059092015460ff90911692600160a060020a0390911690565b60006012548211158015611cca5750600082815260136020526040812060030154115b8015610e27575050600090815260136020908152604080832054835260109091529020600701544267ffffffffffffffff909116111590565b6000805460a060020a900460ff1615611d1b57600080fd5b600954341015611d75576040805160e560020a62461bcd02815260206004820152601860248201527f4e65656420746f2070617920666f722074686520706f6f6c0000000000000000604482015290519081900360640190fd5b611d7e8b610d6c565b1515611dd4576040805160e560020a62461bcd02815260206004820152601660248201527f4e6565642056616c696420455243323020546f6b656e00000000000000000000604482015290519081900360640190fd5b600160a060020a0385161580611dee5750611dee8561237e565b1515611e44576040805160e560020a62461bcd02815260206004820152601560248201527f4d61696e20636f696e206e6f7420696e206c6973740000000000000000000000604482015290519081900360640190fd5b611e5060085442612abc565b8a10611ea6576040805160e560020a62461bcd02815260206004820181905260248201527f506f6f6c206475726174696f6e2063616e27742062652074686174206c6f6e67604482015290519081900360640190fd5b611eb260085442612abc565b67ffffffffffffffff871610611f12576040805160e560020a62461bcd02815260206004820152601f60248201527f4c6f636b65642076616c75652063616e27742062652074686174206c6f6e6700604482015290519081900360640190fd5b87891115611f90576040805160e560020a62461bcd02815260206004820152603360248201527f504f5a20686f6c64657273206e65656420746f2068617665206265747465722060448201527f707269636520286f72207468652073616d652900000000000000000000000000606482015290519081900360840190fd5b60008811611fe8576040805160e560020a62461bcd02815260206004820152601060248201527f49742077696c6c206e6f7420776f726b00000000000000000000000000000000604482015290519081900360640190fd5b42831015611ff4574292505b8961200142600754612abc565b1115612057576040805160e560020a62461bcd02815260206004820152601a60248201527f4e656564206d6f7265207468656e204d696e4475726174696f6e000000000000604482015290519081900360640190fd5b6120628b3389612add565b811561208e57612089612083611afc61207b8d8761308e565b600354613050565b84612abc565b612090565b825b9050604080519081016040528060e0604051908101604052808e600160a060020a0316815260200133600160a060020a031681526020018d81526020018c81526020018b815260200188600160a060020a031681526020018a8152508152602001610100604051908101604052808967ffffffffffffffff1681526020018a81526020018681526020018481526020016000815260200185815260200160001515815260200187151581525081525060106000600f54815260200190815260200160002060008201518160000160008201518160000160006101000a815481600160a060020a030219169083600160a060020a0316021790555060208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160060155505060208201518160070160008201518160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff02191690831515021790555050509050506011600033600160a060020a0316600160a060020a03168152602001908152602001600020600f5490806001815401808255809150509060018203906000526020600020016000909192909190915055507fbe4222bc407cb12031595fc55b46531e46308d31e4572c9c4360d8ae790e1a318b600f546040518083600160a060020a0316600160a060020a031681526020018281526020019250505060405180910390a161236e600f546001612abc565b600f555050505050505050505050565b600c5460009060a060020a900460ff161580610e275750600c54600e54604080517fcc44919b000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483015260248201939093529051600093929092169163cc44919b9160448082019260209290919082900301818787803b158015610df957600080fd5b600054600160a060020a031633148061242e5750600154600160a060020a031633145b1515612472576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b600e55565b60008060003433600a548083101515156124db576040805160e560020a62461bcd02815260206004820152601260248201527f53656e642045544820746f20696e766573740000000000000000000000000000604482015290519081900360640190fd5b60408051848152600160a060020a038416602082015281517f3a32cdd14cdfd431946dfa0b2aef5ace661340411aaadcaee6aef6738d302326929181900390910190a160005460a060020a900460ff161561253557600080fd5b6000878152601060205260409020600901544281111561259f576040805160e560020a62461bcd02815260206004820152601160248201527f506f6f6c206e6f74206f70656e20796574000000000000000000000000000000604482015290519081900360640190fd5b600f5488106125f8576040805160e560020a62461bcd02815260206004820152601d60248201527f57726f6e6720706f6f6c2069642c20496e76657374455448206661696c000000604482015290519081900360640190fd5b600088815260106020526040902060050154600160a060020a031615612668576040805160e560020a62461bcd02815260206004820152601360248201527f506f6f6c206973206e6f7420666f722045544800000000000000000000000000604482015290519081900360640190fd5b600a54341015801561267c5750600b543411155b15156126d2576040805160e560020a62461bcd02815260206004820152601b60248201527f496e766573746d656e7420616d6f756e74206e6f742076616c69640000000000604482015290519081900360640190fd5b33321480156126e757506126e533612acf565b155b1515612763576040805160e560020a62461bcd02815260206004820152602360248201527f536f6d65207468696e672077726f6e67207769746820746865206d736753656e60448201527f6465720000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61276e33348a612d44565b965061277b883433612e4c565b9550612788888888612f8c565b6127a3611afc34611af761271061279e8d613005565b61308e565b6000898152601060205260409020600101549095506127cb90600160a060020a0316866131ae565b6127d588876130a0565b5050505050505050565b600054600160a060020a031633146127f657600080fd5b6127ff81613295565b50565b600054600160a060020a03163314806128255750600154600160a060020a031633145b1515612869576040805160e560020a62461bcd028152602060048201526013602482015260008051602061346b833981519152604482015290519081900360640190fd5b80612710811015610a6b576003829055610abb565b60008054600160a060020a0316331461289657600080fd5b50600160a060020a038216600090815260056020526040812080549190556128bf83838361296a565b505050565b600081600f5481101515612910576040805160e560020a62461bcd02815260206004820152601f602482015260008051602061344b833981519152604482015290519081900360640190fd5b6129198361148b565b156113b2576000838152601060205260409020600d8101805460ff1916600190811790915581549082015460089092015461296192600160a060020a0392831692169061296a565b60019150610d66565b60006129768430613312565b60408051848152600160a060020a03808716602083015287168183015290519192507fe4d818e6f992efbd60db553f3edce819a199baec79a784b95c89bc8ee86f2584919081900360600190a183600160a060020a031663a9059cbb84846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015612a2657600080fd5b505af1158015612a3a573d6000803e3d6000fd5b505050506040513d6020811015612a5057600080fd5b50819050612a616120838630613312565b14612ab6576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b50505050565b81810182811015612ac957fe5b92915050565b6000903b63ffffffff161190565b60008383838083600160a060020a031663dd62ed3e84306040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160a060020a0316600160a060020a0316815260200192505050602060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050506040513d6020811015612b8257600080fd5b50511015612bda576040805160e560020a62461bcd02815260206004820152600c60248201527f6e6f20616c6c6f77616e63650000000000000000000000000000000000000000604482015290519081900360640190fd5b60008511612be757600080fd5b612bf18730613312565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038981166004830152306024830152604482018990529151929650908916916323b872dd916064808201926020929091908290030181600087803b158015612c6657600080fd5b505af1158015612c7a573d6000803e3d6000fd5b505050506040513d6020811015612c9057600080fd5b505060408051868152600160a060020a03808916602083015289168183015290517f1fecf4702e692891a7c2f0d328779b085efb5edd094fa5558bd5cd147a1679229181900360600190a1612ce58730613312565b612cef8587612abc565b14611b9b576040805160e560020a62461bcd02815260206004820152601d60248201527f7265636976652077726f6e6720616d6f756e74206f6620746f6b656e73000000604482015290519081900360640190fd5b6040805160a081018252828152600160a060020a0385811660208084018281528486018881526000606087018181524260808901908152601280548452601387528a842099518a5594516001808b01805473ffffffffffffffffffffffffffffffffffffffff191692909a169190911790985592516002890155516003880155905160049096019590955533855260148252858520815481549586018255908652828620909401939093559154845190815291820152825191927ff4d99203a75a5961a6c1decf46e41b27f411990cda8e317361361339f8dffa5592918290030190a1612e346012546001612abc565b6012819055612e4490600161308e565b949350505050565b6000828180612e5a87610b1d565b6005811115612e6557fe5b1415612eaa576000868152601060205260409020600c0154612e89908590876133a2565b50600086815260106020526040902060040154612ea7908390613050565b90505b6001612eb587610b1d565b6005811115612ec057fe5b1415612ee657600086815260106020526040902060030154612ee3908390613050565b90505b683635c9adc5dea000008110612f33576000868152601060205260409020600d0154610100900460ff1615612f2b57612f2881683635c9adc5dea00000613079565b90505b809250612f83565b6040805160e560020a62461bcd02815260206004820152601f60248201527f57726f6e6720706f6f6c2073746174757320746f2043616c63546f6b656e7300604482015290519081900360640190fd5b50509392505050565b612f95836111f1565b15612fcd57600082815260136020526040902060030154612fb69082612abc565b6000838152601360205260409020600301556128bf565b6000838152601060209081526040808320548584526013909252909120600101546128bf91600160a060020a0390811691168361296a565b60008061301183610b1d565b600581111561301c57fe5b141561302b5750600254610e2a565b600161303683610b1d565b600581111561304157fe5b1415610e2a5750600654610e2a565b600082151561306157506000612ac9565b5081810281838281151561307157fe5b0414612ac957fe5b6000818381151561308657fe5b049392505050565b60008282111561309a57fe5b50900390565b600082815260106020526040902060080154811115613109576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320696e2074686520706f6f6c000000604482015290519081900360640190fd5b600082815260106020526040902060080154613125908261308e565b60008381526010602052604090206008018190551515613177576040805183815290517f5aa793a17b0774b891ce2b0dd5dbe8f04132e547df384ab1053d32470050b5fa9181900360200190a1610abb565b6040805183815290517f46074c56f8b8129e3ada6879521255be1596856f97bf16070e5cdd3a10dc1df79181900360200190a15050565b60408051828152600160a060020a038416602082015281516000927feca5ae7bd9109b0f7d228f3f8a8cc834a1f995af62df6dc226dc3ab3f38dc7b3928290030190a150604051600160a060020a03831680319183156108fc029084906000818181858888f1935050505015801561322a573d6000803e3d6000fd5b5082600160a060020a0316316132408284612abc565b146128bf576040805160e560020a62461bcd02815260206004820152601d60248201527f546865207472616e7366657220646964206e6f7420636f6d706c697465000000604482015290519081900360640190fd5b600160a060020a03811615156132aa57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600082600160a060020a03166370a08231836040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561336f57600080fd5b505af1158015613383573d6000803e3d6000fd5b505050506040513d602081101561339957600080fd5b50519392505050565b60008215156133b357506001611525565b600c54604080517f1d759fb2000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152602482018790526044820186905291519190921691631d759fb291606480830192600092919082900301818387803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b506001979650505050505050560057726f6e6720706f6f6c2069642c2043616e2774206765742053746174757300417574686f72697a6174696f6e204572726f7200000000000000000000000000a165627a7a72305820a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b020029

Deployed Bytecode Sourcemap

30811:463:0:-;;;;;;;;;-1:-1:-1;;;30811:463:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8668:8;;;;8667:9;8663:23;;;8678:8;;;8663:23;30811:463;12128:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12128:170:0;;;;;10643:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10643:28:0;;;;;;;;;;;;;;;;;;;;10706:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10706:97:0;;;;5046:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5046:31:0;;;;;;;;-1:-1:-1;;;;;5046:31:0;;;;;;;;;;;;;;20108:1876;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20108:1876:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11069:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11069:182:0;-1:-1:-1;;;;;11069:182:0;;;;;;;;;;;;;;;;;;;;;;;10605:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10605:31:0;;;;10217:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10217:26:0;;;;11596:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11596:205:0;;;;;;;4866:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4866:95:0;;;;18206:567;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18206:567:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7623:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7623:21:0;;;;12905:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12905:45:0;-1:-1:-1;;;;;12905:45:0;;;;;;;4245:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4245:26:0;;;;10571:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10571:27:0;;;;30318:449;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30318:449:0;;;;;;;;;;;;-1:-1:-1;;;;;30318:449:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17652:546;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17652:546:0;;;;;;;;;-1:-1:-1;;;;;17652:546:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:102;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17542:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17542:102:0;;;;;;;;;;;;;;;;;5236:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5236:116:0;-1:-1:-1;;;;;5236:116:0;;;;;22936:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22936:98:0;;;;14285:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14285:123:0;;;;;3348:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3348:114:0;;;;10295:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10295:26:0;;;;4686:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4686:93:0;;;;29483:645;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29483:645:0;;;;;12771:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12771:25:0;;;;2553:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2553:20:0;;;;30198:112;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30198:112:0;;;;10490:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10490:32:0;;;;30887:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30887:178:0;-1:-1:-1;;;;;30887:178:0;;;;;19150:325;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19150:325:0;;;;;12306:173;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12306:173:0;;;;;10456:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10456:27:0;;;;8845:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8845:82:0;;;;7693:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7693:23:0;;;;12826:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12826:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8815:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8815:20:0;;;;11809:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11809:198:0;;;;;;;11451:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11451:137:0;-1:-1:-1;;;;;11451:137:0;;;;;12015:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12015:105:0;;;;;24318:1487;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24318:1487:0;;;;;;;10391:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10391:24:0;;;;10169:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10169:18:0;;;;10422:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10422:27:0;;;;10811:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10811:124:0;;;;;18781:361;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18781:361:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18781:361:0;;;;;;;;;;;;;;29222:253;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29222:253:0;;;;;14441:2791;;-1:-1:-1;;;;;14441:2791:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11259:180;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11259:180:0;-1:-1:-1;;;;;11259:180:0;;;;;10943:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10943:118:0;;;;;23070:1240;;;;;;3630:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3630:105:0;-1:-1:-1;;;;;3630:105:0;;;;;8037:159;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8037:159:0;;;;;31073:192;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31073:192:0;-1:-1:-1;;;;;31073:192:0;;;;;;;;;;19544:518;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19544:518:0;;;;;12128:170;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12222:4;7840:5;7829:8;:16;7825:61;;;12250:4;12256:6;;7976;7968:5;:14;7964:57;;;12280:3;:10;;;7964:57;;;8001:20;;;-1:-1:-1;;;;;8001:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7964:57;7847:1;;7825:61;;;7864:22;;;-1:-1:-1;;;;;7864:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7825:61;5219:1;12128:170;:::o;10643:28::-;;;;:::o;10706:97::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;10780:15;;;-1:-1:-1;;10761:34:0;;-1:-1:-1;;;10780:15:0;;;;;;10779:16;10761:34;;;;;;10706:97::o;5046:31::-;;;-1:-1:-1;;;;;5046:31:0;;:::o;20108:1876::-;20213:10;20190:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;20324:10;;;;:5;:10;;;;;:29;;;20318:3;:35;20314:66;;;20362:18;20355:25;;;;20314:66;20415:10;;;;:5;:10;;;;;:30;;;20409:3;:36;:87;;;;-1:-1:-1;20495:1:0;20462:10;;;:5;:10;;;;;:30;;;:34;20409:87;20391:218;;;20578:18;20570:27;;;;20391:218;20644:10;;;;:5;:10;;;;;:30;;;20637:3;:37;;;;:88;;-1:-1:-1;20724:1:0;20691:10;;;:5;:10;;;;;:30;;;:34;20637:88;:141;;;;-1:-1:-1;20748:10:0;;;;:5;:10;;;;;:30;;;20742:3;:36;20637:141;20619:264;;;20855:15;20847:24;;;;20619:264;20911:10;;;;:5;:10;;;;;:30;;;:35;:69;;;;;20963:17;20976:3;20963:12;:17::i;:::-;20911:122;;;;-1:-1:-1;21003:10:0;;;;:5;:10;;;;;:30;;;20997:3;:36;20911:122;20893:255;;;21114:21;21106:30;;;;20893:255;21176:10;;;;:5;:10;;;;;:30;;;:35;:57;;;;;21216:17;21229:3;21216:12;:17::i;:::-;21215:18;21176:57;21158:175;;;21304:16;21296:25;;;;21158:175;21368:10;;;;:5;:10;;;;;:30;;;21361:3;:37;;;;:72;;;21416:17;21429:3;21416:12;:17::i;:::-;21415:18;21361:72;21343:283;;;21511:10;;;;:5;:10;;;;;:33;;;;;21507:64;;;21554:16;21546:25;;;;21507:64;21594:19;21586:28;;;;21343:283;21655:10;;;;:5;:10;;;;;:33;;;;;;:89;;-1:-1:-1;21709:10:0;;;;:5;:10;;;;;:30;;;:35;21655:89;21654:246;;;;-1:-1:-1;21868:10:0;;;;:5;:10;;;;;:31;;;;21817:30;;;;21763:34;;;;;:84;;;:136;21654:246;21636:301;;;21920:16;21912:25;;;;21636:301;21956:19;21948:28;;17525:1;20108:1876;;;;:::o;11069:182::-;11155:15;;11130:4;;-1:-1:-1;;;11155:15:0;;;;11154:16;;:89;;-1:-1:-1;11186:17:0;;11221:16;;11175:63;;;;;;-1:-1:-1;;;;;11175:63:0;;;;;;;;;;;;;;;;11241:1;;11186:17;;;;;11175:35;;:63;;;;;;;;;;;;;;;11241:1;11186:17;11175:63;;;5:2:-1;;;;30:1;27;20:12;5:2;11175:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11175:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11175:63:0;:67;11154:89;11147:96;;11069:182;;;;:::o;10605:31::-;;;;:::o;10217:26::-;;;;:::o;11596:205::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11726:12;:28;;;;11765:12;:28;11596:205::o;4866:95::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;4581:6;;-1:-1:-1;;;4581:6:0;;;;4573:15;;;;;;;;4929:5;4920:14;;-1:-1:-1;;4920:14:0;;;4946:9;;;;4929:5;4946:9;4866:95::o;18206:567::-;18327:6;18348:7;18370;18392;18414;18436:4;18290:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;18490:10:0;;;;-1:-1:-1;;18490:5:0;:10;;-1:-1:-1;;18490:10:0;;;:19;;;:31;18536:30;;;;18581:29;;;;18625:30;;;;18670:34;;;;18719:35;;;;;18490:31;;;;;18536:30;;18581:29;;18625:30;;18490:31;18719:35;;;;;;18206:567::o;7623:21::-;;;;:::o;12905:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4245:26::-;;;-1:-1:-1;;;4245:26:0;;;;;:::o;10571:27::-;;;-1:-1:-1;;;10571:27:0;;;;;:::o;30318:449::-;30420:7;30565:14;;;:9;:14;;;;;:21;;30601:30;;;;30646:23;;;;30684:24;;;;30723:25;;;;;30565:21;;-1:-1:-1;;;;;30601:30:0;;;;30646:23;;30684:24;;30318:449::o;17652:546::-;17773:7;17795;17817;17839;17861;17883;17736:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;17940:10:0;;;;-1:-1:-1;;17940:5:0;:10;;-1:-1:-1;;17940:10:0;;;:25;;;17980:27;;;18022:30;;;;18067:24;;;;18106:27;;;;18148:31;;;;;-1:-1:-1;;;;;17940:25:0;;;;17980:27;;;;;18022:30;;18067:24;;18148:31;17652:546::o;17542:102::-;17625:10;17616:20;;;;:8;:20;;;;;;;;;17609:27;;;;;;;;;;;;;;;;;17587:9;;17609:27;;;17616:20;17609:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:102;:::o;5236:116::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;5317:16;:27;;-1:-1:-1;;5317:27:0;-1:-1:-1;;;;;5317:27:0;;;;;;;;;;5236:116::o;22936:98::-;23012:14;;22936:98;:::o;14285:123::-;14340:4;14363:10;;;:5;:10;;;;;:19;;:31;14397:3;14363:31;;;;:37;;14285:123::o;3348:114::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;3425:5;;;3406:25;;-1:-1:-1;;;;;3425:5:0;;;;3406:25;;;3454:1;3438:18;;-1:-1:-1;;3438:18:0;;;3348:114::o;10295:26::-;;;;:::o;4686:93::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;4741:6;:13;;-1:-1:-1;;4741:13:0;-1:-1:-1;;;4741:13:0;;;4766:7;;;;4741:6;4766:7;4686:93::o;29483:645::-;29540:4;29608:12;29561:30;29587:3;29561:25;:30::i;:::-;29557:541;;;-1:-1:-1;29623:14:0;;;;:9;:14;;;;;;;;:24;;;;;29662:28;;;;29743:21;;29737:28;;:5;:28;;;;;:43;29799:14;;;;;;;;-1:-1:-1;29799:30:0;;;;29623:24;;29705:162;;-1:-1:-1;;;;;29737:43:0;;;;29799:30;29623:24;29705:13;:162::i;:::-;29968:28;29974:14;;;:9;:14;;;;;;;;:21;29968:28;;:5;:28;;;;;:52;;;29937:121;;30039:4;29937:12;:121::i;:::-;29882:28;29888:14;;;:9;:14;;;;;;;;:21;29882:28;;:5;:28;;;;;:52;;:176;30082:4;;-1:-1:-1;30075:11:0;;29557:541;-1:-1:-1;30115:5:0;;29483:645;-1:-1:-1;;29483:645:0:o;12771:25::-;;;;:::o;2553:20::-;;;-1:-1:-1;;;;;2553:20:0;;:::o;30198:112::-;30291:10;30278:24;;;;:12;:24;;;;;;;;;30271:31;;;;;;;;;;;;;;;;;30249:9;;30271:31;;;30278:24;30271:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30198:112;:::o;10490:32::-;;;-1:-1:-1;;;;;10490:32:0;;:::o;30887:178::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;30952:35;;-1:-1:-1;;;;;30952:12:0;;;30973:4;30965:21;30952:35;;;;;;;;;30965:21;30952:12;:35;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;19150:325:0;19274:4;19247:7;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;19316:14;;;;:5;:14;;;;;:34;;;19354:3;-1:-1:-1;19316:41:0;;;:96;;-1:-1:-1;19411:1:0;19374:14;;;:5;:14;;;;;:34;;;:38;19316:96;:151;;;;-1:-1:-1;19430:14:0;;;;:5;:14;;;;;:37;;;;;19429:38;19316:151;19296:171;19150:325;-1:-1:-1;;;19150:325:0:o;12306:173::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12403:4;7840:5;7829:8;:16;7825:61;;;12431:3;;12436:4;7976:6;7968:5;:14;7964:57;;;12458:6;:13;;;7964:57;;10456:27;;;;:::o;8845:82::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;8911:8;;;-1:-1:-1;;8899:20:0;;8911:8;;;;8910:9;8899:20;;;8845:82::o;7693:23::-;;;;:::o;12826:37::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12826:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8815:20::-;;;;;;:::o;11809:198::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11936:11;:26;;;;11973:11;:26;11809:198::o;11451:137::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11542:17;:38;;-1:-1:-1;;11542:38:0;-1:-1:-1;;;;;11542:38:0;;;;;;;;;;11451:137::o;12015:105::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;12090:9;:22;12015:105::o;24318:1487::-;24990:20;4421:6;;24990:20;;;;;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;24433:14;;;;:5;:14;;;;;:33;;;22197:3;:12;-1:-1:-1;22197:12:0;22189:42;;;;;-1:-1:-1;;;;;22189:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24502:10;;24492:20;;24484:64;;;;;-1:-1:-1;;;;;24484:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24625:3;24581:14;;;:5;:14;;;;;:32;;;-1:-1:-1;;;;;24581:32:0;:48;;24559:127;;;;;-1:-1:-1;;;;;24559:127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24715:5;24705:15;;24697:55;;;;;-1:-1:-1;;;;;24697:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24785:10;24799:9;24785:23;:50;;;;;24813:22;24824:10;24813;:22::i;:::-;24812:23;24785:50;24763:135;;;;;;;-1:-1:-1;;;;;24763:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24925:14;;;;:5;:14;;;;;:32;;;24909:70;;-1:-1:-1;;;;;24925:32:0;24959:10;24971:7;24909:15;:70::i;:::-;25013:41;25025:10;25037:7;25046;25013:11;:41::i;:::-;24990:64;;25082:40;25093:7;25102;25111:10;25082;:40::i;:::-;25065:57;;25135:44;25149:7;25158:12;25172:6;25135:13;:44::i;:::-;25229:60;25242:39;25255:7;25264:16;25272:7;25264;:16::i;:::-;25242:12;:39::i;:::-;25283:5;25229:12;:60::i;:::-;25192:97;;25335:36;25348:7;25357:13;25335:12;:36::i;:::-;25452:40;25459:14;;;:5;:14;;;;;;;;25452:6;25459:32;;;;-1:-1:-1;;;;;25459:32:0;25452:40;;;;;;;;25302:69;;-1:-1:-1;25425:106:0;;25507:13;25425:12;:106::i;:::-;25382:40;25389:14;;;:5;:14;;;;;;;;25382:6;25389:32;;;;;-1:-1:-1;;;;;25389:32:0;;;25382:40;;;;;;;;:149;;;;25570:14;;;;;;;:32;25389;25617:31;;;;25542:154;;25570:32;;;;25617:31;25663:22;25542:13;:154::i;:::-;25766:31;25781:7;25790:6;25766:14;:31::i;:::-;4435:1;24318:1487;;;;;;:::o;10391:24::-;;;;:::o;10169:18::-;;;;:::o;10422:27::-;;;;:::o;10811:124::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;10896:16;:31;10811:124::o;18781:361::-;18903:4;18922:7;18944;18866:3;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;19001:10:0;;;;-1:-1:-1;19001:5:0;:10;;;;;:33;;;;19049:31;;;;;19095:28;;;;19001:33;;;;;-1:-1:-1;;;;;19095:28:0;;;;18781:361::o;29222:253::-;29291:4;29335:14;;29328:3;:21;;:66;;;;-1:-1:-1;29393:1:0;29366:14;;;:9;:14;;;;;:24;;;:28;29328:66;:139;;;;-1:-1:-1;;29411:28:0;29417:14;;;:9;:14;;;;;;;;:21;29411:28;;:5;:28;;;;;:37;;:49;29464:3;29411:49;;;;:56;;;29222:253::o;14441:2791::-;16126:18;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;15208:9;;15195;:22;;15187:59;;;;;-1:-1:-1;;;;;15187:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15265:20;15278:6;15265:12;:20::i;:::-;15257:55;;;;;;;-1:-1:-1;;;;;15257:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15372:25:0;;;;:55;;;15401:26;15417:9;15401:15;:26::i;:::-;15350:126;;;;;;;-1:-1:-1;;;;;15350:126:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15510:30;15523:11;;15536:3;15510:12;:30::i;:::-;15495:45;;15487:90;;;;;-1:-1:-1;;;;;15487:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15611:30;15624:11;;15637:3;15611:12;:30::i;:::-;15596:45;;;;15588:90;;;;;-1:-1:-1;;;;;15588:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15711:17;;;;15689:118;;;;;-1:-1:-1;;;;;15689:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15837:1;15826:12;;15818:41;;;;;-1:-1:-1;;;;;15818:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15881:3;15874:4;:10;15870:26;;;15893:3;15886:10;;15870:26;15963:11;15929:30;15942:3;15947:11;;15929:12;:30::i;:::-;:45;;15907:121;;;;;-1:-1:-1;;;;;15907:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16066:49;16082:6;16090:10;16102:12;16066:15;:49::i;:::-;16161:17;;16160:305;;16235:230;16270:149;16309:55;16322:31;16335:11;16348:4;16322:12;:31::i;:::-;16355:8;;16309:12;:55::i;16270:149::-;16442:4;16235:12;:230::i;:::-;16160:305;;;16200:4;16160:305;16126:339;;16525:513;;;;;;;;;16544:221;;;;;;;;;16575:6;-1:-1:-1;;;;;16544:221:0;;;;;16600:10;-1:-1:-1;;;;;16544:221:0;;;;;16629:11;16544:221;;;;16659:5;16544:221;;;;16683:8;16544:221;;;;16710:9;-1:-1:-1;;;;;16544:221:0;;;;;16738:12;16544:221;;;16525:513;;;;16780:247;;;;;;;;;16811:12;16780:247;;;;;;16842:12;16780:247;;;;16873:4;16780:247;;;;16896:10;16780:247;;;;16925:1;16780:247;;;;16945:12;16780:247;;;;16976:5;16780:247;;;;;;17000:12;16780:247;;;;;16525:513;;;16505:5;:17;16511:10;;16505:17;;;;;;;;;;;:533;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16505:533:0;;;;;-1:-1:-1;;;;;16505:533:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17049:8;:20;17058:10;-1:-1:-1;;;;;17049:20:0;-1:-1:-1;;;;;17049:20:0;;;;;;;;;;;;17075:10;;17049:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;17049:37:0;;;;;;;;;;;;;;;;;;;;;;17102:27;17110:6;17118:10;;17102:27;;;;-1:-1:-1;;;;;17102:27:0;-1:-1:-1;;;;;17102:27:0;;;;;;;;;;;;;;;;;;;;;17153;17166:10;;17178:1;17153:12;:27::i;:::-;17140:10;:40;-1:-1:-1;;;;;;;;;;;14441:2791:0:o;11259:180::-;11348:15;;11323:4;;-1:-1:-1;;;11348:15:0;;;;11347:16;;:84;;-1:-1:-1;11378:17:0;;11413:13;;11367:60;;;;;;-1:-1:-1;;;;;11367:60:0;;;;;;;;;;;;;;;;11430:1;;11378:17;;;;;11367:35;;:60;;;;;;;;;;;;;;;11430:1;11378:17;11367:60;;;5:2:-1;;;;30:1;27;20:12;10943:118:0;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;11025:13;:28;10943:118::o;23070:1240::-;23742:20;23819:14;23956:19;23160:9;23171:10;23183:12;;8464:13;8452:8;:25;;8444:56;;;;;;;-1:-1:-1;;;;;8444:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8516:34;;;;;;-1:-1:-1;;;;;8516:34:0;;;;;;;;;;;;;;;;;;;4421:6;;-1:-1:-1;;;4421:6:0;;;;4420:7;4412:16;;;;;;23239:14;;;;:5;:14;;;;;:33;;;22197:3;:12;-1:-1:-1;22197:12:0;22189:42;;;;;-1:-1:-1;;;;;22189:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23308:10;;23298:20;;23290:62;;;;;-1:-1:-1;;;;;23290:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23415:3;23371:14;;;:5;:14;;;;;:32;;;-1:-1:-1;;;;;23371:32:0;:48;23363:80;;;;;-1:-1:-1;;;;;23363:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23489:12;;23476:9;:25;;:54;;;;;23518:12;;23505:9;:25;;23476:54;23454:131;;;;;;;-1:-1:-1;;;;;23454:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23618:10;23632:9;23618:23;:50;;;;;23646:22;23657:10;23646;:22::i;:::-;23645:23;23618:50;23596:135;;;;;;;-1:-1:-1;;;;;23596:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23765:43;23777:10;23789:9;23800:7;23765:11;:43::i;:::-;23742:66;;23836:42;23847:7;23856:9;23867:10;23836;:42::i;:::-;23819:59;;23899:44;23913:7;23922:12;23936:6;23899:13;:44::i;:::-;23991:132;24022:62;24035:9;24046:37;24059:5;24066:16;24074:7;24066;:16::i;:::-;24046:12;:37::i;23991:132::-;24214:14;;;;:5;:14;;;;;:31;;;23956:167;;-1:-1:-1;24202:57:0;;-1:-1:-1;;;;;24214:31:0;23956:167;24202:11;:57::i;:::-;24271:31;24286:7;24295:6;24271:14;:31::i;:::-;4435:1;23070:1240;;;;;;;:::o;3630:105::-;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;3700:29;3719:9;3700:18;:29::i;:::-;3630:105;:::o;8037:159::-;5145:5;;-1:-1:-1;;;;;5145:5:0;5131:10;:19;;:53;;-1:-1:-1;5168:16:0;;-1:-1:-1;;;;;5168:16:0;5154:10;:30;5131:53;5123:85;;;;;;;-1:-1:-1;;;;;5123:85:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5123:85:0;;;;;;;;;;;;;;;8141:9;7840:5;7829:8;:16;7825:61;;;8168:8;:20;;;7825:61;;31073:192;31156:12;3056:5;;-1:-1:-1;;;;;3056:5:0;3042:10;:19;3034:28;;;;;;-1:-1:-1;;;;;;31171:14:0;;;;;;:6;:14;;;;;;;31196:18;;;31225:32;31178:6;31247:3;31171:14;31225:13;:32::i;:::-;31073:192;;;:::o;19544:518::-;19620:4;19602:7;17468:10;;17462:3;:16;17454:60;;;;;;;-1:-1:-1;;;;;17454:60:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17454:60:0;;;;;;;;;;;;;;;19706:33;19731:7;19706:24;:33::i;:::-;19702:330;;;19756:14;;;;:5;:14;;;;;:37;;;:44;;-1:-1:-1;;19756:44:0;19796:4;19756:44;;;;;;19847:29;;19895:31;;;;19945:34;;;;;19815:179;;-1:-1:-1;;;;;19847:29:0;;;;19895:31;;19815:13;:179::i;:::-;20016:4;20009:11;;;;5919:480;6047:18;6068:35;6081:6;6097:4;6068:12;:35::i;:::-;6119:38;;;;;;-1:-1:-1;;;;;6119:38:0;;;;;;;;;;;;;;;6047:56;;-1:-1:-1;6119:38:0;;;;;;;;;;6174:6;-1:-1:-1;;;;;6168:22:0;;6191:8;6201:7;6168:41;;;;;-1:-1:-1;;;6168:41:0;;;;;;;-1:-1:-1;;;;;6168:41:0;-1:-1:-1;;;;;6168:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6168:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6168:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6306:10:0;;-1:-1:-1;6243:58:0;6256:35;6269:6;6285:4;6256:12;:35::i;6243:58::-;6242:74;6220:171;;;;;-1:-1:-1;;;;;6220:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5919:480;;;;:::o;1278:132::-;1360:7;;;1381;;;;1374:15;;;;1278:132;;;;:::o;28524:193::-;28582:4;28653:18;;28700:8;;;;28524:193::o;6594:570::-;6795:18;6726:6;6734:8;6744:7;5844;5800:6;-1:-1:-1;;;;;5794:23:0;;5818:6;5834:4;5794:46;;;;;-1:-1:-1;;;5794:46:0;;;;;;;-1:-1:-1;;;;;5794:46:0;-1:-1:-1;;;;;5794:46:0;;;;;;-1:-1:-1;;;;;5794:46:0;-1:-1:-1;;;;;5794:46:0;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5794:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5794:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5794:46:0;:57;;5772:119;;;;;-1:-1:-1;;;;;5772:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6782:1;6772:11;;6764:20;;;;;;6816:35;6829:6;6845:4;6816:12;:35::i;:::-;6862:60;;;;;;-1:-1:-1;;;;;6862:60:0;;;;;;;6907:4;6862:60;;;;;;;;;;;;6795:56;;-1:-1:-1;6862:26:0;;;;;;:60;;;;;;;;;;;;;;;-1:-1:-1;6862:26:0;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;6862:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6862:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;6938:37:0;;;;;;-1:-1:-1;;;;;6938:37:0;;;6862:60;6938:37;;;;;;;;;;;;;;;;;;;;7064:35;7077:6;7093:4;7064:12;:35::i;:::-;7009:33;7022:10;7034:7;7009:12;:33::i;:::-;7008:91;6986:170;;;;;-1:-1:-1;;;;;6986:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26786:526;26955:128;;;;;;;;;;;-1:-1:-1;;;;;26955:128:0;;;;;;;;;;;;;;;;-1:-1:-1;26955:128:0;;;;;;27057:15;26955:128;;;;;;26937:14;;;26927:25;;:9;:25;;;;;:156;;;;;;;;;;;;-1:-1:-1;;26927:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27107:10;27094:24;;:12;:24;;;;;27124:14;;27:10:-1;;23:18;;;45:23;;27094:45:0;;;;;;;;;;;;;27172:14;;27155:41;;;;;;;;;;;-1:-1:-1;;27155:41:0;;;;;;;;;27224:31;27237:14;;27253:1;27224:12;:31::i;:::-;27207:14;:48;;;27273:31;;27302:1;27273:12;:31::i;:::-;27266:38;26786:526;-1:-1:-1;;;;26786:526:0:o;27320:817::-;27440:7;27479;27440;;27530:19;27544:4;27530:13;:19::i;:::-;:41;;;;;;;;;27526:213;;;27609:11;;;;:5;:11;;;;;:32;;;27588:63;;27600:7;;27643;27588:11;:63::i;:::-;-1:-1:-1;27698:11:0;;;;:5;:11;;;;;:28;;;27675:52;;27688:8;;27675:12;:52::i;:::-;27666:61;;27526:213;27776:15;27753:19;27767:4;27753:13;:19::i;:::-;:38;;;;;;;;;27749:129;;;27840:11;;;;:5;:11;;;;;:25;;;27817:49;;27830:8;;27817:12;:49::i;:::-;27808:58;;27749:129;27902:6;27892:16;;27888:190;;27929:11;;;;:5;:11;;;;;:36;;;;;;;;27925:114;;;27995:28;28008:6;28016;27995:12;:28::i;:::-;27986:37;;27925:114;28060:6;28053:13;;;;27888:190;28088:41;;;-1:-1:-1;;;;;28088:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;27320:817;;;;;;;;:::o;25813:485::-;25917:21;25930:7;25917:12;:21::i;:::-;25913:378;;;26023:24;;;;:9;:24;;;;;:34;;;25992:106;;26076:7;25992:12;:106::i;:::-;25955:24;;;;:9;:24;;;;;:34;;:143;25913:378;;;26198:14;;;;:5;:14;;;;;;;;:29;26229:24;;;:9;:24;;;;;;26198:29;26229:40;;26184:95;;-1:-1:-1;;;;;26198:29:0;;;;26229:40;26271:7;26184:13;:95::i;28145:313::-;28199:7;;28223:19;28237:4;28223:13;:19::i;:::-;:41;;;;;;;;;28219:87;;;-1:-1:-1;28288:6:0;;28281:13;;28219:87;28343:15;28320:19;28334:4;28320:13;:19::i;:::-;:38;;;;;;;;;28316:81;;;-1:-1:-1;28382:3:0;;28375:10;;209:391;269:9;499:7;;495:38;;;-1:-1:-1;524:1:0;517:8;;495:38;-1:-1:-1;545:7:0;;;550:2;545;:7;566:6;;;;;;;;:12;559:20;;;687:288;747:7;967:2;962;:7;;;;;;;;;687:288;-1:-1:-1;;;687:288:0:o;1092:119::-;1152:7;1175:8;;;;1168:16;;;;-1:-1:-1;1198:7:0;;;1092:119::o;26306:472::-;26417:14;;;;:5;:14;;;;;:34;;;26406:45;;;26384:124;;;;;-1:-1:-1;;;;;26384:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26583:14;;;;:5;:14;;;;;:34;;;26556:94;;26632:7;26556:12;:94::i;:::-;26519:14;;;;:5;:14;;;;;:34;;:131;;;26665:39;26661:109;;;26711:19;;;;;;;;;;;;;;;;;26661:109;;;26751:19;;;;;;;;;;;;;;;;;26306:472;;:::o;8935:378::-;9017:34;;;;;;-1:-1:-1;;;;;9017:34:0;;;;;;;;9062:21;;9017:34;;;;;;;;-1:-1:-1;9122:27:0;;-1:-1:-1;;;;;9086:25:0;;;;;9122:27;;;;;9140:8;;9122:27;;;;9140:8;9086:25;9122:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9122:27:0;9231:8;-1:-1:-1;;;;;9223:25:0;;9182:37;9195:13;9210:8;9182:12;:37::i;:::-;:66;9160:145;;;;;-1:-1:-1;;;;;9160:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3876:175;-1:-1:-1;;;;;3947:23:0;;;;3939:32;;;;;;4004:5;;;3983:38;;-1:-1:-1;;;;;3983:38:0;;;;4004:5;;;3983:38;;;4028:5;:17;;-1:-1:-1;;4028:17:0;-1:-1:-1;;;;;4028:17:0;;;;;;;;;;3876:175::o;6407:179::-;6513:7;6551:6;-1:-1:-1;;;;;6545:23:0;;6569:8;6545:33;;;;;-1:-1:-1;;;6545:33:0;;;;;;;-1:-1:-1;;;;;6545:33:0;-1:-1:-1;;;;;6545:33:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6545:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6545:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6545:33:0;;6407:179;-1:-1:-1;;;6407:179:0:o;28836:301::-;28958:4;28979:8;;28975:25;;;-1:-1:-1;28996:4:0;28989:11;;28975:25;29033:17;;29022:63;;;;;;-1:-1:-1;;;;;29022:63:0;;;;;;;;;;;;;;;;;;;;;29033:17;;;;;29022:38;;:63;;;;;29033:17;;29022:63;;;;;;;29033:17;;29022:63;;;5:2:-1;;;;30:1;27;20:12;5:2;29022:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;29125:4:0;;28836:301;-1:-1:-1;;;;;;;28836:301:0:o

Swarm Source

bzzr://a38e630d35e39ce1f13118d060493c5985a42fd9d31bfed654ce936c05096b02

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ETH45.99%$0.2508228,164.5935$2,047.86
ETH
Ether (ETH)
17.24%$3,420.590.2244$767.51
ETH7.85%$0.0674835,180.976$349.63
ETH3.60%$0.01378611,615.046$160.13
ETH2.64%$0.0298073,939.8575$117.43
ETH1.66%$0.0099557,440.585$74.07
ETH1.59%$0.000629112,770.3201$70.9
ETH1.40%$0.00204430,541.9265$62.43
ETH1.06%$0.00065671,834.7052$47.15
ETH0.57%$0.00043957,541.7466$25.25
ETH0.43%$0.0022518,477.362$19.08
ETH0.11%$0.00018228,088$5.11
ETH0.11%$0.022822209.278$4.78
ETH0.10%$0.000994,299.2254$4.26
ETH0.07%$0.06231849.7758$3.1
ETH0.07%$0.03999675.68$3.03
ETH0.06%$0.0003367,910.61$2.65
ETH0.03%$0.0003024,595.5093$1.39
ETH0.02%$0.004857205.6466$0.9987
BSC15.40%$670.991.022$685.72
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.