ETH Price: $3,131.01 (-5.56%)
 

Overview

ETH Balance

195 wei

Eth Value

Less Than $0.01 (@ $3,131.01/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Cancel And Trans...118803032021-02-18 10:32:501439 days ago1613644370IN
0xd40d2d46...F2469Edf1
0 ETH0.04171267143
Claim Tokens117688762021-02-01 7:05:021456 days ago1612163102IN
0xd40d2d46...F2469Edf1
0 ETH0.02416969106
Claim Tokens117651862021-01-31 17:38:161456 days ago1612114696IN
0xd40d2d46...F2469Edf1
0 ETH0.02636976120
Claim Tokens117641952021-01-31 13:58:121457 days ago1612101492IN
0xd40d2d46...F2469Edf1
0 ETH0.02856724130.00000025
Claim Tokens117626962021-01-31 8:31:361457 days ago1612081896IN
0xd40d2d46...F2469Edf1
0 ETH0.0180193382
Claim Tokens117626432021-01-31 8:18:511457 days ago1612081131IN
0xd40d2d46...F2469Edf1
0 ETH0.0167008476
Claim Tokens117575592021-01-30 13:27:021458 days ago1612013222IN
0xd40d2d46...F2469Edf1
0 ETH0.02219454101
Claim Tokens117573512021-01-30 12:42:501458 days ago1612010570IN
0xd40d2d46...F2469Edf1
0 ETH0.0125695857.2
Claim Tokens117571212021-01-30 11:58:511458 days ago1612007931IN
0xd40d2d46...F2469Edf1
0 ETH0.0151626169.00000156
Claim Tokens117570382021-01-30 11:37:541458 days ago1612006674IN
0xd40d2d46...F2469Edf1
0 ETH0.0188983286
Claim Tokens117568042021-01-30 10:45:591458 days ago1612003559IN
0xd40d2d46...F2469Edf1
0 ETH0.0162613574
Transfer117565652021-01-30 9:55:241458 days ago1612000524IN
0xd40d2d46...F2469Edf1
0.03 ETH0.0021100
Transfer117565582021-01-30 9:53:291458 days ago1612000409IN
0xd40d2d46...F2469Edf1
0.03 ETH0.00163878
Claim Tokens117564072021-01-30 9:19:441458 days ago1611998384IN
0xd40d2d46...F2469Edf1
0 ETH0.016481175
Claim Tokens117563792021-01-30 9:12:461458 days ago1611997966IN
0xd40d2d46...F2469Edf1
0 ETH0.0151626169
Claim Tokens117562542021-01-30 8:41:471458 days ago1611996107IN
0xd40d2d46...F2469Edf1
0 ETH0.0175798480
Claim Tokens117561132021-01-30 8:03:461458 days ago1611993826IN
0xd40d2d46...F2469Edf1
0 ETH0.0131848860
Claim Tokens117553922021-01-30 5:25:281458 days ago1611984328IN
0xd40d2d46...F2469Edf1
0 ETH0.0174815784
Claim Tokens117551852021-01-30 4:43:451458 days ago1611981825IN
0xd40d2d46...F2469Edf1
0 ETH0.0114462755
Claim Tokens117551712021-01-30 4:41:321458 days ago1611981692IN
0xd40d2d46...F2469Edf1
0 ETH0.0120706158.00000145
Claim Tokens117551442021-01-30 4:36:491458 days ago1611981409IN
0xd40d2d46...F2469Edf1
0 ETH0.017897886
Claim Tokens117551362021-01-30 4:34:321458 days ago1611981272IN
0xd40d2d46...F2469Edf1
0 ETH0.0147760971
Claim Tokens117551242021-01-30 4:31:151458 days ago1611981075IN
0xd40d2d46...F2469Edf1
0 ETH0.02143574103
Claim Tokens117551212021-01-30 4:30:371458 days ago1611981037IN
0xd40d2d46...F2469Edf1
0 ETH0.0315917151.80000023
Claim Tokens117549372021-01-30 3:42:061458 days ago1611978126IN
0xd40d2d46...F2469Edf1
0 ETH0.0201870597
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
117688762021-02-01 7:05:021456 days ago1612163102
0xd40d2d46...F2469Edf1
0.73605947 ETH
117651862021-01-31 17:38:161456 days ago1612114696
0xd40d2d46...F2469Edf1
0.73605947 ETH
117641952021-01-31 13:58:121457 days ago1612101492
0xd40d2d46...F2469Edf1
0.73605947 ETH
117626962021-01-31 8:31:361457 days ago1612081896
0xd40d2d46...F2469Edf1
0.73605947 ETH
117626432021-01-31 8:18:511457 days ago1612081131
0xd40d2d46...F2469Edf1
0.73605947 ETH
117575592021-01-30 13:27:021458 days ago1612013222
0xd40d2d46...F2469Edf1
0.73605947 ETH
117573512021-01-30 12:42:501458 days ago1612010570
0xd40d2d46...F2469Edf1
0.73605947 ETH
117571212021-01-30 11:58:511458 days ago1612007931
0xd40d2d46...F2469Edf1
0.73605947 ETH
117570382021-01-30 11:37:541458 days ago1612006674
0xd40d2d46...F2469Edf1
0.73605947 ETH
117568042021-01-30 10:45:591458 days ago1612003559
0xd40d2d46...F2469Edf1
0.73605947 ETH
117564072021-01-30 9:19:441458 days ago1611998384
0xd40d2d46...F2469Edf1
0.73605947 ETH
117563792021-01-30 9:12:461458 days ago1611997966
0xd40d2d46...F2469Edf1
0.73605947 ETH
117562542021-01-30 8:41:471458 days ago1611996107
0xd40d2d46...F2469Edf1
0.73605947 ETH
117561132021-01-30 8:03:461458 days ago1611993826
0xd40d2d46...F2469Edf1
0.73605947 ETH
117553922021-01-30 5:25:281458 days ago1611984328
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551852021-01-30 4:43:451458 days ago1611981825
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551712021-01-30 4:41:321458 days ago1611981692
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551442021-01-30 4:36:491458 days ago1611981409
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551362021-01-30 4:34:321458 days ago1611981272
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551242021-01-30 4:31:151458 days ago1611981075
0xd40d2d46...F2469Edf1
0.73605947 ETH
117551212021-01-30 4:30:371458 days ago1611981037
0xd40d2d46...F2469Edf1
0.73605947 ETH
117549372021-01-30 3:42:061458 days ago1611978126
0xd40d2d46...F2469Edf1
0.73605947 ETH
117547642021-01-30 2:59:091458 days ago1611975549
0xd40d2d46...F2469Edf1
0.73605947 ETH
117546142021-01-30 2:25:481458 days ago1611973548
0xd40d2d46...F2469Edf1
0.73605947 ETH
117545722021-01-30 2:16:281458 days ago1611972988
0xd40d2d46...F2469Edf1
0.73605947 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SafuInvestmentsPresale

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: SafuInvestmentsPresale.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

import "./SafeMath.sol";
import "./IERC20.sol";

interface IUniswapV2Router02 {
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );
}

contract SafuInvestmentsPresale {
    using SafeMath for uint256;

    IUniswapV2Router02 private constant uniswapRouter =
    IUniswapV2Router02(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));

    address payable internal safuFactoryAddress; // address that creates the presale contracts
    address payable public safuDevAddress; // address where dev fees will be transferred to
    address public safuLiqLockAddress; // address where LP tokens will be locked

    IERC20 public token; // token that will be sold
    address payable public presaleCreatorAddress; // address where percentage of invested wei will be transferred to
    address public unsoldTokensDumpAddress; // address where unsold tokens will be transferred to

    mapping(address => uint256) public investments; // total wei invested per address
    mapping(address => bool) public whitelistedAddresses; // addresses eligible in presale
    mapping(address => bool) public claimed; // if true, it means investor already claimed the tokens or got a refund

    uint256 private safuDevFeePercentage; // dev fee to support the development of Safu Investments
    uint256 private safuMinDevFeeInWei; // minimum fixed dev fee to support the development of Safu Investments
    uint256 public safuId; // used for fetching presale without referencing its address

    uint256 public totalInvestorsCount; // total investors count
    uint256 public presaleCreatorClaimWei; // wei to transfer to presale creator per investor claim
    uint256 public presaleCreatorClaimTime; // time when presale creator can collect funds raise
    uint256 public totalCollectedWei; // total wei collected
    uint256 public totalTokens; // total tokens to be sold
    uint256 public tokensLeft; // available tokens to be sold
    uint256 public tokenPriceInWei; // token presale wei price per 1 token
    uint256 public hardCapInWei; // maximum wei amount that can be invested in presale
    uint256 public softCapInWei; // minimum wei amount to invest in presale, if not met, invested wei will be returned
    uint256 public maxInvestInWei; // maximum wei amount that can be invested per wallet address
    uint256 public minInvestInWei; // minimum wei amount that can be invested per wallet address
    uint256 public openTime; // time when presale starts, investing is allowed
    uint256 public closeTime; // time when presale closes, investing is not allowed
    uint256 public uniListingPriceInWei; // token price when listed in Uniswap
    uint256 public uniLiquidityAddingTime; // time when adding of liquidity in uniswap starts, investors can claim their tokens afterwards
    uint256 public uniLPTokensLockDurationInDays; // how many days after the liquity is added the presale creator can unlock the LP tokens
    uint256 public uniLiquidityPercentageAllocation; // how many percentage of the total invested wei that will be added as liquidity

    bool public uniLiquidityAdded = false; // if true, liquidity is added in Uniswap and lp tokens are locked
    bool public onlyWhitelistedAddressesAllowed = true; // if true, only whitelisted addresses can invest
    bool public safuDevFeesExempted = false; // if true, presale will be exempted from dev fees
    bool public presaleCancelled = false; // if true, investing will not be allowed, investors can withdraw, presale creator can withdraw their tokens

    bytes32 public saleTitle;
    bytes32 public linkTelegram;
    bytes32 public linkTwitter;
    bytes32 public linkDiscord;
    bytes32 public linkWebsite;

    constructor(address _safuFactoryAddress, address _safuDevAddress) public {
        require(_safuFactoryAddress != address(0));
        require(_safuDevAddress != address(0));

        safuFactoryAddress = payable(_safuFactoryAddress);
        safuDevAddress = payable(_safuDevAddress);
    }

    modifier onlySafuDev() {
        require(safuFactoryAddress == msg.sender || safuDevAddress == msg.sender);
        _;
    }

    modifier onlySafuFactory() {
        require(safuFactoryAddress == msg.sender);
        _;
    }

    modifier onlyPresaleCreatorOrSafuFactory() {
        require(
            presaleCreatorAddress == msg.sender || safuFactoryAddress == msg.sender,
            "Not presale creator or factory"
        );
        _;
    }

    modifier onlyPresaleCreator() {
        require(presaleCreatorAddress == msg.sender, "Not presale creator");
        _;
    }

    modifier whitelistedAddressOnly() {
        require(
            !onlyWhitelistedAddressesAllowed || whitelistedAddresses[msg.sender],
            "Address not whitelisted"
        );
        _;
    }

    modifier presaleIsNotCancelled() {
        require(!presaleCancelled, "Cancelled");
        _;
    }

    modifier investorOnly() {
        require(investments[msg.sender] > 0, "Not an investor");
        _;
    }

    modifier notYetClaimedOrRefunded() {
        require(!claimed[msg.sender], "Already claimed or refunded");
        _;
    }

    function setAddressInfo(
        address _presaleCreator,
        address _tokenAddress,
        address _unsoldTokensDumpAddress
    ) external onlySafuFactory {
        require(_presaleCreator != address(0));
        require(_tokenAddress != address(0));
        require(_unsoldTokensDumpAddress != address(0));

        presaleCreatorAddress = payable(_presaleCreator);
        token = IERC20(_tokenAddress);
        unsoldTokensDumpAddress = _unsoldTokensDumpAddress;
    }

    function setGeneralInfo(
        uint256 _totalTokens,
        uint256 _tokenPriceInWei,
        uint256 _hardCapInWei,
        uint256 _softCapInWei,
        uint256 _maxInvestInWei,
        uint256 _minInvestInWei,
        uint256 _openTime,
        uint256 _closeTime
    ) external onlySafuFactory {
        require(_totalTokens > 0);
        require(_tokenPriceInWei > 0);
        require(_openTime > 0);
        require(_closeTime > 0);
        require(_hardCapInWei > 0);

        // Hard cap > (token amount * token price)
        require(_hardCapInWei <= _totalTokens.mul(_tokenPriceInWei));
        // Soft cap > to hard cap
        require(_softCapInWei <= _hardCapInWei);
        //  Min. wei investment > max. wei investment
        require(_minInvestInWei <= _maxInvestInWei);
        // Open time >= close time
        require(_openTime < _closeTime);

        totalTokens = _totalTokens;
        tokensLeft = _totalTokens;
        tokenPriceInWei = _tokenPriceInWei;
        hardCapInWei = _hardCapInWei;
        softCapInWei = _softCapInWei;
        maxInvestInWei = _maxInvestInWei;
        minInvestInWei = _minInvestInWei;
        openTime = _openTime;
        closeTime = _closeTime;
    }

    function setUniswapInfo(
        uint256 _uniListingPriceInWei,
        uint256 _uniLiquidityAddingTime,
        uint256 _uniLPTokensLockDurationInDays,
        uint256 _uniLiquidityPercentageAllocation
    ) external onlySafuFactory {
        require(_uniListingPriceInWei > 0);
        require(_uniLiquidityAddingTime > 0);
        require(_uniLPTokensLockDurationInDays > 0);
        require(_uniLiquidityPercentageAllocation > 0);

        require(closeTime > 0);
        // Listing time < close time
        require(_uniLiquidityAddingTime >= closeTime);

        uniListingPriceInWei = _uniListingPriceInWei;
        uniLiquidityAddingTime = _uniLiquidityAddingTime;
        uniLPTokensLockDurationInDays = _uniLPTokensLockDurationInDays;
        uniLiquidityPercentageAllocation = _uniLiquidityPercentageAllocation;
    }

    function setStringInfo(
        bytes32 _saleTitle,
        bytes32 _linkTelegram,
        bytes32 _linkDiscord,
        bytes32 _linkTwitter,
        bytes32 _linkWebsite
    ) external onlyPresaleCreatorOrSafuFactory {
        saleTitle = _saleTitle;
        linkTelegram = _linkTelegram;
        linkDiscord = _linkDiscord;
        linkTwitter = _linkTwitter;
        linkWebsite = _linkWebsite;
    }

    function setSafuInfo(
        address _safuLiqLockAddress,
        uint256 _safuDevFeePercentage,
        uint256 _safuMinDevFeeInWei,
        uint256 _safuId
    ) external onlySafuDev {
        safuLiqLockAddress = _safuLiqLockAddress;
        safuDevFeePercentage = _safuDevFeePercentage;
        safuMinDevFeeInWei = _safuMinDevFeeInWei;
        safuId = _safuId;
    }

    function setSafuDevFeesExempted(bool _safuDevFeesExempted)
    external
    onlySafuDev
    {
        safuDevFeesExempted = _safuDevFeesExempted;
    }

    function setOnlyWhitelistedAddressesAllowed(bool _onlyWhitelistedAddressesAllowed)
    external
    onlyPresaleCreatorOrSafuFactory
    {
        onlyWhitelistedAddressesAllowed = _onlyWhitelistedAddressesAllowed;
    }

    function addwhitelistedAddresses(address[] calldata _whitelistedAddresses)
    external
    onlyPresaleCreatorOrSafuFactory
    {
        onlyWhitelistedAddressesAllowed = _whitelistedAddresses.length > 0;
        for (uint256 i = 0; i < _whitelistedAddresses.length; i++) {
            whitelistedAddresses[_whitelistedAddresses[i]] = true;
        }
    }

    function getTokenAmount(uint256 _weiAmount)
    internal
    view
    returns (uint256)
    {
        return _weiAmount.mul(1e18).div(tokenPriceInWei);
    }

    function invest()
    public
    payable
    whitelistedAddressOnly
    presaleIsNotCancelled
    {
        require(block.timestamp >= openTime, "Not yet opened");
        require(block.timestamp < closeTime, "Closed");
        require(totalCollectedWei < hardCapInWei, "Hard cap reached");
        require(tokensLeft > 0);
        require(msg.value <= tokensLeft.mul(tokenPriceInWei));
        uint256 totalInvestmentInWei = investments[msg.sender].add(msg.value);
        require(totalInvestmentInWei >= minInvestInWei, "Min investment not reached");
        require(maxInvestInWei == 0 || totalInvestmentInWei <= maxInvestInWei, "Max investment reached");

        if (investments[msg.sender] == 0) {
            totalInvestorsCount = totalInvestorsCount.add(1);
        }

        totalCollectedWei = totalCollectedWei.add(msg.value);
        investments[msg.sender] = totalInvestmentInWei;
        tokensLeft = tokensLeft.sub(getTokenAmount(msg.value));
    }

    receive() external payable {
        invest();
    }

    function addLiquidityAndLockLPTokens() external presaleIsNotCancelled {
        require(totalCollectedWei > 0);
        require(!uniLiquidityAdded, "Liquidity already added");
        require(
            !onlyWhitelistedAddressesAllowed || whitelistedAddresses[msg.sender] || msg.sender == presaleCreatorAddress,
            "Not whitelisted or not presale creator"
        );

        if (totalCollectedWei == hardCapInWei && block.timestamp < uniLiquidityAddingTime) {
            require(msg.sender == presaleCreatorAddress, "Not presale creator");
        } else if (block.timestamp >= uniLiquidityAddingTime) {
            require(
                msg.sender == presaleCreatorAddress || investments[msg.sender] > 0,
                "Not presale creator or investor"
            );
            require(totalCollectedWei >= softCapInWei, "Soft cap not reached");
        } else {
            revert("Liquidity cannot be added yet");
        }

        uniLiquidityAdded = true;

        uint256 finalTotalCollectedWei = totalCollectedWei;
        uint256 safuDevFeeInWei;
        if (!safuDevFeesExempted) {
            uint256 pctDevFee = finalTotalCollectedWei.mul(safuDevFeePercentage).div(100);
            safuDevFeeInWei = pctDevFee > safuMinDevFeeInWei || safuMinDevFeeInWei >= finalTotalCollectedWei
            ? pctDevFee
            : safuMinDevFeeInWei;
        }
        if (safuDevFeeInWei > 0) {
            finalTotalCollectedWei = finalTotalCollectedWei.sub(safuDevFeeInWei);
            safuDevAddress.transfer(safuDevFeeInWei);
        }

        uint256 liqPoolEthAmount = finalTotalCollectedWei.mul(uniLiquidityPercentageAllocation).div(100);
        uint256 liqPoolTokenAmount = liqPoolEthAmount.mul(1e18).div(uniListingPriceInWei);

        token.approve(address(uniswapRouter), liqPoolTokenAmount);

        uniswapRouter.addLiquidityETH{value : liqPoolEthAmount}(
            address(token),
            liqPoolTokenAmount,
            0,
            0,
            safuLiqLockAddress,
            block.timestamp.add(15 minutes)
        );

        uint256 unsoldTokensAmount = token.balanceOf(address(this)).sub(getTokenAmount(totalCollectedWei));
        if (unsoldTokensAmount > 0) {
            token.transfer(unsoldTokensDumpAddress, unsoldTokensAmount);
        }

        presaleCreatorClaimWei = address(this).balance.mul(1e18).div(totalInvestorsCount.mul(1e18));
        presaleCreatorClaimTime = block.timestamp + 1 days;
    }

    function claimTokens()
    external
    whitelistedAddressOnly
    presaleIsNotCancelled
    investorOnly
    notYetClaimedOrRefunded
    {
        require(uniLiquidityAdded, "Liquidity not yet added");

        claimed[msg.sender] = true; // make sure this goes first before transfer to prevent reentrancy
        token.transfer(msg.sender, getTokenAmount(investments[msg.sender]));

        uint256 balance = address(this).balance;
        if (balance > 0) {
            uint256 funds = presaleCreatorClaimWei > balance ? balance : presaleCreatorClaimWei;
            presaleCreatorAddress.transfer(funds);
        }
    }

    function getRefund()
    external
    whitelistedAddressOnly
    investorOnly
    notYetClaimedOrRefunded
    {
        if (!presaleCancelled) {
            require(block.timestamp >= openTime, "Not yet opened");
            require(block.timestamp >= closeTime, "Not yet closed");
            require(softCapInWei > 0, "No soft cap");
            require(totalCollectedWei < softCapInWei, "Soft cap reached");
        }

        claimed[msg.sender] = true; // make sure this goes first before transfer to prevent reentrancy
        uint256 investment = investments[msg.sender];
        uint256 presaleBalance =  address(this).balance;
        require(presaleBalance > 0);

        if (investment > presaleBalance) {
            investment = presaleBalance;
        }

        if (investment > 0) {
            msg.sender.transfer(investment);
        }
    }

    function cancelAndTransferTokensToPresaleCreator() external {
        if (!uniLiquidityAdded && presaleCreatorAddress != msg.sender && safuDevAddress != msg.sender) {
            revert();
        }
        if (uniLiquidityAdded && safuDevAddress != msg.sender) {
            revert();
        }

        require(!presaleCancelled);
        presaleCancelled = true;

        uint256 balance = token.balanceOf(address(this));
        if (balance > 0) {
            token.transfer(presaleCreatorAddress, balance);
        }
    }

    function collectFundsRaised() onlyPresaleCreator external {
        require(uniLiquidityAdded);
        require(!presaleCancelled);
        require(block.timestamp >= presaleCreatorClaimTime);

        if (address(this).balance > 0) {
            presaleCreatorAddress.transfer(address(this).balance);
        }
    }
}

File 2 of 3: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 3: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    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":[{"internalType":"address","name":"_safuFactoryAddress","type":"address"},{"internalType":"address","name":"_safuDevAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"addLiquidityAndLockLPTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelistedAddresses","type":"address[]"}],"name":"addwhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelAndTransferTokensToPresaleCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectFundsRaised","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRefund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hardCapInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"invest","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkDiscord","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkTelegram","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkTwitter","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkWebsite","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInvestInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minInvestInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelistedAddressesAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCancelled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCreatorAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCreatorClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCreatorClaimWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDevAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuDevFeesExempted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"safuLiqLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTitle","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleCreator","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_unsoldTokensDumpAddress","type":"address"}],"name":"setAddressInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"internalType":"uint256","name":"_tokenPriceInWei","type":"uint256"},{"internalType":"uint256","name":"_hardCapInWei","type":"uint256"},{"internalType":"uint256","name":"_softCapInWei","type":"uint256"},{"internalType":"uint256","name":"_maxInvestInWei","type":"uint256"},{"internalType":"uint256","name":"_minInvestInWei","type":"uint256"},{"internalType":"uint256","name":"_openTime","type":"uint256"},{"internalType":"uint256","name":"_closeTime","type":"uint256"}],"name":"setGeneralInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_onlyWhitelistedAddressesAllowed","type":"bool"}],"name":"setOnlyWhitelistedAddressesAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_safuDevFeesExempted","type":"bool"}],"name":"setSafuDevFeesExempted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_safuLiqLockAddress","type":"address"},{"internalType":"uint256","name":"_safuDevFeePercentage","type":"uint256"},{"internalType":"uint256","name":"_safuMinDevFeeInWei","type":"uint256"},{"internalType":"uint256","name":"_safuId","type":"uint256"}],"name":"setSafuInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_saleTitle","type":"bytes32"},{"internalType":"bytes32","name":"_linkTelegram","type":"bytes32"},{"internalType":"bytes32","name":"_linkDiscord","type":"bytes32"},{"internalType":"bytes32","name":"_linkTwitter","type":"bytes32"},{"internalType":"bytes32","name":"_linkWebsite","type":"bytes32"}],"name":"setStringInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_uniListingPriceInWei","type":"uint256"},{"internalType":"uint256","name":"_uniLiquidityAddingTime","type":"uint256"},{"internalType":"uint256","name":"_uniLPTokensLockDurationInDays","type":"uint256"},{"internalType":"uint256","name":"_uniLiquidityPercentageAllocation","type":"uint256"}],"name":"setUniswapInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"softCapInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCollectedWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInvestorsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniLPTokensLockDurationInDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniLiquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniLiquidityAddingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniLiquidityPercentageAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniListingPriceInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unsoldTokensDumpAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000601d60006101000a81548160ff0219169083151502179055506001601d60016101000a81548160ff0219169083151502179055506000601d60026101000a81548160ff0219169083151502179055506000601d60036101000a81548160ff0219169083151502179055503480156200007d57600080fd5b5060405162003e9838038062003e9883398181016040526040811015620000a357600080fd5b810190808051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000f957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200013457600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050613cd180620001c76000396000f3fe6080604052600436106102b25760003560e01c806389771dd811610175578063c36002c9116100dc578063d6c86b1b11610095578063e8b5e51f1161006f578063e8b5e51f14610c6d578063eaa2288b14610c77578063f24ec90814610cda578063fc0c546a14610d49576102c1565b8063d6c86b1b14610bec578063e47935e614610c17578063e861e34d14610c42576102c1565b8063c36002c914610ad4578063c502b13b14610aeb578063c51d16b614610b16578063c884ef8314610b41578063ce8f582e14610ba8578063d5933c2c14610bbf576102c1565b8063a999ac321161012e578063a999ac32146109be578063a9cbc798146109ff578063b1406b7914610a2a578063b2d5ae4414610a67578063b31f8f9314610a7e578063b425688814610aa9576102c1565b806389771dd8146107e357806389bc9cb51461080e5780638a6688f11461089457806396b98862146108ed5780639fa1eccc14610952578063a2460d2e1461097d576102c1565b806335d079de1161021957806355973a90116101d257806355973a90146106f3578063627749e6146107205780636cb962871461074b5780637275ae1414610762578063744583061461078d5780637e1c0c09146107b8576102c1565b806335d079de146105895780634760eb25146105ca57806348c54b9d146105f55780634b8eb8551461060c5780634b9c4cb31461063757806350c73391146106c8576102c1565b806318cc60e41161026b57806318cc60e4146104085780631c194ba914610445578063261ad0c5146104c75780632a00551e146104f25780632f8de8101461051d57806335c5b37114610548576102c1565b806303205053146102c6578063032e1cee146102f3578063057bdd441461031e57806306c933d81461034b5780630ca99ca8146103b25780630cdc1fc5146103dd576102c1565b366102c1576102bf610d8a565b005b600080fd5b3480156102d257600080fd5b506102db6112bb565b60405180821515815260200191505060405180910390f35b3480156102ff57600080fd5b506103086112ce565b6040518082815260200191505060405180910390f35b34801561032a57600080fd5b506103336112d4565b60405180821515815260200191505060405180910390f35b34801561035757600080fd5b5061039a6004803603602081101561036e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112e7565b60405180821515815260200191505060405180910390f35b3480156103be57600080fd5b506103c7611307565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506103f261130d565b6040518082815260200191505060405180910390f35b34801561041457600080fd5b506104436004803603602081101561042b57600080fd5b81019080803515159060200190929190505050611313565b005b34801561045157600080fd5b506104c5600480360361010081101561046957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506113e0565b005b3480156104d357600080fd5b506104dc611507565b6040518082815260200191505060405180910390f35b3480156104fe57600080fd5b5061050761150d565b6040518082815260200191505060405180910390f35b34801561052957600080fd5b50610532611513565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b5061055d611519565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059557600080fd5b5061059e61153f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d657600080fd5b506105df611565565b6040518082815260200191505060405180910390f35b34801561060157600080fd5b5061060a61156b565b005b34801561061857600080fd5b50610621611abd565b6040518082815260200191505060405180910390f35b34801561064357600080fd5b506106c66004803603606081101561065a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac3565b005b3480156106d457600080fd5b506106dd611c91565b6040518082815260200191505060405180910390f35b3480156106ff57600080fd5b50610708611c97565b60405180821515815260200191505060405180910390f35b34801561072c57600080fd5b50610735611caa565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611cb0565b005b34801561076e57600080fd5b50610777611e2a565b6040518082815260200191505060405180910390f35b34801561079957600080fd5b506107a2611e30565b6040518082815260200191505060405180910390f35b3480156107c457600080fd5b506107cd611e36565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506107f8611e3c565b6040518082815260200191505060405180910390f35b34801561081a57600080fd5b506108926004803603602081101561083157600080fd5b810190808035906020019064010000000081111561084e57600080fd5b82018360208201111561086057600080fd5b8035906020019184602083028401116401000000008311171561088257600080fd5b9091929391929390505050611e42565b005b3480156108a057600080fd5b506108eb600480360360808110156108b757600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061201b565b005b3480156108f957600080fd5b5061093c6004803603602081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120e7565b6040518082815260200191505060405180910390f35b34801561095e57600080fd5b506109676120ff565b6040518082815260200191505060405180910390f35b34801561098957600080fd5b50610992612105565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ca57600080fd5b506109d361212b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0b57600080fd5b50610a14612151565b6040518082815260200191505060405180910390f35b348015610a3657600080fd5b50610a6560048036036020811015610a4d57600080fd5b81019080803515159060200190929190505050612157565b005b348015610a7357600080fd5b50610a7c61228d565b005b348015610a8a57600080fd5b50610a936127de565b6040518082815260200191505060405180910390f35b348015610ab557600080fd5b50610abe6127e4565b6040518082815260200191505060405180910390f35b348015610ae057600080fd5b50610ae96127ea565b005b348015610af757600080fd5b50610b00612b28565b6040518082815260200191505060405180910390f35b348015610b2257600080fd5b50610b2b612b2e565b6040518082815260200191505060405180910390f35b348015610b4d57600080fd5b50610b9060048036036020811015610b6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b34565b60405180821515815260200191505060405180910390f35b348015610bb457600080fd5b50610bbd612b54565b005b348015610bcb57600080fd5b50610bd461365a565b60405180821515815260200191505060405180910390f35b348015610bf857600080fd5b50610c0161366d565b6040518082815260200191505060405180910390f35b348015610c2357600080fd5b50610c2c613673565b6040518082815260200191505060405180910390f35b348015610c4e57600080fd5b50610c57613679565b6040518082815260200191505060405180910390f35b610c75610d8a565b005b348015610c8357600080fd5b50610cd8600480360360a0811015610c9a57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061367f565b005b348015610ce657600080fd5b50610d4760048036036080811015610cfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506137c2565b005b348015610d5557600080fd5b50610d5e6138ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601d60019054906101000a900460ff161580610def5750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff1615610ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601754421015610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420796574206f70656e656400000000000000000000000000000000000081525060200191505060405180910390fd5b6018544210610fd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f436c6f736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601354600f541061104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f486172642063617020726561636865640000000000000000000000000000000081525060200191505060405180910390fd5b60006011541161105b57600080fd5b6110726012546011546138f490919063ffffffff16565b34111561107e57600080fd5b60006110d234600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397a90919063ffffffff16565b905060165481101561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d696e20696e766573746d656e74206e6f74207265616368656400000000000081525060200191505060405180910390fd5b6000601554148061115f57506015548111155b6111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d617820696e766573746d656e7420726561636865640000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112365761122f6001600c5461397a90919063ffffffff16565b600c819055505b61124b34600f5461397a90919063ffffffff16565b600f8190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b26112a134613a02565b601154613a3a90919063ffffffff16565b60118190555050565b601d60029054906101000a900460ff1681565b601a5481565b601d60009054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60205481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113ba57503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6113c357600080fd5b80601d60026101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143857600080fd5b6000881161144557600080fd5b6000871161145257600080fd5b6000821161145f57600080fd5b6000811161146c57600080fd5b6000861161147957600080fd5b61148c87896138f490919063ffffffff16565b86111561149857600080fd5b858511156114a557600080fd5b838311156114b257600080fd5b8082106114be57600080fd5b8760108190555087601181905550866012819055508560138190555084601481905550836015819055508260168190555081601781905550806018819055505050505050505050565b601b5481565b601c5481565b60125481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b601d60019054906101000a900460ff1615806115d05750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e20696e766573746f72000000000000000000000000000000000081525060200191505060405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f416c726561647920636c61696d6564206f7220726566756e646564000000000081525060200191505060405180910390fd5b601d60009054906101000a900460ff166118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c6971756964697479206e6f742079657420616464656400000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361199b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a02565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b81019080805190602001909291905050505060004790506000811115611aba57600081600d5411611a4b57600d54611a4d565b815b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab7573d6000803e3d6000fd5b50505b50565b60215481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc957600080fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600e5481565b601d60019054906101000a900460ff1681565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742070726573616c652063726561746f720000000000000000000000000081525060200191505060405180910390fd5b601d60009054906101000a900460ff16611d8c57600080fd5b601d60039054906101000a900460ff1615611da657600080fd5b600e54421015611db557600080fd5b6000471115611e2857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e26573d6000803e3d6000fd5b505b565b600c5481565b601f5481565b60105481565b60225481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ee957503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b60008282905011601d60016101000a81548160ff02191690831515021790555060005b8282905081101561201657600160076000858585818110611f9b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611f7e565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207357600080fd5b6000841161208057600080fd5b6000831161208d57600080fd5b6000821161209a57600080fd5b600081116120a757600080fd5b6000601854116120b657600080fd5b6018548310156120c557600080fd5b8360198190555082601a8190555081601b8190555080601c8190555050505050565b60066020528060005260406000206000915090505481565b60155481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806121fe57503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601d60019054906101000a900460ff1615806122f25750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e20696e766573746f72000000000000000000000000000000000081525060200191505060405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f416c726561647920636c61696d6564206f7220726566756e646564000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff166126cf57601754421015612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420796574206f70656e656400000000000000000000000000000000000081525060200191505060405180910390fd5b6018544210156125dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f742079657420636c6f73656400000000000000000000000000000000000081525060200191505060405180910390fd5b600060145411612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f20736f66742063617000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601454600f54106126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f536f66742063617020726561636865640000000000000000000000000000000081525060200191505060405180910390fd5b5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060004790506000811161277d57600080fd5b80821115612789578091505b60008211156127da573373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156127d8573d6000803e3d6000fd5b505b5050565b60115481565b60175481565b601d60009054906101000a900460ff1615801561285557503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156128af57503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128b957600080fd5b601d60009054906101000a900460ff16801561292357503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561292d57600080fd5b601d60039054906101000a900460ff161561294757600080fd5b6001601d60036101000a81548160ff0219169083151502179055506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129ed57600080fd5b505afa158015612a01573d6000803e3d6000fd5b505050506040513d6020811015612a1757600080fd5b810190808051906020019092919050505090506000811115612b2557600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ae857600080fd5b505af1158015612afc573d6000803e3d6000fd5b505050506040513d6020811015612b1257600080fd5b8101908080519060200190929190505050505b50565b601e5481565b600f5481565b60086020528060005260406000206000915054906101000a900460ff1681565b601d60039054906101000a900460ff1615612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600f5411612be657600080fd5b601d60009054906101000a900460ff1615612c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c697175696469747920616c726561647920616464656400000000000000000081525060200191505060405180910390fd5b601d60019054906101000a900460ff161580612cce5750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612d265750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c556026913960400191505060405180910390fd5b601354600f54148015612d8f5750601a5442105b15612e5c57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742070726573616c652063726561746f720000000000000000000000000081525060200191505060405180910390fd5b613060565b601a544210612ff157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f0057506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e6f742070726573616c652063726561746f72206f7220696e766573746f720081525060200191505060405180910390fd5b601454600f541015612fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f536f667420636170206e6f74207265616368656400000000000000000000000081525060200191505060405180910390fd5b61305f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4c69717569646974792063616e6e6f742062652061646465642079657400000081525060200191505060405180910390fd5b5b6001601d60006101000a81548160ff0219169083151502179055506000600f5490506000601d60029054906101000a900460ff166130e85760006130c260646130b4600954866138f490919063ffffffff16565b613a8490919063ffffffff16565b9050600a548111806130d6575082600a5410155b6130e257600a546130e4565b805b9150505b6000811115613170576131048183613a3a90919063ffffffff16565b9150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561316e573d6000803e3d6000fd5b505b600061319a606461318c601c54866138f490919063ffffffff16565b613a8490919063ffffffff16565b905060006131cd6019546131bf670de0b6b3a7640000856138f490919063ffffffff16565b613a8490919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561327657600080fd5b505af115801561328a573d6000803e3d6000fd5b505050506040513d60208110156132a057600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71983600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133426103844261397a90919063ffffffff16565b6040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156133c657600080fd5b505af11580156133da573d6000803e3d6000fd5b50505050506040513d60608110156133f157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050505060006134fb613429600f54613a02565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134b257600080fd5b505afa1580156134c6573d6000803e3d6000fd5b505050506040513d60208110156134dc57600080fd5b8101908080519060200190929190505050613a3a90919063ffffffff16565b905060008111156135f857600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b505050506040513d60208110156135e557600080fd5b8101908080519060200190929190505050505b613641613618670de0b6b3a7640000600c546138f490919063ffffffff16565b613633670de0b6b3a7640000476138f490919063ffffffff16565b613a8490919063ffffffff16565b600d81905550620151804201600e819055505050505050565b601d60039054906101000a900460ff1681565b60145481565b600d5481565b60165481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061372657503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b84601e8190555083601f819055508260218190555081602081905550806022819055505050505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061386957503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61387257600080fd5b83600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260098190555081600a8190555080600b8190555050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808314156139075760009050613974565b600082840290508284828161391857fe5b041461396f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c7b6021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110156139f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613a33601254613a25670de0b6b3a7640000856138f490919063ffffffff16565b613a8490919063ffffffff16565b9050919050565b6000613a7c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ace565b905092915050565b6000613ac683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b8e565b905092915050565b6000838311158290613b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b40578082015181840152602081019050613b25565b50505050905090810190601f168015613b6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bff578082015181840152602081019050613be4565b50505050905090810190601f168015613c2c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613c4657fe5b04905080915050939250505056fe4e6f742077686974656c6973746564206f72206e6f742070726573616c652063726561746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e18ac61ae0cd7df4f09bbdfb601205e91e8def8e02f9a5a7ef7ddee3d5e73a4464736f6c634300060c0033000000000000000000000000084658065b97348026a5111feaa2ba9e83ee28e700000000000000000000000069c62363f5bd1a4505d2bcefa886468478a74b91

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806389771dd811610175578063c36002c9116100dc578063d6c86b1b11610095578063e8b5e51f1161006f578063e8b5e51f14610c6d578063eaa2288b14610c77578063f24ec90814610cda578063fc0c546a14610d49576102c1565b8063d6c86b1b14610bec578063e47935e614610c17578063e861e34d14610c42576102c1565b8063c36002c914610ad4578063c502b13b14610aeb578063c51d16b614610b16578063c884ef8314610b41578063ce8f582e14610ba8578063d5933c2c14610bbf576102c1565b8063a999ac321161012e578063a999ac32146109be578063a9cbc798146109ff578063b1406b7914610a2a578063b2d5ae4414610a67578063b31f8f9314610a7e578063b425688814610aa9576102c1565b806389771dd8146107e357806389bc9cb51461080e5780638a6688f11461089457806396b98862146108ed5780639fa1eccc14610952578063a2460d2e1461097d576102c1565b806335d079de1161021957806355973a90116101d257806355973a90146106f3578063627749e6146107205780636cb962871461074b5780637275ae1414610762578063744583061461078d5780637e1c0c09146107b8576102c1565b806335d079de146105895780634760eb25146105ca57806348c54b9d146105f55780634b8eb8551461060c5780634b9c4cb31461063757806350c73391146106c8576102c1565b806318cc60e41161026b57806318cc60e4146104085780631c194ba914610445578063261ad0c5146104c75780632a00551e146104f25780632f8de8101461051d57806335c5b37114610548576102c1565b806303205053146102c6578063032e1cee146102f3578063057bdd441461031e57806306c933d81461034b5780630ca99ca8146103b25780630cdc1fc5146103dd576102c1565b366102c1576102bf610d8a565b005b600080fd5b3480156102d257600080fd5b506102db6112bb565b60405180821515815260200191505060405180910390f35b3480156102ff57600080fd5b506103086112ce565b6040518082815260200191505060405180910390f35b34801561032a57600080fd5b506103336112d4565b60405180821515815260200191505060405180910390f35b34801561035757600080fd5b5061039a6004803603602081101561036e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112e7565b60405180821515815260200191505060405180910390f35b3480156103be57600080fd5b506103c7611307565b6040518082815260200191505060405180910390f35b3480156103e957600080fd5b506103f261130d565b6040518082815260200191505060405180910390f35b34801561041457600080fd5b506104436004803603602081101561042b57600080fd5b81019080803515159060200190929190505050611313565b005b34801561045157600080fd5b506104c5600480360361010081101561046957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506113e0565b005b3480156104d357600080fd5b506104dc611507565b6040518082815260200191505060405180910390f35b3480156104fe57600080fd5b5061050761150d565b6040518082815260200191505060405180910390f35b34801561052957600080fd5b50610532611513565b6040518082815260200191505060405180910390f35b34801561055457600080fd5b5061055d611519565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059557600080fd5b5061059e61153f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105d657600080fd5b506105df611565565b6040518082815260200191505060405180910390f35b34801561060157600080fd5b5061060a61156b565b005b34801561061857600080fd5b50610621611abd565b6040518082815260200191505060405180910390f35b34801561064357600080fd5b506106c66004803603606081101561065a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac3565b005b3480156106d457600080fd5b506106dd611c91565b6040518082815260200191505060405180910390f35b3480156106ff57600080fd5b50610708611c97565b60405180821515815260200191505060405180910390f35b34801561072c57600080fd5b50610735611caa565b6040518082815260200191505060405180910390f35b34801561075757600080fd5b50610760611cb0565b005b34801561076e57600080fd5b50610777611e2a565b6040518082815260200191505060405180910390f35b34801561079957600080fd5b506107a2611e30565b6040518082815260200191505060405180910390f35b3480156107c457600080fd5b506107cd611e36565b6040518082815260200191505060405180910390f35b3480156107ef57600080fd5b506107f8611e3c565b6040518082815260200191505060405180910390f35b34801561081a57600080fd5b506108926004803603602081101561083157600080fd5b810190808035906020019064010000000081111561084e57600080fd5b82018360208201111561086057600080fd5b8035906020019184602083028401116401000000008311171561088257600080fd5b9091929391929390505050611e42565b005b3480156108a057600080fd5b506108eb600480360360808110156108b757600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061201b565b005b3480156108f957600080fd5b5061093c6004803603602081101561091057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120e7565b6040518082815260200191505060405180910390f35b34801561095e57600080fd5b506109676120ff565b6040518082815260200191505060405180910390f35b34801561098957600080fd5b50610992612105565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109ca57600080fd5b506109d361212b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0b57600080fd5b50610a14612151565b6040518082815260200191505060405180910390f35b348015610a3657600080fd5b50610a6560048036036020811015610a4d57600080fd5b81019080803515159060200190929190505050612157565b005b348015610a7357600080fd5b50610a7c61228d565b005b348015610a8a57600080fd5b50610a936127de565b6040518082815260200191505060405180910390f35b348015610ab557600080fd5b50610abe6127e4565b6040518082815260200191505060405180910390f35b348015610ae057600080fd5b50610ae96127ea565b005b348015610af757600080fd5b50610b00612b28565b6040518082815260200191505060405180910390f35b348015610b2257600080fd5b50610b2b612b2e565b6040518082815260200191505060405180910390f35b348015610b4d57600080fd5b50610b9060048036036020811015610b6457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b34565b60405180821515815260200191505060405180910390f35b348015610bb457600080fd5b50610bbd612b54565b005b348015610bcb57600080fd5b50610bd461365a565b60405180821515815260200191505060405180910390f35b348015610bf857600080fd5b50610c0161366d565b6040518082815260200191505060405180910390f35b348015610c2357600080fd5b50610c2c613673565b6040518082815260200191505060405180910390f35b348015610c4e57600080fd5b50610c57613679565b6040518082815260200191505060405180910390f35b610c75610d8a565b005b348015610c8357600080fd5b50610cd8600480360360a0811015610c9a57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061367f565b005b348015610ce657600080fd5b50610d4760048036036080811015610cfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506137c2565b005b348015610d5557600080fd5b50610d5e6138ce565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b601d60019054906101000a900460ff161580610def5750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610e61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff1615610ee4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601754421015610f5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420796574206f70656e656400000000000000000000000000000000000081525060200191505060405180910390fd5b6018544210610fd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f436c6f736564000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601354600f541061104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f486172642063617020726561636865640000000000000000000000000000000081525060200191505060405180910390fd5b60006011541161105b57600080fd5b6110726012546011546138f490919063ffffffff16565b34111561107e57600080fd5b60006110d234600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461397a90919063ffffffff16565b905060165481101561114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4d696e20696e766573746d656e74206e6f74207265616368656400000000000081525060200191505060405180910390fd5b6000601554148061115f57506015548111155b6111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d617820696e766573746d656e7420726561636865640000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112365761122f6001600c5461397a90919063ffffffff16565b600c819055505b61124b34600f5461397a90919063ffffffff16565b600f8190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112b26112a134613a02565b601154613a3a90919063ffffffff16565b60118190555050565b601d60029054906101000a900460ff1681565b601a5481565b601d60009054906101000a900460ff1681565b60076020528060005260406000206000915054906101000a900460ff1681565b60135481565b60205481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113ba57503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6113c357600080fd5b80601d60026101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143857600080fd5b6000881161144557600080fd5b6000871161145257600080fd5b6000821161145f57600080fd5b6000811161146c57600080fd5b6000861161147957600080fd5b61148c87896138f490919063ffffffff16565b86111561149857600080fd5b858511156114a557600080fd5b838311156114b257600080fd5b8082106114be57600080fd5b8760108190555087601181905550866012819055508560138190555084601481905550836015819055508260168190555081601781905550806018819055505050505050505050565b601b5481565b601c5481565b60125481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b601d60019054906101000a900460ff1615806115d05750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff16156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e20696e766573746f72000000000000000000000000000000000081525060200191505060405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f416c726561647920636c61696d6564206f7220726566756e646564000000000081525060200191505060405180910390fd5b601d60009054906101000a900460ff166118bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c6971756964697479206e6f742079657420616464656400000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361199b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a02565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119ee57600080fd5b505af1158015611a02573d6000803e3d6000fd5b505050506040513d6020811015611a1857600080fd5b81019080805190602001909291905050505060004790506000811115611aba57600081600d5411611a4b57600d54611a4d565b815b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab7573d6000803e3d6000fd5b50505b50565b60215481565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bc957600080fd5b82600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600e5481565b601d60019054906101000a900460ff1681565b60185481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742070726573616c652063726561746f720000000000000000000000000081525060200191505060405180910390fd5b601d60009054906101000a900460ff16611d8c57600080fd5b601d60039054906101000a900460ff1615611da657600080fd5b600e54421015611db557600080fd5b6000471115611e2857600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e26573d6000803e3d6000fd5b505b565b600c5481565b601f5481565b60105481565b60225481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ee957503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611f5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b60008282905011601d60016101000a81548160ff02191690831515021790555060005b8282905081101561201657600160076000858585818110611f9b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050611f7e565b505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207357600080fd5b6000841161208057600080fd5b6000831161208d57600080fd5b6000821161209a57600080fd5b600081116120a757600080fd5b6000601854116120b657600080fd5b6018548310156120c557600080fd5b8360198190555082601a8190555081601b8190555080601c8190555050505050565b60066020528060005260406000206000915090505481565b60155481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806121fe57503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601d60019054906101000a900460ff1615806122f25750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612364576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f41646472657373206e6f742077686974656c697374656400000000000000000081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f4e6f7420616e20696e766573746f72000000000000000000000000000000000081525060200191505060405180910390fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f416c726561647920636c61696d6564206f7220726566756e646564000000000081525060200191505060405180910390fd5b601d60039054906101000a900460ff166126cf57601754421015612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420796574206f70656e656400000000000000000000000000000000000081525060200191505060405180910390fd5b6018544210156125dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f742079657420636c6f73656400000000000000000000000000000000000081525060200191505060405180910390fd5b600060145411612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f20736f66742063617000000000000000000000000000000000000000000081525060200191505060405180910390fd5b601454600f54106126ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f536f66742063617020726561636865640000000000000000000000000000000081525060200191505060405180910390fd5b5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060004790506000811161277d57600080fd5b80821115612789578091505b60008211156127da573373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156127d8573d6000803e3d6000fd5b505b5050565b60115481565b60175481565b601d60009054906101000a900460ff1615801561285557503373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156128af57503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156128b957600080fd5b601d60009054906101000a900460ff16801561292357503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561292d57600080fd5b601d60039054906101000a900460ff161561294757600080fd5b6001601d60036101000a81548160ff0219169083151502179055506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129ed57600080fd5b505afa158015612a01573d6000803e3d6000fd5b505050506040513d6020811015612a1757600080fd5b810190808051906020019092919050505090506000811115612b2557600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ae857600080fd5b505af1158015612afc573d6000803e3d6000fd5b505050506040513d6020811015612b1257600080fd5b8101908080519060200190929190505050505b50565b601e5481565b600f5481565b60086020528060005260406000206000915054906101000a900460ff1681565b601d60039054906101000a900460ff1615612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f43616e63656c6c6564000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600f5411612be657600080fd5b601d60009054906101000a900460ff1615612c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4c697175696469747920616c726561647920616464656400000000000000000081525060200191505060405180910390fd5b601d60019054906101000a900460ff161580612cce5750600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612d265750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c556026913960400191505060405180910390fd5b601354600f54148015612d8f5750601a5442105b15612e5c57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f742070726573616c652063726561746f720000000000000000000000000081525060200191505060405180910390fd5b613060565b601a544210612ff157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612f0057506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f4e6f742070726573616c652063726561746f72206f7220696e766573746f720081525060200191505060405180910390fd5b601454600f541015612fec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f536f667420636170206e6f74207265616368656400000000000000000000000081525060200191505060405180910390fd5b61305f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4c69717569646974792063616e6e6f742062652061646465642079657400000081525060200191505060405180910390fd5b5b6001601d60006101000a81548160ff0219169083151502179055506000600f5490506000601d60029054906101000a900460ff166130e85760006130c260646130b4600954866138f490919063ffffffff16565b613a8490919063ffffffff16565b9050600a548111806130d6575082600a5410155b6130e257600a546130e4565b805b9150505b6000811115613170576131048183613a3a90919063ffffffff16565b9150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561316e573d6000803e3d6000fd5b505b600061319a606461318c601c54866138f490919063ffffffff16565b613a8490919063ffffffff16565b905060006131cd6019546131bf670de0b6b3a7640000856138f490919063ffffffff16565b613a8490919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3737a250d5630b4cf539739df2c5dacb4c659f2488d836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561327657600080fd5b505af115801561328a573d6000803e3d6000fd5b505050506040513d60208110156132a057600080fd5b810190808051906020019092919050505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71983600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133426103844261397a90919063ffffffff16565b6040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156133c657600080fd5b505af11580156133da573d6000803e3d6000fd5b50505050506040513d60608110156133f157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050505060006134fb613429600f54613a02565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134b257600080fd5b505afa1580156134c6573d6000803e3d6000fd5b505050506040513d60208110156134dc57600080fd5b8101908080519060200190929190505050613a3a90919063ffffffff16565b905060008111156135f857600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135bb57600080fd5b505af11580156135cf573d6000803e3d6000fd5b505050506040513d60208110156135e557600080fd5b8101908080519060200190929190505050505b613641613618670de0b6b3a7640000600c546138f490919063ffffffff16565b613633670de0b6b3a7640000476138f490919063ffffffff16565b613a8490919063ffffffff16565b600d81905550620151804201600e819055505050505050565b601d60039054906101000a900460ff1681565b60145481565b600d5481565b60165481565b3373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061372657503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4e6f742070726573616c652063726561746f72206f7220666163746f7279000081525060200191505060405180910390fd5b84601e8190555083601f819055508260218190555081602081905550806022819055505050505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061386957503373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61387257600080fd5b83600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260098190555081600a8190555080600b8190555050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808314156139075760009050613974565b600082840290508284828161391857fe5b041461396f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613c7b6021913960400191505060405180910390fd5b809150505b92915050565b6000808284019050838110156139f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613a33601254613a25670de0b6b3a7640000856138f490919063ffffffff16565b613a8490919063ffffffff16565b9050919050565b6000613a7c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ace565b905092915050565b6000613ac683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b8e565b905092915050565b6000838311158290613b7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b40578082015181840152602081019050613b25565b50505050905090810190601f168015613b6d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290613c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bff578082015181840152602081019050613be4565b50505050905090810190601f168015613c2c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613c4657fe5b04905080915050939250505056fe4e6f742077686974656c6973746564206f72206e6f742070726573616c652063726561746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e18ac61ae0cd7df4f09bbdfb601205e91e8def8e02f9a5a7ef7ddee3d5e73a4464736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000084658065b97348026a5111feaa2ba9e83ee28e700000000000000000000000069c62363f5bd1a4505d2bcefa886468478a74b91

-----Decoded View---------------
Arg [0] : _safuFactoryAddress (address): 0x084658065b97348026a5111fEAA2bA9e83eE28E7
Arg [1] : _safuDevAddress (address): 0x69c62363f5BD1A4505d2bcEfa886468478A74b91

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000084658065b97348026a5111feaa2ba9e83ee28e7
Arg [1] : 00000000000000000000000069c62363f5bd1a4505d2bcefa886468478a74b91


Deployed Bytecode Sourcemap

470:15054:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10683:8;:6;:8::i;:::-;470:15054;;;;;3599:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2970:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3383;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1298:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2328:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3910:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8768:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5929:1210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3109:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3248:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2253:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;770:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;996:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1720:21;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13177:624;;;;;;;;;;;;;:::i;:::-;;3942:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5446:477;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1974:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3493:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2807:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15205:317;;;;;;;;;;;;;:::i;:::-;;1809:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3877:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2132:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3974;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9150:357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7145:828;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1212:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2534:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1113:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;862:33;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2891:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8925:219;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13807:859;;;;;;;;;;;;;:::i;:::-;;2191:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2728:23;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14672:527;;;;;;;;;;;;;:::i;:::-;;3847:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2071:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1389:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;10704:2467;;;;;;;;;;;;;:::i;:::-;;3695:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2415:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1874:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2631:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9676:964;;;:::i;:::-;;7979:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8389:373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;944:19;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;9676:964;4958:31;;;;;;;;;;;4957:32;:68;;;;4993:20;:32;5014:10;4993:32;;;;;;;;;;;;;;;;;;;;;;;;;4957:68;4936:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5150:16:::1;;;;;;;;;;;5149:17;5141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;9811:8:::2;;9792:15;:27;;9784:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9874:9;;9856:15;:27;9848:46;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9932:12;;9912:17;;:32;9904:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;9996:1;9983:10;;:14;9975:23;;;::::0;::::2;;10029:31;10044:15;;10029:10;;:14;;:31;;;;:::i;:::-;10016:9;:44;;10008:53;;;::::0;::::2;;10071:28;10102:38;10130:9;10102:11;:23;10114:10;10102:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;10071:69;;10182:14;;10158:20;:38;;10150:77;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;10263:1;10245:14;;:19;:61;;;;10292:14;;10268:20;:38;;10245:61;10237:96;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;10375:1;10348:11;:23;10360:10;10348:23;;;;;;;;;;;;;;;;:28;10344:107;;;10414:26;10438:1;10414:19;;:23;;:26;;;;:::i;:::-;10392:19;:48;;;;10344:107;10481:32;10503:9;10481:17;;:21;;:32;;;;:::i;:::-;10461:17;:52;;;;10549:20;10523:11;:23;10535:10;10523:23;;;;;;;;;;;;;;;:46;;;;10592:41;10607:25;10622:9;10607:14;:25::i;:::-;10592:10;;:14;;:41;;;;:::i;:::-;10579:10;:54;;;;5190:1;9676:964::o:0;3599:39::-;;;;;;;;;;;;;:::o;2970:37::-;;;;:::o;3383:::-;;;;;;;;;;;;;:::o;1298:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;2328:27::-;;;;:::o;3910:26::-;;;;:::o;8768:151::-;4367:10;4345:32;;:18;;;;;;;;;;:32;;;:64;;;;4399:10;4381:28;;:14;;;;;;;;;;;:28;;;4345:64;4337:73;;;;;;8892:20:::1;8870:19;;:42;;;;;;;;;;;;;;;;;;8768:151:::0;:::o;5929:1210::-;4501:10;4479:32;;:18;;;;;;;;;;:32;;;4471:41;;;;;;6264:1:::1;6249:12;:16;6241:25;;;::::0;::::1;;6303:1;6284:16;:20;6276:29;;;::::0;::::1;;6335:1;6323:9;:13;6315:22;;;::::0;::::1;;6368:1;6355:10;:14;6347:23;;;::::0;::::1;;6404:1;6388:13;:17;6380:26;;;::::0;::::1;;6493:34;6510:16;6493:12;:16;;:34;;;;:::i;:::-;6476:13;:51;;6468:60;;;::::0;::::1;;6597:13;6580;:30;;6572:39;;;::::0;::::1;;6702:15;6683;:34;;6675:43;;;::::0;::::1;;6783:10;6771:9;:22;6763:31;;;::::0;::::1;;6819:12;6805:11;:26;;;;6854:12;6841:10;:25;;;;6894:16;6876:15;:34;;;;6935:13;6920:12;:28;;;;6973:13;6958:12;:28;;;;7013:15;6996:14;:32;;;;7055:15;7038:14;:32;;;;7091:9;7080:8;:20;;;;7122:10;7110:9;:22;;;;5929:1210:::0;;;;;;;;:::o;3109:44::-;;;;:::o;3248:47::-;;;;:::o;2253:30::-;;;;:::o;770:37::-;;;;;;;;;;;;;:::o;996:44::-;;;;;;;;;;;;;:::o;1720:21::-;;;;:::o;13177:624::-;4958:31;;;;;;;;;;;4957:32;:68;;;;4993:20;:32;5014:10;4993:32;;;;;;;;;;;;;;;;;;;;;;;;;4957:68;4936:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5150:16:::1;;;;;;;;;;;5149:17;5141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5272:1:::2;5246:11;:23;5258:10;5246:23;;;;;;;;;;;;;;;;:27;5238:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;5371:7:::3;:19;5379:10;5371:19;;;;;;;;;;;;;;;;;;;;;;;;;5370:20;5362:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;13333:17:::4;;;;;;;;;;;13325:53;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;13411:4;13389:7;:19;13397:10;13389:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;13492:5;;;;;;;;;;;:14;;;13507:10;13519:39;13534:11;:23;13546:10;13534:23;;;;;;;;;;;;;;;;13519:14;:39::i;:::-;13492:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;13570:15;13588:21;13570:39;;13633:1;13623:7;:11;13619:176;;;13650:13;13691:7;13666:22;;:32;:67;;13711:22;;13666:67;;;13701:7;13666:67;13650:83;;13747:21;;;;;;;;;;;:30;;:37;13778:5;13747:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;13619:176;;5432:1;13177:624::o:0;3942:26::-;;;;:::o;5446:477::-;4501:10;4479:32;;:18;;;;;;;;;;:32;;;4471:41;;;;;;5652:1:::1;5625:29;;:15;:29;;;;5617:38;;;::::0;::::1;;5698:1;5673:27;;:13;:27;;;;5665:36;;;::::0;::::1;;5755:1;5719:38;;:24;:38;;;;5711:47;;;::::0;::::1;;5801:15;5769:21;;:48;;;;;;;;;;;;;;;;;;5842:13;5827:5;;:29;;;;;;;;;;;;;;;;;;5892:24;5866:23;;:50;;;;;;;;;;;;;;;;;;5446:477:::0;;;:::o;1974:38::-;;;;:::o;3493:50::-;;;;;;;;;;;;;:::o;2807:24::-;;;;:::o;15205:317::-;4834:10;4809:35;;:21;;;;;;;;;;;:35;;;4801:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15281:17:::1;;;;;;;;;;;15273:26;;;::::0;::::1;;15318:16;;;;;;;;;;;15317:17;15309:26;;;::::0;::::1;;15372:23;;15353:15;:42;;15345:51;;;::::0;::::1;;15435:1;15411:21;:25;15407:109;;;15452:21;;;;;;;;;;;:30;;:53;15483:21;15452:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15407:109;15205:317::o:0;1809:34::-;;;;:::o;3877:27::-;;;;:::o;2132:26::-;;;;:::o;3974:::-;;;;:::o;9150:357::-;4635:10;4610:35;;:21;;;;;;;;;;;:35;;;:71;;;;4671:10;4649:32;;:18;;;;;;;;;;:32;;;4610:71;4589:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9353:1:::1;9322:21;;:28;;:32;9288:31;;:66;;;;;;;;;;;;;;;;;;9369:9;9364:137;9388:21;;:28;;9384:1;:32;9364:137;;;9486:4;9437:20;:46;9458:21;;9480:1;9458:24;;;;;;;;;;;;;;;9437:46;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;9418:3;;;;;;;9364:137;;;;9150:357:::0;;:::o;7145:828::-;4501:10;4479:32;;:18;;;;;;;;;;:32;;;4471:41;;;;;;7421:1:::1;7397:21;:25;7389:34;;;::::0;::::1;;7467:1;7441:23;:27;7433:36;;;::::0;::::1;;7520:1;7487:30;:34;7479:43;;;::::0;::::1;;7576:1;7540:33;:37;7532:46;;;::::0;::::1;;7609:1;7597:9;;:13;7589:22;;;::::0;::::1;;7693:9;;7666:23;:36;;7658:45;;;::::0;::::1;;7737:21;7714:20;:44;;;;7793:23;7768:22;:48;;;;7858:30;7826:29;:62;;;;7933:33;7898:32;:68;;;;7145:828:::0;;;;:::o;1212:46::-;;;;;;;;;;;;;;;;;:::o;2534:29::-;;;;:::o;1113:38::-;;;;;;;;;;;;;:::o;862:33::-;;;;;;;;;;;;;:::o;2891:35::-;;;;:::o;8925:219::-;4635:10;4610:35;;:21;;;;;;;;;;;:35;;;:71;;;;4671:10;4649:32;;:18;;;;;;;;;;:32;;;4610:71;4589:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9105:32:::1;9071:31;;:66;;;;;;;;;;;;;;;;;;8925:219:::0;:::o;13807:859::-;4958:31;;;;;;;;;;;4957:32;:68;;;;4993:20;:32;5014:10;4993:32;;;;;;;;;;;;;;;;;;;;;;;;;4957:68;4936:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5272:1:::1;5246:11;:23;5258:10;5246:23;;;;;;;;;;;;;;;;:27;5238:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;5371:7:::2;:19;5379:10;5371:19;;;;;;;;;;;;;;;;;;;;;;;;;5370:20;5362:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;13932:16:::3;;;;;;;;;;;13927:300;;13991:8;;13972:15;:27;;13964:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;14059:9;;14040:15;:28;;14032:55;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;14124:1;14109:12;;:16;14101:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;14183:12;;14163:17;;:32;14155:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;13927:300;14259:4;14237:7;:19;14245:10;14237:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;14340:18;14361:11;:23;14373:10;14361:23;;;;;;;;;;;;;;;;14340:44;;14394:22;14420:21;14394:47;;14476:1;14459:14;:18;14451:27;;;::::0;::::3;;14506:14;14493:10;:27;14489:85;;;14549:14;14536:27;;14489:85;14601:1;14588:10;:14;14584:76;;;14618:10;:19;;:31;14638:10;14618:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;14584:76;5432:1;;13807:859::o:0;2191:25::-;;;;:::o;2728:23::-;;;;:::o;14672:527::-;14747:17;;;;;;;;;;;14746:18;:57;;;;;14793:10;14768:35;;:21;;;;;;;;;;;:35;;;;14746:57;:89;;;;;14825:10;14807:28;;:14;;;;;;;;;;;:28;;;;14746:89;14742:128;;;14851:8;;;14742:128;14883:17;;;;;;;;;;;:49;;;;;14922:10;14904:28;;:14;;;;;;;;;;;:28;;;;14883:49;14879:88;;;14948:8;;;14879:88;14986:16;;;;;;;;;;;14985:17;14977:26;;;;;;15032:4;15013:16;;:23;;;;;;;;;;;;;;;;;;15047:15;15065:5;;;;;;;;;;;:15;;;15089:4;15065:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15047:48;;15119:1;15109:7;:11;15105:88;;;15136:5;;;;;;;;;;;:14;;;15151:21;;;;;;;;;;;15174:7;15136:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15105:88;14672:527;:::o;3847:24::-;;;;:::o;2071:32::-;;;;:::o;1389:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;10704:2467::-;5150:16;;;;;;;;;;;5149:17;5141:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10812:1:::1;10792:17;;:21;10784:30;;;::::0;::::1;;10833:17;;;;;;;;;;;10832:18;10824:54;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10910:31;;;;;;;;;;;10909:32;:68;;;;10945:20;:32;10966:10;10945:32;;;;;;;;;;;;;;;;;;;;;;;;;10909:68;:107;;;;10995:21;;;;;;;;;;;10981:35;;:10;:35;;;10909:107;10888:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11116:12;;11095:17;;:33;:77;;;;;11150:22;;11132:15;:40;11095:77;11091:559;;;11210:21;;;;;;;;;;;11196:35;;:10;:35;;;11188:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11091:559;;;11295:22;;11276:15;:41;11272:378;;11372:21;;;;;;;;;;;11358:35;;:10;:35;;;:66;;;;11423:1;11397:11;:23;11409:10;11397:23;;;;;;;;;;;;;;;;:27;11358:66;11333:156;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11532:12;;11511:17;;:33;;11503:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;11272:378;;;11600:39;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;11272:378;11091:559;11680:4;11660:17;;:24;;;;;;;;;;;;;;;;;;11695:30;11728:17;;11695:50;;11755:23;11793:19;;;;;;;;;;;11788:295;;11828:17;11848:57;11901:3;11848:48;11875:20;;11848:22;:26;;:48;;;;:::i;:::-;:52;;:57;;;;:::i;:::-;11828:77;;11949:18;;11937:9;:30;:78;;;;11993:22;11971:18;;:44;;11937:78;:135;;12054:18;;11937:135;;;12030:9;11937:135;11919:153;;11788:295;;12114:1;12096:15;:19;12092:172;;;12156:43;12183:15;12156:22;:26;;:43;;;;:::i;:::-;12131:68;;12213:14;;;;;;;;;;;:23;;:40;12237:15;12213:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;12092:172;12274:24;12301:69;12366:3;12301:60;12328:32;;12301:22;:26;;:60;;;;:::i;:::-;:64;;:69;;;;:::i;:::-;12274:96;;12380:26;12409:52;12440:20;;12409:26;12430:4;12409:16;:20;;:26;;;;:::i;:::-;:30;;:52;;;;:::i;:::-;12380:81;;12472:5;;;;;;;;;;;:13;;;624:42;12510:18;12472:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;624:42;12540:29;;;12578:16;12617:5;;;;;;;;;;;12637:18;12669:1;12684::::0;12699:18:::1;;;;;;;;;;;12731:31;12751:10;12731:15;:19;;:31;;;;:::i;:::-;12540:232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12783:26;12812:69;12847:33;12862:17;;12847:14;:33::i;:::-;12812:5;;;;;;;;;;;:15;;;12836:4;12812:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:34;;:69;;;;:::i;:::-;12783:98;;12916:1;12895:18;:22;12891:112;;;12933:5;;;;;;;;;;;:14;;;12948:23;;;;;;;;;;;12973:18;12933:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;12891:112;13038:66;13074:29;13098:4;13074:19;;:23;;:29;;;;:::i;:::-;13038:31;13064:4;13038:21;:25;;:31;;;;:::i;:::-;:35;;:66;;;;:::i;:::-;13013:22;:91;;;;13158:6;13140:15;:24;13114:23;:50;;;;5190:1;;;;;10704:2467::o:0;3695:36::-;;;;;;;;;;;;;:::o;2415:27::-;;;;:::o;1874:37::-;;;;:::o;2631:29::-;;;;:::o;7979:404::-;4635:10;4610:35;;:21;;;;;;;;;;;:35;;;:71;;;;4671:10;4649:32;;:18;;;;;;;;;;:32;;;4610:71;4589:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8220:10:::1;8208:9;:22;;;;8255:13;8240:12;:28;;;;8292:12;8278:11;:26;;;;8328:12;8314:11;:26;;;;8364:12;8350:11;:26;;;;7979:404:::0;;;;;:::o;8389:373::-;4367:10;4345:32;;:18;;;;;;;;;;:32;;;:64;;;;4399:10;4381:28;;:14;;;;;;;;;;;:28;;;4345:64;4337:73;;;;;;8606:19:::1;8585:18;;:40;;;;;;;;;;;;;;;;;;8658:21;8635:20;:44;;;;8710:19;8689:18;:40;;;;8748:7;8739:6;:16;;;;8389:373:::0;;;;:::o;944:19::-;;;;;;;;;;;;;:::o;2188:459:1:-;2246:7;2492:1;2487;:6;2483:45;;;2516:1;2509:8;;;;2483:45;2538:9;2554:1;2550;:5;2538:17;;2582:1;2577;2573;:5;;;;;;:10;2565:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2639:1;2632:8;;;2188:459;;;;;:::o;882:176::-;940:7;959:9;975:1;971;:5;959:17;;999:1;994;:6;;986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:1;1043:8;;;882:176;;;;:::o;9513:157:2:-;9592:7;9622:41;9647:15;;9622:20;9637:4;9622:10;:14;;:20;;;;:::i;:::-;:24;;:41;;;;:::i;:::-;9615:48;;9513:157;;;:::o;1329:134:1:-;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1406:50;;1329:134;;;;:::o;3109:130::-;3167:7;3193:39;3197:1;3200;3193:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3186:46;;3109:130;;;;:::o;1754:187::-;1840:7;1872:1;1867;:6;;1875:12;1859:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1898:9;1914:1;1910;:5;1898:17;;1933:1;1926:8;;;1754:187;;;;;:::o;3721:272::-;3807:7;3838:1;3834;:5;3841:12;3826:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:9;3880:1;3876;:5;;;;;;3864:17;;3985:1;3978:8;;;3721:272;;;;;:::o

Swarm Source

ipfs://e18ac61ae0cd7df4f09bbdfb601205e91e8def8e02f9a5a7ef7ddee3d5e73a44

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.