ETH Price: $2,356.65 (+1.29%)
Gas: 2.94 Gwei

Contract

0xA2d89895958DA5736EDF22b39bE690965C8c6FeC
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Locked ...144100072022-03-18 11:01:44906 days ago1647601304IN
0xA2d89895...65C8c6FeC
0 ETH0.0015283228.01239458
Withdraw From Un...144099492022-03-18 10:50:32906 days ago1647600632IN
0xA2d89895...65C8c6FeC
0 ETH0.0046616249.996463
Transfer115500512020-12-29 16:40:581350 days ago1609260058IN
0xA2d89895...65C8c6FeC
0 ETH0.0029726100
Transfer115500442020-12-29 16:39:311350 days ago1609259971IN
0xA2d89895...65C8c6FeC
0.05 ETH0.002352112
Transfer115500402020-12-29 16:38:521350 days ago1609259932IN
0xA2d89895...65C8c6FeC
0.8 ETH0.00487506164
Transfer115500252020-12-29 16:35:181350 days ago1609259718IN
0xA2d89895...65C8c6FeC
0.8 ETH0.003486166
Withdraw Team To...115500212020-12-29 16:33:321350 days ago1609259612IN
0xA2d89895...65C8c6FeC
0 ETH0.05578031155
Transfer115500032020-12-29 16:28:391350 days ago1609259319IN
0xA2d89895...65C8c6FeC
0 ETH0.003024144
Transfer115499902020-12-29 16:23:561350 days ago1609259036IN
0xA2d89895...65C8c6FeC
0.25 ETH0.00436972147
Transfer115499832020-12-29 16:22:561350 days ago1609258976IN
0xA2d89895...65C8c6FeC
0.5 ETH0.00428054144
Transfer115499742020-12-29 16:20:051350 days ago1609258805IN
0xA2d89895...65C8c6FeC
0.5 ETH0.00416164140
Lock With Unicry...115499572020-12-29 16:16:021350 days ago1609258562IN
0xA2d89895...65C8c6FeC
0 ETH0.04623542140
Claim Team Fee A...115499522020-12-29 16:15:091350 days ago1609258509IN
0xA2d89895...65C8c6FeC
0 ETH0.05118008140
Transfer115499452020-12-29 16:14:051350 days ago1609258445IN
0xA2d89895...65C8c6FeC
0.05 ETH0.0030891598
Transfer115499432020-12-29 16:13:491350 days ago1609258429IN
0xA2d89895...65C8c6FeC
0.2 ETH0.00343589109
Transfer115499372020-12-29 16:12:561350 days ago1609258376IN
0xA2d89895...65C8c6FeC
1 ETH0.00343589109
Transfer115499352020-12-29 16:12:461350 days ago1609258366IN
0xA2d89895...65C8c6FeC
0.4 ETH0.00457699145.2000016
Transfer115499342020-12-29 16:12:411350 days ago1609258361IN
0xA2d89895...65C8c6FeC
0.47 ETH0.00394025125
Transfer115499332020-12-29 16:12:161350 days ago1609258336IN
0xA2d89895...65C8c6FeC
0.4 ETH0.00567396180
Transfer115499322020-12-29 16:11:591350 days ago1609258319IN
0xA2d89895...65C8c6FeC
0.46 ETH0.01872946146
Transfer115499322020-12-29 16:11:591350 days ago1609258319IN
0xA2d89895...65C8c6FeC
1 ETH0.003297157
Transfer115499302020-12-29 16:11:471350 days ago1609258307IN
0xA2d89895...65C8c6FeC
0.5 ETH0.00394025125
Transfer115499282020-12-29 16:11:361350 days ago1609258296IN
0xA2d89895...65C8c6FeC
1 ETH0.002772132
Transfer115499212020-12-29 16:10:151350 days ago1609258215IN
0xA2d89895...65C8c6FeC
0.5 ETH0.00457069145
Transfer115499182020-12-29 16:09:421350 days ago1609258182IN
0xA2d89895...65C8c6FeC
0.5 ETH0.00406633129
View all transactions

Latest 4 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
115499522020-12-29 16:15:091350 days ago1609258509
0xA2d89895...65C8c6FeC
145.49245398 ETH
115499522020-12-29 16:15:091350 days ago1609258509
0xA2d89895...65C8c6FeC
1.4999222 ETH
115499522020-12-29 16:15:091350 days ago1609258509
0xA2d89895...65C8c6FeC
1.4999222 ETH
115499522020-12-29 16:15:091350 days ago1609258509
0xA2d89895...65C8c6FeC
1.4999222 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PreSale

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-29
*/

/*
    *****************************************
    *** The Armada Pre-sale Contract v1.4 ***
    *****************************************
*/

pragma solidity ^0.7.0;
//SPDX-License-Identifier: MIT


interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address who) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function transfer(address to, uint value) external returns (bool);
    function approve(address spender, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    
    function unPauseTransferForever() external;
    function uniswapV2Pair() external returns(address);
}
interface IUNIv2 {
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) 
    external 
    payable 
    returns (uint amountToken, uint amountETH, uint liquidity);
    
    function WETH() external pure returns (address);

}

interface IUnicrypt {
    event onDeposit(address, uint256, uint256);
    event onWithdraw(address, uint256);
    function depositToken(address token, uint256 amount, uint256 unlock_date) external payable; 
    function withdrawToken(address token, uint256 amount) external;

}

interface IUniswapV2Factory {
  event PairCreated(address indexed token0, address indexed token1, address pair, uint);

  function createPair(address tokenA, address tokenB) external returns (address pair);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


contract PreSale is Context, ReentrancyGuard {
    using SafeMath for uint;
    IERC20 public ABS;
    address public _burnPool = 0x000000000000000000000000000000000000dEaD;

    IUNIv2 constant uniswap =  IUNIv2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Factory constant uniswapFactory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    IUnicrypt constant unicrypt = IUnicrypt(0x17e00383A843A9922bCA3B280C0ADE9f8BA48449);
    
    uint public tokensBought;
    bool public isStopped = false;
    bool public teamClaimed = false;
    bool public isRefundEnabled = false;
    bool public presaleStarted = false;
    bool justTrigger = false;
    uint constant teamTokens = 7777 ether;

    address payable owner;
    address payable constant owner1 = 0xDe87EA52cD67a32eC71d1A9817856f532b3145bf; // Marketing
    address payable constant owner2 = 0x635bF673DB15bd80846ed9eD0091D7B308b86D9d; // Treasury
    address payable constant owner3 = 0x6fE00946Dfa366360b8BB02a68d5536d8D92d488; // Development Fund
    
    address public pool;
    
    uint256 public liquidityUnlock;
    
    uint256 public ethSent;
    uint256 constant tokensPerETH = 777;
    uint256 public lockedLiquidityAmount;
    uint256 public timeTowithdrawTeamTokens;
    uint256 public refundTime; 
    mapping(address => uint) ethSpent;
    
     modifier onlyOwner() {
        require(msg.sender == owner, "You are not the owner");
        _;
    }
    
    constructor() {
        owner = msg.sender; 
        liquidityUnlock = block.timestamp.add(365 days);
        refundTime = block.timestamp.add(7 days);
    }
    
    
    receive() external payable {
        buyTokens();
    }
    
    
    function EMERGENCY_ALLOW_REFUNDS() external onlyOwner nonReentrant {
        isRefundEnabled = true;
        isStopped = true;
    }
    
    function getRefund() external nonReentrant {
        require(msg.sender == tx.origin);
        require(!justTrigger);
        // Refund should be enabled by the owner OR 7 days passed 
        require(isRefundEnabled || block.timestamp >= refundTime,"Cannot refund");
        address payable user = msg.sender;
        uint256 amount = ethSpent[user];
        ethSpent[user] = 0;
        user.transfer(amount);
    }
    
    function lockWithUnicrypt() external onlyOwner  {
        pool = ABS.uniswapV2Pair();
        IERC20 liquidityTokens = IERC20(pool);
        uint256 liquidityBalance = liquidityTokens.balanceOf(address(this));
        uint256 timeToLuck = liquidityUnlock;
        liquidityTokens.approve(address(unicrypt), liquidityBalance);

        unicrypt.depositToken{value: 0} (pool, liquidityBalance, timeToLuck);
        lockedLiquidityAmount = lockedLiquidityAmount.add(liquidityBalance);
    }
    
    function withdrawFromUnicrypt(uint256 amount) external onlyOwner {
        unicrypt.withdrawToken(pool, amount);
    }
    
    function withdrawTeamTokens() external onlyOwner nonReentrant {
        require(teamClaimed);
        require(block.timestamp >= timeTowithdrawTeamTokens, "Cannot withdraw yet");
        uint256 tokesToClaim = 7777 ether;
        uint256 amount = tokesToClaim.div(3); 
        ABS.transfer(owner1, amount);
        ABS.transfer(owner2, amount);
        ABS.transfer(owner3, amount);
        timeTowithdrawTeamTokens = block.timestamp.add(10 days);
    }

    function setToken(IERC20 addr) external onlyOwner nonReentrant {
        require(ABS == IERC20(address(0)), "You can set the address only once");
        ABS = addr;
    }
    
    function startPresale() external onlyOwner { 
        presaleStarted = true;
    }
    
     function pausePresale() external onlyOwner { 
        presaleStarted = false;
    }

    function buyTokens() public payable nonReentrant {
        require(msg.sender == tx.origin);
        require(presaleStarted == true, "Presale is Paused, Do not send ETH.");
        require(ABS != IERC20(address(0)), "Main contract address not set.");
        require(!isStopped, "Presale stopped by contract, do not send ETH.");
        require(msg.value >= 0.01 ether, "Must send more than 0.01 ETH");
        require(msg.value <= 3 ether, "You can only send 3 ETH.");
        require(ethSent < 150 ether, "Hard Cap reached at 150 ETH.");
        require (msg.value.add(ethSent) <= 150 ether, "Hard Cap is 150 ETH.");
        require(ethSpent[msg.sender].add(msg.value) <= 3 ether, "You can only send 3 ETH.");
        uint256 tokens = msg.value.mul(tokensPerETH);
        require(ABS.balanceOf(address(this)) >= tokens, "Not enough tokens in the contract");
        ethSpent[msg.sender] = ethSpent[msg.sender].add(msg.value);
        tokensBought = tokensBought.add(tokens);
        ethSent = ethSent.add(msg.value);
        ABS.transfer(msg.sender, tokens);
    }
   
    function userEthSpenttInPresale(address user) external view returns(uint){
        return ethSpent[user];
    }
    
    function claimTeamFeeAndAddLiquidity() external onlyOwner  {
       require(!teamClaimed);
       uint256 amountETH = address(this).balance.mul(1).div(100); 
       uint256 amountETH2 = address(this).balance.mul(1).div(100); 
       uint256 amountETH3 = address(this).balance.mul(1).div(100); 
       owner1.transfer(amountETH);
       owner2.transfer(amountETH2);
       owner3.transfer(amountETH3);
       teamClaimed = true;
       
       addLiquidity();
    }
        
    function addLiquidity() internal {
        uint256 ETH = address(this).balance;
        uint256 tokensForUniswap = address(this).balance.mul(500);
        uint256 tokensToBurn = ABS.balanceOf(address(this)).sub(tokensForUniswap).sub(teamTokens);
        ABS.unPauseTransferForever();
        ABS.approve(address(uniswap), tokensForUniswap);
        uniswap.addLiquidityETH
        { value: ETH }
        (
            address(ABS),
            tokensForUniswap,
            tokensForUniswap,
            ETH,
            address(this),
            block.timestamp
        );
       
       if (tokensToBurn > 0){
           ABS.transfer(_burnPool ,tokensToBurn);
       }
       
       justTrigger = true;
       
        if(!isStopped)
            isStopped = true;
            
   }
    
    function withdrawLockedTokensAfter1Year(address tokenAddress, uint256 tokenAmount) external onlyOwner  {
        require(block.timestamp >= liquidityUnlock, "You cannot withdraw yet");
        IERC20(tokenAddress).transfer(owner, tokenAmount);
    }

}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ABS","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMERGENCY_ALLOW_REFUNDS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_burnPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimTeamFeeAndAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethSent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRefundEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityUnlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockWithUnicrypt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockedLiquidityAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"addr","type":"address"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeTowithdrawTeamTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"userEthSpenttInPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFromUnicrypt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"withdrawLockedTokensAfter1Year","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTeamTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff0219169083151502179055506000600460026101000a81548160ff0219169083151502179055506000600460036101000a81548160ff02191690831515021790555060006004806101000a81548160ff021916908315150217905550348015620000da57600080fd5b50600160008190555033600460056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001426301e13380426200017160201b620025f91790919060201c565b6006819055506200016562093a80426200017160201b620025f91790919060201c565b600a81905550620001fa565b600080828401905083811015620001f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612efd806200020a6000396000f3fe60806040526004361061016a5760003560e01c8063724b6f43116100d1578063b2d5ae441161008a578063cbf4efa111610064578063cbf4efa114610513578063d0febe4c14610578578063d7443eba14610582578063eca38e0c146105c357610179565b8063b2d5ae4414610476578063b4f5d0031461048d578063bd05fb75146104b857610179565b8063724b6f431461038a578063732783ac146103a15780638746475a146103cc578063953b7ef8146103f95780639876fdfa146104105780639b0ac9b01461044b57610179565b806316f0115b1161012357806316f0115b1461028057806328d2bc91146102c15780632f334652146103025780633f683b6a1461032f578063463f5b921461035c5780635d7f5cdb1461037357610179565b806304549d6f1461017e57806304c98b2b146101ab578063052c30bc146101c2578063070f5c09146101ed57806311e453f914610204578063144fa6d71461022f57610179565b36610179576101776105ee565b005b600080fd5b34801561018a57600080fd5b50610193610df5565b60405180821515815260200191505060405180910390f35b3480156101b757600080fd5b506101c0610e08565b005b3480156101ce57600080fd5b506101d7610ee8565b6040518082815260200191505060405180910390f35b3480156101f957600080fd5b50610202610eee565b005b34801561021057600080fd5b50610219610fce565b6040518082815260200191505060405180910390f35b34801561023b57600080fd5b5061027e6004803603602081101561025257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd4565b005b34801561028c57600080fd5b5061029561120b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cd57600080fd5b506102d6611231565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561030e57600080fd5b50610317611257565b60405180821515815260200191505060405180910390f35b34801561033b57600080fd5b5061034461126a565b60405180821515815260200191505060405180910390f35b34801561036857600080fd5b5061037161127d565b005b34801561037f57600080fd5b50610388611514565b005b34801561039657600080fd5b5061039f611698565b005b3480156103ad57600080fd5b506103b6611abe565b6040518082815260200191505060405180910390f35b3480156103d857600080fd5b506103e1611ac4565b60405180821515815260200191505060405180910390f35b34801561040557600080fd5b5061040e611ad7565b005b34801561041c57600080fd5b506104496004803603602081101561043357600080fd5b8101908080359060200190929190505050611fa4565b005b34801561045757600080fd5b50610460612129565b6040518082815260200191505060405180910390f35b34801561048257600080fd5b5061048b61212f565b005b34801561049957600080fd5b506104a2612370565b6040518082815260200191505060405180910390f35b3480156104c457600080fd5b50610511600480360360408110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612376565b005b34801561051f57600080fd5b506105626004803603602081101561053657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612584565b6040518082815260200191505060405180910390f35b6105806105ee565b005b34801561058e57600080fd5b506105976125cd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105cf57600080fd5b506105d86125f3565b6040518082815260200191505060405180910390f35b60026000541415610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a757600080fd5b60011515600460039054906101000a900460ff16151514610713576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612e786023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d61696e20636f6e74726163742061646472657373206e6f74207365742e000081525060200191505060405180910390fd5b600460009054906101000a900460ff161561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612e9b602d913960400191505060405180910390fd5b662386f26fc100003410156108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656e64206d6f7265207468616e20302e3031204554480000000081525060200191505060405180910390fd5b6729a2241af62c0000341115610939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e206f6e6c792073656e642033204554482e000000000000000081525060200191505060405180910390fd5b680821ab0d4414980000600754106109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4861726420436170207265616368656420617420313530204554482e0000000081525060200191505060405180910390fd5b680821ab0d44149800006109d8600754346125f990919063ffffffff16565b1115610a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f486172642043617020697320313530204554482e00000000000000000000000081525060200191505060405180910390fd5b6729a2241af62c0000610aa734600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f990919063ffffffff16565b1115610b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e206f6e6c792073656e642033204554482e000000000000000081525060200191505060405180910390fd5b6000610b326103093461268190919063ffffffff16565b905080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610bbe57600080fd5b505afa158015610bd2573d6000803e3d6000fd5b505050506040513d6020811015610be857600080fd5b81019080805190602001909291905050501015610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e576021913960400191505060405180910390fd5b610ca234600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cfa816003546125f990919063ffffffff16565b600381905550610d15346007546125f990919063ffffffff16565b600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050506040513d6020811015610dd857600080fd5b810190808051906020019092919050505050506001600081905550565b600460039054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6001600460036101000a81548160ff021916908315150217905550565b60085481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6000600460036101000a81548160ff021916908315150217905550565b60065481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e156021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900460ff1681565b600460009054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460019054906101000a900460ff161561135a57600080fd5b6000611383606461137560014761268190919063ffffffff16565b61270790919063ffffffff16565b905060006113ae60646113a060014761268190919063ffffffff16565b61270790919063ffffffff16565b905060006113d960646113cb60014761268190919063ffffffff16565b61270790919063ffffffff16565b905073de87ea52cd67a32ec71d1a9817856f532b3145bf73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611435573d6000803e3d6000fd5b5073635bf673db15bd80846ed9ed0091d7b308b86d9d73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611490573d6000803e3d6000fd5b50736fe00946dfa366360b8bb02a68d5536d8d92d48873ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114eb573d6000803e3d6000fd5b506001600460016101000a81548160ff02191690831515021790555061150f612751565b505050565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506001600460026101000a81548160ff0219169083151502179055506001600460006101000a81548160ff0219169083151502179055506001600081905550565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166349bd5a5e6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b505050506040513d60208110156117ef57600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118d057600080fd5b505afa1580156118e4573d6000803e3d6000fd5b505050506040513d60208110156118fa57600080fd5b81019080805190602001909291905050509050600060065490508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b37317e00383a843a9922bca3b280c0ade9f8ba48449846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561199957600080fd5b505af11580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b8101908080519060200190929190505050507317e00383a843a9922bca3b280c0ade9f8ba4844973ffffffffffffffffffffffffffffffffffffffff166399c6d2de6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518563ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200193505050506000604051808303818588803b158015611a8557600080fd5b505af1158015611a99573d6000803e3d6000fd5b5050505050611ab3826008546125f990919063ffffffff16565b600881905550505050565b60035481565b600460029054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600460019054906101000a900460ff16611c3457600080fd5b600954421015611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74207769746864726177207965740000000000000000000000000081525060200191505060405180910390fd5b60006901a5978e47b024e4000090506000611cd160038361270790919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73de87ea52cd67a32ec71d1a9817856f532b3145bf836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d7a57600080fd5b505af1158015611d8e573d6000803e3d6000fd5b505050506040513d6020811015611da457600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73635bf673db15bd80846ed9ed0091d7b308b86d9d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e5d57600080fd5b505af1158015611e71573d6000803e3d6000fd5b505050506040513d6020811015611e8757600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb736fe00946dfa366360b8bb02a68d5536d8d92d488836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f4057600080fd5b505af1158015611f54573d6000803e3d6000fd5b505050506040513d6020811015611f6a57600080fd5b810190808051906020019092919050505050611f92620d2f00426125f990919063ffffffff16565b60098190555050506001600081905550565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b7317e00383a843a9922bca3b280c0ade9f8ba4844973ffffffffffffffffffffffffffffffffffffffff16639e281a98600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561210e57600080fd5b505af1158015612122573d6000803e3d6000fd5b5050505050565b600a5481565b600260005414156121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e857600080fd5b60048054906101000a900460ff161561220057600080fd5b600460029054906101000a900460ff168061221d5750600a544210155b61228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f43616e6e6f7420726566756e640000000000000000000000000000000000000081525060200191505060405180910390fd5b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612363573d6000803e3d6000fd5b5050506001600081905550565b60095481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6006544210156124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752063616e6e6f742077697468647261772079657400000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b505050506040513d602081101561256e57600080fd5b8101908080519060200190929190505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600080828401905083811015612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156126945760009050612701565b60008284029050828482816126a557fe5b04146126fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e366021913960400191505060405180910390fd5b809150505b92915050565b600061274983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c44565b905092915050565b6000479050600061276d6101f44761268190919063ffffffff16565b905060006128636901a5978e47b024e4000061285584600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561280c57600080fd5b505afa158015612820573d6000803e3d6000fd5b505050506040513d602081101561283657600080fd5b8101908080519060200190929190505050612d0a90919063ffffffff16565b612d0a90919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663647af8e66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128cf57600080fd5b505af11580156128e3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561298e57600080fd5b505af11580156129a2573d6000803e3d6000fd5b505050506040513d60208110156129b857600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71984600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685868830426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050506040513d6060811015612ad257600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050506000811115612bf557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612bb857600080fd5b505af1158015612bcc573d6000803e3d6000fd5b505050506040513d6020811015612be257600080fd5b8101908080519060200190929190505050505b60016004806101000a81548160ff021916908315150217905550600460009054906101000a900460ff16612c3f576001600460006101000a81548160ff0219169083151502179055505b505050565b60008083118290612cf0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cb5578082015181840152602081019050612c9a565b50505050905090810190601f168015612ce25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cfc57fe5b049050809150509392505050565b6000612d4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d54565b905092915050565b6000838311158290612e01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612dc6578082015181840152602081019050612dab565b50505050905090810190601f168015612df35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe596f752063616e20736574207468652061646472657373206f6e6c79206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e747261637450726573616c65206973205061757365642c20446f206e6f742073656e64204554482e50726573616c652073746f7070656420627920636f6e74726163742c20646f206e6f742073656e64204554482ea2646970667358221220ba7124b596f8482c2027d6cd987a5770c966baca78cc61acc7b9c0122edb574b64736f6c63430007050033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063724b6f43116100d1578063b2d5ae441161008a578063cbf4efa111610064578063cbf4efa114610513578063d0febe4c14610578578063d7443eba14610582578063eca38e0c146105c357610179565b8063b2d5ae4414610476578063b4f5d0031461048d578063bd05fb75146104b857610179565b8063724b6f431461038a578063732783ac146103a15780638746475a146103cc578063953b7ef8146103f95780639876fdfa146104105780639b0ac9b01461044b57610179565b806316f0115b1161012357806316f0115b1461028057806328d2bc91146102c15780632f334652146103025780633f683b6a1461032f578063463f5b921461035c5780635d7f5cdb1461037357610179565b806304549d6f1461017e57806304c98b2b146101ab578063052c30bc146101c2578063070f5c09146101ed57806311e453f914610204578063144fa6d71461022f57610179565b36610179576101776105ee565b005b600080fd5b34801561018a57600080fd5b50610193610df5565b60405180821515815260200191505060405180910390f35b3480156101b757600080fd5b506101c0610e08565b005b3480156101ce57600080fd5b506101d7610ee8565b6040518082815260200191505060405180910390f35b3480156101f957600080fd5b50610202610eee565b005b34801561021057600080fd5b50610219610fce565b6040518082815260200191505060405180910390f35b34801561023b57600080fd5b5061027e6004803603602081101561025257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd4565b005b34801561028c57600080fd5b5061029561120b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102cd57600080fd5b506102d6611231565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561030e57600080fd5b50610317611257565b60405180821515815260200191505060405180910390f35b34801561033b57600080fd5b5061034461126a565b60405180821515815260200191505060405180910390f35b34801561036857600080fd5b5061037161127d565b005b34801561037f57600080fd5b50610388611514565b005b34801561039657600080fd5b5061039f611698565b005b3480156103ad57600080fd5b506103b6611abe565b6040518082815260200191505060405180910390f35b3480156103d857600080fd5b506103e1611ac4565b60405180821515815260200191505060405180910390f35b34801561040557600080fd5b5061040e611ad7565b005b34801561041c57600080fd5b506104496004803603602081101561043357600080fd5b8101908080359060200190929190505050611fa4565b005b34801561045757600080fd5b50610460612129565b6040518082815260200191505060405180910390f35b34801561048257600080fd5b5061048b61212f565b005b34801561049957600080fd5b506104a2612370565b6040518082815260200191505060405180910390f35b3480156104c457600080fd5b50610511600480360360408110156104db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612376565b005b34801561051f57600080fd5b506105626004803603602081101561053657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612584565b6040518082815260200191505060405180910390f35b6105806105ee565b005b34801561058e57600080fd5b506105976125cd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105cf57600080fd5b506105d86125f3565b6040518082815260200191505060405180910390f35b60026000541415610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a757600080fd5b60011515600460039054906101000a900460ff16151514610713576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612e786023913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d61696e20636f6e74726163742061646472657373206e6f74207365742e000081525060200191505060405180910390fd5b600460009054906101000a900460ff161561083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612e9b602d913960400191505060405180910390fd5b662386f26fc100003410156108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d7573742073656e64206d6f7265207468616e20302e3031204554480000000081525060200191505060405180910390fd5b6729a2241af62c0000341115610939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e206f6e6c792073656e642033204554482e000000000000000081525060200191505060405180910390fd5b680821ab0d4414980000600754106109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4861726420436170207265616368656420617420313530204554482e0000000081525060200191505060405180910390fd5b680821ab0d44149800006109d8600754346125f990919063ffffffff16565b1115610a4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f486172642043617020697320313530204554482e00000000000000000000000081525060200191505060405180910390fd5b6729a2241af62c0000610aa734600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f990919063ffffffff16565b1115610b1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f596f752063616e206f6e6c792073656e642033204554482e000000000000000081525060200191505060405180910390fd5b6000610b326103093461268190919063ffffffff16565b905080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610bbe57600080fd5b505afa158015610bd2573d6000803e3d6000fd5b505050506040513d6020811015610be857600080fd5b81019080805190602001909291905050501015610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e576021913960400191505060405180910390fd5b610ca234600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f990919063ffffffff16565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cfa816003546125f990919063ffffffff16565b600381905550610d15346007546125f990919063ffffffff16565b600781905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b505050506040513d6020811015610dd857600080fd5b810190808051906020019092919050505050506001600081905550565b600460039054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6001600460036101000a81548160ff021916908315150217905550565b60085481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6000600460036101000a81548160ff021916908315150217905550565b60065481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e156021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160008190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900460ff1681565b600460009054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600460019054906101000a900460ff161561135a57600080fd5b6000611383606461137560014761268190919063ffffffff16565b61270790919063ffffffff16565b905060006113ae60646113a060014761268190919063ffffffff16565b61270790919063ffffffff16565b905060006113d960646113cb60014761268190919063ffffffff16565b61270790919063ffffffff16565b905073de87ea52cd67a32ec71d1a9817856f532b3145bf73ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611435573d6000803e3d6000fd5b5073635bf673db15bd80846ed9ed0091d7b308b86d9d73ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611490573d6000803e3d6000fd5b50736fe00946dfa366360b8bb02a68d5536d8d92d48873ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156114eb573d6000803e3d6000fd5b506001600460016101000a81548160ff02191690831515021790555061150f612751565b505050565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055506001600460026101000a81548160ff0219169083151502179055506001600460006101000a81548160ff0219169083151502179055506001600081905550565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166349bd5a5e6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b505050506040513d60208110156117ef57600080fd5b8101908080519060200190929190505050600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156118d057600080fd5b505afa1580156118e4573d6000803e3d6000fd5b505050506040513d60208110156118fa57600080fd5b81019080805190602001909291905050509050600060065490508273ffffffffffffffffffffffffffffffffffffffff1663095ea7b37317e00383a843a9922bca3b280c0ade9f8ba48449846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561199957600080fd5b505af11580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b8101908080519060200190929190505050507317e00383a843a9922bca3b280c0ade9f8ba4844973ffffffffffffffffffffffffffffffffffffffff166399c6d2de6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518563ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200193505050506000604051808303818588803b158015611a8557600080fd5b505af1158015611a99573d6000803e3d6000fd5b5050505050611ab3826008546125f990919063ffffffff16565b600881905550505050565b60035481565b600460029054906101000a900460ff1681565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b60026000541415611c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600081905550600460019054906101000a900460ff16611c3457600080fd5b600954421015611cac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43616e6e6f74207769746864726177207965740000000000000000000000000081525060200191505060405180910390fd5b60006901a5978e47b024e4000090506000611cd160038361270790919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73de87ea52cd67a32ec71d1a9817856f532b3145bf836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611d7a57600080fd5b505af1158015611d8e573d6000803e3d6000fd5b505050506040513d6020811015611da457600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73635bf673db15bd80846ed9ed0091d7b308b86d9d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611e5d57600080fd5b505af1158015611e71573d6000803e3d6000fd5b505050506040513d6020811015611e8757600080fd5b810190808051906020019092919050505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb736fe00946dfa366360b8bb02a68d5536d8d92d488836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611f4057600080fd5b505af1158015611f54573d6000803e3d6000fd5b505050506040513d6020811015611f6a57600080fd5b810190808051906020019092919050505050611f92620d2f00426125f990919063ffffffff16565b60098190555050506001600081905550565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612067576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b7317e00383a843a9922bca3b280c0ade9f8ba4844973ffffffffffffffffffffffffffffffffffffffff16639e281a98600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561210e57600080fd5b505af1158015612122573d6000803e3d6000fd5b5050505050565b600a5481565b600260005414156121a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026000819055503273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e857600080fd5b60048054906101000a900460ff161561220057600080fd5b600460029054906101000a900460ff168061221d5750600a544210155b61228f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f43616e6e6f7420726566756e640000000000000000000000000000000000000081525060200191505060405180910390fd5b60003390506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612363573d6000803e3d6000fd5b5050506001600081905550565b60095481565b600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612439576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f596f7520617265206e6f7420746865206f776e6572000000000000000000000081525060200191505060405180910390fd5b6006544210156124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752063616e6e6f742077697468647261772079657400000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460059054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b505050506040513d602081101561256e57600080fd5b8101908080519060200190929190505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600080828401905083811015612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808314156126945760009050612701565b60008284029050828482816126a557fe5b04146126fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612e366021913960400191505060405180910390fd5b809150505b92915050565b600061274983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c44565b905092915050565b6000479050600061276d6101f44761268190919063ffffffff16565b905060006128636901a5978e47b024e4000061285584600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561280c57600080fd5b505afa158015612820573d6000803e3d6000fd5b505050506040513d602081101561283657600080fd5b8101908080519060200190929190505050612d0a90919063ffffffff16565b612d0a90919063ffffffff16565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663647af8e66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156128cf57600080fd5b505af11580156128e3573d6000803e3d6000fd5b50505050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561298e57600080fd5b505af11580156129a2573d6000803e3d6000fd5b505050506040513d60208110156129b857600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71984600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685868830426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050506040513d6060811015612ad257600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050506000811115612bf557600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612bb857600080fd5b505af1158015612bcc573d6000803e3d6000fd5b505050506040513d6020811015612be257600080fd5b8101908080519060200190929190505050505b60016004806101000a81548160ff021916908315150217905550600460009054906101000a900460ff16612c3f576001600460006101000a81548160ff0219169083151502179055505b505050565b60008083118290612cf0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612cb5578082015181840152602081019050612c9a565b50505050905090810190601f168015612ce25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cfc57fe5b049050809150509392505050565b6000612d4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612d54565b905092915050565b6000838311158290612e01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612dc6578082015181840152602081019050612dab565b50505050905090810190601f168015612df35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fe596f752063616e20736574207468652061646472657373206f6e6c79206f6e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e747261637450726573616c65206973205061757365642c20446f206e6f742073656e64204554482e50726573616c652073746f7070656420627920636f6e74726163742c20646f206e6f742073656e64204554482ea2646970667358221220ba7124b596f8482c2027d6cd987a5770c966baca78cc61acc7b9c0122edb574b64736f6c63430007050033

Deployed Bytecode Sourcemap

3993:6614:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5711:11;:9;:11::i;:::-;3993:6614;;;;;4616:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7628:84;;;;;;;;;;;;;:::i;:::-;;5208:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7725:85;;;;;;;;;;;;;:::i;:::-;;5094:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7442:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5062:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4099:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4536:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4500:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9036:475;;;;;;;;;;;;;:::i;:::-;;5748:135;;;;;;;;;;;;;:::i;:::-;;6332:496;;;;;;;;;;;;;:::i;:::-;;4469:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4574:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6972:462;;;;;;;;;;;;;:::i;:::-;;6840:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5297:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5895:425;;;;;;;;;;;;;:::i;:::-;;5251:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10350:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8911:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7818:1082;;;:::i;:::-;;4075:17;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5137:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7818:1082;3045:1;3642:7;;:19;;3634:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:1;3775:7;:18;;;;7900:9:::1;7886:23;;:10;:23;;;7878:32;;;::::0;::::1;;7947:4;7929:22;;:14;;;;;;;;;;;:22;;;7921:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8032:1;8010:25;;:3;;;;;;;;;;;:25;;;;8002:68;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8090:9;;;;;;;;;;;8089:10;8081:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8181:10;8168:9;:23;;8160:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8256:7;8243:9;:20;;8235:57;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8321:9;8311:7;;:19;8303:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8409:9;8383:22;8397:7;;8383:9;:13;;:22;;;;:::i;:::-;:35;;8374:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8501:7;8462:35;8487:9;8462:8;:20;8471:10;8462:20;;;;;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;:46;;8454:83;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;8548:14;8565:27;5198:3;8565:9;:13;;:27;;;;:::i;:::-;8548:44;;8643:6;8611:3;;;;;;;;;;;:13;;;8633:4;8611:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:38;;8603:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8721:35;8746:9;8721:8;:20;8730:10;8721:20;;;;;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;8698:8;:20;8707:10;8698:20;;;;;;;;;;;;;;;:58;;;;8782:24;8799:6;8782:12;;:16;;:24;;;;:::i;:::-;8767:12;:39;;;;8827:22;8839:9;8827:7;;:11;;:22;;;;:::i;:::-;8817:7;:32;;;;8860:3;;;;;;;;;;;:12;;;8873:10;8885:6;8860:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;3806:1;3001::::0;3954:7;:22;;;;7818:1082::o;4616:34::-;;;;;;;;;;;;;:::o;7628:84::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7700:4:::1;7683:14;;:21;;;;;;;;;;;;;;;;;;7628:84::o:0;5208:36::-;;;;:::o;7725:85::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7797:5:::1;7780:14;;:22;;;;;;;;;;;;;;;;;;7725:85::o:0;5094:30::-;;;;:::o;7442:174::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:1:::1;3642:7;;:19;;3634:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3045:1;3775:7;:18;;;;7546:1:::2;7524:25;;:3;;;;;;;;;;;:25;;;7516:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7604:4;7598:3;;:10;;;;;;;;;;;;;;;;;;3001:1:::1;3954:7;:22;;;;7442:174:::0;:::o;5062:19::-;;;;;;;;;;;;;:::o;4099:69::-;;;;;;;;;;;;;:::o;4536:31::-;;;;;;;;;;;;;:::o;4500:29::-;;;;;;;;;;;;;:::o;9036:475::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9114:11:::1;;;;;;;;;;;9113:12;9105:21;;;::::0;::::1;;9136:17;9156:37;9189:3;9156:28;9182:1;9156:21;:25;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;9136:57;;9204:18;9225:37;9258:3;9225:28;9251:1;9225:21;:25;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;9204:58;;9273:18;9294:37;9327:3;9294:28;9320:1;9294:21;:25;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;9273:58;;4796:42;9342:15;;:26;9358:9;9342:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4892:42;9378:15;;:27;9394:10;9378:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;4987:42;9415:15;;:27;9431:10;9415:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9466:4;9452:11;;:18;;;;;;;;;;;;;;;;;;9489:14;:12;:14::i;:::-;5473:1;;;9036:475::o:0;5748:135::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:1:::1;3642:7;;:19;;3634:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3045:1;3775:7;:18;;;;5844:4:::2;5826:15;;:22;;;;;;;;;;;;;;;;;;5871:4;5859:9;;:16;;;;;;;;;;;;;;;;;;3001:1:::1;3954:7;:22;;;;5748:135::o:0;6332:496::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6398:3:::1;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;6391:4;;:26;;;;;;;;;;;;;;;;;;6428:22;6460:4;;;;;;;;;;;6428:37;;6476:24;6503:15;:25;;;6537:4;6503:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;6476:67;;6554:18;6575:15;;6554:36;;6601:15;:23;;;4413:42;6644:16;6601:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;4413:42;6674:21;;;6703:1;6707:4;;;;;;;;;;;6713:16;6731:10;6674:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;6777:43;6803:16;6777:21;;:25;;:43;;;;:::i;:::-;6753:21;:67;;;;5473:1;;;6332:496::o:0;4469:24::-;;;;:::o;4574:35::-;;;;;;;;;;;;;:::o;6972:462::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:1:::1;3642:7;;:19;;3634:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3045:1;3775:7;:18;;;;7053:11:::2;;;;;;;;;;;7045:20;;;::::0;::::2;;7103:24;;7084:15;:43;;7076:75;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;7162:20;7185:10;7162:33;;7206:14;7223:19;7240:1;7223:12;:16;;:19;;;;:::i;:::-;7206:36;;7254:3;;;;;;;;;;;:12;;;4796:42;7275:6;7254:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;7293:3;;;;;;;;;;;:12;;;4892:42;7314:6;7293:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;7332:3;;;;;;;;;;;:12;;;4987:42;7353:6;7332:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;7398;7418:7;7398:15;:19;;:28;;;;:::i;:::-;7371:24;:55;;;;3806:1;;3001::::1;3954:7;:22;;;;6972:462::o:0;6840:120::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4413:42:::1;6916:22;;;6939:4;;;;;;;;;;;6945:6;6916:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6840:120:::0;:::o;5297:25::-;;;;:::o;5895:425::-;3045:1;3642:7;;:19;;3634:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:1;3775:7;:18;;;;5971:9:::1;5957:23;;:10;:23;;;5949:32;;;::::0;::::1;;6001:11;::::0;::::1;;;;;;;;6000:12;5992:21;;;::::0;::::1;;6100:15;;;;;;;;;;;:48;;;;6138:10;;6119:15;:29;;6100:48;6092:73;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6176:20;6199:10;6176:33;;6220:14;6237:8;:14;6246:4;6237:14;;;;;;;;;;;;;;;;6220:31;;6279:1;6262:8;:14;6271:4;6262:14;;;;;;;;;;;;;;;:18;;;;6291:4;:13;;:21;6305:6;6291:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3806:1;;3001::::0;3954:7;:22;;;;5895:425::o;5251:39::-;;;;:::o;10350:252::-;5431:5;;;;;;;;;;;5417:19;;:10;:19;;;5409:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10491:15:::1;;10472;:34;;10464:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10552:12;10545:29;;;10575:5;;;;;;;;;;;10582:11;10545:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;10350:252:::0;;:::o;8911:113::-;8979:4;9002:8;:14;9011:4;9002:14;;;;;;;;;;;;;;;;8995:21;;8911:113;;;:::o;4075:17::-;;;;;;;;;;;;;:::o;5137:22::-;;;;:::o;10876:181::-;10934:7;10954:9;10970:1;10966;:5;10954:17;;10995:1;10990;:6;;10982:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11048:1;11041:8;;;10876:181;;;;:::o;12230:471::-;12288:7;12538:1;12533;:6;12529:47;;;12563:1;12556:8;;;;12529:47;12588:9;12604:1;12600;:5;12588:17;;12633:1;12628;12624;:5;;;;;;:10;12616:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12692:1;12685:8;;;12230:471;;;;;:::o;13177:132::-;13235:7;13262:39;13266:1;13269;13262:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;13255:46;;13177:132;;;;:::o;9527:811::-;9571:11;9585:21;9571:35;;9617:24;9644:30;9670:3;9644:21;:25;;:30;;;;:::i;:::-;9617:57;;9685:20;9708:66;4715:10;9708:50;9741:16;9708:3;;;;;;;;;;;:13;;;9730:4;9708:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:32;;:50;;;;:::i;:::-;:54;;:66;;;;:::i;:::-;9685:89;;9785:3;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9824:3;;;;;;;;;;;:11;;;4211:42;9854:16;9824:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4211:42;9882:23;;;9924:3;9962;;;;;;;;;;;9981:16;10012;10043:3;10069:4;10089:15;9882:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10153:1;10138:12;:16;10134:83;;;10169:3;;;;;;;;;;;:12;;;10182:9;;;;;;;;;;;10193:12;10169:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10134:83;10249:4;10235:11;;:18;;;;;;;;;;;;;;;;;;10277:9;;;;;;;;;;;10273:44;;10313:4;10301:9;;:16;;;;;;;;;;;;;;;;;;10273:44;9527:811;;;:::o;13805:278::-;13891:7;13923:1;13919;:5;13926:12;13911:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13950:9;13966:1;13962;:5;;;;;;13950:17;;14074:1;14067:8;;;13805:278;;;;;:::o;11340:136::-;11398:7;11425:43;11429:1;11432;11425:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11418:50;;11340:136;;;;:::o;11779:192::-;11865:7;11898:1;11893;:6;;11901:12;11885:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11925:9;11941:1;11937;:5;11925:17;;11962:1;11955:8;;;11779:192;;;;;:::o

Swarm Source

ipfs://ba7124b596f8482c2027d6cd987a5770c966baca78cc61acc7b9c0122edb574b

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
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.