Contract 0x7503E653Fb91d5531c3A597BcAF0635FB096d795 7

 
Txn Hash Method
Block
From
To
Value
0x21a415bc94770858853278f6fc0b3bb21c548a71b95dc5e70cc832d0ab0d7cb8Boosted Buy And ...132031492024-04-15 15:40:4513 hrs 26 mins ago0x402f882da04037dbcb4c8dd03ce6187d1dc920b3 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0002098893110.319264953
0xf7c1173b815eed1ce353ff1d82d07781425798fa4c478760b725f087ace7e2c4Boosted Buy And ...130074202024-04-11 2:56:275 days 2 hrs ago0xcc06464c7bbcf81417c08563da2e1847c22b703a IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000727079920.1158
0x33e08863d6b9a716ebf5c185d04f69aba63b1c6e6fc24a945615408f2e82c349Boosted Buy And ...127290172024-04-04 16:16:2111 days 12 hrs ago0x1f98c90040023d7345268104200e79f9f78351cd IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000612369980.085837231
0xc298ebdd23e8e4c1e4ecdabf696ad424a610153d418e8b6dafd58ba38b2e2be6Boosted Buy And ...125469602024-03-31 11:07:4715 days 17 hrs ago0x3f888f4e16a08c6b3745ddbade98e24569852fa4 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000454854750.0535
0x18e2851fb2922fc015f99c1c5158505cccaeff2821484a3d9ff8f227c2886666Boosted Buy And ...125107302024-03-30 15:00:0716 days 14 hrs ago0x3f888f4e16a08c6b3745ddbade98e24569852fa4 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0003473966980.5236
0x0986c6ec6259e3e4b619236843e32ef988801d580f44928949293c44309d639eBoosted Buy And ...123306522024-03-26 10:57:3120 days 18 hrs ago0xc612bda4a16c9dd2054e23e0bb5f16b8b073271d IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.00016949630.23662734
0xb015fcb49982e2c51a086153bbb2a095ec238b70d3569c4d9259575106b1dcf7Boosted Buy And ...122143802024-03-23 18:21:4723 days 10 hrs ago0x876e6fd1961f404f9a566243fb3537ba62bfcea0 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000740784780.104851213
0x06725b2d6282dddc107496645db2a8df70c927502eef32d9a3d431b5e8a0a70cBoosted Buy And ...119397182024-03-17 9:46:2329 days 19 hrs ago0x90f15e09b8fb5bc080b968170c638920db3a3446 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000040163930.0063
0xbf2fbe6664ab4be505703400a8de882a3b5958ab7e928c5f628d2a48182e9d35Boosted Buy And ...119394862024-03-17 9:38:3929 days 19 hrs ago0x90f15e09b8fb5bc080b968170c638920db3a3446 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000040960630.0061
0xdf9ed17bc8c2998d7851de3d8698253e7cb91db4834788b57431d00acfca6ea8Boosted Buy And ...114998492024-03-07 5:24:0539 days 23 hrs ago0x94759c0cdd84054a71c4b9746dcdee90783aca4f IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0001123155990.000039357
0x75154504d9cb793058b6ad0c357eb77c9baf10582f050c2d2807b8fc79243183Boosted Buy And ...114990882024-03-07 4:58:4340 days 8 mins ago0x94759c0cdd84054a71c4b9746dcdee90783aca4f IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000871526730.000091566
0xe8b399191226dca8461cc3bc0a513ab1c1c8c54a4831550016743d92e6691921Boosted Buy And ...114989592024-03-07 4:54:2540 days 12 mins ago0x94759c0cdd84054a71c4b9746dcdee90783aca4f IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0001077621840.000024068
0xac8dd80f270c9bbd34abada82f44dcb28ed6e08d5a936f33f5c59e99ccb07c8cBoosted Buy And ...114977832024-03-07 4:15:1340 days 51 mins ago0xcc06464c7bbcf81417c08563da2e1847c22b703a IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000867106680.001
0xb2b65c0be854baa343ee5af81552d15aed6fa3830e44af2538fa821d94a4bb38Boosted Buy And ...112481842024-03-01 9:35:1545 days 19 hrs ago0xd25f3ff4d63179800dce837dc5412dac1ba6133f IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000728541290.001
0xd60b2e6623666c5e5df8bfe44900e926a244826bc86e5a3467b6cc57fd773827Boosted Buy And ...112395562024-03-01 4:47:3946 days 19 mins ago0x94759c0cdd84054a71c4b9746dcdee90783aca4f IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000729065970.000000359
0x3ddb5719c8618d04572596fed126368b6b73a580b29ad5e4119d944984807eb2Boosted Buy And ...108165952024-02-20 9:48:5755 days 19 hrs ago0xced3fc4610761f79242d7d8a72fe86f3a1c626b4 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000545000140.001
0xf98cd0e1f22808ca6cc7090752b6b832b77dfb6d1b2d6b97f198c6f086465ffcBoosted Buy And ...105845182024-02-15 0:53:0361 days 4 hrs ago0xcc06464c7bbcf81417c08563da2e1847c22b703a IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000329329460.001
0x9979125d090056986b78ead00bc6b66615459a219ea1c1f2640df6b7d4b5f9eeBoosted Buy And ...105830082024-02-15 0:02:4361 days 5 hrs ago0x68ec6b5038dcf1e00a6780b9031e978168298f82 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000433857450.001000326
0xf8ac540285923a05e7024fc37a80f9153d16f20ad66c4e4256554503a4a2d161Boosted Buy And ...105501752024-02-14 5:48:1761 days 23 hrs ago0x160cf6551ee3d910f673af762d5a2f1bd4855be1 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000293626640.002
0xbab04d5ed4be8944a1e416a36b3e8e57d94c23b2ab79d6d3cddc40a14bef2fabBoosted Buy And ...104224582024-02-11 6:51:0364 days 22 hrs ago0xcb6586874cc04b01cc4fdb777de502cea7b3d6c1 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000421532880.001
0xa33b72af6cc6817777339ced03a928464b3b6bfc6da2c410135210dd0c050de0Boosted Buy And ...104025112024-02-10 19:46:0965 days 9 hrs ago0x68ec6b5038dcf1e00a6780b9031e978168298f82 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.000044678040.001000301
0x448d14fd719eb1c7572e5ca2a1dad05c0f69a1903a919380c70dc0a7373109c8Boosted Buy And ...103964462024-02-10 16:23:5965 days 12 hrs ago0xa2f27d648ba70da39ca67efb568115c51da9f566 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000603207130.00010035
0x18020011fdacc1f047990514604c126b8f02390208ec5adb045c380089656973Boosted Buy And ...103550192024-02-09 17:23:0566 days 11 hrs ago0x68ec6b5038dcf1e00a6780b9031e978168298f82 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0001148830990.001000283
0x3b7d4504bbb89c4f0eb6c00998204fc1a362e0dccb4d6e9c5470a793c70493a5Boosted Buy And ...103535142024-02-09 16:32:5566 days 12 hrs ago0x68ec6b5038dcf1e00a6780b9031e978168298f82 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0001352019790.001000278
0x9981ab626ffe44347746886328f37645ea78033eafa6dee49597a3f1824d2d5cBoosted Buy And ...103406462024-02-09 9:23:5966 days 19 hrs ago0x68ec6b5038dcf1e00a6780b9031e978168298f82 IN  0x7503e653fb91d5531c3a597bcaf0635fb096d7950 ETH0.0000943134310.001000336
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
veMastaBooster

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2023-10-05
*/

// SPDX-License-Identifier: MIT


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)




// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)



/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}



interface IVotingEscrow {

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
    }

    function token() external view returns (address);
    function team() external returns (address);
    function epoch() external view returns (uint);
    function point_history(uint loc) external view returns (Point memory);
    function user_point_history(uint tokenId, uint loc) external view returns (Point memory);
    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);
    function isApprovedOrOwner(address, uint) external view returns (bool);
    function transferFrom(address, address, uint) external;

    function voting(uint tokenId) external;
    function abstain(uint tokenId) external;
    function attach(uint tokenId) external;
    function detach(uint tokenId) external;

    function checkpoint() external;
    function deposit_for(uint tokenId, uint value) external;
    function create_lock_for(uint, uint, address) external returns (uint);

    function balanceOfNFT(uint) external view returns (uint);
    function totalSupply() external view returns (uint);
}



interface IVoter {
    function _ve() external view returns (address);
    function governor() external view returns (address);
    function emergencyCouncil() external view returns (address);
    function attachTokenToGauge(uint _tokenId, address account) external;
    function detachTokenFromGauge(uint _tokenId, address account) external;
    function emitDeposit(uint _tokenId, address account, uint amount) external;
    function emitWithdraw(uint _tokenId, address account, uint amount) external;
    function isWhitelisted(address token) external view returns (bool);
    function notifyRewardAmount(uint amount) external;
    function distribute(address _gauge) external;
    function gauges(address) external view returns (address);
    function external_bribes(address) external view returns (address);
    function isAlive(address) external view returns (bool);
 
}



interface IRouter {
    function pairFor(address tokenA, address tokenB, bool stable) external view returns (address pair);
    function swapExactTokensForTokensSimple(uint amountIn, uint amountOutMin, address tokenFrom, address tokenTo, bool stable, address to, uint deadline) external returns (uint[] memory amounts);
    function getAmountOut(uint amountIn, address tokenIn, address tokenOut, bool stable) external view returns (uint amount);
	function getReserves(address tokenA, address tokenB, bool stable) external view returns (uint, uint);
    function addLiquidity(
        address tokenA,
        address tokenB,
        bool stable,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint, uint, uint);
}



interface IPair {
    function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1);
    function tokens() external returns (address, address);
    function token0() external returns (address);
    function token1() external returns (address);
    function externalBribe() external returns (address);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function burn(address to) external returns (uint amount0, uint amount1);
    function mint(address to) external returns (uint liquidity);
    function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast);
    function getAmountOut(uint, address) external view returns (uint);
    function setHasGauge(bool value) external;
    function setExternalBribe(address _externalBribe) external;
    function hasGauge() external view returns (bool);
    function stable() external view returns (bool);
    function prices(address tokenIn, uint amountIn, uint points) external view returns (uint[] memory);
}



interface IOptionToken {
    function mint(address _to, uint256 _amount) external;
    function exercise(
        uint256 _amount,
        uint256 _maxPaymentAmount,
        address _recipient
    ) external returns (uint256);
    function paymentToken() external returns (address);
    function underlyingToken() external returns (address);
    function router() external returns (address);
    function gauge() external returns (address);
    function getDiscountedPrice(uint256 _amount) external view returns (uint256);

}


interface IBribe {
    function _deposit(uint amount, uint tokenId) external;
    function _withdraw(uint amount, uint tokenId) external;
    function getRewardForOwner(uint tokenId, address[] memory tokens) external;
    function notifyRewardAmount(address token, uint amount) external;
    function left(address token) external view returns (uint);
}



interface IGauge {
    function notifyRewardAmount(address token, uint amount) external;
    function getReward(address account, address[] memory tokens) external;
    function left(address token) external view returns (uint);
    function stake() external view returns (address);
}



interface IGaugeV2 {
    function left(address token) external view returns (uint);
    function notifyRewardAmount(address token, uint amount) external;

    function depositWithLock(
        address account,
        uint256 amount,
        uint256 _lockDuration
    ) external;
}



interface IProxyGaugeNotify {
    function notifyRewardAmount(uint256 _amount) external; 
}


pragma solidity ^0.8.13;

contract veMastaBooster is Ownable,IProxyGaugeNotify {
    address public paymentToken;
    address public optionToken;
    address public router;
    address public gauge;
    address public pair;
    address public flow;
    address public voting_escrow;
    address public voter;
    uint256 public lpMatchRate = 20; // 20%
    uint256 public veMatchRate = 60; // 60%
    uint256 public bribeMatchRate = 50; // 50%
    
    uint256 public lpLockDuration;
    uint256 public maxLock;

    bool public boostLpPaused;
    bool public boostVePaused;
    bool public boostBribePaused;

    event Boosted(uint256 indexed _timestamp, uint256 _totalLocked, address _locker);
    event RewardsAdded(uint256 indexed _timestamp, uint256 _amount);
    event MatchRateChanged(uint256 indexed _timestamp, string _type, uint256 _newRate);
    event Pausings(uint256 indexed _timestamp, string _type, bool _paused);

    // need minter role for the oToken
    // need approval to deposit for lock to the maxing gauge
    constructor(address _team, uint256 _maxLock, address _optionToken,address _voter,uint256 _lpLockDuration) {
        _transferOwnership(_team);
        voter = _voter;
        voting_escrow = IVoter(voter)._ve();
        flow = IVotingEscrow(voting_escrow).token();
        optionToken = _optionToken;
        paymentToken = IOptionToken(_optionToken).paymentToken();
        router = IOptionToken(_optionToken).router();
        gauge = IOptionToken(_optionToken).gauge();
        pair = IGauge(gauge).stake();
        maxLock = _maxLock;
        lpLockDuration = _lpLockDuration;
        giveAllowances();
    }
//VIEW FUNCTIONS
    function balanceOfFlow() public view returns (uint){
        return IERC20(flow).balanceOf(address(this));
    }
    function balanceOfOToken() public view returns (uint){
        return IERC20(optionToken).balanceOf(address(this));
    }
    function maxLpLockableAmount() public view returns (uint){
         uint256 flowBal = balanceOfFlow();
         uint256 amnt = flowBal * 100 / lpMatchRate;
         return amnt;
    }
    
    function maxVeLockableAmount() public view returns (uint){
         uint256 flowBal = balanceOfFlow();
         uint256 amnt = flowBal * 100 / veMatchRate;
         return amnt;
    }   
    function maxBribeAmount() public view returns (uint){
         uint256 flowBal = balanceOfFlow();
         uint256 amnt = flowBal * 100 / bribeMatchRate;
         return amnt;
    }
    function checkFlowBalanceEnoughForLP(uint256 _paymentAmount) public view returns (bool) {
        (uint256 toSpend,uint256 toLP,uint amountToLock) = getAmountsForLPLock(_paymentAmount);

        uint256 amount = IRouter(router).getAmountOut(toSpend, paymentToken, flow, false);

        return balanceOfFlow() >= amountToLock - amount;
    }

    function checkFlowBalanceEnoughForVE(uint256 _paymentAmount) public view returns (bool) {
        uint256 amount = IRouter(router).getAmountOut(_paymentAmount, paymentToken, flow, false);
        return balanceOfFlow() >= amount * veMatchRate  / 100;
    }
    function checkFlowBalanceEnoughForBribe(uint256 _paymentAmount) public view returns (bool) {
        uint256 amount = IRouter(router).getAmountOut(_paymentAmount, paymentToken, flow, false);
        return balanceOfFlow() >= amount * bribeMatchRate  / 100;
    }
    function getExpectedAmountForLP(uint256 _paymentAmount) external view returns (uint256,uint256) {
        uint256 amount = IRouter(router).getAmountOut(_paymentAmount, paymentToken, flow, false);

        (uint256 toSpend,uint256 toLP,uint amountToLock) = getAmountsForLPLock(_paymentAmount);

        return (amountToLock,toLP);
    }
    function getExpectedAmountForVE(uint256 _paymentAmount) external view returns (uint256) {
        uint256 amount = IRouter(router).getAmountOut(_paymentAmount, paymentToken, flow, false);
        return amount * veMatchRate  / 100;
    }
    function getExpectedAmountForBribe(uint256 _paymentAmount) external view returns (uint256) {
        uint256 amount = IRouter(router).getAmountOut(_paymentAmount, paymentToken, flow, false);
        return amount * bribeMatchRate  / 100;
    }

    function getAmountsForLPLock(uint256 _amount) public view returns (uint256,uint256,uint256) {
        uint256 toSpend = _amount / 2 -(_amount / 2 * lpMatchRate / 100);
        uint256 toLP = _amount - toSpend;

        (uint256 flowReserve, uint256 paymentReserve) = IRouter(router).getReserves(flow, paymentToken, false);
        uint256 amountToLock = (toLP * flowReserve) / paymentReserve;

        return (toSpend,toLP,amountToLock);
    }

        
//PUBLIC FUNCTIONS       
    function notifyRewardAmount(uint256 _amount) external {
        require(_amount > 0, 'need to add at least 1 FLOW');
        IERC20(flow).transferFrom(msg.sender, address(this), _amount);
        emit RewardsAdded(block.timestamp, _amount);
    }


// USER FUNCTIONS
    function boostedBuyAndVeLock(uint256 _amount, uint _minOut) public {
        require(!boostVePaused, 'this is paused');
        require(_amount > 0, 'need to lock at least 1 paymentToken');
        require(balanceOfFlow() > 0, 'no extra FLOW for boosting');
        IERC20(paymentToken).transferFrom(msg.sender, address(this), _amount);

        if (_minOut == 0) {
            _minOut = 1;
        }

        uint256 flowBefore = balanceOfFlow();
        IRouter(router).swapExactTokensForTokensSimple(_amount, _minOut, paymentToken, flow, false, address(this), block.timestamp);
        uint256 flowAfter = balanceOfFlow();
        uint256 flowResult = flowAfter - flowBefore;

        uint256 amountToLock = flowResult * veMatchRate  / 100 + flowResult;
        IVotingEscrow(voting_escrow).create_lock_for(amountToLock, maxLock, msg.sender);

        emit Boosted(block.timestamp, amountToLock, msg.sender);
    }
    function boostedBuyAndLPLock(uint256 _amount, uint _minOut) public {
        require(!boostLpPaused, 'this is paused');
        require(_amount > 0, 'need to lock at least 1 paymentToken');
        require(balanceOfFlow() > 0, 'no extra FLOW for boosting');
        
        uint256 paymentBalBefore = IERC20(paymentToken).balanceOf(address(this));
        IERC20(paymentToken).transferFrom(msg.sender, address(this), _amount);

        if (_minOut == 0) {
            _minOut = 1;
        }

        (uint256 toSpend,uint256 toLP,uint amountToLock) = getAmountsForLPLock(_amount);
        
        uint256 flowBefore = balanceOfFlow();
        IRouter(router).swapExactTokensForTokensSimple(toSpend, _minOut, paymentToken, flow, false, address(this), block.timestamp);
        uint256 flowAfter = balanceOfFlow();
        uint256 flowResult = flowAfter - flowBefore;

        IRouter(router).addLiquidity(flow, paymentToken, false, amountToLock, toLP, 1, 1, address(this), block.timestamp);
        uint256 lpBal = IERC20(pair).balanceOf(address(this));
        IGaugeV2(gauge).depositWithLock(msg.sender,lpBal,lpLockDuration);

        uint256 paymentBalAfter = IERC20(paymentToken).balanceOf(address(this));
        uint paymentLeftover = paymentBalAfter - paymentBalBefore;

        if(paymentLeftover > 0) {
             IERC20(paymentToken).transfer(msg.sender, paymentLeftover);
        }

        emit Boosted(block.timestamp, lpBal, msg.sender);
    }

    function boostedBuyAndBribe(uint256 _amount, uint _minOut,address _pool) public {
        require(!boostBribePaused, 'this is paused');
        require(_amount > 0, 'need to lock at least 1 paymentToken');
        require(balanceOfFlow() > 0, 'no extra FLOW for boosting');
        IERC20(paymentToken).transferFrom(msg.sender, address(this), _amount);

        if (_minOut == 0) {
            _minOut = 1;
        }

        uint256 flowBefore = balanceOfFlow();
        IRouter(router).swapExactTokensForTokensSimple(_amount, _minOut, paymentToken, flow, false, address(this), block.timestamp);
        uint256 flowAfter = balanceOfFlow();
        uint256 flowResult = flowAfter - flowBefore;

        uint256 oTokenBefore = balanceOfOToken();
        IOptionToken(optionToken).mint(address(this), flowResult);
        uint256 oTokenAfter = balanceOfOToken();

        uint256 oTokenResult = oTokenAfter - oTokenBefore;
        
        address poolGauge = IVoter(voter).gauges(_pool);

        require(IVoter(voter).isAlive(poolGauge), 'gauge not alive');

        address bribeGauge = IVoter(voter).external_bribes(poolGauge);

        IERC20(optionToken).approve(bribeGauge, oTokenResult);

        IBribe(bribeGauge).notifyRewardAmount(
                optionToken,
                oTokenResult
        );

        uint256 amountToLock = flowResult * bribeMatchRate  / 100;
        IVotingEscrow(voting_escrow).create_lock_for(amountToLock, maxLock, msg.sender);

        emit Boosted(block.timestamp, amountToLock, msg.sender);
    }

//OWNER FUNCTIONS
    function setLpMatchRate(uint256 _rate) external onlyOwner {
        require(_rate <= 100, 'cant give more than 1-1');
        lpMatchRate = _rate;  

        emit MatchRateChanged(block.timestamp, "LPBoost", _rate);    
    }
    function setVeMatchRate(uint256 _rate) external onlyOwner {
        require(_rate <= 100, 'cant give more than 1-1');
        veMatchRate = _rate;  

        emit MatchRateChanged(block.timestamp, "veBoost", _rate);      
    }  
    function setBribeMatchRate(uint256 _rate) external onlyOwner {
        require(_rate <= 100, 'cant give more than 1-1');
        bribeMatchRate = _rate;  

        emit MatchRateChanged(block.timestamp, "BribeBoost", _rate);      
    }
    function setPaymentToken(address _paymentToken) external onlyOwner {
        require(_paymentToken != address(0));
        paymentToken = _paymentToken;
    }
    function setRouter(address _router) external onlyOwner {
        require(_router != address(0));
        router = _router;
    }
    function setPair(address _pair) external onlyOwner {
        require(_pair != address(0));
        pair = _pair;
    }
    function setGauge(address _gauge) external onlyOwner {
        require(_gauge != address(0));
        gauge = _gauge;
    }
    function setOptionToken(address _optionToken) external onlyOwner {
        require(_optionToken != address(0));
        optionToken = _optionToken;
    }
    function setLPLockDuration(uint256 _lpLockDuration) external onlyOwner {
        lpLockDuration = _lpLockDuration;
    }       
    function pauseLPBoost(bool _tf) external onlyOwner {
        boostLpPaused = _tf;
        emit Pausings(block.timestamp, "LPBoost", _tf);
    }
    function pauseVeBoost(bool _tf) external onlyOwner {
        boostVePaused = _tf;
        emit Pausings(block.timestamp, "VeBoost", _tf);
    }
    function pauseBribeBoost(bool _tf) external onlyOwner {
        boostBribePaused = _tf;
        emit Pausings(block.timestamp, "BribeBoost", _tf);
    }
    function inCaseTokensGetStuck(address _token, address _to) external onlyOwner {
        uint256 amount = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, amount);
    }
    function giveAllowances() public onlyOwner {
        IERC20(flow).approve(voting_escrow, type(uint256).max);
        IERC20(flow).approve(router, type(uint256).max);
        IERC20(paymentToken).approve(router, type(uint256).max);
        IERC20(flow).approve(optionToken, type(uint256).max);
        IERC20(pair).approve(gauge, type(uint256).max);
    }
    function removeAllowances() public onlyOwner {
        IERC20(flow).approve(voting_escrow, 0);
        IERC20(flow).approve(router, 0);
        IERC20(paymentToken).approve(router, 0);
        IERC20(flow).approve(optionToken, 0);
        IERC20(pair).approve(gauge, type(uint256).max);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_team","type":"address"},{"internalType":"uint256","name":"_maxLock","type":"uint256"},{"internalType":"address","name":"_optionToken","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"uint256","name":"_lpLockDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalLocked","type":"uint256"},{"indexed":false,"internalType":"address","name":"_locker","type":"address"}],"name":"Boosted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"string","name":"_type","type":"string"},{"indexed":false,"internalType":"uint256","name":"_newRate","type":"uint256"}],"name":"MatchRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"string","name":"_type","type":"string"},{"indexed":false,"internalType":"bool","name":"_paused","type":"bool"}],"name":"Pausings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"RewardsAdded","type":"event"},{"inputs":[],"name":"balanceOfFlow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfOToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostBribePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostLpPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostVePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address","name":"_pool","type":"address"}],"name":"boostedBuyAndBribe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"}],"name":"boostedBuyAndLPLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"}],"name":"boostedBuyAndVeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bribeMatchRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"checkFlowBalanceEnoughForBribe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"checkFlowBalanceEnoughForLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"checkFlowBalanceEnoughForVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getAmountsForLPLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"getExpectedAmountForBribe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"getExpectedAmountForLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_paymentAmount","type":"uint256"}],"name":"getExpectedAmountForVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpLockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpMatchRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBribeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLpLockableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxVeLockableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"optionToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_tf","type":"bool"}],"name":"pauseBribeBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tf","type":"bool"}],"name":"pauseLPBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tf","type":"bool"}],"name":"pauseVeBoost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paymentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setBribeMatchRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"setGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lpLockDuration","type":"uint256"}],"name":"setLPLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setLpMatchRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_optionToken","type":"address"}],"name":"setOptionToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentToken","type":"address"}],"name":"setPaymentToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setVeMatchRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"veMatchRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voting_escrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526014600955603c600a556032600b553480156200002057600080fd5b506040516200317838038062003178833981016040819052620000439162000717565b6200004e33620003c3565b6200005985620003c3565b600880546001600160a01b0319166001600160a01b03841690811790915560408051638dd598fb60e01b81529051638dd598fb916004808201926020929091908290030181865afa158015620000b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d9919062000775565b600780546001600160a01b0319166001600160a01b0392909216918217905560408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa15801562000134573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015a919062000775565b600680546001600160a01b039283166001600160a01b03199182161790915560028054928616929091168217905560408051633013ce2960e01b81529051633013ce299160048181019260209290919082900301816000875af1158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec919062000775565b600160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663f887ea406040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000279919062000775565b600360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550826001600160a01b031663a6f19c846040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000775565b600480546001600160a01b0319166001600160a01b0392909216918217815560408051633a4b66f160e01b81529051633a4b66f1928281019260209291908290030181865afa1580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000384919062000775565b600580546001600160a01b0319166001600160a01b0392909216919091179055600d849055600c819055620003b862000413565b5050505050620007be565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200041d62000699565b60065460075460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801562000474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049a91906200079a565b5060065460035460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620004f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051891906200079a565b5060015460035460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af115801562000570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200059691906200079a565b5060065460025460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015620005ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200061491906200079a565b506005546004805460405163095ea7b360e01b81526001600160a01b039182169281019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801562000670573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200069691906200079a565b50565b6000546001600160a01b03163314620006f85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b80516001600160a01b03811681146200071257600080fd5b919050565b600080600080600060a086880312156200073057600080fd5b6200073b86620006fa565b9450602086015193506200075260408701620006fa565b92506200076260608701620006fa565b9150608086015190509295509295909350565b6000602082840312156200078857600080fd5b6200079382620006fa565b9392505050565b600060208284031215620007ad57600080fd5b815180151581146200079357600080fd5b6129aa80620007ce6000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80636c0b3e4611610182578063a6f19c84116100e9578063da733f0d116100a2578063e5449cca1161007c578063e5449cca14610620578063f2b297cd14610632578063f2fde38b14610645578063f887ea401461065857600080fd5b8063da733f0d146105fb578063de35eb2414610604578063dfe050311461060d57600080fd5b8063a6f19c8414610594578063a8aa1b31146105a7578063a8c82ad1146105ba578063c08028c9146105c2578063c0d78655146105d5578063d5de2475146105e857600080fd5b80638b31e7231161013b5780638b31e7231461052e5780638da5cb5b146105415780638e0fe4111461055257806396dd509c146105655780639a9fcb09146105785780639c6dfd9b1461058157600080fd5b80636c0b3e46146104c75780636f7ebb75146104d0578063715018a6146104e35780637b2c1840146104eb5780637ba4dd4c146105135780638187f5161461051b57600080fd5b80633c6b16ab1161024157806349fa3b80116101fa5780635b120759116101d45780635b12075914610486578063629532c3146104995780636a326ab1146104a15780636bad49fe146104b457600080fd5b806349fa3b80146104585780634f06e0f71461046057806355a68ed31461047357600080fd5b80633c6b16ab146104015780634048cd781461041457806343e442c6146104275780634553a8241461043057806346a935c91461043d57806346c96aac1461044557600080fd5b8063227438d911610293578063227438d9146103675780632906eda21461036f5780632bab754b1461039d5780633013ce29146103c8578063343aad82146103db578063392090b8146103ee57600080fd5b8063156e34b0146102db578063180cfa1d146103035780631939bbc114610316578063216d1c581461032b57806321a10f92146103415780632269c5f214610354575b600080fd5b600e546102ee9062010000900460ff1681565b60405190151581526020015b60405180910390f35b6102ee610311366004612432565b61066b565b610329610324366004612460565b610725565b005b610333610812565b6040519081526020016102fa565b6102ee61034f366004612432565b610885565b610329610362366004612499565b610935565b610333610ec3565b61038261037d366004612432565b610ef3565b604080519384526020840192909252908201526060016102fa565b6002546103b0906001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b6001546103b0906001600160a01b031681565b6006546103b0906001600160a01b031681565b6103336103fc366004612432565b610ff9565b61032961040f366004612432565b61108e565b6103296104223660046124d2565b611193565b61033360095481565b600e546102ee9060ff1681565b61032961167f565b6008546103b0906001600160a01b031681565b6103296118f5565b61032961046e3660046124f4565b611aa5565b6103296104813660046124f4565b611ae2565b6102ee610494366004612432565b611b1f565b610333611bb4565b6103296104af3660046124f4565b611be5565b6103296104c236600461251f565b611c22565b610333600d5481565b6103336104de366004612432565b611c71565b610329611d06565b6104fe6104f9366004612432565b611d1a565b604080519283526020830191909152016102fa565b610333611dbf565b6103296105293660046124f4565b611dde565b61032961053c366004612432565b611e1b565b6000546001600160a01b03166103b0565b610329610560366004612432565b611e28565b610329610573366004612432565b611e88565b610333600b5481565b61032961058f36600461251f565b611f09565b6004546103b0906001600160a01b031681565b6005546103b0906001600160a01b031681565b610333611f7c565b6103296105d0366004612432565b611f9b565b6103296105e33660046124f4565b611ffb565b6103296105f636600461251f565b612038565b610333600a5481565b610333600c5481565b6007546103b0906001600160a01b031681565b600e546102ee90610100900460ff1681565b6103296106403660046124d2565b612080565b6103296106533660046124f4565b612312565b6003546103b0906001600160a01b031681565b60008060008061067a85610ef3565b60035460015460065460405163da21423160e01b81529598509396509194506000936001600160a01b039182169363da214231936106c4938a93918116921690879060040161253c565b602060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107059190612563565b90506107118183612592565b610719610812565b10159695505050505050565b61072d612388565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190612563565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb906107c990859085906004016125a9565b6020604051808303816000875af11580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c91906125c2565b50505050565b6006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b602060405180830381865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190612563565b905090565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da214231936108c79389938116921690879060040161253c565b602060405180830381865afa1580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109089190612563565b90506064600a548261091a91906125df565b61092491906125fe565b61092c610812565b10159392505050565b600e5462010000900460ff16156109675760405162461bcd60e51b815260040161095e90612620565b60405180910390fd5b600083116109875760405162461bcd60e51b815260040161095e90612648565b6000610991610812565b116109ae5760405162461bcd60e51b815260040161095e9061268c565b6001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906109e2903390309088906004016126c3565b6020604051808303816000875af1158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906125c2565b5081600003610a3357600191505b6000610a3d610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc5993610a85938a938a93918316921690600090309042906004016126e7565b6000604051808303816000875af1158015610aa4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610acc9190810190612738565b506000610ad7610812565b90506000610ae58383612592565b90506000610af1611bb4565b6002546040516340c10f1960e01b81529192506001600160a01b0316906340c10f1990610b2490309086906004016125a9565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050506000610b60611bb4565b90506000610b6e8383612592565b60085460405163b9a09fd560e01b81526001600160a01b038a811660048301529293506000929091169063b9a09fd590602401602060405180830381865afa158015610bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be291906127f6565b600854604051631703e5f960e01b81526001600160a01b038084166004830152929350911690631703e5f990602401602060405180830381865afa158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5291906125c2565b610c905760405162461bcd60e51b815260206004820152600f60248201526e6761756765206e6f7420616c69766560881b604482015260640161095e565b60085460405163ae21c4cb60e01b81526001600160a01b038381166004830152600092169063ae21c4cb90602401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906127f6565b60025460405163095ea7b360e01b81529192506001600160a01b03169063095ea7b390610d3290849087906004016125a9565b6020604051808303816000875af1158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7591906125c2565b5060025460405163b66503cf60e01b81526001600160a01b038381169263b66503cf92610daa929091169087906004016125a9565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b5050505060006064600b5488610dee91906125df565b610df891906125fe565b600754600d5460405163d4e54c3b60e01b81526004810184905260248101919091523360448201529192506001600160a01b03169063d4e54c3b906064016020604051808303816000875af1158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190612563565b506040805182815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf17253591015b60405180910390a2505050505050505050505050565b600080610ece610812565b90506000600b54826064610ee291906125df565b610eec91906125fe565b9392505050565b6000806000806064600954600287610f0b91906125fe565b610f1591906125df565b610f1f91906125fe565b610f2a6002876125fe565b610f349190612592565b90506000610f428287612592565b600354600654600154604051635e60dab560e01b81526001600160a01b039283166004820152908216602482015260006044820181905293945083929190911690635e60dab5906064016040805180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc9190612813565b9092509050600081610fde84866125df565b610fe891906125fe565b949993985093965091945050505050565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da2142319361103b9389938116921690879060040161253c565b602060405180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190612563565b90506064600b5482610ee291906125df565b600081116110de5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f20616464206174206c65617374203120464c4f570000000000604482015260640161095e565b6006546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611112903390309086906004016126c3565b6020604051808303816000875af1158015611131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115591906125c2565b50427f40df43107e8b4d467127964bd3c966687c0a6a39aaede970755397fd09535e988260405161118891815260200190565b60405180910390a250565b600e5460ff16156111b65760405162461bcd60e51b815260040161095e90612620565b600082116111d65760405162461bcd60e51b815260040161095e90612648565b60006111e0610812565b116111fd5760405162461bcd60e51b815260040161095e9061268c565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190612563565b6001546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061129f903390309088906004016126c3565b6020604051808303816000875af11580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e291906125c2565b50816000036112f057600191505b60008060006112fe86610ef3565b925092509250600061130e610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc5993611356938a938d93918316921690600090309042906004016126e7565b6000604051808303816000875af1158015611375573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261139d9190810190612738565b5060006113a8610812565b905060006113b68383612592565b60035460065460018054604051635a47ddc360e01b81526001600160a01b03938416600482015290831660248201526000604482015260648101899052608481018a905260a4810182905260c48101919091523060e4820152426101048201529293501690635a47ddc390610124016060604051808303816000875af1158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190612837565b50506005546040516370a0823160e01b8152306004820152600092506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190612563565b60048054600c54604051631f933c2d60e01b815233938101939093526024830184905260448301529192506001600160a01b0390911690631f933c2d90606401600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bb9190612563565b905060006115c98a83612592565b905080156116485760015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061160390339085906004016125a9565b6020604051808303816000875af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906125c2565b505b6040805184815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf1725359101610ead565b611687612388565b60065460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116bf92911690600019906004016125a9565b6020604051808303816000875af11580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906125c2565b5060065460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261173b92911690600019906004016125a9565b6020604051808303816000875af115801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e91906125c2565b5060015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117b792911690600019906004016125a9565b6020604051808303816000875af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa91906125c2565b5060065460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261183392911690600019906004016125a9565b6020604051808303816000875af1158015611852573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187691906125c2565b506005546004805460405163095ea7b360e01b81526001600160a01b039384169363095ea7b3936118af939091169160001991016125a9565b6020604051808303816000875af11580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f291906125c2565b50565b6118fd612388565b60065460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611934929116906000906004016125a9565b6020604051808303816000875af1158015611953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197791906125c2565b5060065460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119af929116906000906004016125a9565b6020604051808303816000875af11580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f291906125c2565b5060015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a2a929116906000906004016125a9565b6020604051808303816000875af1158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d91906125c2565b5060065460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611833929116906000906004016125a9565b611aad612388565b6001600160a01b038116611ac057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611aea612388565b6001600160a01b038116611afd57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da21423193611b619389938116921690879060040161253c565b602060405180830381865afa158015611b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba29190612563565b90506064600b548261091a91906125df565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240161083f565b611bed612388565b6001600160a01b038116611c0057600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b611c2a612388565b600e805462ff00001916620100008315150217905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f90611188908490612865565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da21423193611cb39389938116921690879060040161253c565b602060405180830381865afa158015611cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf49190612563565b90506064600a5482610ee291906125df565b611d0e612388565b611d1860006123e2565b565b60035460015460065460405163da21423160e01b8152600093849384936001600160a01b039283169363da21423193611d60938a9390821692911690879060040161253c565b602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190612563565b90506000806000611db187610ef3565b999098509650505050505050565b600080611dca610812565b90506000600954826064610ee291906125df565b611de6612388565b6001600160a01b038116611df957600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e23612388565b600c55565b611e30612388565b6064811115611e515760405162461bcd60e51b815260040161095e9061289f565b80600b81905550427fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c8260405161118891906128d6565b611e90612388565b6064811115611eb15760405162461bcd60e51b815260040161095e9061289f565b600a81905560408051818152600791810191909152661d99509bdbdcdd60ca1b60608201526020810182905242907fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c90608001611188565b611f11612388565b600e80548215156101000261ff001990911617905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f906111889084906040808252600790820152661599509bdbdcdd60ca1b6060820152901515602082015260800190565b600080611f87610812565b90506000600a54826064610ee291906125df565b611fa3612388565b6064811115611fc45760405162461bcd60e51b815260040161095e9061289f565b80600981905550427fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c82604051611188919061290e565b612003612388565b6001600160a01b03811661201657600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612040612388565b600e805460ff191682151517905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f90611188908490612935565b600e54610100900460ff16156120a85760405162461bcd60e51b815260040161095e90612620565b600082116120c85760405162461bcd60e51b815260040161095e90612648565b60006120d2610812565b116120ef5760405162461bcd60e51b815260040161095e9061268c565b6001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90612123903390309087906004016126c3565b6020604051808303816000875af1158015612142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216691906125c2565b5080600003612173575060015b600061217d610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc59936121c59389938993918316921690600090309042906004016126e7565b6000604051808303816000875af11580156121e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261220c9190810190612738565b506000612217610812565b905060006122258383612592565b90506000816064600a548461223a91906125df565b61224491906125fe565b61224e919061295c565b600754600d5460405163d4e54c3b60e01b81526004810184905260248101919091523360448201529192506001600160a01b03169063d4e54c3b906064016020604051808303816000875af11580156122ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cf9190612563565b506040805182815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf172535910160405180910390a2505050505050565b61231a612388565b6001600160a01b03811661237f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6118f2816123e2565b6000546001600160a01b03163314611d185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561244457600080fd5b5035919050565b6001600160a01b03811681146118f257600080fd5b6000806040838503121561247357600080fd5b823561247e8161244b565b9150602083013561248e8161244b565b809150509250929050565b6000806000606084860312156124ae57600080fd5b833592506020840135915060408401356124c78161244b565b809150509250925092565b600080604083850312156124e557600080fd5b50508035926020909101359150565b60006020828403121561250657600080fd5b8135610eec8161244b565b80151581146118f257600080fd5b60006020828403121561253157600080fd5b8135610eec81612511565b9384526001600160a01b039283166020850152911660408301521515606082015260800190565b60006020828403121561257557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156125a4576125a461257c565b500390565b6001600160a01b03929092168252602082015260400190565b6000602082840312156125d457600080fd5b8151610eec81612511565b60008160001904831182151516156125f9576125f961257c565b500290565b60008261261b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600e908201526d1d1a1a5cc81a5cc81c185d5cd95960921b604082015260600190565b60208082526024908201527f6e65656420746f206c6f636b206174206c656173742031207061796d656e745460408201526337b5b2b760e11b606082015260800190565b6020808252601a908201527f6e6f20657874726120464c4f5720666f7220626f6f7374696e67000000000000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b96875260208701959095526001600160a01b0393841660408701529183166060860152151560808501521660a083015260c082015260e00190565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561274b57600080fd5b825167ffffffffffffffff8082111561276357600080fd5b818501915085601f83011261277757600080fd5b81518181111561278957612789612722565b8060051b604051601f19603f830116810181811085821117156127ae576127ae612722565b6040529182528482019250838101850191888311156127cc57600080fd5b938501935b828510156127ea578451845293850193928501926127d1565b98975050505050505050565b60006020828403121561280857600080fd5b8151610eec8161244b565b6000806040838503121561282657600080fd5b505080516020909101519092909150565b60008060006060848603121561284c57600080fd5b8351925060208401519150604084015190509250925092565b60408152600061288f60408301600a815269109c9a5899509bdbdcdd60b21b602082015260400190565b9050821515602083015292915050565b60208082526017908201527f63616e742067697665206d6f7265207468616e20312d31000000000000000000604082015260600190565b60408152600061290060408301600a815269109c9a5899509bdbdcdd60b21b602082015260400190565b905082602083015292915050565b6040815260006129006040830160078152661314109bdbdcdd60ca1b602082015260400190565b60408152600061288f6040830160078152661314109bdbdcdd60ca1b602082015260400190565b6000821982111561296f5761296f61257c565b50019056fea2646970667358221220bf22dba76cc572db72ed1bb8326d553d19095e620a94e31d46bab3d980adf8cf64736f6c634300080d00330000000000000000000000003b91ca4d89b5156d456cbd0d6305f7f36b1517a40000000000000000000000000000000000000000000000000000000001dfe200000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e000000000000000000000000ab9b68c9e53c94d7c0949fb909e80e4a29f9134a00000000000000000000000000000000000000000000000000000000005042e0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102d65760003560e01c80636c0b3e4611610182578063a6f19c84116100e9578063da733f0d116100a2578063e5449cca1161007c578063e5449cca14610620578063f2b297cd14610632578063f2fde38b14610645578063f887ea401461065857600080fd5b8063da733f0d146105fb578063de35eb2414610604578063dfe050311461060d57600080fd5b8063a6f19c8414610594578063a8aa1b31146105a7578063a8c82ad1146105ba578063c08028c9146105c2578063c0d78655146105d5578063d5de2475146105e857600080fd5b80638b31e7231161013b5780638b31e7231461052e5780638da5cb5b146105415780638e0fe4111461055257806396dd509c146105655780639a9fcb09146105785780639c6dfd9b1461058157600080fd5b80636c0b3e46146104c75780636f7ebb75146104d0578063715018a6146104e35780637b2c1840146104eb5780637ba4dd4c146105135780638187f5161461051b57600080fd5b80633c6b16ab1161024157806349fa3b80116101fa5780635b120759116101d45780635b12075914610486578063629532c3146104995780636a326ab1146104a15780636bad49fe146104b457600080fd5b806349fa3b80146104585780634f06e0f71461046057806355a68ed31461047357600080fd5b80633c6b16ab146104015780634048cd781461041457806343e442c6146104275780634553a8241461043057806346a935c91461043d57806346c96aac1461044557600080fd5b8063227438d911610293578063227438d9146103675780632906eda21461036f5780632bab754b1461039d5780633013ce29146103c8578063343aad82146103db578063392090b8146103ee57600080fd5b8063156e34b0146102db578063180cfa1d146103035780631939bbc114610316578063216d1c581461032b57806321a10f92146103415780632269c5f214610354575b600080fd5b600e546102ee9062010000900460ff1681565b60405190151581526020015b60405180910390f35b6102ee610311366004612432565b61066b565b610329610324366004612460565b610725565b005b610333610812565b6040519081526020016102fa565b6102ee61034f366004612432565b610885565b610329610362366004612499565b610935565b610333610ec3565b61038261037d366004612432565b610ef3565b604080519384526020840192909252908201526060016102fa565b6002546103b0906001600160a01b031681565b6040516001600160a01b0390911681526020016102fa565b6001546103b0906001600160a01b031681565b6006546103b0906001600160a01b031681565b6103336103fc366004612432565b610ff9565b61032961040f366004612432565b61108e565b6103296104223660046124d2565b611193565b61033360095481565b600e546102ee9060ff1681565b61032961167f565b6008546103b0906001600160a01b031681565b6103296118f5565b61032961046e3660046124f4565b611aa5565b6103296104813660046124f4565b611ae2565b6102ee610494366004612432565b611b1f565b610333611bb4565b6103296104af3660046124f4565b611be5565b6103296104c236600461251f565b611c22565b610333600d5481565b6103336104de366004612432565b611c71565b610329611d06565b6104fe6104f9366004612432565b611d1a565b604080519283526020830191909152016102fa565b610333611dbf565b6103296105293660046124f4565b611dde565b61032961053c366004612432565b611e1b565b6000546001600160a01b03166103b0565b610329610560366004612432565b611e28565b610329610573366004612432565b611e88565b610333600b5481565b61032961058f36600461251f565b611f09565b6004546103b0906001600160a01b031681565b6005546103b0906001600160a01b031681565b610333611f7c565b6103296105d0366004612432565b611f9b565b6103296105e33660046124f4565b611ffb565b6103296105f636600461251f565b612038565b610333600a5481565b610333600c5481565b6007546103b0906001600160a01b031681565b600e546102ee90610100900460ff1681565b6103296106403660046124d2565b612080565b6103296106533660046124f4565b612312565b6003546103b0906001600160a01b031681565b60008060008061067a85610ef3565b60035460015460065460405163da21423160e01b81529598509396509194506000936001600160a01b039182169363da214231936106c4938a93918116921690879060040161253c565b602060405180830381865afa1580156106e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107059190612563565b90506107118183612592565b610719610812565b10159695505050505050565b61072d612388565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610774573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107989190612563565b60405163a9059cbb60e01b81529091506001600160a01b0384169063a9059cbb906107c990859085906004016125a9565b6020604051808303816000875af11580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c91906125c2565b50505050565b6006546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b602060405180830381865afa15801561085c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108809190612563565b905090565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da214231936108c79389938116921690879060040161253c565b602060405180830381865afa1580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109089190612563565b90506064600a548261091a91906125df565b61092491906125fe565b61092c610812565b10159392505050565b600e5462010000900460ff16156109675760405162461bcd60e51b815260040161095e90612620565b60405180910390fd5b600083116109875760405162461bcd60e51b815260040161095e90612648565b6000610991610812565b116109ae5760405162461bcd60e51b815260040161095e9061268c565b6001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906109e2903390309088906004016126c3565b6020604051808303816000875af1158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2591906125c2565b5081600003610a3357600191505b6000610a3d610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc5993610a85938a938a93918316921690600090309042906004016126e7565b6000604051808303816000875af1158015610aa4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610acc9190810190612738565b506000610ad7610812565b90506000610ae58383612592565b90506000610af1611bb4565b6002546040516340c10f1960e01b81529192506001600160a01b0316906340c10f1990610b2490309086906004016125a9565b600060405180830381600087803b158015610b3e57600080fd5b505af1158015610b52573d6000803e3d6000fd5b505050506000610b60611bb4565b90506000610b6e8383612592565b60085460405163b9a09fd560e01b81526001600160a01b038a811660048301529293506000929091169063b9a09fd590602401602060405180830381865afa158015610bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be291906127f6565b600854604051631703e5f960e01b81526001600160a01b038084166004830152929350911690631703e5f990602401602060405180830381865afa158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5291906125c2565b610c905760405162461bcd60e51b815260206004820152600f60248201526e6761756765206e6f7420616c69766560881b604482015260640161095e565b60085460405163ae21c4cb60e01b81526001600160a01b038381166004830152600092169063ae21c4cb90602401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff91906127f6565b60025460405163095ea7b360e01b81529192506001600160a01b03169063095ea7b390610d3290849087906004016125a9565b6020604051808303816000875af1158015610d51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7591906125c2565b5060025460405163b66503cf60e01b81526001600160a01b038381169263b66503cf92610daa929091169087906004016125a9565b600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b5050505060006064600b5488610dee91906125df565b610df891906125fe565b600754600d5460405163d4e54c3b60e01b81526004810184905260248101919091523360448201529192506001600160a01b03169063d4e54c3b906064016020604051808303816000875af1158015610e55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e799190612563565b506040805182815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf17253591015b60405180910390a2505050505050505050505050565b600080610ece610812565b90506000600b54826064610ee291906125df565b610eec91906125fe565b9392505050565b6000806000806064600954600287610f0b91906125fe565b610f1591906125df565b610f1f91906125fe565b610f2a6002876125fe565b610f349190612592565b90506000610f428287612592565b600354600654600154604051635e60dab560e01b81526001600160a01b039283166004820152908216602482015260006044820181905293945083929190911690635e60dab5906064016040805180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc9190612813565b9092509050600081610fde84866125df565b610fe891906125fe565b949993985093965091945050505050565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da2142319361103b9389938116921690879060040161253c565b602060405180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190612563565b90506064600b5482610ee291906125df565b600081116110de5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f20616464206174206c65617374203120464c4f570000000000604482015260640161095e565b6006546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611112903390309086906004016126c3565b6020604051808303816000875af1158015611131573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115591906125c2565b50427f40df43107e8b4d467127964bd3c966687c0a6a39aaede970755397fd09535e988260405161118891815260200190565b60405180910390a250565b600e5460ff16156111b65760405162461bcd60e51b815260040161095e90612620565b600082116111d65760405162461bcd60e51b815260040161095e90612648565b60006111e0610812565b116111fd5760405162461bcd60e51b815260040161095e9061268c565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126a9190612563565b6001546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061129f903390309088906004016126c3565b6020604051808303816000875af11580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e291906125c2565b50816000036112f057600191505b60008060006112fe86610ef3565b925092509250600061130e610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc5993611356938a938d93918316921690600090309042906004016126e7565b6000604051808303816000875af1158015611375573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261139d9190810190612738565b5060006113a8610812565b905060006113b68383612592565b60035460065460018054604051635a47ddc360e01b81526001600160a01b03938416600482015290831660248201526000604482015260648101899052608481018a905260a4810182905260c48101919091523060e4820152426101048201529293501690635a47ddc390610124016060604051808303816000875af1158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190612837565b50506005546040516370a0823160e01b8152306004820152600092506001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114da9190612563565b60048054600c54604051631f933c2d60e01b815233938101939093526024830184905260448301529192506001600160a01b0390911690631f933c2d90606401600060405180830381600087803b15801561153457600080fd5b505af1158015611548573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015611597573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bb9190612563565b905060006115c98a83612592565b905080156116485760015460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061160390339085906004016125a9565b6020604051808303816000875af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164691906125c2565b505b6040805184815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf1725359101610ead565b611687612388565b60065460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116bf92911690600019906004016125a9565b6020604051808303816000875af11580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906125c2565b5060065460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261173b92911690600019906004016125a9565b6020604051808303816000875af115801561175a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177e91906125c2565b5060015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117b792911690600019906004016125a9565b6020604051808303816000875af11580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa91906125c2565b5060065460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261183392911690600019906004016125a9565b6020604051808303816000875af1158015611852573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187691906125c2565b506005546004805460405163095ea7b360e01b81526001600160a01b039384169363095ea7b3936118af939091169160001991016125a9565b6020604051808303816000875af11580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f291906125c2565b50565b6118fd612388565b60065460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611934929116906000906004016125a9565b6020604051808303816000875af1158015611953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197791906125c2565b5060065460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119af929116906000906004016125a9565b6020604051808303816000875af11580156119ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f291906125c2565b5060015460035460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611a2a929116906000906004016125a9565b6020604051808303816000875af1158015611a49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6d91906125c2565b5060065460025460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611833929116906000906004016125a9565b611aad612388565b6001600160a01b038116611ac057600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611aea612388565b6001600160a01b038116611afd57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da21423193611b619389938116921690879060040161253c565b602060405180830381865afa158015611b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba29190612563565b90506064600b548261091a91906125df565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240161083f565b611bed612388565b6001600160a01b038116611c0057600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b611c2a612388565b600e805462ff00001916620100008315150217905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f90611188908490612865565b60035460015460065460405163da21423160e01b815260009384936001600160a01b039182169363da21423193611cb39389938116921690879060040161253c565b602060405180830381865afa158015611cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf49190612563565b90506064600a5482610ee291906125df565b611d0e612388565b611d1860006123e2565b565b60035460015460065460405163da21423160e01b8152600093849384936001600160a01b039283169363da21423193611d60938a9390821692911690879060040161253c565b602060405180830381865afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da19190612563565b90506000806000611db187610ef3565b999098509650505050505050565b600080611dca610812565b90506000600954826064610ee291906125df565b611de6612388565b6001600160a01b038116611df957600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e23612388565b600c55565b611e30612388565b6064811115611e515760405162461bcd60e51b815260040161095e9061289f565b80600b81905550427fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c8260405161118891906128d6565b611e90612388565b6064811115611eb15760405162461bcd60e51b815260040161095e9061289f565b600a81905560408051818152600791810191909152661d99509bdbdcdd60ca1b60608201526020810182905242907fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c90608001611188565b611f11612388565b600e80548215156101000261ff001990911617905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f906111889084906040808252600790820152661599509bdbdcdd60ca1b6060820152901515602082015260800190565b600080611f87610812565b90506000600a54826064610ee291906125df565b611fa3612388565b6064811115611fc45760405162461bcd60e51b815260040161095e9061289f565b80600981905550427fa43e18f7c8dcd412099d57b2348fd68ed844b29deb62a030f8493b36b8687d7c82604051611188919061290e565b612003612388565b6001600160a01b03811661201657600080fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b612040612388565b600e805460ff191682151517905560405142907ffcfe851f5b056824cad73f940e9f37e7e8650bfd2baab54376300fa0b709b06f90611188908490612935565b600e54610100900460ff16156120a85760405162461bcd60e51b815260040161095e90612620565b600082116120c85760405162461bcd60e51b815260040161095e90612648565b60006120d2610812565b116120ef5760405162461bcd60e51b815260040161095e9061268c565b6001546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90612123903390309087906004016126c3565b6020604051808303816000875af1158015612142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216691906125c2565b5080600003612173575060015b600061217d610812565b6003546001546006546040516313dcfc5960e01b81529394506001600160a01b03928316936313dcfc59936121c59389938993918316921690600090309042906004016126e7565b6000604051808303816000875af11580156121e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261220c9190810190612738565b506000612217610812565b905060006122258383612592565b90506000816064600a548461223a91906125df565b61224491906125fe565b61224e919061295c565b600754600d5460405163d4e54c3b60e01b81526004810184905260248101919091523360448201529192506001600160a01b03169063d4e54c3b906064016020604051808303816000875af11580156122ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cf9190612563565b506040805182815233602082015242917fe1b931d2b8ee0a004219fe936a06ecb92204cde9fce14f9a62f6c698cf172535910160405180910390a2505050505050565b61231a612388565b6001600160a01b03811661237f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161095e565b6118f2816123e2565b6000546001600160a01b03163314611d185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161095e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561244457600080fd5b5035919050565b6001600160a01b03811681146118f257600080fd5b6000806040838503121561247357600080fd5b823561247e8161244b565b9150602083013561248e8161244b565b809150509250929050565b6000806000606084860312156124ae57600080fd5b833592506020840135915060408401356124c78161244b565b809150509250925092565b600080604083850312156124e557600080fd5b50508035926020909101359150565b60006020828403121561250657600080fd5b8135610eec8161244b565b80151581146118f257600080fd5b60006020828403121561253157600080fd5b8135610eec81612511565b9384526001600160a01b039283166020850152911660408301521515606082015260800190565b60006020828403121561257557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156125a4576125a461257c565b500390565b6001600160a01b03929092168252602082015260400190565b6000602082840312156125d457600080fd5b8151610eec81612511565b60008160001904831182151516156125f9576125f961257c565b500290565b60008261261b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600e908201526d1d1a1a5cc81a5cc81c185d5cd95960921b604082015260600190565b60208082526024908201527f6e65656420746f206c6f636b206174206c656173742031207061796d656e745460408201526337b5b2b760e11b606082015260800190565b6020808252601a908201527f6e6f20657874726120464c4f5720666f7220626f6f7374696e67000000000000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b96875260208701959095526001600160a01b0393841660408701529183166060860152151560808501521660a083015260c082015260e00190565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561274b57600080fd5b825167ffffffffffffffff8082111561276357600080fd5b818501915085601f83011261277757600080fd5b81518181111561278957612789612722565b8060051b604051601f19603f830116810181811085821117156127ae576127ae612722565b6040529182528482019250838101850191888311156127cc57600080fd5b938501935b828510156127ea578451845293850193928501926127d1565b98975050505050505050565b60006020828403121561280857600080fd5b8151610eec8161244b565b6000806040838503121561282657600080fd5b505080516020909101519092909150565b60008060006060848603121561284c57600080fd5b8351925060208401519150604084015190509250925092565b60408152600061288f60408301600a815269109c9a5899509bdbdcdd60b21b602082015260400190565b9050821515602083015292915050565b60208082526017908201527f63616e742067697665206d6f7265207468616e20312d31000000000000000000604082015260600190565b60408152600061290060408301600a815269109c9a5899509bdbdcdd60b21b602082015260400190565b905082602083015292915050565b6040815260006129006040830160078152661314109bdbdcdd60ca1b602082015260400190565b60408152600061288f6040830160078152661314109bdbdcdd60ca1b602082015260400190565b6000821982111561296f5761296f61257c565b50019056fea2646970667358221220bf22dba76cc572db72ed1bb8326d553d19095e620a94e31d46bab3d980adf8cf64736f6c634300080d0033

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

0000000000000000000000003b91ca4d89b5156d456cbd0d6305f7f36b1517a40000000000000000000000000000000000000000000000000000000001dfe200000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e000000000000000000000000ab9b68c9e53c94d7c0949fb909e80e4a29f9134a00000000000000000000000000000000000000000000000000000000005042e0

-----Decoded View---------------
Arg [0] : _team (address): 0x3b91Ca4D89B5156d456CbD0D6305F7f36B1517a4
Arg [1] : _maxLock (uint256): 31449600
Arg [2] : _optionToken (address): 0x762eb51D2e779EeEc9B239FFB0B2eC8262848f3E
Arg [3] : _voter (address): 0xab9B68c9e53c94D7c0949FB909E80e4a29F9134A
Arg [4] : _lpLockDuration (uint256): 5260000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000003b91ca4d89b5156d456cbd0d6305f7f36b1517a4
Arg [1] : 0000000000000000000000000000000000000000000000000000000001dfe200
Arg [2] : 000000000000000000000000762eb51d2e779eeec9b239ffb0b2ec8262848f3e
Arg [3] : 000000000000000000000000ab9b68c9e53c94d7c0949fb909e80e4a29f9134a
Arg [4] : 00000000000000000000000000000000000000000000000000000000005042e0


Deployed ByteCode Sourcemap

10231:12001:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10802:28;;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;10802:28:0;;;;;;;;12750:347;;;;;;:::i;:::-;;:::i;21357:200::-;;;;;;:::i;:::-;;:::i;:::-;;11915:114;;;:::i;:::-;;;1066:25:1;;;1054:2;1039:18;11915:114:0;920:177:1;13105:259:0;;;;;;:::i;:::-;;:::i;17704:1578::-;;;;;;:::i;:::-;;:::i;12559:185::-;;;:::i;14488:451::-;;;;;;:::i;:::-;;:::i;:::-;;;;1692:25:1;;;1748:2;1733:18;;1726:34;;;;1776:18;;;1769:34;1680:2;1665:18;14488:451:0;1490:319:1;10325:26:0;;;;;-1:-1:-1;;;;;10325:26:0;;;;;;-1:-1:-1;;;;;1978:32:1;;;1960:51;;1948:2;1933:18;10325:26:0;1814:203:1;10291:27:0;;;;;-1:-1:-1;;;;;10291:27:0;;;10439:19;;;;;-1:-1:-1;;;;;10439:19:0;;;14234:246;;;;;;:::i;:::-;;:::i;14984:250::-;;;;;;:::i;:::-;;:::i;16205:1491::-;;;;;;:::i;:::-;;:::i;10527:31::-;;;;;;10738:25;;;;;;;;;21563:360;;;:::i;10500:20::-;;;;;-1:-1:-1;;;;;10500:20:0;;;21929:298;;;:::i;20595:156::-;;;;;;:::i;:::-;;:::i;20463:126::-;;;;;;:::i;:::-;;:::i;13370:265::-;;;;;;:::i;:::-;;:::i;12035:123::-;;;:::i;20032:161::-;;;;;;:::i;:::-;;:::i;21196:155::-;;;;;;:::i;:::-;;:::i;10707:22::-;;;;;;13988:240;;;;;;:::i;:::-;;:::i;2649:103::-;;;:::i;13641:341::-;;;;;;:::i;:::-;;:::i;:::-;;;;3070:25:1;;;3126:2;3111:18;;3104:34;;;;3043:18;13641:341:0;2896:248:1;12164:187:0;;;:::i;20336:121::-;;;;;;:::i;:::-;;:::i;20757:122::-;;;;;;:::i;:::-;;:::i;2008:87::-;2054:7;2081:6;-1:-1:-1;;;;;2081:6:0;2008:87;;19785:241;;;;;;:::i;:::-;;:::i;19545:232::-;;;;;;:::i;:::-;;:::i;10617:34::-;;;;;;21044:146;;;;;;:::i;:::-;;:::i;10386:20::-;;;;;-1:-1:-1;;;;;10386:20:0;;;10413:19;;;;;-1:-1:-1;;;;;10413:19:0;;;12363:187;;;:::i;19309:230::-;;;;;;:::i;:::-;;:::i;20199:131::-;;;;;;:::i;:::-;;:::i;20892:146::-;;;;;;:::i;:::-;;:::i;10572:31::-;;;;;;10671:29;;;;;;10465:28;;;;;-1:-1:-1;;;;;10465:28:0;;;10770:25;;;;;;;;;;;;15263:936;;;;;;:::i;:::-;;:::i;2907:201::-;;;;;;:::i;:::-;;:::i;10358:21::-;;;;;-1:-1:-1;;;;;10358:21:0;;;12750:347;12832:4;12850:15;12866:12;12879:17;12900:35;12920:14;12900:19;:35::i;:::-;12973:6;;;13003:12;13017:4;;12965:64;;-1:-1:-1;;;12965:64:0;;12849:86;;-1:-1:-1;12849:86:0;;-1:-1:-1;12849:86:0;;-1:-1:-1;12948:14:0;;-1:-1:-1;;;;;12973:6:0;;;;12965:28;;:64;;12849:86;;13003:12;;;;13017:4;;12948:14;;12965:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12948:81;-1:-1:-1;13068:21:0;12948:81;13068:12;:21;:::i;:::-;13049:15;:13;:15::i;:::-;:40;;;12750:347;-1:-1:-1;;;;;;12750:347:0:o;21357:200::-;1894:13;:11;:13::i;:::-;21463:39:::1;::::0;-1:-1:-1;;;21463:39:0;;21496:4:::1;21463:39;::::0;::::1;1960:51:1::0;21446:14:0::1;::::0;-1:-1:-1;;;;;21463:24:0;::::1;::::0;::::1;::::0;1933:18:1;;21463:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21513:36;::::0;-1:-1:-1;;;21513:36:0;;21446:56;;-1:-1:-1;;;;;;21513:23:0;::::1;::::0;::::1;::::0;:36:::1;::::0;21537:3;;21446:56;;21513:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21435:122;21357:200:::0;;:::o;11915:114::-;11991:4;;11984:37;;-1:-1:-1;;;11984:37:0;;12015:4;11984:37;;;1960:51:1;11961:4:0;;-1:-1:-1;;;;;11991:4:0;;11984:22;;1933:18:1;;11984:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11977:44;;11915:114;:::o;13105:259::-;13229:6;;;13266:12;13280:4;;13221:71;;-1:-1:-1;;;13221:71:0;;13187:4;;;;-1:-1:-1;;;;;13229:6:0;;;;13221:28;;:71;;13250:14;;13266:12;;;13280:4;;13187;;13221:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13204:88;;13353:3;13338:11;;13329:6;:20;;;;:::i;:::-;:27;;;;:::i;:::-;13310:15;:13;:15::i;:::-;:46;;;13105:259;-1:-1:-1;;;13105:259:0:o;17704:1578::-;17804:16;;;;;;;17803:17;17795:44;;;;-1:-1:-1;;;17795:44:0;;;;;;;:::i;:::-;;;;;;;;;17868:1;17858:7;:11;17850:60;;;;-1:-1:-1;;;17850:60:0;;;;;;;:::i;:::-;17947:1;17929:15;:13;:15::i;:::-;:19;17921:58;;;;-1:-1:-1;;;17921:58:0;;;;;;;:::i;:::-;17997:12;;17990:69;;-1:-1:-1;;;17990:69:0;;-1:-1:-1;;;;;17997:12:0;;;;17990:33;;:69;;18024:10;;18044:4;;18051:7;;17990:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18076:7;18087:1;18076:12;18072:56;;18115:1;18105:11;;18072:56;18140:18;18161:15;:13;:15::i;:::-;18195:6;;;18252:12;18266:4;;18187:123;;-1:-1:-1;;;18187:123:0;;18140:36;;-1:-1:-1;;;;;;18195:6:0;;;;18187:46;;:123;;18234:7;;18243;;18252:12;;;;18266:4;;18195:6;;18287:4;;18294:15;;18187:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18187:123:0;;;;;;;;;;;;:::i;:::-;;18321:17;18341:15;:13;:15::i;:::-;18321:35;-1:-1:-1;18367:18:0;18388:22;18400:10;18321:35;18388:22;:::i;:::-;18367:43;;18423:20;18446:17;:15;:17::i;:::-;18487:11;;18474:57;;-1:-1:-1;;;18474:57:0;;18423:40;;-1:-1:-1;;;;;;18487:11:0;;18474:30;;:57;;18513:4;;18520:10;;18474:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18542:19;18564:17;:15;:17::i;:::-;18542:39;-1:-1:-1;18594:20:0;18617:26;18631:12;18542:39;18617:26;:::i;:::-;18691:5;;18684:27;;-1:-1:-1;;;18684:27:0;;-1:-1:-1;;;;;1978:32:1;;;18684:27:0;;;1960:51:1;18594:49:0;;-1:-1:-1;18664:17:0;;18691:5;;;;18684:20;;1933:18:1;;18684:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18739:5;;18732:32;;-1:-1:-1;;;18732:32:0;;-1:-1:-1;;;;;1978:32:1;;;18732::0;;;1960:51:1;18664:47:0;;-1:-1:-1;18739:5:0;;;18732:21;;1933:18:1;;18732:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18724:60;;;;-1:-1:-1;;;18724:60:0;;8856:2:1;18724:60:0;;;8838:21:1;8895:2;8875:18;;;8868:30;-1:-1:-1;;;8914:18:1;;;8907:45;8969:18;;18724:60:0;8654:339:1;18724:60:0;18825:5;;18818:40;;-1:-1:-1;;;18818:40:0;;-1:-1:-1;;;;;1978:32:1;;;18818:40:0;;;1960:51:1;18797:18:0;;18825:5;;18818:29;;1933:18:1;;18818:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18878:11;;18871:53;;-1:-1:-1;;;18871:53:0;;18797:61;;-1:-1:-1;;;;;;18878:11:0;;18871:27;;:53;;18797:61;;18911:12;;18871:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18993:11:0;;18937:109;;-1:-1:-1;;;18937:109:0;;-1:-1:-1;;;;;18937:37:0;;;;;;:109;;18993:11;;;;19023:12;;18937:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19059:20;19113:3;19095:14;;19082:10;:27;;;;:::i;:::-;:34;;;;:::i;:::-;19141:13;;19186:7;;19127:79;;-1:-1:-1;;;19127:79:0;;;;;9200:25:1;;;9241:18;;;9234:34;;;;19195:10:0;9284:18:1;;;9277:60;19059:57:0;;-1:-1:-1;;;;;;19141:13:0;;19127:44;;9173:18:1;;19127:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19224:50:0;;;9522:25:1;;;19263:10:0;9578:2:1;9563:18;;9556:60;19232:15:0;;19224:50;;9495:18:1;19224:50:0;;;;;;;;17784:1498;;;;;;;;;17704:1578;;;:::o;12559:185::-;12606:4;12623:15;12641;:13;:15::i;:::-;12623:33;;12668:12;12699:14;;12683:7;12693:3;12683:13;;;;:::i;:::-;:30;;;;:::i;:::-;12668:45;12559:185;-1:-1:-1;;;12559:185:0:o;14488:451::-;14555:7;14563;14571;14591:15;14651:3;14637:11;;14633:1;14623:7;:11;;;;:::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;14609:11;14619:1;14609:7;:11;:::i;:::-;:46;;;;:::i;:::-;14591:64;-1:-1:-1;14666:12:0;14681:17;14591:64;14681:7;:17;:::i;:::-;14767:6;;14787:4;;14767:6;14793:12;14759:54;;-1:-1:-1;;;14759:54:0;;-1:-1:-1;;;;;14787:4:0;;;14759:54;;;9861:34:1;14793:12:0;;;9911:18:1;;;9904:43;14712:19:0;9963:18:1;;;9956:50;;;14666:32:0;;-1:-1:-1;14712:19:0;;14767:6;;;;;14759:27;;9796:18:1;;14759:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14711:102;;-1:-1:-1;14711:102:0;-1:-1:-1;14824:20:0;14711:102;14848:18;14711:102;14848:4;:18;:::i;:::-;14847:37;;;;:::i;:::-;14905:7;;14913:4;;-1:-1:-1;14905:7:0;;-1:-1:-1;14488:451:0;;-1:-1:-1;;;;;14488:451:0:o;14234:246::-;14361:6;;;14398:12;14412:4;;14353:71;;-1:-1:-1;;;14353:71:0;;14316:7;;;;-1:-1:-1;;;;;14361:6:0;;;;14353:28;;:71;;14382:14;;14398:12;;;14412:4;;14316:7;;14353:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14336:88;;14469:3;14451:14;;14442:6;:23;;;;:::i;14984:250::-;15067:1;15057:7;:11;15049:51;;;;-1:-1:-1;;;15049:51:0;;10469:2:1;15049:51:0;;;10451:21:1;10508:2;10488:18;;;10481:30;10547:29;10527:18;;;10520:57;10594:18;;15049:51:0;10267:351:1;15049:51:0;15118:4;;15111:61;;-1:-1:-1;;;15111:61:0;;-1:-1:-1;;;;;15118:4:0;;;;15111:25;;:61;;15137:10;;15157:4;;15164:7;;15111:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15201:15;15188:38;15218:7;15188:38;;;;1066:25:1;;1054:2;1039:18;;920:177;15188:38:0;;;;;;;;14984:250;:::o;16205:1491::-;16292:13;;;;16291:14;16283:41;;;;-1:-1:-1;;;16283:41:0;;;;;;;:::i;:::-;16353:1;16343:7;:11;16335:60;;;;-1:-1:-1;;;16335:60:0;;;;;;;:::i;:::-;16432:1;16414:15;:13;:15::i;:::-;:19;16406:58;;;;-1:-1:-1;;;16406:58:0;;;;;;;:::i;:::-;16519:12;;16512:45;;-1:-1:-1;;;16512:45:0;;16551:4;16512:45;;;1960:51:1;16485:24:0;;-1:-1:-1;;;;;16519:12:0;;16512:30;;1933:18:1;;16512:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16575:12;;16568:69;;-1:-1:-1;;;16568:69:0;;16485:72;;-1:-1:-1;;;;;;16575:12:0;;16568:33;;:69;;16602:10;;16622:4;;16629:7;;16568:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16654:7;16665:1;16654:12;16650:56;;16693:1;16683:11;;16650:56;16719:15;16735:12;16748:17;16769:28;16789:7;16769:19;:28::i;:::-;16718:79;;;;;;16818:18;16839:15;:13;:15::i;:::-;16873:6;;;16930:12;16944:4;;16865:123;;-1:-1:-1;;;16865:123:0;;16818:36;;-1:-1:-1;;;;;;16873:6:0;;;;16865:46;;:123;;16912:7;;16921;;16930:12;;;;16944:4;;16873:6;;16965:4;;16972:15;;16865:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16865:123:0;;;;;;;;;;;;:::i;:::-;;16999:17;17019:15;:13;:15::i;:::-;16999:35;-1:-1:-1;17045:18:0;17066:22;17078:10;16999:35;17066:22;:::i;:::-;17109:6;;17130:4;;17109:6;17136:12;;17101:113;;-1:-1:-1;;;17101:113:0;;-1:-1:-1;;;;;17130:4:0;;;17101:113;;;11042:34:1;17136:12:0;;;11092:18:1;;;11085:43;17109:6:0;11144:18:1;;;11137:50;11203:18;;;11196:34;;;11246:19;;;11239:35;;;11290:19;;;11283:35;;;11334:19;;;11327:35;;;;17191:4:0;11378:19:1;;;11371:44;17198:15:0;11431:19:1;;;11424:35;17045:43:0;;-1:-1:-1;17109:6:0;;17101:28;;10976:19:1;;17101:113:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;17248:4:0;;17241:37;;-1:-1:-1;;;17241:37:0;;17272:4;17241:37;;;1960:51:1;17225:13:0;;-1:-1:-1;;;;;;17248:4:0;;;;17241:22;;1933:18:1;;17241:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17298:5;;;17338:14;;17289:64;;-1:-1:-1;;;17289:64:0;;17321:10;17289:64;;;11983:51:1;;;;12050:18;;;12043:34;;;12093:18;;;12086:34;17225:53:0;;-1:-1:-1;;;;;;17298:5:0;;;;17289:31;;11956:18:1;;17289:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17399:12:0;;17392:45;;-1:-1:-1;;;17392:45:0;;17431:4;17392:45;;;1960:51:1;17366:23:0;;-1:-1:-1;;;;;;17399:12:0;;;;-1:-1:-1;17392:30:0;;1933:18:1;;17392:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17366:71;-1:-1:-1;17448:20:0;17471:34;17489:16;17366:71;17471:34;:::i;:::-;17448:57;-1:-1:-1;17521:19:0;;17518:110;;17565:12;;17558:58;;-1:-1:-1;;;17558:58:0;;-1:-1:-1;;;;;17565:12:0;;;;17558:29;;:58;;17588:10;;17600:15;;17558:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17518:110;17645:43;;;9522:25:1;;;17677:10:0;9578:2:1;9563:18;;9556:60;17653:15:0;;17645:43;;9495:18:1;17645:43:0;9348:274:1;21563:360:0;1894:13;:11;:13::i;:::-;21624:4:::1;::::0;21638:13:::1;::::0;21617:54:::1;::::0;-1:-1:-1;;;21617:54:0;;-1:-1:-1;;;;;21624:4:0;;::::1;::::0;21617:20:::1;::::0;:54:::1;::::0;21638:13;::::1;::::0;-1:-1:-1;;21653:17:0;21617:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21689:4:0::1;::::0;21703:6:::1;::::0;21682:47:::1;::::0;-1:-1:-1;;;21682:47:0;;-1:-1:-1;;;;;21689:4:0;;::::1;::::0;21682:20:::1;::::0;:47:::1;::::0;21703:6;::::1;::::0;-1:-1:-1;;21711:17:0;21682:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21747:12:0::1;::::0;21769:6:::1;::::0;21740:55:::1;::::0;-1:-1:-1;;;21740:55:0;;-1:-1:-1;;;;;21747:12:0;;::::1;::::0;21740:28:::1;::::0;:55:::1;::::0;21769:6;::::1;::::0;-1:-1:-1;;21777:17:0;21740:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21813:4:0::1;::::0;21827:11:::1;::::0;21806:52:::1;::::0;-1:-1:-1;;;21806:52:0;;-1:-1:-1;;;;;21813:4:0;;::::1;::::0;21806:20:::1;::::0;:52:::1;::::0;21827:11;::::1;::::0;-1:-1:-1;;21840:17:0;21806:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21876:4:0::1;::::0;21890:5:::1;::::0;;21869:46:::1;::::0;-1:-1:-1;;;21869:46:0;;-1:-1:-1;;;;;21876:4:0;;::::1;::::0;21869:20:::1;::::0;:46:::1;::::0;21890:5;;::::1;::::0;-1:-1:-1;;21897:17:0;21869:46:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21563:360::o:0;21929:298::-;1894:13;:11;:13::i;:::-;21992:4:::1;::::0;22006:13:::1;::::0;21985:38:::1;::::0;-1:-1:-1;;;21985:38:0;;-1:-1:-1;;;;;21992:4:0;;::::1;::::0;21985:20:::1;::::0;:38:::1;::::0;22006:13;::::1;::::0;21992:4:::1;::::0;21985:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22041:4:0::1;::::0;22055:6:::1;::::0;22034:31:::1;::::0;-1:-1:-1;;;22034:31:0;;-1:-1:-1;;;;;22041:4:0;;::::1;::::0;22034:20:::1;::::0;:31:::1;::::0;22055:6;::::1;::::0;22041:4:::1;::::0;22034:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22083:12:0::1;::::0;22105:6:::1;::::0;22076:39:::1;::::0;-1:-1:-1;;;22076:39:0;;-1:-1:-1;;;;;22083:12:0;;::::1;::::0;22076:28:::1;::::0;:39:::1;::::0;22105:6;::::1;::::0;22083:12:::1;::::0;22076:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22133:4:0::1;::::0;22147:11:::1;::::0;22126:36:::1;::::0;-1:-1:-1;;;22126:36:0;;-1:-1:-1;;;;;22133:4:0;;::::1;::::0;22126:20:::1;::::0;:36:::1;::::0;22147:11;::::1;::::0;22133:4:::1;::::0;22126:36:::1;;;:::i;20595:156::-:0;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;20679:26:0;::::1;20671:35;;;::::0;::::1;;20717:11;:26:::0;;-1:-1:-1;;;;;;20717:26:0::1;-1:-1:-1::0;;;;;20717:26:0;;;::::1;::::0;;;::::1;::::0;;20595:156::o;20463:126::-;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;20535:20:0;::::1;20527:29;;;::::0;::::1;;20567:5;:14:::0;;-1:-1:-1;;;;;;20567:14:0::1;-1:-1:-1::0;;;;;20567:14:0;;;::::1;::::0;;;::::1;::::0;;20463:126::o;13370:265::-;13497:6;;;13534:12;13548:4;;13489:71;;-1:-1:-1;;;13489:71:0;;13455:4;;;;-1:-1:-1;;;;;13497:6:0;;;;13489:28;;:71;;13518:14;;13534:12;;;13548:4;;13455;;13489:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13472:88;;13624:3;13606:14;;13597:6;:23;;;;:::i;12035:123::-;12113:11;;12106:44;;-1:-1:-1;;;12106:44:0;;12144:4;12106:44;;;1960:51:1;12083:4:0;;-1:-1:-1;;;;;12113:11:0;;12106:29;;1933:18:1;;12106:44:0;1814:203:1;20032:161:0;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;20118:27:0;::::1;20110:36;;;::::0;::::1;;20157:12;:28:::0;;-1:-1:-1;;;;;;20157:28:0::1;-1:-1:-1::0;;;;;20157:28:0;;;::::1;::::0;;;::::1;::::0;;20032:161::o;21196:155::-;1894:13;:11;:13::i;:::-;21261:16:::1;:22:::0;;-1:-1:-1;;21261:22:0::1;::::0;;::::1;;;;::::0;;21299:44:::1;::::0;21308:15:::1;::::0;21299:44:::1;::::0;::::1;::::0;21261:22;;21299:44:::1;:::i;13988:240::-:0;14112:6;;;14149:12;14163:4;;14104:71;;-1:-1:-1;;;14104:71:0;;14067:7;;;;-1:-1:-1;;;;;14112:6:0;;;;14104:28;;:71;;14133:14;;14149:12;;;14163:4;;14067:7;;14104:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14087:88;;14217:3;14202:11;;14193:6;:20;;;;:::i;2649:103::-;1894:13;:11;:13::i;:::-;2714:30:::1;2741:1;2714:18;:30::i;:::-;2649:103::o:0;13641:341::-;13773:6;;;13810:12;13824:4;;13765:71;;-1:-1:-1;;;13765:71:0;;13720:7;;;;;;-1:-1:-1;;;;;13773:6:0;;;;13765:28;;:71;;13794:14;;13810:12;;;;13824:4;;;13720:7;;13765:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13748:88;;13850:15;13866:12;13879:17;13900:35;13920:14;13900:19;:35::i;:::-;13849:86;;;-1:-1:-1;13641:341:0;-1:-1:-1;;;;;;;13641:341:0:o;12164:187::-;12216:4;12233:15;12251;:13;:15::i;:::-;12233:33;;12278:12;12309:11;;12293:7;12303:3;12293:13;;;;:::i;20336:121::-;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;20406:19:0;::::1;20398:28;;;::::0;::::1;;20437:4;:12:::0;;-1:-1:-1;;;;;;20437:12:0::1;-1:-1:-1::0;;;;;20437:12:0;;;::::1;::::0;;;::::1;::::0;;20336:121::o;20757:122::-;1894:13;:11;:13::i;:::-;20839:14:::1;:32:::0;20757:122::o;19785:241::-;1894:13;:11;:13::i;:::-;19874:3:::1;19865:5;:12;;19857:48;;;;-1:-1:-1::0;;;19857:48:0::1;;;;;;;:::i;:::-;19933:5;19916:14;:22;;;;19975:15;19958:54;20006:5;19958:54;;;;;;:::i;19545:232::-:0;1894:13;:11;:13::i;:::-;19631:3:::1;19622:5;:12;;19614:48;;;;-1:-1:-1::0;;;19614:48:0::1;;;;;;;:::i;:::-;19673:11;:19:::0;;;19712:51:::1;::::0;;13862:21:1;;;13919:1;13899:18;;;13892:29;;;;-1:-1:-1;;;13952:2:1;13937:18;;13930:37;14034:4;14019:20;;14012:36;;;19729:15:0::1;::::0;19712:51:::1;::::0;13999:3:1;13984:19;19712:51:0::1;13650:404:1::0;21044:146:0;1894:13;:11;:13::i;:::-;21106::::1;:19:::0;;;::::1;;;;-1:-1:-1::0;;21106:19:0;;::::1;;::::0;;21141:41:::1;::::0;21150:15:::1;::::0;21141:41:::1;::::0;::::1;::::0;21122:3;;14283:2:1;14265:21;;;14322:1;14302:18;;;14295:29;-1:-1:-1;;;14355:2:1;14340:18;;14333:37;14451:14;;14444:22;14437:4;14422:20;;14415:52;14402:3;14387:19;;14059:414;12363:187:0;12415:4;12432:15;12450;:13;:15::i;:::-;12432:33;;12477:12;12508:11;;12492:7;12502:3;12492:13;;;;:::i;19309:230::-;1894:13;:11;:13::i;:::-;19395:3:::1;19386:5;:12;;19378:48;;;;-1:-1:-1::0;;;19378:48:0::1;;;;;;;:::i;:::-;19451:5;19437:11;:19;;;;19493:15;19476:51;19521:5;19476:51;;;;;;:::i;20199:131::-:0;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;20273:21:0;::::1;20265:30;;;::::0;::::1;;20306:6;:16:::0;;-1:-1:-1;;;;;;20306:16:0::1;-1:-1:-1::0;;;;;20306:16:0;;;::::1;::::0;;;::::1;::::0;;20199:131::o;20892:146::-;1894:13;:11;:13::i;:::-;20954::::1;:19:::0;;-1:-1:-1;;20954:19:0::1;::::0;::::1;;;::::0;;20989:41:::1;::::0;20998:15:::1;::::0;20989:41:::1;::::0;::::1;::::0;20954:19;;20989:41:::1;:::i;15263:936::-:0;15350:13;;;;;;;15349:14;15341:41;;;;-1:-1:-1;;;15341:41:0;;;;;;;:::i;:::-;15411:1;15401:7;:11;15393:60;;;;-1:-1:-1;;;15393:60:0;;;;;;;:::i;:::-;15490:1;15472:15;:13;:15::i;:::-;:19;15464:58;;;;-1:-1:-1;;;15464:58:0;;;;;;;:::i;:::-;15540:12;;15533:69;;-1:-1:-1;;;15533:69:0;;-1:-1:-1;;;;;15540:12:0;;;;15533:33;;:69;;15567:10;;15587:4;;15594:7;;15533:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15619:7;15630:1;15619:12;15615:56;;-1:-1:-1;15658:1:0;15615:56;15683:18;15704:15;:13;:15::i;:::-;15738:6;;;15795:12;15809:4;;15730:123;;-1:-1:-1;;;15730:123:0;;15683:36;;-1:-1:-1;;;;;;15738:6:0;;;;15730:46;;:123;;15777:7;;15786;;15795:12;;;;15809:4;;15738:6;;15830:4;;15837:15;;15730:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15730:123:0;;;;;;;;;;;;:::i;:::-;;15864:17;15884:15;:13;:15::i;:::-;15864:35;-1:-1:-1;15910:18:0;15931:22;15943:10;15864:35;15931:22;:::i;:::-;15910:43;;15966:20;16023:10;16017:3;16002:11;;15989:10;:24;;;;:::i;:::-;:31;;;;:::i;:::-;:44;;;;:::i;:::-;16058:13;;16103:7;;16044:79;;-1:-1:-1;;;16044:79:0;;;;;9200:25:1;;;9241:18;;;9234:34;;;;16112:10:0;9284:18:1;;;9277:60;15966:67:0;;-1:-1:-1;;;;;;16058:13:0;;16044:44;;9173:18:1;;16044:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16141:50:0;;;9522:25:1;;;16180:10:0;9578:2:1;9563:18;;9556:60;16149:15:0;;16141:50;;9495:18:1;16141:50:0;;;;;;;15330:869;;;;15263:936;;:::o;2907:201::-;1894:13;:11;:13::i;:::-;-1:-1:-1;;;;;2996:22:0;::::1;2988:73;;;::::0;-1:-1:-1;;;2988:73:0;;15689:2:1;2988:73:0::1;::::0;::::1;15671:21:1::0;15728:2;15708:18;;;15701:30;15767:34;15747:18;;;15740:62;-1:-1:-1;;;15818:18:1;;;15811:36;15864:19;;2988:73:0::1;15487:402:1::0;2988:73:0::1;3072:28;3091:8;3072:18;:28::i;2173:132::-:0;2054:7;2081:6;-1:-1:-1;;;;;2081:6:0;795:10;2237:23;2229:68;;;;-1:-1:-1;;;2229:68:0;;16096:2:1;2229:68:0;;;16078:21:1;;;16115:18;;;16108:30;16174:34;16154:18;;;16147:62;16226:18;;2229:68:0;15894:356:1;3268:191:0;3342:16;3361:6;;-1:-1:-1;;;;;3378:17:0;;;-1:-1:-1;;;;;;3378:17:0;;;;;;3411:40;;3361:6;;;;;;;3411:40;;3342:16;3411:40;3331:128;3268:191;:::o;206:180:1:-;265:6;318:2;306:9;297:7;293:23;289:32;286:52;;;334:1;331;324:12;286:52;-1:-1:-1;357:23:1;;206:180;-1:-1:-1;206:180:1:o;391:131::-;-1:-1:-1;;;;;466:31:1;;456:42;;446:70;;512:1;509;502:12;527:388;595:6;603;656:2;644:9;635:7;631:23;627:32;624:52;;;672:1;669;662:12;624:52;711:9;698:23;730:31;755:5;730:31;:::i;:::-;780:5;-1:-1:-1;837:2:1;822:18;;809:32;850:33;809:32;850:33;:::i;:::-;902:7;892:17;;;527:388;;;;;:::o;1102:383::-;1179:6;1187;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1300:9;1287:23;1277:33;;1357:2;1346:9;1342:18;1329:32;1319:42;;1411:2;1400:9;1396:18;1383:32;1424:31;1449:5;1424:31;:::i;:::-;1474:5;1464:15;;;1102:383;;;;;:::o;2022:248::-;2090:6;2098;2151:2;2139:9;2130:7;2126:23;2122:32;2119:52;;;2167:1;2164;2157:12;2119:52;-1:-1:-1;;2190:23:1;;;2260:2;2245:18;;;2232:32;;-1:-1:-1;2022:248:1:o;2275:247::-;2334:6;2387:2;2375:9;2366:7;2362:23;2358:32;2355:52;;;2403:1;2400;2393:12;2355:52;2442:9;2429:23;2461:31;2486:5;2461:31;:::i;2527:118::-;2613:5;2606:13;2599:21;2592:5;2589:32;2579:60;;2635:1;2632;2625:12;2650:241;2706:6;2759:2;2747:9;2738:7;2734:23;2730:32;2727:52;;;2775:1;2772;2765:12;2727:52;2814:9;2801:23;2833:28;2855:5;2833:28;:::i;3149:457::-;3374:25;;;-1:-1:-1;;;;;3473:15:1;;;3468:2;3453:18;;3446:43;3525:15;;3520:2;3505:18;;3498:43;3584:14;3577:22;3572:2;3557:18;;3550:50;3361:3;3346:19;;3149:457::o;3611:184::-;3681:6;3734:2;3722:9;3713:7;3709:23;3705:32;3702:52;;;3750:1;3747;3740:12;3702:52;-1:-1:-1;3773:16:1;;3611:184;-1:-1:-1;3611:184:1:o;3800:127::-;3861:10;3856:3;3852:20;3849:1;3842:31;3892:4;3889:1;3882:15;3916:4;3913:1;3906:15;3932:125;3972:4;4000:1;3997;3994:8;3991:34;;;4005:18;;:::i;:::-;-1:-1:-1;4042:9:1;;3932:125::o;4062:274::-;-1:-1:-1;;;;;4254:32:1;;;;4236:51;;4318:2;4303:18;;4296:34;4224:2;4209:18;;4062:274::o;4341:245::-;4408:6;4461:2;4449:9;4440:7;4436:23;4432:32;4429:52;;;4477:1;4474;4467:12;4429:52;4509:9;4503:16;4528:28;4550:5;4528:28;:::i;4591:168::-;4631:7;4697:1;4693;4689:6;4685:14;4682:1;4679:21;4674:1;4667:9;4660:17;4656:45;4653:71;;;4704:18;;:::i;:::-;-1:-1:-1;4744:9:1;;4591:168::o;4764:217::-;4804:1;4830;4820:132;;4874:10;4869:3;4865:20;4862:1;4855:31;4909:4;4906:1;4899:15;4937:4;4934:1;4927:15;4820:132;-1:-1:-1;4966:9:1;;4764:217::o;4986:338::-;5188:2;5170:21;;;5227:2;5207:18;;;5200:30;-1:-1:-1;;;5261:2:1;5246:18;;5239:44;5315:2;5300:18;;4986:338::o;5329:400::-;5531:2;5513:21;;;5570:2;5550:18;;;5543:30;5609:34;5604:2;5589:18;;5582:62;-1:-1:-1;;;5675:2:1;5660:18;;5653:34;5719:3;5704:19;;5329:400::o;5734:350::-;5936:2;5918:21;;;5975:2;5955:18;;;5948:30;6014:28;6009:2;5994:18;;5987:56;6075:2;6060:18;;5734:350::o;6089:375::-;-1:-1:-1;;;;;6347:15:1;;;6329:34;;6399:15;;;;6394:2;6379:18;;6372:43;6446:2;6431:18;;6424:34;;;;6279:2;6264:18;;6089:375::o;6469:682::-;6778:25;;;6834:2;6819:18;;6812:34;;;;-1:-1:-1;;;;;6920:15:1;;;6915:2;6900:18;;6893:43;6972:15;;;6967:2;6952:18;;6945:43;7032:14;7025:22;7019:3;7004:19;;6997:51;7085:15;6873:3;7064:19;;7057:44;7132:3;7117:19;;7110:35;6765:3;6750:19;;6469:682::o;7156:127::-;7217:10;7212:3;7208:20;7205:1;7198:31;7248:4;7245:1;7238:15;7272:4;7269:1;7262:15;7288:1105;7383:6;7414:2;7457;7445:9;7436:7;7432:23;7428:32;7425:52;;;7473:1;7470;7463:12;7425:52;7506:9;7500:16;7535:18;7576:2;7568:6;7565:14;7562:34;;;7592:1;7589;7582:12;7562:34;7630:6;7619:9;7615:22;7605:32;;7675:7;7668:4;7664:2;7660:13;7656:27;7646:55;;7697:1;7694;7687:12;7646:55;7726:2;7720:9;7748:2;7744;7741:10;7738:36;;;7754:18;;:::i;:::-;7800:2;7797:1;7793:10;7832:2;7826:9;7895:2;7891:7;7886:2;7882;7878:11;7874:25;7866:6;7862:38;7950:6;7938:10;7935:22;7930:2;7918:10;7915:18;7912:46;7909:72;;;7961:18;;:::i;:::-;7997:2;7990:22;8047:18;;;8081:15;;;;-1:-1:-1;8123:11:1;;;8119:20;;;8151:19;;;8148:39;;;8183:1;8180;8173:12;8148:39;8207:11;;;;8227:135;8243:6;8238:3;8235:15;8227:135;;;8309:10;;8297:23;;8260:12;;;;8340;;;;8227:135;;;8381:6;7288:1105;-1:-1:-1;;;;;;;;7288:1105:1:o;8398:251::-;8468:6;8521:2;8509:9;8500:7;8496:23;8492:32;8489:52;;;8537:1;8534;8527:12;8489:52;8569:9;8563:16;8588:31;8613:5;8588:31;:::i;10017:245::-;10096:6;10104;10157:2;10145:9;10136:7;10132:23;10128:32;10125:52;;;10173:1;10170;10163:12;10125:52;-1:-1:-1;;10196:16:1;;10252:2;10237:18;;;10231:25;10196:16;;10231:25;;-1:-1:-1;10017:245:1:o;11470:306::-;11558:6;11566;11574;11627:2;11615:9;11606:7;11602:23;11598:32;11595:52;;;11643:1;11640;11633:12;11595:52;11672:9;11666:16;11656:26;;11722:2;11711:9;11707:18;11701:25;11691:35;;11766:2;11755:9;11751:18;11745:25;11735:35;;11470:306;;;;;:::o;12582:358::-;12806:2;12795:9;12788:21;12769:4;12826:49;12871:2;12860:9;12856:18;12495:2;12483:15;;-1:-1:-1;;;12523:4:1;12514:14;;12507:36;12568:2;12559:12;;12418:159;12826:49;12818:57;;12925:6;12918:14;12911:22;12906:2;12895:9;12891:18;12884:50;12582:358;;;;:::o;12945:347::-;13147:2;13129:21;;;13186:2;13166:18;;;13159:30;13225:25;13220:2;13205:18;;13198:53;13283:2;13268:18;;12945:347::o;13297:348::-;13527:2;13516:9;13509:21;13490:4;13547:49;13592:2;13581:9;13577:18;12495:2;12483:15;;-1:-1:-1;;;12523:4:1;12514:14;;12507:36;12568:2;12559:12;;12418:159;13547:49;13539:57;;13632:6;13627:2;13616:9;13612:18;13605:34;13297:348;;;;:::o;14638:::-;14868:2;14857:9;14850:21;14831:4;14888:49;14933:2;14922:9;14918:18;14555:1;14543:14;;-1:-1:-1;;;14582:4:1;14573:14;;14566:33;14624:2;14615:12;;14478:155;14991:358;15215:2;15204:9;15197:21;15178:4;15235:49;15280:2;15269:9;15265:18;14555:1;14543:14;;-1:-1:-1;;;14582:4:1;14573:14;;14566:33;14624:2;14615:12;;14478:155;15354:128;15394:3;15425:1;15421:6;15418:1;15415:13;15412:39;;;15431:18;;:::i;:::-;-1:-1:-1;15467:9:1;;15354:128::o

Swarm Source

ipfs://bf22dba76cc572db72ed1bb8326d553d19095e620a94e31d46bab3d980adf8cf
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.