ETH Price: $2,066.49 (-5.61%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InstaSave

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-02
*/

pragma solidity ^0.5.0;

interface TubInterface {
    function open() external returns (bytes32);
    function join(uint) external;
    function exit(uint) external;
    function lock(bytes32, uint) external;
    function free(bytes32, uint) external;
    function draw(bytes32, uint) external;
    function wipe(bytes32, uint) external;
    function give(bytes32, address) external;
    function shut(bytes32) external;
    function cups(bytes32) external view returns (address, uint, uint, uint);
    function gem() external view returns (TokenInterface);
    function gov() external view returns (TokenInterface);
    function skr() external view returns (TokenInterface);
    function sai() external view returns (TokenInterface);
    function ink(bytes32) external view returns (uint);
    function tab(bytes32) external returns (uint);
    function rap(bytes32) external returns (uint);
    function per() external view returns (uint);
    function pep() external view returns (PepInterface);
}

interface PepInterface {
    function peek() external returns (bytes32, bool);
}


interface oracleInterface {
    function read() external view returns (bytes32);
}

interface UniswapExchange {
    function getEthToTokenOutputPrice(uint256 tokensBought) external view returns (uint256 ethSold);
    function getTokenToEthOutputPrice(uint256 ethBought) external view returns (uint256 tokensSold);
    function tokenToTokenSwapOutput(
        uint256 tokensBought,
        uint256 maxTokensSold,
        uint256 maxEthSold,
        uint256 deadline,
        address tokenAddr
        ) external returns (uint256  tokensSold);
}


interface TokenInterface {
    function allowance(address, address) external view returns (uint);
    function balanceOf(address) external view returns (uint);
    function approve(address, uint) external;
    function transfer(address, uint) external returns (bool);
    function transferFrom(address, address, uint) external returns (bool);
    function deposit() external payable;
    function withdraw(uint) external;
}

interface KyberInterface {
    function trade(
        address src,
        uint srcAmount,
        address dest,
        address destAddress,
        uint maxDestAmount,
        uint minConversionRate,
        address walletId
        ) external payable returns (uint);

    function getExpectedRate(
        address src,
        address dest,
        uint srcQty
        ) external view returns (uint, uint);
}

interface SplitSwapInterface {
    function getBest(address src, address dest, uint srcAmt) external view returns (uint bestExchange, uint destAmt);
    function ethToDaiSwap(uint splitAmt, uint slippageAmt) external payable returns (uint destAmt);
    function daiToEthSwap(uint srcAmt, uint splitAmt, uint slippageAmt) external returns (uint destAmt);
}


contract DSMath {

    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, "math-not-safe");
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, "math-not-safe");
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }

    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }

    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }

}


contract Helpers is DSMath {

    /**
     * @dev get MakerDAO CDP engine
     */
    function getSaiTubAddress() public pure returns (address sai) {
        sai = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3;
    }

    /**
     * @dev get MakerDAO Oracle for ETH price
     */
    function getOracleAddress() public pure returns (address oracle) {
        oracle = 0x729D19f657BD0614b4985Cf1D82531c67569197B;
    }

    /**
     * @dev get uniswap MKR exchange
     */
    function getUniswapMKRExchange() public pure returns (address ume) {
        ume = 0x2C4Bd064b998838076fa341A83d007FC2FA50957;
    }

    /**
     * @dev get uniswap DAI exchange
     */
    function getUniswapDAIExchange() public pure returns (address ude) {
        ude = 0x09cabEC1eAd1c0Ba254B09efb3EE13841712bE14;
    }

    /**
     * @dev get ethereum address for trade
     */
    function getAddressETH() public pure returns (address eth) {
        eth = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    }

    /**
     * @dev get ethereum address for trade
     */
    function getAddressDAI() public pure returns (address dai) {
        dai = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359;
    }

    /**
     * @dev get kyber proxy address
     */
    function getAddressKyber() public pure returns (address kyber) {
        kyber = 0x818E6FECD516Ecc3849DAf6845e3EC868087B755;
    }

    /**
     * @dev get admin address
     */
    function getAddressSplitSwap() public pure returns (address payable splitSwap) {
        splitSwap = 0xa4BCA645f9cB9e6F9ad8C56D90a65b07C2f4e1Dd;
    }

    function getCDPStats(bytes32 cup) internal view returns (uint ethCol, uint daiDebt, uint usdPerEth) {
        TubInterface tub = TubInterface(getSaiTubAddress());
        usdPerEth = uint(oracleInterface(getOracleAddress()).read());
        (, uint pethCol, uint debt,) = tub.cups(cup);
        ethCol = rmul(pethCol, tub.per()); // get ETH col from PETH col
        daiDebt = debt;
    }

}


contract MakerHelpers is Helpers {

    event LogLock(uint cdpNum, uint amtETH, uint amtPETH, address owner);
    event LogFree(uint cdpNum, uint amtETH, uint amtPETH, address owner);
    event LogDraw(uint cdpNum, uint amtDAI, address owner);
    event LogWipe(uint cdpNum, uint daiAmt, uint mkrFee, uint daiFee, address owner);

    function setAllowance(TokenInterface _token, address _spender) internal {
        if (_token.allowance(address(this), _spender) != uint(-1)) {
            _token.approve(_spender, uint(-1));
        }
    }

    function lock(uint cdpNum, uint ethAmt) internal {
        if (ethAmt > 0) {
            bytes32 cup = bytes32(cdpNum);
            address tubAddr = getSaiTubAddress();

            TubInterface tub = TubInterface(tubAddr);
            TokenInterface weth = tub.gem();
            TokenInterface peth = tub.skr();

            (address lad,,,) = tub.cups(cup);
            require(lad == address(this), "cup-not-owned");

            weth.deposit.value(ethAmt)();

            uint ink = rdiv(ethAmt, tub.per());
            ink = rmul(ink, tub.per()) <= ethAmt ? ink : ink - 1;

            setAllowance(weth, tubAddr);
            tub.join(ink);

            setAllowance(peth, tubAddr);
            tub.lock(cup, ink);

            emit LogLock(
                cdpNum,
                ethAmt,
                ink,
                address(this)
            );
        }
    }

    function free(uint cdpNum, uint jam) internal {
        if (jam > 0) {
            bytes32 cup = bytes32(cdpNum);
            address tubAddr = getSaiTubAddress();

            TubInterface tub = TubInterface(tubAddr);
            TokenInterface peth = tub.skr();
            TokenInterface weth = tub.gem();

            uint ink = rdiv(jam, tub.per());
            ink = rmul(ink, tub.per()) <= jam ? ink : ink - 1;
            tub.free(cup, ink);

            setAllowance(peth, tubAddr);

            tub.exit(ink);
            uint freeJam = weth.balanceOf(address(this)); // withdraw possible previous stuck WETH as well
            weth.withdraw(freeJam);

            emit LogFree(
                cdpNum,
                freeJam,
                ink,
                address(this)
            );
        }
    }

    function draw(uint cdpNum, uint _wad) internal {
        bytes32 cup = bytes32(cdpNum);
        if (_wad > 0) {
            TubInterface tub = TubInterface(getSaiTubAddress());

            tub.draw(cup, _wad);

            emit LogDraw(cdpNum, _wad, address(this));
        }
    }

    function wipe(uint cdpNum, uint _wad) internal {
        if (_wad > 0) {
            TubInterface tub = TubInterface(getSaiTubAddress());
            UniswapExchange daiEx = UniswapExchange(getUniswapDAIExchange());
            UniswapExchange mkrEx = UniswapExchange(getUniswapMKRExchange());
            TokenInterface dai = tub.sai();
            TokenInterface mkr = tub.gov();

            bytes32 cup = bytes32(cdpNum);

            (address lad,,,) = tub.cups(cup);
            require(lad == address(this), "cup-not-owned");

            setAllowance(dai, getSaiTubAddress());
            setAllowance(mkr, getSaiTubAddress());
            setAllowance(dai, getUniswapDAIExchange());

            (bytes32 val, bool ok) = tub.pep().peek();

            // tub.rap(cup) = stability fee in $, tub.tab(cup) = total DAI debt
            uint mkrFee = wdiv(rmul(_wad, rdiv(tub.rap(cup), tub.tab(cup))), uint(val));
            // uint mkrFee = wdiv(rmul(_wad, rdiv(tub.rap(cup), add(tub.rap(cup), tub.tab(cup)))), uint(val));

            uint daiFeeAmt = daiEx.getTokenToEthOutputPrice(mkrEx.getEthToTokenOutputPrice(mkrFee));
            uint daiAmt = sub(_wad, daiFeeAmt);

            if (ok && val != 0) {
                daiEx.tokenToTokenSwapOutput(
                    mkrFee,
                    daiFeeAmt,
                    uint(999000000000000000000),
                    uint(1899063809), // 6th March 2030 GMT // no logic
                    address(mkr)
                );
            }

            tub.wipe(cup, daiAmt);

            emit LogWipe(
                cdpNum,
                _wad,
                mkrFee,
                daiFeeAmt,
                address(this)
            );

        }
    }

}


contract GetDetails is MakerHelpers {

    function getMax(uint cdpID) public view returns (uint maxColToFree, uint maxDaiToDraw, uint ethInUSD) {
        bytes32 cup = bytes32(cdpID);
        (uint ethCol, uint daiDebt, uint usdPerEth) = getCDPStats(cup);
        uint colToUSD = sub(wmul(ethCol, usdPerEth), 10);
        uint minColNeeded = add(wmul(daiDebt, 1500000000000000000), 10);
        maxColToFree = wdiv(sub(colToUSD, minColNeeded), usdPerEth);
        uint maxDebtLimit = sub(wdiv(colToUSD, 1500000000000000000), 10);
        maxDaiToDraw = sub(maxDebtLimit, daiDebt);
        ethInUSD = usdPerEth;
    }

    function getSave(uint cdpID, uint ethToSwap) public view returns (uint finalEthCol, uint finalDaiDebt, uint finalColToUSD, bool canSave) {
        bytes32 cup = bytes32(cdpID);
        (uint ethCol, uint daiDebt, uint usdPerEth) = getCDPStats(cup);
        (finalEthCol, finalDaiDebt, finalColToUSD, canSave) = checkSave(
            ethCol,
            daiDebt,
            usdPerEth,
            ethToSwap
        );
    }

    function getLeverage(
        uint cdpID,
        uint daiToSwap
    ) public view returns (
        uint finalEthCol,
        uint finalDaiDebt,
        uint finalColToUSD,
        bool canLeverage
    )
    {
        bytes32 cup = bytes32(cdpID);
        (uint ethCol, uint daiDebt, uint usdPerEth) = getCDPStats(cup);
        (finalEthCol, finalDaiDebt, finalColToUSD, canLeverage) = checkLeverage(
            ethCol,
            daiDebt,
            usdPerEth,
            daiToSwap
        );
    }

    function checkSave(
        uint ethCol,
        uint daiDebt,
        uint usdPerEth,
        uint ethToSwap
    ) internal view returns
    (
        uint finalEthCol,
        uint finalDaiDebt,
        uint finalColToUSD,
        bool canSave
    )
    {
        uint colToUSD = sub(wmul(ethCol, usdPerEth), 10);
        uint minColNeeded = add(wmul(daiDebt, 1500000000000000000), 10);
        uint colToFree = wdiv(sub(colToUSD, minColNeeded), usdPerEth);
        if (ethToSwap < colToFree) {
            colToFree = ethToSwap;
        }
        (, uint expectedDAI) = SplitSwapInterface(getAddressSplitSwap()).getBest(getAddressETH(), getAddressDAI(), colToFree);
        if (expectedDAI < daiDebt) {
            finalEthCol = sub(ethCol, colToFree);
            finalDaiDebt = sub(daiDebt, expectedDAI);
            finalColToUSD = wmul(finalEthCol, usdPerEth);
            canSave = true;
        } else {
            finalEthCol = 0;
            finalDaiDebt = 0;
            finalColToUSD = 0;
            canSave = false;
        }
    }

    function checkLeverage(
        uint ethCol,
        uint daiDebt,
        uint usdPerEth,
        uint daiToSwap
    ) internal view returns
    (
        uint finalEthCol,
        uint finalDaiDebt,
        uint finalColToUSD,
        bool canLeverage
    )
    {
        uint colToUSD = sub(wmul(ethCol, usdPerEth), 10);
        uint maxDebtLimit = sub(wdiv(colToUSD, 1500000000000000000), 10);
        uint debtToBorrow = sub(maxDebtLimit, daiDebt);
        if (daiToSwap < debtToBorrow) {
            debtToBorrow = daiToSwap;
        }
        (, uint expectedETH) = SplitSwapInterface(getAddressSplitSwap()).getBest(getAddressDAI(), getAddressETH(), debtToBorrow);
        if (ethCol != 0) {
            finalEthCol = add(ethCol, expectedETH);
            finalDaiDebt = add(daiDebt, debtToBorrow);
            finalColToUSD = wmul(finalEthCol, usdPerEth);
            canLeverage = true;
        } else {
            finalEthCol = 0;
            finalDaiDebt = 0;
            finalColToUSD = 0;
            canLeverage = false;
        }
    }

}


contract Save is GetDetails {

    /**
     * @param what 2 for SAVE & 3 for LEVERAGE
     */
    event LogTrade(
        uint what, // 0 for BUY & 1 for SELL
        address src,
        uint srcAmt,
        address dest,
        uint destAmt,
        address beneficiary,
        uint minConversionRate,
        address affiliate
    );

    event LogSaveCDP(
        uint cdpID,
        uint srcETH,
        uint destDAI
    );

    event LogLeverageCDP(
        uint cdpID,
        uint srcDAI,
        uint destETH
    );


    function save(
        uint cdpID,
        uint colToSwap,
        uint splitAmt,
        uint slippageAmt
    ) public
    {
        bytes32 cup = bytes32(cdpID);
        (uint ethCol, uint daiDebt, uint usdPerEth) = getCDPStats(cup);
        uint colToFree = getColToFree(ethCol, daiDebt, usdPerEth);
        require(colToFree != 0, "no-collatral-to-free");
        if (colToSwap < colToFree) {
            colToFree = colToSwap;
        }
        free(cdpID, colToFree);
        uint ethToSwap = address(this).balance;
        ethToSwap = ethToSwap < colToFree ? ethToSwap : colToFree;
        uint destAmt = SplitSwapInterface(getAddressSplitSwap()).ethToDaiSwap.value(ethToSwap)(splitAmt, slippageAmt);
        wipe(cdpID, destAmt);

        emit LogSaveCDP(cdpID, ethToSwap, destAmt);
    }

    function leverage(
        uint cdpID,
        uint daiToSwap,
        uint splitAmt,
        uint slippageAmt
    ) public
    {
        bytes32 cup = bytes32(cdpID);
        (uint ethCol, uint daiDebt, uint usdPerEth) = getCDPStats(cup);
        uint debtToBorrow = getDebtToBorrow(ethCol, daiDebt, usdPerEth);
        require(debtToBorrow != 0, "No-debt-to-borrow");
        if (daiToSwap < debtToBorrow) {
            debtToBorrow = daiToSwap;
        }
        draw(cdpID, debtToBorrow);
        setAllowance(TokenInterface(getAddressDAI()), getAddressSplitSwap());
        uint destAmt = SplitSwapInterface(getAddressSplitSwap()).daiToEthSwap(debtToBorrow, splitAmt, slippageAmt);
        lock(cdpID, destAmt);

        emit LogLeverageCDP(cdpID, debtToBorrow, destAmt);
    }

    function getColToFree(uint ethCol, uint daiDebt, uint usdPerEth) internal pure returns (uint colToFree) {
        uint colToUSD = sub(wmul(ethCol, usdPerEth), 10);
        uint minColNeeded = add(wmul(daiDebt, 1500000000000000000), 10);
        colToFree = sub(wdiv(sub(colToUSD, minColNeeded), usdPerEth), 10);
    }

    function getDebtToBorrow(uint ethCol, uint daiDebt, uint usdPerEth) internal pure returns (uint debtToBorrow) {
        uint colToUSD = sub(wmul(ethCol, usdPerEth), 10);
        uint maxDebtLimit = sub(wdiv(colToUSD, 1500000000000000000), 10);
        debtToBorrow = sub(maxDebtLimit, daiDebt);
    }

}


contract InstaSave is Save {

    uint public version;

    /**
     * @dev setting up variables on deployment
     * 1...2...3 versioning in each subsequent deployments
     */
    constructor(uint _version) public {
        version = _version;
    }

    function() external payable {}

}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"cdpID","type":"uint256"},{"name":"daiToSwap","type":"uint256"},{"name":"splitAmt","type":"uint256"},{"name":"slippageAmt","type":"uint256"}],"name":"leverage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"cdpID","type":"uint256"},{"name":"ethToSwap","type":"uint256"}],"name":"getSave","outputs":[{"name":"finalEthCol","type":"uint256"},{"name":"finalDaiDebt","type":"uint256"},{"name":"finalColToUSD","type":"uint256"},{"name":"canSave","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAddressKyber","outputs":[{"name":"kyber","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getUniswapMKRExchange","outputs":[{"name":"ume","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getAddressETH","outputs":[{"name":"eth","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getOracleAddress","outputs":[{"name":"oracle","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getAddressDAI","outputs":[{"name":"dai","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getAddressSplitSwap","outputs":[{"name":"splitSwap","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"getUniswapDAIExchange","outputs":[{"name":"ude","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"cdpID","type":"uint256"},{"name":"colToSwap","type":"uint256"},{"name":"splitAmt","type":"uint256"},{"name":"slippageAmt","type":"uint256"}],"name":"save","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"cdpID","type":"uint256"},{"name":"daiToSwap","type":"uint256"}],"name":"getLeverage","outputs":[{"name":"finalEthCol","type":"uint256"},{"name":"finalDaiDebt","type":"uint256"},{"name":"finalColToUSD","type":"uint256"},{"name":"canLeverage","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"cdpID","type":"uint256"}],"name":"getMax","outputs":[{"name":"maxColToFree","type":"uint256"},{"name":"maxDaiToDraw","type":"uint256"},{"name":"ethInUSD","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSaiTubAddress","outputs":[{"name":"sai","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"inputs":[{"name":"_version","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"what","type":"uint256"},{"indexed":false,"name":"src","type":"address"},{"indexed":false,"name":"srcAmt","type":"uint256"},{"indexed":false,"name":"dest","type":"address"},{"indexed":false,"name":"destAmt","type":"uint256"},{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"minConversionRate","type":"uint256"},{"indexed":false,"name":"affiliate","type":"address"}],"name":"LogTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpID","type":"uint256"},{"indexed":false,"name":"srcETH","type":"uint256"},{"indexed":false,"name":"destDAI","type":"uint256"}],"name":"LogSaveCDP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpID","type":"uint256"},{"indexed":false,"name":"srcDAI","type":"uint256"},{"indexed":false,"name":"destETH","type":"uint256"}],"name":"LogLeverageCDP","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpNum","type":"uint256"},{"indexed":false,"name":"amtETH","type":"uint256"},{"indexed":false,"name":"amtPETH","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"LogLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpNum","type":"uint256"},{"indexed":false,"name":"amtETH","type":"uint256"},{"indexed":false,"name":"amtPETH","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"LogFree","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpNum","type":"uint256"},{"indexed":false,"name":"amtDAI","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"LogDraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"cdpNum","type":"uint256"},{"indexed":false,"name":"daiAmt","type":"uint256"},{"indexed":false,"name":"mkrFee","type":"uint256"},{"indexed":false,"name":"daiFee","type":"uint256"},{"indexed":false,"name":"owner","type":"address"}],"name":"LogWipe","type":"event"}]

608060405234801561001057600080fd5b50604051602080612a6e8339810180604052602081101561003057600080fd5b81019080805190602001909291905050508060008190555050612a16806100586000396000f3fe6080604052600436106100dd5760003560e01c8063c865463c1161007f578063debe06bf11610059578063debe06bf14610436578063e254ae5a1461048f578063e688f89d14610501578063f1d9a1501461055e576100dd565b8063c865463c14610331578063d5a649db14610388578063db5a5d99146103df576100dd565b806391b0b618116100bb57806391b0b618146101d557806394c4a1241461022c578063ab1be68614610283578063b18b78dd146102da576100dd565b80633bbef0e9146100df57806354fd4d50146101385780636c47c7ed14610163575b005b3480156100eb57600080fd5b506101366004803603608081101561010257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506105b5565b005b34801561014457600080fd5b5061014d61078b565b6040518082815260200191505060405180910390f35b34801561016f57600080fd5b506101a66004803603604081101561018657600080fd5b810190808035906020019092919080359060200190929190505050610791565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156101e157600080fd5b506101ea6107dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023857600080fd5b506102416107f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028f57600080fd5b50610298610814565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e657600080fd5b506102ef610830565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033d57600080fd5b5061034661084c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039457600080fd5b5061039d610868565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103eb57600080fd5b506103f4610884565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044257600080fd5b5061048d6004803603608081101561045957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506108a0565b005b34801561049b57600080fd5b506104d2600480360360408110156104b257600080fd5b810190808035906020019092919080359060200190929190505050610a85565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b34801561050d57600080fd5b5061053a6004803603602081101561052457600080fd5b8101908080359060200190929190505050610ad0565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561056a57600080fd5b50610573610b7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008460001b905060008060006105cb84610b96565b92509250925060006105de848484610d7f565b90506000811415610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f2d646562742d746f2d626f72726f7700000000000000000000000000000081525060200191505060405180910390fd5b80881015610663578790505b61066d8982610dcd565b61068561067861084c565b610680610868565b610ed7565b600061068f610868565b73ffffffffffffffffffffffffffffffffffffffff16638aec35dc838a8a6040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050602060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b505050506040513d602081101561071b57600080fd5b810190808051906020019092919050505090506107388a826110ad565b7f2acb6b38e174890a255486d3417fcd6719c4a0f790cd59fbe74d130fb5a608c48a838360405180848152602001838152602001828152602001935050505060405180910390a150505050505050505050565b60005481565b60008060008060008660001b905060008060006107ad84610b96565b9250925092506107bf8383838c611631565b809850819950829a50839b50505050505050505092959194509250565b600073818e6fecd516ecc3849daf6845e3ec868087b755905090565b6000732c4bd064b998838076fa341a83d007fc2fa50957905090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073729d19f657bd0614b4985cf1d82531c67569197b905090565b60007389d24a6b4ccb1b6faa2625fe562bdd9a23260359905090565b600073a4bca645f9cb9e6f9ad8c56d90a65b07c2f4e1dd905090565b60007309cabec1ead1c0ba254b09efb3ee13841712be14905090565b60008460001b905060008060006108b684610b96565b92509250925060006108c98484846117fe565b90506000811415610942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f2d636f6c6c617472616c2d746f2d6672656500000000000000000000000081525060200191505060405180910390fd5b8088101561094e578790505b610958898261185f565b60003073ffffffffffffffffffffffffffffffffffffffff163190508181106109815781610983565b805b9050600061098f610868565b73ffffffffffffffffffffffffffffffffffffffff166323864c52838b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b1580156109e957600080fd5b505af11580156109fd573d6000803e3d6000fd5b50505050506040513d6020811015610a1457600080fd5b81019080805190602001909291905050509050610a318b82611d4d565b7f6810ff3b6051a65df9db2074fbbc6c6ca9460b80e03a0b96f559bb2d2629a8698b838360405180848152602001838152602001828152602001935050505060405180910390a15050505050505050505050565b60008060008060008660001b90506000806000610aa184610b96565b925092509250610ab38383838c61258f565b809850819950829a50839b50505050505050505092959194509250565b6000806000808460001b90506000806000610aea84610b96565b9250925092506000610b06610aff8584612753565b600a612793565b90506000610b26610b1f856714d1120d7b160000612753565b600a612816565b9050610b3b610b358383612793565b84612899565b98506000610b5b610b54846714d1120d7b160000612899565b600a612793565b9050610b678186612793565b9850839750505050505050509193909250565b600073448a5065aebb8e423f0896e6c5d525c040f59af3905090565b600080600080610ba4610b7a565b9050610bae610830565b73ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b158015610bf357600080fd5b505afa158015610c07573d6000803e3d6000fd5b505050506040513d6020811015610c1d57600080fd5b810190808051906020019092919050505060001c91506000808273ffffffffffffffffffffffffffffffffffffffff1663fdac0025886040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b158015610c8757600080fd5b505afa158015610c9b573d6000803e3d6000fd5b505050506040513d6080811015610cb157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050509250925050610d70828473ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3057600080fd5b505afa158015610d44573d6000803e3d6000fd5b505050506040513d6020811015610d5a57600080fd5b81019080805190602001909291905050506128d1565b95508094505050509193909250565b600080610d96610d8f8685612753565b600a612793565b90506000610db6610daf836714d1120d7b160000612899565b600a612793565b9050610dc28186612793565b925050509392505050565b60008260001b90506000821115610ed2576000610de8610b7a565b90508073ffffffffffffffffffffffffffffffffffffffff1663440f19ba83856040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050507f2552409de7c93ad237013bdc31f6351559f2d50c8b43d20b83fc75639a55e431848430604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8273ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b8101908080519060200190929190505050146110a9578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050505b5050565b600081111561162d5760008260001b905060006110c8610b7a565b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561111757600080fd5b505afa15801561112b573d6000803e3d6000fd5b505050506040513d602081101561114157600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff16630f8a771e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d60208110156111c657600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff1663fdac0025876040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561122c57600080fd5b505afa158015611240573d6000803e3d6000fd5b505050506040513d608081101561125657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6375702d6e6f742d6f776e65640000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b15801561137357600080fd5b505af1158015611387573d6000803e3d6000fd5b50505050506000611418888673ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d857600080fd5b505afa1580156113ec573d6000803e3d6000fd5b505050506040513d602081101561140257600080fd5b8101908080519060200190929190505050612919565b9050876114a5828773ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b81019080805190602001909291905050506128d1565b11156114b457600181036114b6565b805b90506114c28487610ed7565b8473ffffffffffffffffffffffffffffffffffffffff1663049878f3826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561151557600080fd5b505af1158015611529573d6000803e3d6000fd5b505050506115378387610ed7565b8473ffffffffffffffffffffffffffffffffffffffff1663b3b77a5188836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b505050507fa66947e0e444664290dad9ea8bdc946a0662a93c04cc0db7dc993a19319d39ed89898330604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1505050505050505b5050565b600080600080600061164d6116468a89612753565b600a612793565b9050600061166d6116668a6714d1120d7b160000612753565b600a612816565b9050600061168461167e8484612793565b8a612899565b905080881015611692578790505b600061169c610868565b73ffffffffffffffffffffffffffffffffffffffff166371396f6d6116bf610814565b6116c761084c565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604080518083038186803b15801561176157600080fd5b505afa158015611775573d6000803e3d6000fd5b505050506040513d604081101561178b57600080fd5b8101908080519060200190929190805190602001909291905050509150508a8110156117de576117bb8c83612793565b97506117c78b82612793565b96506117d3888b612753565b9550600194506117ef565b600097506000965060009550600094505b50505050945094509450949050565b60008061181561180e8685612753565b600a612793565b9050600061183561182e866714d1120d7b160000612753565b600a612816565b905061185461184d6118478484612793565b86612899565b600a612793565b925050509392505050565b6000811115611d495760008260001b9050600061187a610b7a565b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff16630f8a771e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c957600080fd5b505afa1580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090506000611a17878573ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d757600080fd5b505afa1580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b8101908080519060200190929190505050612919565b905086611aa4828673ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6457600080fd5b505afa158015611a78573d6000803e3d6000fd5b505050506040513d6020811015611a8e57600080fd5b81019080805190602001909291905050506128d1565b1115611ab35760018103611ab5565b805b90508373ffffffffffffffffffffffffffffffffffffffff1663a5cd184e87836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611b1257600080fd5b505af1158015611b26573d6000803e3d6000fd5b50505050611b348386610ed7565b8373ffffffffffffffffffffffffffffffffffffffff16637f8661a1826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b8757600080fd5b505af1158015611b9b573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1e57600080fd5b505afa158015611c32573d6000803e3d6000fd5b505050506040513d6020811015611c4857600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b505050507fbc364e2c948b1a58aa818f1d663cbf625acb9d3e827d8ba7661ee805ae63506089828430604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1505050505050505b5050565b600081111561258b576000611d60610b7a565b90506000611d6c610884565b90506000611d786107f8565b905060008373ffffffffffffffffffffffffffffffffffffffff16639166cba46040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc257600080fd5b505afa158015611dd6573d6000803e3d6000fd5b505050506040513d6020811015611dec57600080fd5b8101908080519060200190929190505050905060008473ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d6020811015611e7157600080fd5b8101908080519060200190929190505050905060008760001b905060008673ffffffffffffffffffffffffffffffffffffffff1663fdac0025836040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b158015611edf57600080fd5b505afa158015611ef3573d6000803e3d6000fd5b505050506040513d6080811015611f0957600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6375702d6e6f742d6f776e65640000000000000000000000000000000000000081525060200191505060405180910390fd5b611fef84611fea610b7a565b610ed7565b61200083611ffb610b7a565b610ed7565b6120118461200c610884565b610ed7565b6000808873ffffffffffffffffffffffffffffffffffffffff1663ace237f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d602081101561208457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506040513d604081101561210557600080fd5b81019080805190602001909291908051906020019092919050505091509150600061225f6122568c6122518d73ffffffffffffffffffffffffffffffffffffffff16636f78ee0d8a6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d60208110156121ad57600080fd5b81019080805190602001909291905050508e73ffffffffffffffffffffffffffffffffffffffff1663f7c8d6348b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b505050506040513d602081101561223b57600080fd5b8101908080519060200190929190505050612919565b6128d1565b8460001c612899565b905060008973ffffffffffffffffffffffffffffffffffffffff16632640f62c8a73ffffffffffffffffffffffffffffffffffffffff166359e94862856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122d057600080fd5b505afa1580156122e4573d6000803e3d6000fd5b505050506040513d60208110156122fa57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561233f57600080fd5b505afa158015612353573d6000803e3d6000fd5b505050506040513d602081101561236957600080fd5b8101908080519060200190929190505050905060006123888d83612793565b905083801561239a57506000801b8514155b15612488578a73ffffffffffffffffffffffffffffffffffffffff1663b040d5458484683627e8f712373c00006371316a018d6040518663ffffffff1660e01b8152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b8101908080519060200190929190505050505b8b73ffffffffffffffffffffffffffffffffffffffff166373b3810188836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156124e357600080fd5b505af11580156124f7573d6000803e3d6000fd5b505050507fc61fae64789cde417503f7bd67082d71c8379712017e446877dd1c26b1bf4c9c8e8e858530604051808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15050505050505050505050505b5050565b60008060008060006125ab6125a48a89612753565b600a612793565b905060006125cb6125c4836714d1120d7b160000612899565b600a612793565b905060006125d9828b612793565b9050808810156125e7578790505b60006125f1610868565b73ffffffffffffffffffffffffffffffffffffffff166371396f6d61261461084c565b61261c610814565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604080518083038186803b1580156126b657600080fd5b505afa1580156126ca573d6000803e3d6000fd5b505050506040513d60408110156126e057600080fd5b81019080805190602001909291908051906020019092919050505091505060008c14612733576127108c82612816565b975061271c8b83612816565b9650612728888b612753565b955060019450612744565b600097506000965060009550600094505b50505050945094509450949050565b6000670de0b6b3a764000061278361276b8585612955565b6002670de0b6b3a76400008161277d57fe5b04612816565b8161278a57fe5b04905092915050565b6000828284039150811115612810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284019150811015612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d6174682d6e6f742d736166650000000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b6000816128c16128b185670de0b6b3a7640000612955565b600285816128bb57fe5b04612816565b816128c857fe5b04905092915050565b60006b033b2e3c9fd0803ce80000006129096128ed8585612955565b60026b033b2e3c9fd0803ce80000008161290357fe5b04612816565b8161291057fe5b04905092915050565b600081612945612935856b033b2e3c9fd0803ce8000000612955565b6002858161293f57fe5b04612816565b8161294c57fe5b04905092915050565b600080821480612972575082828385029250828161296f57fe5b04145b6129e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d6174682d6e6f742d736166650000000000000000000000000000000000000081525060200191505060405180910390fd5b9291505056fea165627a7a72305820c222086733d09eb0ecd70e056911b533720036d407db2459326d581dfc10db4800290000000000000000000000000000000000000000000000000000000000000002

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063c865463c1161007f578063debe06bf11610059578063debe06bf14610436578063e254ae5a1461048f578063e688f89d14610501578063f1d9a1501461055e576100dd565b8063c865463c14610331578063d5a649db14610388578063db5a5d99146103df576100dd565b806391b0b618116100bb57806391b0b618146101d557806394c4a1241461022c578063ab1be68614610283578063b18b78dd146102da576100dd565b80633bbef0e9146100df57806354fd4d50146101385780636c47c7ed14610163575b005b3480156100eb57600080fd5b506101366004803603608081101561010257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506105b5565b005b34801561014457600080fd5b5061014d61078b565b6040518082815260200191505060405180910390f35b34801561016f57600080fd5b506101a66004803603604081101561018657600080fd5b810190808035906020019092919080359060200190929190505050610791565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156101e157600080fd5b506101ea6107dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023857600080fd5b506102416107f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028f57600080fd5b50610298610814565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e657600080fd5b506102ef610830565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561033d57600080fd5b5061034661084c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561039457600080fd5b5061039d610868565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103eb57600080fd5b506103f4610884565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044257600080fd5b5061048d6004803603608081101561045957600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291905050506108a0565b005b34801561049b57600080fd5b506104d2600480360360408110156104b257600080fd5b810190808035906020019092919080359060200190929190505050610a85565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b34801561050d57600080fd5b5061053a6004803603602081101561052457600080fd5b8101908080359060200190929190505050610ad0565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561056a57600080fd5b50610573610b7a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008460001b905060008060006105cb84610b96565b92509250925060006105de848484610d7f565b90506000811415610657576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f2d646562742d746f2d626f72726f7700000000000000000000000000000081525060200191505060405180910390fd5b80881015610663578790505b61066d8982610dcd565b61068561067861084c565b610680610868565b610ed7565b600061068f610868565b73ffffffffffffffffffffffffffffffffffffffff16638aec35dc838a8a6040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050602060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b505050506040513d602081101561071b57600080fd5b810190808051906020019092919050505090506107388a826110ad565b7f2acb6b38e174890a255486d3417fcd6719c4a0f790cd59fbe74d130fb5a608c48a838360405180848152602001838152602001828152602001935050505060405180910390a150505050505050505050565b60005481565b60008060008060008660001b905060008060006107ad84610b96565b9250925092506107bf8383838c611631565b809850819950829a50839b50505050505050505092959194509250565b600073818e6fecd516ecc3849daf6845e3ec868087b755905090565b6000732c4bd064b998838076fa341a83d007fc2fa50957905090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073729d19f657bd0614b4985cf1d82531c67569197b905090565b60007389d24a6b4ccb1b6faa2625fe562bdd9a23260359905090565b600073a4bca645f9cb9e6f9ad8c56d90a65b07c2f4e1dd905090565b60007309cabec1ead1c0ba254b09efb3ee13841712be14905090565b60008460001b905060008060006108b684610b96565b92509250925060006108c98484846117fe565b90506000811415610942576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f2d636f6c6c617472616c2d746f2d6672656500000000000000000000000081525060200191505060405180910390fd5b8088101561094e578790505b610958898261185f565b60003073ffffffffffffffffffffffffffffffffffffffff163190508181106109815781610983565b805b9050600061098f610868565b73ffffffffffffffffffffffffffffffffffffffff166323864c52838b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b1580156109e957600080fd5b505af11580156109fd573d6000803e3d6000fd5b50505050506040513d6020811015610a1457600080fd5b81019080805190602001909291905050509050610a318b82611d4d565b7f6810ff3b6051a65df9db2074fbbc6c6ca9460b80e03a0b96f559bb2d2629a8698b838360405180848152602001838152602001828152602001935050505060405180910390a15050505050505050505050565b60008060008060008660001b90506000806000610aa184610b96565b925092509250610ab38383838c61258f565b809850819950829a50839b50505050505050505092959194509250565b6000806000808460001b90506000806000610aea84610b96565b9250925092506000610b06610aff8584612753565b600a612793565b90506000610b26610b1f856714d1120d7b160000612753565b600a612816565b9050610b3b610b358383612793565b84612899565b98506000610b5b610b54846714d1120d7b160000612899565b600a612793565b9050610b678186612793565b9850839750505050505050509193909250565b600073448a5065aebb8e423f0896e6c5d525c040f59af3905090565b600080600080610ba4610b7a565b9050610bae610830565b73ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b815260040160206040518083038186803b158015610bf357600080fd5b505afa158015610c07573d6000803e3d6000fd5b505050506040513d6020811015610c1d57600080fd5b810190808051906020019092919050505060001c91506000808273ffffffffffffffffffffffffffffffffffffffff1663fdac0025886040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b158015610c8757600080fd5b505afa158015610c9b573d6000803e3d6000fd5b505050506040513d6080811015610cb157600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050509250925050610d70828473ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b158015610d3057600080fd5b505afa158015610d44573d6000803e3d6000fd5b505050506040513d6020811015610d5a57600080fd5b81019080805190602001909291905050506128d1565b95508094505050509193909250565b600080610d96610d8f8685612753565b600a612793565b90506000610db6610daf836714d1120d7b160000612899565b600a612793565b9050610dc28186612793565b925050509392505050565b60008260001b90506000821115610ed2576000610de8610b7a565b90508073ffffffffffffffffffffffffffffffffffffffff1663440f19ba83856040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050507f2552409de7c93ad237013bdc31f6351559f2d50c8b43d20b83fc75639a55e431848430604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1505b505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8273ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610fa957600080fd5b505afa158015610fbd573d6000803e3d6000fd5b505050506040513d6020811015610fd357600080fd5b8101908080519060200190929190505050146110a9578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561109057600080fd5b505af11580156110a4573d6000803e3d6000fd5b505050505b5050565b600081111561162d5760008260001b905060006110c8610b7a565b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561111757600080fd5b505afa15801561112b573d6000803e3d6000fd5b505050506040513d602081101561114157600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff16630f8a771e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561119c57600080fd5b505afa1580156111b0573d6000803e3d6000fd5b505050506040513d60208110156111c657600080fd5b8101908080519060200190929190505050905060008373ffffffffffffffffffffffffffffffffffffffff1663fdac0025876040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b15801561122c57600080fd5b505afa158015611240573d6000803e3d6000fd5b505050506040513d608081101561125657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6375702d6e6f742d6f776e65640000000000000000000000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b15801561137357600080fd5b505af1158015611387573d6000803e3d6000fd5b50505050506000611418888673ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b1580156113d857600080fd5b505afa1580156113ec573d6000803e3d6000fd5b505050506040513d602081101561140257600080fd5b8101908080519060200190929190505050612919565b9050876114a5828773ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561146557600080fd5b505afa158015611479573d6000803e3d6000fd5b505050506040513d602081101561148f57600080fd5b81019080805190602001909291905050506128d1565b11156114b457600181036114b6565b805b90506114c28487610ed7565b8473ffffffffffffffffffffffffffffffffffffffff1663049878f3826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561151557600080fd5b505af1158015611529573d6000803e3d6000fd5b505050506115378387610ed7565b8473ffffffffffffffffffffffffffffffffffffffff1663b3b77a5188836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b15801561159257600080fd5b505af11580156115a6573d6000803e3d6000fd5b505050507fa66947e0e444664290dad9ea8bdc946a0662a93c04cc0db7dc993a19319d39ed89898330604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1505050505050505b5050565b600080600080600061164d6116468a89612753565b600a612793565b9050600061166d6116668a6714d1120d7b160000612753565b600a612816565b9050600061168461167e8484612793565b8a612899565b905080881015611692578790505b600061169c610868565b73ffffffffffffffffffffffffffffffffffffffff166371396f6d6116bf610814565b6116c761084c565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604080518083038186803b15801561176157600080fd5b505afa158015611775573d6000803e3d6000fd5b505050506040513d604081101561178b57600080fd5b8101908080519060200190929190805190602001909291905050509150508a8110156117de576117bb8c83612793565b97506117c78b82612793565b96506117d3888b612753565b9550600194506117ef565b600097506000965060009550600094505b50505050945094509450949050565b60008061181561180e8685612753565b600a612793565b9050600061183561182e866714d1120d7b160000612753565b600a612816565b905061185461184d6118478484612793565b86612899565b600a612793565b925050509392505050565b6000811115611d495760008260001b9050600061187a610b7a565b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff16630f8a771e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c957600080fd5b505afa1580156118dd573d6000803e3d6000fd5b505050506040513d60208110156118f357600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff16637bd2bea76040518163ffffffff1660e01b815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090506000611a17878573ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b1580156119d757600080fd5b505afa1580156119eb573d6000803e3d6000fd5b505050506040513d6020811015611a0157600080fd5b8101908080519060200190929190505050612919565b905086611aa4828673ffffffffffffffffffffffffffffffffffffffff16637ec9c3b86040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6457600080fd5b505afa158015611a78573d6000803e3d6000fd5b505050506040513d6020811015611a8e57600080fd5b81019080805190602001909291905050506128d1565b1115611ab35760018103611ab5565b805b90508373ffffffffffffffffffffffffffffffffffffffff1663a5cd184e87836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611b1257600080fd5b505af1158015611b26573d6000803e3d6000fd5b50505050611b348386610ed7565b8373ffffffffffffffffffffffffffffffffffffffff16637f8661a1826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b8757600080fd5b505af1158015611b9b573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1e57600080fd5b505afa158015611c32573d6000803e3d6000fd5b505050506040513d6020811015611c4857600080fd5b810190808051906020019092919050505090508273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b505050507fbc364e2c948b1a58aa818f1d663cbf625acb9d3e827d8ba7661ee805ae63506089828430604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390a1505050505050505b5050565b600081111561258b576000611d60610b7a565b90506000611d6c610884565b90506000611d786107f8565b905060008373ffffffffffffffffffffffffffffffffffffffff16639166cba46040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc257600080fd5b505afa158015611dd6573d6000803e3d6000fd5b505050506040513d6020811015611dec57600080fd5b8101908080519060200190929190505050905060008473ffffffffffffffffffffffffffffffffffffffff166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4757600080fd5b505afa158015611e5b573d6000803e3d6000fd5b505050506040513d6020811015611e7157600080fd5b8101908080519060200190929190505050905060008760001b905060008673ffffffffffffffffffffffffffffffffffffffff1663fdac0025836040518263ffffffff1660e01b81526004018082815260200191505060806040518083038186803b158015611edf57600080fd5b505afa158015611ef3573d6000803e3d6000fd5b505050506040513d6080811015611f0957600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505090503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6375702d6e6f742d6f776e65640000000000000000000000000000000000000081525060200191505060405180910390fd5b611fef84611fea610b7a565b610ed7565b61200083611ffb610b7a565b610ed7565b6120118461200c610884565b610ed7565b6000808873ffffffffffffffffffffffffffffffffffffffff1663ace237f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561205a57600080fd5b505afa15801561206e573d6000803e3d6000fd5b505050506040513d602081101561208457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff166359e02dd76040518163ffffffff1660e01b81526004016040805180830381600087803b1580156120db57600080fd5b505af11580156120ef573d6000803e3d6000fd5b505050506040513d604081101561210557600080fd5b81019080805190602001909291908051906020019092919050505091509150600061225f6122568c6122518d73ffffffffffffffffffffffffffffffffffffffff16636f78ee0d8a6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561218357600080fd5b505af1158015612197573d6000803e3d6000fd5b505050506040513d60208110156121ad57600080fd5b81019080805190602001909291905050508e73ffffffffffffffffffffffffffffffffffffffff1663f7c8d6348b6040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b505050506040513d602081101561223b57600080fd5b8101908080519060200190929190505050612919565b6128d1565b8460001c612899565b905060008973ffffffffffffffffffffffffffffffffffffffff16632640f62c8a73ffffffffffffffffffffffffffffffffffffffff166359e94862856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156122d057600080fd5b505afa1580156122e4573d6000803e3d6000fd5b505050506040513d60208110156122fa57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561233f57600080fd5b505afa158015612353573d6000803e3d6000fd5b505050506040513d602081101561236957600080fd5b8101908080519060200190929190505050905060006123888d83612793565b905083801561239a57506000801b8514155b15612488578a73ffffffffffffffffffffffffffffffffffffffff1663b040d5458484683627e8f712373c00006371316a018d6040518663ffffffff1660e01b8152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050602060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b505050506040513d602081101561247557600080fd5b8101908080519060200190929190505050505b8b73ffffffffffffffffffffffffffffffffffffffff166373b3810188836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b1580156124e357600080fd5b505af11580156124f7573d6000803e3d6000fd5b505050507fc61fae64789cde417503f7bd67082d71c8379712017e446877dd1c26b1bf4c9c8e8e858530604051808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390a15050505050505050505050505b5050565b60008060008060006125ab6125a48a89612753565b600a612793565b905060006125cb6125c4836714d1120d7b160000612899565b600a612793565b905060006125d9828b612793565b9050808810156125e7578790505b60006125f1610868565b73ffffffffffffffffffffffffffffffffffffffff166371396f6d61261461084c565b61261c610814565b856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604080518083038186803b1580156126b657600080fd5b505afa1580156126ca573d6000803e3d6000fd5b505050506040513d60408110156126e057600080fd5b81019080805190602001909291908051906020019092919050505091505060008c14612733576127108c82612816565b975061271c8b83612816565b9650612728888b612753565b955060019450612744565b600097506000965060009550600094505b50505050945094509450949050565b6000670de0b6b3a764000061278361276b8585612955565b6002670de0b6b3a76400008161277d57fe5b04612816565b8161278a57fe5b04905092915050565b6000828284039150811115612810576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284019150811015612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d6174682d6e6f742d736166650000000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b6000816128c16128b185670de0b6b3a7640000612955565b600285816128bb57fe5b04612816565b816128c857fe5b04905092915050565b60006b033b2e3c9fd0803ce80000006129096128ed8585612955565b60026b033b2e3c9fd0803ce80000008161290357fe5b04612816565b8161291057fe5b04905092915050565b600081612945612935856b033b2e3c9fd0803ce8000000612955565b6002858161293f57fe5b04612816565b8161294c57fe5b04905092915050565b600080821480612972575082828385029250828161296f57fe5b04145b6129e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d6174682d6e6f742d736166650000000000000000000000000000000000000081525060200191505060405180910390fd5b9291505056fea165627a7a72305820c222086733d09eb0ecd70e056911b533720036d407db2459326d581dfc10db480029

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

0000000000000000000000000000000000000000000000000000000000000002

-----Decoded View---------------
Arg [0] : _version (uint256): 2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000002


Deployed Bytecode Sourcemap

16973:304:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15519:802;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15519:802:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;15519:802:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17009:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17009:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10982:433;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10982:433:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10982:433:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5177:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5177:132:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4390:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4390:134:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4792:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4792:126:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4191:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4191:135:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4988:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4988:126:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5366:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5366:152:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4588:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4588:134:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14694:817;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14694:817:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14694:817:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11423:522;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11423:522:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11423:522:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:583;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10391:583:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10391:583:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3989:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3989:129:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15519:802;15664:11;15686:5;15678:14;;15664:28;;15704:11;15717:12;15731:14;15749:16;15761:3;15749:11;:16::i;:::-;15703:62;;;;;;15776:17;15796:43;15812:6;15820:7;15829:9;15796:15;:43::i;:::-;15776:63;;15874:1;15858:12;:17;;15850:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15924:12;15912:9;:24;15908:81;;;15968:9;15953:24;;15908:81;15999:25;16004:5;16011:12;15999:4;:25::i;:::-;16035:68;16063:15;:13;:15::i;:::-;16081:21;:19;:21::i;:::-;16035:12;:68::i;:::-;16114:12;16148:21;:19;:21::i;:::-;16129:54;;;16184:12;16198:8;16208:11;16129:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16129:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16129:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16129:91:0;;;;;;;;;;;;;;;;16114:106;;16231:20;16236:5;16243:7;16231:4;:20::i;:::-;16269:44;16284:5;16291:12;16305:7;16269:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15519:802;;;;;;;;;;:::o;17009:19::-;;;;:::o;10982:433::-;11048:16;11066:17;11085:18;11105:12;11130:11;11152:5;11144:14;;11130:28;;11170:11;11183:12;11197:14;11215:16;11227:3;11215:11;:16::i;:::-;11169:62;;;;;;11296:111;11320:6;11341:7;11363:9;11387;11296;:111::i;:::-;11242:165;;;;;;;;;;;;;;;;10982:433;;;;;;;;;;;:::o;5177:132::-;5225:13;5259:42;5251:50;;5177:132;:::o;4390:134::-;4444:11;4474:42;4468:48;;4390:134;:::o;4792:126::-;4838:11;4868:42;4862:48;;4792:126;:::o;4191:135::-;4240:14;4276:42;4267:51;;4191:135;:::o;4988:126::-;5034:11;5064:42;5058:48;;4988:126;:::o;5366:152::-;5418:25;5468:42;5456:54;;5366:152;:::o;4588:134::-;4642:11;4672:42;4666:48;;4588:134;:::o;14694:817::-;14835:11;14857:5;14849:14;;14835:28;;14875:11;14888:12;14902:14;14920:16;14932:3;14920:11;:16::i;:::-;14874:62;;;;;;14947:14;14964:40;14977:6;14985:7;14994:9;14964:12;:40::i;:::-;14947:57;;15036:1;15023:9;:14;;15015:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15089:9;15077;:21;15073:75;;;15127:9;15115:21;;15073:75;15158:22;15163:5;15170:9;15158:4;:22::i;:::-;15191:14;15216:4;15208:21;;;15191:38;;15264:9;15252;:21;:45;;15288:9;15252:45;;;15276:9;15252:45;15240:57;;15308:12;15342:21;:19;:21::i;:::-;15323:54;;;15384:9;15395:8;15405:11;15323:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15323:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15323:94:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15323:94:0;;;;;;;;;;;;;;;;15308:109;;15428:20;15433:5;15440:7;15428:4;:20::i;:::-;15466:37;15477:5;15484:9;15495:7;15466:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14694:817;;;;;;;;;;;:::o;11423:522::-;11528:16;11555:17;11583:18;11612:16;11652:11;11674:5;11666:14;;11652:28;;11692:11;11705:12;11719:14;11737:16;11749:3;11737:11;:16::i;:::-;11691:62;;;;;;11822:115;11850:6;11871:7;11893:9;11917;11822:13;:115::i;:::-;11764:173;;;;;;;;;;;;;;;;11423:522;;;;;;;;;;;:::o;10391:583::-;10440:17;10459;10478:13;10504:11;10526:5;10518:14;;10504:28;;10544:11;10557:12;10571:14;10589:16;10601:3;10589:11;:16::i;:::-;10543:62;;;;;;10616:13;10632:32;10636:23;10641:6;10649:9;10636:4;:23::i;:::-;10661:2;10632:3;:32::i;:::-;10616:48;;10675:17;10695:43;10699:34;10704:7;10713:19;10699:4;:34::i;:::-;10735:2;10695:3;:43::i;:::-;10675:63;;10764:44;10769:27;10773:8;10783:12;10769:3;:27::i;:::-;10798:9;10764:4;:44::i;:::-;10749:59;;10819:17;10839:44;10843:35;10848:8;10858:19;10843:4;:35::i;:::-;10880:2;10839:3;:44::i;:::-;10819:64;;10909:26;10913:12;10927:7;10909:3;:26::i;:::-;10894:41;;10957:9;10946:20;;10391:583;;;;;;;;;;;;:::o;3989:129::-;4038:11;4068:42;4062:48;;3989:129;:::o;5526:394::-;5583:11;5596:12;5610:14;5637:16;5669:18;:16;:18::i;:::-;5637:51;;5732:18;:16;:18::i;:::-;5716:40;;;:42;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5716:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5716:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5716:42:0;;;;;;;;;;;;;;;;5711:48;;5699:60;;5773:12;5787:9;5801:3;:8;;;5810:3;5801:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5801:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5801:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;5801:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5770:44;;;;;;5834:24;5839:7;5848:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;5848:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5848:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5848:9:0;;;;;;;;;;;;;;;;5834:4;:24::i;:::-;5825:33;;5908:4;5898:14;;5526:394;;;;;;;;:::o;16658:304::-;16749:17;16779:13;16795:32;16799:23;16804:6;16812:9;16799:4;:23::i;:::-;16824:2;16795:3;:32::i;:::-;16779:48;;16838:17;16858:44;16862:35;16867:8;16877:19;16862:4;:35::i;:::-;16899:2;16858:3;:44::i;:::-;16838:64;;16928:26;16932:12;16946:7;16928:3;:26::i;:::-;16913:41;;16658:304;;;;;;;:::o;8262:291::-;8320:11;8342:6;8334:15;;8320:29;;8371:1;8364:4;:8;8360:186;;;8389:16;8421:18;:16;:18::i;:::-;8389:51;;8457:3;:8;;;8466:3;8471:4;8457:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8457:19:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8457:19:0;;;;8498:36;8506:6;8514:4;8528;8498:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8360:186;;8262:291;;;:::o;6273:210::-;6410:2;6360:6;:16;;;6385:4;6392:8;6360:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6360:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6360:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6360:41:0;;;;;;;;;;;;;;;;:53;6356:120;;6430:6;:14;;;6445:8;6460:2;6430:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6430:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6430:34:0;;;;6356:120;6273:210;;:::o;6491:909::-;6564:1;6555:6;:10;6551:842;;;6582:11;6604:6;6596:15;;6582:29;;6626:15;6644:18;:16;:18::i;:::-;6626:36;;6679:16;6711:7;6679:40;;6734:19;6756:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;6756:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6756:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6756:9:0;;;;;;;;;;;;;;;;6734:31;;6780:19;6802:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;6802:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6802:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6802:9:0;;;;;;;;;;;;;;;;6780:31;;6829:11;6847:3;:8;;;6856:3;6847:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6847:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6847:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6847:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6828:32;;;;;6898:4;6883:20;;:3;:20;;;6875:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6938:4;:12;;;6957:6;6938:28;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6938:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6938:28:0;;;;;6983:8;6994:23;6999:6;7007:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7007:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7007:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7007:9:0;;;;;;;;;;;;;;;;6994:4;:23::i;:::-;6983:34;;7062:6;7038:20;7043:3;7048;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7048:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7048:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7048:9:0;;;;;;;;;;;;;;;;7038:4;:20::i;:::-;:30;;:46;;7083:1;7077:3;:7;7038:46;;;7071:3;7038:46;7032:52;;7101:27;7114:4;7120:7;7101:12;:27::i;:::-;7143:3;:8;;;7152:3;7143:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7143:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7143:13:0;;;;7173:27;7186:4;7192:7;7173:12;:27::i;:::-;7215:3;:8;;;7224:3;7229;7215:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7215:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7215:18:0;;;;7255:126;7281:6;7306;7331:3;7361:4;7255:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6551:842;;;;;;;;6491:909;;:::o;11953:1078::-;12112:16;12139:17;12167:18;12196:12;12232:13;12248:32;12252:23;12257:6;12265:9;12252:4;:23::i;:::-;12277:2;12248:3;:32::i;:::-;12232:48;;12291:17;12311:43;12315:34;12320:7;12329:19;12315:4;:34::i;:::-;12351:2;12311:3;:43::i;:::-;12291:63;;12365:14;12382:44;12387:27;12391:8;12401:12;12387:3;:27::i;:::-;12416:9;12382:4;:44::i;:::-;12365:61;;12453:9;12441;:21;12437:75;;;12491:9;12479:21;;12437:75;12525:16;12564:21;:19;:21::i;:::-;12545:49;;;12595:15;:13;:15::i;:::-;12612;:13;:15::i;:::-;12629:9;12545:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12545:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12545:94:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12545:94:0;;;;;;;;;;;;;;;;;;;;;;;;;12522:117;;;12668:7;12654:11;:21;12650:374;;;12706:22;12710:6;12718:9;12706:3;:22::i;:::-;12692:36;;12758:25;12762:7;12771:11;12758:3;:25::i;:::-;12743:40;;12814:28;12819:11;12832:9;12814:4;:28::i;:::-;12798:44;;12867:4;12857:14;;12650:374;;;12918:1;12904:15;;12949:1;12934:16;;12981:1;12965:17;;13007:5;12997:15;;12650:374;11953:1078;;;;;;;;;;;;;:::o;16329:321::-;16417:14;16444:13;16460:32;16464:23;16469:6;16477:9;16464:4;:23::i;:::-;16489:2;16460:3;:32::i;:::-;16444:48;;16503:17;16523:43;16527:34;16532:7;16541:19;16527:4;:34::i;:::-;16563:2;16523:3;:43::i;:::-;16503:63;;16589:53;16593:44;16598:27;16602:8;16612:12;16598:3;:27::i;:::-;16627:9;16593:4;:44::i;:::-;16639:2;16589:3;:53::i;:::-;16577:65;;16329:321;;;;;;;:::o;7408:846::-;7475:1;7469:3;:7;7465:782;;;7493:11;7515:6;7507:15;;7493:29;;7537:15;7555:18;:16;:18::i;:::-;7537:36;;7590:16;7622:7;7590:40;;7645:19;7667:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7667:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7667:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7667:9:0;;;;;;;;;;;;;;;;7645:31;;7691:19;7713:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7713:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7713:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7713:9:0;;;;;;;;;;;;;;;;7691:31;;7739:8;7750:20;7755:3;7760;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7760:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7760:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7760:9:0;;;;;;;;;;;;;;;;7750:4;:20::i;:::-;7739:31;;7815:3;7791:20;7796:3;7801;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;7801:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7801:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7801:9:0;;;;;;;;;;;;;;;;7791:4;:20::i;:::-;:27;;:43;;7833:1;7827:3;:7;7791:43;;;7821:3;7791:43;7785:49;;7849:3;:8;;;7858:3;7863;7849:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7849:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7849:18:0;;;;7884:27;7897:4;7903:7;7884:12;:27::i;:::-;7928:3;:8;;;7937:3;7928:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7928:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7928:13:0;;;;7956:12;7971:4;:14;;;7994:4;7971:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7971:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7971:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7971:29:0;;;;;;;;;;;;;;;;7956:44;;8064:4;:13;;;8078:7;8064:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8064:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8064:22:0;;;;8108:127;8134:6;8159:7;8185:3;8215:4;8108:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7465:782;;;;;;;;7408:846;;:::o;8561:1774::-;8630:1;8623:4;:8;8619:1709;;;8648:16;8680:18;:16;:18::i;:::-;8648:51;;8714:21;8754:23;:21;:23::i;:::-;8714:64;;8793:21;8833:23;:21;:23::i;:::-;8793:64;;8872:18;8893:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;8893:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8893:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8893:9:0;;;;;;;;;;;;;;;;8872:30;;8917:18;8938:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;8938:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8938:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8938:9:0;;;;;;;;;;;;;;;;8917:30;;8964:11;8986:6;8978:15;;8964:29;;9011:11;9029:3;:8;;;9038:3;9029:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9029:13:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9029:13:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9029:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9010:32;;;;;9080:4;9065:20;;:3;:20;;;9057:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9120:37;9133:3;9138:18;:16;:18::i;:::-;9120:12;:37::i;:::-;9172;9185:3;9190:18;:16;:18::i;:::-;9172:12;:37::i;:::-;9224:42;9237:3;9242:23;:21;:23::i;:::-;9224:12;:42::i;:::-;9284:11;9297:7;9308:3;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;8::-1;5:2;;;30:1;27;20:12;5:2;9308:9:0;;;;8::-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9308:9:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9308:9:0;;;;;;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9308:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9308:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9308:16:0;;;;;;;;;;;;;;;;;;;;;;;;;9283:41;;;;9422:11;9436:61;9441:44;9446:4;9452:32;9457:3;:7;;;9465:3;9457:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9457:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9457:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9457:12:0;;;;;;;;;;;;;;;;9471:3;:7;;;9479:3;9471:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9471:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9471:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9471:12:0;;;;;;;;;;;;;;;;9452:4;:32::i;:::-;9441:4;:44::i;:::-;9492:3;9487:9;;9436:4;:61::i;:::-;9422:75;;9626:14;9643:5;:30;;;9674:5;:30;;;9705:6;9674:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9674:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9674:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9674:38:0;;;;;;;;;;;;;;;;9643:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9643:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9643:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9643:70:0;;;;;;;;;;;;;;;;9626:87;;9728:11;9742:20;9746:4;9752:9;9742:3;:20::i;:::-;9728:34;;9783:2;:14;;;;;9796:1;9789:8;;:3;:8;;9783:14;9779:321;;;9818:5;:28;;;9869:6;9898:9;9935:21;9985:10;10061:3;9818:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9818:266:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9818:266:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9818:266:0;;;;;;;;;;;;;;;;;9779:321;10116:3;:8;;;10125:3;10130:6;10116:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10116:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10116:21:0;;;;10159:155;10185:6;10210:4;10233:6;10258:9;10294:4;10159:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8619:1709;;;;;;;;;;;;;8561:1774;;:::o;13039:1082::-;13202:16;13229:17;13257:18;13286:16;13326:13;13342:32;13346:23;13351:6;13359:9;13346:4;:23::i;:::-;13371:2;13342:3;:32::i;:::-;13326:48;;13385:17;13405:44;13409:35;13414:8;13424:19;13409:4;:35::i;:::-;13446:2;13405:3;:44::i;:::-;13385:64;;13460:17;13480:26;13484:12;13498:7;13480:3;:26::i;:::-;13460:46;;13533:12;13521:9;:24;13517:81;;;13577:9;13562:24;;13517:81;13611:16;13650:21;:19;:21::i;:::-;13631:49;;;13681:15;:13;:15::i;:::-;13698;:13;:15::i;:::-;13715:12;13631:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13631:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13631:97:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13631:97:0;;;;;;;;;;;;;;;;;;;;;;;;;13608:120;;;13753:1;13743:6;:11;13739:375;;13785:24;13789:6;13797:11;13785:3;:24::i;:::-;13771:38;;13839:26;13843:7;13852:12;13839:3;:26::i;:::-;13824:41;;13896:28;13901:11;13914:9;13896:4;:28::i;:::-;13880:44;;13953:4;13939:18;;13739:375;;;14004:1;13990:15;;14035:1;14020:16;;14067:1;14051:17;;14097:5;14083:19;;13739:375;13039:1082;;;;;;;;;;;;;:::o;3655:113::-;3708:6;3363:8;3731:23;3735:9;3739:1;3742;3735:3;:9::i;:::-;3752:1;3363:8;3746:7;;;;;;3731:3;:23::i;:::-;:29;;;;;;3727:33;;3655:113;;;;:::o;3063:129::-;3115:6;3157:1;3151;3147;:5;3143:9;;;3142:16;;3134:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3063:129;;;;:::o;2934:121::-;2986:6;3028:1;3022;3018;:5;3014:9;;;3013:16;;3005:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2934:121;;;;:::o;3776:111::-;3829:6;3878:1;3852:23;3856:11;3860:1;3363:8;3856:3;:11::i;:::-;3873:1;3869;:5;;;;;;3852:3;:23::i;:::-;:27;;;;;;3848:31;;3776:111;;;;:::o;3415:113::-;3468:6;3398:8;3491:23;3495:9;3499:1;3502;3495:3;:9::i;:::-;3512:1;3398:8;3506:7;;;;;;3491:3;:23::i;:::-;:29;;;;;;3487:33;;3415:113;;;;:::o;3536:111::-;3589:6;3638:1;3612:23;3616:11;3620:1;3398:8;3616:3;:11::i;:::-;3633:1;3629;:5;;;;;;3612:3;:23::i;:::-;:27;;;;;;3608:31;;3536:111;;;;:::o;3200:135::-;3252:6;3284:1;3279;:6;:30;;;;3308:1;3303;3298;3294;:5;3290:9;;;3289:15;;;;;;:20;3279:30;3271:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3200:135;;;;:::o

Swarm Source

bzzr://c222086733d09eb0ecd70e056911b533720036d407db2459326d581dfc10db48

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

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.