POL Price: $0.221362 (+6.68%)
Gas: 36 GWei
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Add Trading Cont...560024582024-04-19 10:26:30368 days ago1713522390IN
Gains Network: GFarm Storage
0 POL0.00679216122.98179475
Approve530626732024-02-03 4:35:27445 days ago1706934927IN
Gains Network: GFarm Storage
0 POL0.0019196787.86885689
Approve530620042024-02-03 4:10:08445 days ago1706933408IN
Gains Network: GFarm Storage
0 POL0.00187585.82442099
Approve530421242024-02-02 15:41:03445 days ago1706888463IN
Gains Network: GFarm Storage
0 POL0.0021847100
Approve530421182024-02-02 15:40:50445 days ago1706888450IN
Gains Network: GFarm Storage
0 POL0.0021847100
Approve530385342024-02-02 13:28:52445 days ago1706880532IN
Gains Network: GFarm Storage
0 POL0.0021847100
Approve530385302024-02-02 13:28:44445 days ago1706880524IN
Gains Network: GFarm Storage
0 POL0.0021847100
Approve530365892024-02-02 12:16:35445 days ago1706876195IN
Gains Network: GFarm Storage
0 POL0.0021847100
Approve530253552024-02-02 5:04:55446 days ago1706850295IN
Gains Network: GFarm Storage
0 POL0.0021575598.75763428
Set Price Aggreg...526503822024-01-23 7:43:00455 days ago1705995780IN
Gains Network: GFarm Storage
0 POL0.0009297830.0035943
Set Trading504482742023-11-27 10:14:00512 days ago1701080040IN
Gains Network: GFarm Storage
0 POL0.0020641966.65573966
Add Trading Cont...504463882023-11-27 9:06:14512 days ago1701075974IN
Gains Network: GFarm Storage
0 POL0.0047034285.16231411
Update Sl502892662023-11-23 10:50:25516 days ago1700736625IN
Gains Network: GFarm Storage
0 POL0.0008056832.79023277
Approve491454202023-10-25 19:07:32545 days ago1698260852IN
Gains Network: GFarm Storage
0 POL0.0021835100
Approve491452722023-10-25 19:02:18545 days ago1698260538IN
Gains Network: GFarm Storage
0 POL0.0022159100
Claim Fees481543492023-09-30 8:20:45570 days ago1696062045IN
Gains Network: GFarm Storage
0 POL0.0090656385.9929984
Set Trading481529592023-09-30 7:25:38570 days ago1696058738IN
Gains Network: GFarm Storage
0 POL0.0028218491.12123147
Claim Fees476219362023-09-16 18:38:05584 days ago1694889485IN
Gains Network: GFarm Storage
0 POL0.01227379116.42428168
Add Trading Cont...476174502023-09-16 15:58:23584 days ago1694879903IN
Gains Network: GFarm Storage
0 POL0.00808499146.39044138
Add Trading Cont...476174432023-09-16 15:58:09584 days ago1694879889IN
Gains Network: GFarm Storage
0 POL0.0075888137.43602719
Set Nft Success ...469826852023-08-31 16:30:28600 days ago1693499428IN
Gains Network: GFarm Storage
0 POL0.00311891120.98657981
Claim Fees464093612023-08-17 8:27:03614 days ago1692260823IN
Gains Network: GFarm Storage
0 POL0.0080070475.95155901
Set Trading460209132023-08-07 14:04:59624 days ago1691417099IN
Gains Network: GFarm Storage
0 POL0.0028935193.43559942
Set Price Aggreg...460208962023-08-07 14:04:23624 days ago1691417063IN
Gains Network: GFarm Storage
0 POL0.0030384298.0486046
Set Max Open Int...457742752023-08-01 9:04:33630 days ago1690880673IN
Gains Network: GFarm Storage
0 POL0.00407415130.59860709
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GFarmTradingStorageV5

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-10-12
*/

// File: contracts\interfaces\TokenInterfaceV5.sol

// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

interface TokenInterfaceV5{
    function burn(address, uint256) external;
    function mint(address, uint256) external;
    function transfer(address, uint256) external returns (bool);
    function transferFrom(address, address, uint256) external returns(bool);
    function balanceOf(address) external view returns(uint256);
    function hasRole(bytes32, address) external view returns (bool);
    function approve(address, uint256) external returns (bool);
    function allowance(address, address) external view returns (uint256);
}

// File: contracts\interfaces\AggregatorInterfaceV5.sol

pragma solidity 0.8.7;

interface AggregatorInterfaceV5{
    enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE }
    function getPrice(uint,OrderType,uint) external returns(uint);
    function tokenPriceDai() external view returns(uint);
    function pairMinOpenLimitSlippageP(uint) external view returns(uint);
    function closeFeeP(uint) external view returns(uint);
    function linkFee(uint,uint) external view returns(uint);
    function openFeeP(uint) external view returns(uint);
    function pairMinLeverage(uint) external view returns(uint);
    function pairMaxLeverage(uint) external view returns(uint);
    function pairsCount() external view returns(uint);
    function tokenDaiReservesLp() external view returns(uint, uint);
    function referralP(uint) external view returns(uint);
    function nftLimitOrderFeeP(uint) external view returns(uint);
}

// File: contracts\interfaces\PoolInterfaceV5.sol

pragma solidity 0.8.7;

interface PoolInterfaceV5{
    function increaseAccTokensPerLp(uint) external;
}

// File: contracts\interfaces\NftInterfaceV5.sol

pragma solidity 0.8.7;

interface NftInterfaceV5{
    function balanceOf(address) external view returns (uint);
    function ownerOf(uint) external view returns (address);
    function transferFrom(address, address, uint) external;
    function tokenOfOwnerByIndex(address, uint) external view returns(uint);
}

// File: contracts\interfaces\PausableInterfaceV5.sol

pragma solidity 0.8.7;

interface PausableInterfaceV5{
    function isPaused() external view returns (bool);
}

// File: contracts\GFarmTradingStorageV5.sol






pragma solidity 0.8.7;

contract GFarmTradingStorageV5 {

    // Constants
    uint public constant PRECISION = 1e10;
    bytes32 public constant MINTER_ROLE = 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6;
    TokenInterfaceV5 public constant dai = TokenInterfaceV5(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);
    TokenInterfaceV5 public constant linkErc677 = TokenInterfaceV5(0xb0897686c545045aFc77CF20eC7A532E3120E0F1);

    // Contracts (updatable)
    AggregatorInterfaceV5 public priceAggregator;
    PoolInterfaceV5 public pool;
    PausableInterfaceV5 public trading;
    PausableInterfaceV5 public callbacks;
    TokenInterfaceV5 public token = TokenInterfaceV5(0x7075cAB6bCCA06613e2d071bd918D1a0241379E2);
    NftInterfaceV5[5] public nfts = [
        NftInterfaceV5(0xF9A4c522E327935BD1F5a338c121E14e4cc1f898),
        NftInterfaceV5(0x77cd42B925e1A82f41d852D6BE727CFc88fddBbC),
        NftInterfaceV5(0x3378AD81D09DE23725Ee9B9270635c97Ed601921),
        NftInterfaceV5(0x02e2c5825C1a3b69C0417706DbE1327C2Af3e6C2),
        NftInterfaceV5(0x2D266A94469d05C9e06D52A4D0d9C23b157767c2)
    ];
    address public vault;
    address public tokenDaiRouter;

    // Trading variables
    uint public maxTradesPerPair = 3;
    uint public maxTradesPerBlock = 5;
    uint public maxPendingMarketOrders = 5;
    uint public maxGainP = 900;                          // %
    uint public maxSlP = 80;                             // %
    uint public defaultLeverageUnlocked = 50;            // x
    uint public nftSuccessTimelock = 50;                 // 50 blocks
    uint[5] public spreadReductionsP = [15,20,25,30,35]; // %

    // Gov & dev addresses (updatable)
    address public gov = 0xC66FbE50Dd33c9AAdd65707F7088D597C86fE00F;
    address public dev = 0xd39A38bD2D2d552f3908ff698a5530aa397fb92d;

    // Gov & dev fees
    uint public devFeesToken;   // 1e18
    uint public devFeesDai;     // 1e18
    uint public govFeesToken;   // 1e18
    uint public govFeesDai;     // 1e18

    // Stats
    uint public tokensBurned;   // 1e18
    uint public tokensMinted;   // 1e18
    uint public nftRewards;     // 1e18

    // Enums
    enum LimitOrder { TP, SL, LIQ, OPEN }

    // Structs
    struct Trader{
        uint leverageUnlocked;
        address referral;
        uint referralRewardsTotal;  // 1e18
    }
    struct Trade{
        address trader;
        uint pairIndex;
        uint index;
        uint initialPosToken;       // 1e18
        uint positionSizeDai;       // 1e18
        uint openPrice;             // PRECISION
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION
        uint sl;                    // PRECISION
    }
    struct TradeInfo{
        uint tokenId;
        uint tokenPriceDai;         // PRECISION
        uint openInterestDai;       // 1e18
        uint tpLastUpdated;
        uint slLastUpdated;
        bool beingMarketClosed;
    }
    struct OpenLimitOrder{
        address trader;
        uint pairIndex;
        uint index;
        uint positionSize;          // 1e18 (DAI or GFARM2)
        uint spreadReductionP;
        bool buy;
        uint leverage;
        uint tp;                    // PRECISION (%)
        uint sl;                    // PRECISION (%)
        uint minPrice;              // PRECISION
        uint maxPrice;              // PRECISION
        uint block;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingMarketOrder{
        Trade trade;
        uint block;
        uint wantedPrice;           // PRECISION
        uint slippageP;             // PRECISION (%)
        uint spreadReductionP;
        uint tokenId;               // index in supportedTokens
    }
    struct PendingNftOrder{
        address nftHolder;
        uint nftId;
        address trader;
        uint pairIndex;
        uint index;
        LimitOrder orderType;
    }

    // Supported tokens to open trades with
    address[] public supportedTokens;

    // User info mapping
    mapping(address => Trader) public traders;

    // Trades mappings
    mapping(address => mapping(uint => mapping(uint => Trade))) public openTrades;
    mapping(address => mapping(uint => mapping(uint => TradeInfo))) public openTradesInfo;
    mapping(address => mapping(uint => uint)) public openTradesCount;

    // Limit orders mappings
    mapping(address => mapping(uint => mapping(uint => uint))) public openLimitOrderIds;
    mapping(address => mapping(uint => uint)) public openLimitOrdersCount;
    OpenLimitOrder[] public openLimitOrders;

    // Pending orders mappings
    mapping(uint => PendingMarketOrder) public reqID_pendingMarketOrder;
    mapping(uint => PendingNftOrder) public reqID_pendingNftOrder;
    mapping(address => uint[]) public pendingOrderIds;
    mapping(address => mapping(uint => uint)) public pendingMarketOpenCount;
    mapping(address => mapping(uint => uint)) public pendingMarketCloseCount;

    // List of open trades & limit orders
    mapping(uint => address[]) public pairTraders;
    mapping(address => mapping(uint => uint)) public pairTradersId;

    // Current and max open interests for each pair
    mapping(uint => uint[3]) public openInterestDai; // 1e18 [long,short,max]

    // Restrictions & Timelocks
    mapping(uint => uint) public tradesPerBlock;
    mapping(uint => uint) public nftLastSuccess;

    // List of allowed contracts => can update storage + mint/burn tokens
    mapping(address => bool) public isTradingContract;

    // Events
    event SupportedTokenAdded(address a);
    event TradingContractAdded(address a);
    event TradingContractRemoved(address a);
    event AddressUpdated(string name, address a);
    event NftsUpdated(NftInterfaceV5[5] nfts);
    event NumberUpdated(string name,uint value);
    event NumberUpdatedPair(string name,uint pairIndex,uint value);
    event SpreadReductionsUpdated(uint[5]);

    constructor() { }

    // Modifiers
    modifier onlyGov(){ require(msg.sender == gov); _; }
    modifier onlyTrading(){ require(isTradingContract[msg.sender] && token.hasRole(MINTER_ROLE, msg.sender)); _; }

    // Manage addresses
    function setGov(address _gov) external onlyGov{
        require(_gov != address(0));
        gov = _gov;
        emit AddressUpdated("gov", _gov);
    }
    function setDev(address _dev) external onlyGov{
        require(_dev != address(0));
        dev = _dev;
        emit AddressUpdated("dev", _dev);
    }
    function updateToken(TokenInterfaceV5 _newToken) external onlyGov{
        require(trading.isPaused() && callbacks.isPaused(), "NOT_PAUSED");
        require(address(_newToken) != address(0));
        token = _newToken;
        emit AddressUpdated("token", address(_newToken));
    }
    function updateNfts(NftInterfaceV5[5] memory _nfts) external onlyGov{
        require(address(_nfts[0]) != address(0));
        nfts = _nfts;
        emit NftsUpdated(_nfts);
    }
    // Trading + callbacks contracts
    function addTradingContract(address _trading) external onlyGov{
        require(token.hasRole(MINTER_ROLE, _trading), "NOT_MINTER");
        require(_trading != address(0));
        isTradingContract[_trading] = true;
        emit TradingContractAdded(_trading);
    }
    function removeTradingContract(address _trading) external onlyGov{
        require(_trading != address(0));
        isTradingContract[_trading] = false;
        emit TradingContractRemoved(_trading);
    }
    function addSupportedToken(address _token) external onlyGov{
        require(_token != address(0));
        supportedTokens.push(_token);
        emit SupportedTokenAdded(_token);
    }
    function setPriceAggregator(address _aggregator) external onlyGov{
        require(_aggregator != address(0));
        priceAggregator = AggregatorInterfaceV5(_aggregator);
        emit AddressUpdated("priceAggregator", _aggregator);
    }
    function setPool(address _pool) external onlyGov{
        require(_pool != address(0));
        pool = PoolInterfaceV5(_pool);
        emit AddressUpdated("pool", _pool);
    }
    function setVault(address _vault) external onlyGov{
        require(_vault != address(0));
        vault = _vault;
        emit AddressUpdated("vault", _vault);
    }
    function setTrading(address _trading) external onlyGov{
        require(_trading != address(0));
        trading = PausableInterfaceV5(_trading);
        emit AddressUpdated("trading", _trading);
    }
    function setCallbacks(address _callbacks) external onlyGov{
        require(_callbacks != address(0));
        callbacks = PausableInterfaceV5(_callbacks);
        emit AddressUpdated("callbacks", _callbacks);
    }
    function setTokenDaiRouter(address _tokenDaiRouter) external onlyGov{
        require(_tokenDaiRouter != address(0));
        tokenDaiRouter = _tokenDaiRouter;
        emit AddressUpdated("tokenDaiRouter", _tokenDaiRouter);
    }

    // Manage trading variables
    function setMaxTradesPerBlock(uint _maxTradesPerBlock) external onlyGov{
        require(_maxTradesPerBlock > 0);
        maxTradesPerBlock = _maxTradesPerBlock;
        emit NumberUpdated("maxTradesPerBlock", _maxTradesPerBlock);
    }
    function setMaxTradesPerPair(uint _maxTradesPerPair) external onlyGov{
        require(_maxTradesPerPair > 0);
        maxTradesPerPair = _maxTradesPerPair;
        emit NumberUpdated("maxTradesPerPair", _maxTradesPerPair);
    }
    function setMaxPendingMarketOrders(uint _maxPendingMarketOrders) external onlyGov{
        require(_maxPendingMarketOrders > 0);
        maxPendingMarketOrders = _maxPendingMarketOrders;
        emit NumberUpdated("maxPendingMarketOrders", _maxPendingMarketOrders);
    }
    function setMaxGainP(uint _max) external onlyGov{
        require(_max >= 300);
        maxGainP = _max;
        emit NumberUpdated("maxGainP", _max);
    }
    function setDefaultLeverageUnlocked(uint _lev) external onlyGov{
        require(_lev > 0);
        defaultLeverageUnlocked = _lev;
        emit NumberUpdated("defaultLeverageUnlocked", _lev);
    }
    function setMaxSlP(uint _max) external onlyGov{
        require(_max >= 50);
        maxSlP = _max;
        emit NumberUpdated("maxSlP", _max);
    }
    function setNftSuccessTimelock(uint _blocks) external onlyGov{
        nftSuccessTimelock = _blocks;
        emit NumberUpdated("nftSuccessTimelock", _blocks);
    }
    function setSpreadReductionsP(uint[5] calldata _r) external onlyGov{
        require(_r[0] > 0 && _r[1] > _r[0] && _r[2] > _r[1] && _r[3] > _r[2] && _r[4] > _r[3]);
        spreadReductionsP = _r;
        emit SpreadReductionsUpdated(_r);
    }
    function setMaxOpenInterestDai(uint _pairIndex, uint _newMaxOpenInterest) external onlyGov{
        // Can set max open interest to 0 to pause trading on this pair only
        openInterestDai[_pairIndex][2] = _newMaxOpenInterest;
        emit NumberUpdatedPair("maxOpenInterestDai", _pairIndex, _newMaxOpenInterest);
    }

    // Manage stored trades
    function storeTrade(Trade memory _trade, TradeInfo memory _tradeInfo) external onlyTrading{
        _trade.index = firstEmptyTradeIndex(_trade.trader, _trade.pairIndex);
        openTrades[_trade.trader][_trade.pairIndex][_trade.index] = _trade;

        openTradesCount[_trade.trader][_trade.pairIndex]++;
        tradesPerBlock[block.number]++;

        if(openTradesCount[_trade.trader][_trade.pairIndex] == 1){
            pairTradersId[_trade.trader][_trade.pairIndex] = pairTraders[_trade.pairIndex].length;
            pairTraders[_trade.pairIndex].push(_trade.trader); 
        }

        _tradeInfo.beingMarketClosed = false;
        openTradesInfo[_trade.trader][_trade.pairIndex][_trade.index] = _tradeInfo;

        updateOpenInterestDai(_trade.pairIndex, _tradeInfo.openInterestDai, true, _trade.buy);
    }
    function unregisterTrade(address trader, uint pairIndex, uint index) external onlyTrading{
        Trade storage t = openTrades[trader][pairIndex][index];
        TradeInfo storage i = openTradesInfo[trader][pairIndex][index];
        if(t.leverage == 0){ return; }

        updateOpenInterestDai(pairIndex, i.openInterestDai, false, t.buy);

        if(openTradesCount[trader][pairIndex] == 1){
            uint _pairTradersId = pairTradersId[trader][pairIndex];
            address[] storage p = pairTraders[pairIndex];

            p[_pairTradersId] = p[p.length-1];
            pairTradersId[p[_pairTradersId]][pairIndex] = _pairTradersId;
            
            delete pairTradersId[trader][pairIndex];
            p.pop();
        }

        delete openTrades[trader][pairIndex][index];
        delete openTradesInfo[trader][pairIndex][index];

        openTradesCount[trader][pairIndex]--;
        tradesPerBlock[block.number]++;
    }

    // Manage pending market orders
    function storePendingMarketOrder(PendingMarketOrder memory _order, uint _id, bool _open) external onlyTrading{
        pendingOrderIds[_order.trade.trader].push(_id);

        reqID_pendingMarketOrder[_id] = _order;
        reqID_pendingMarketOrder[_id].block = block.number;
        
        if(_open){
            pendingMarketOpenCount[_order.trade.trader][_order.trade.pairIndex]++;
        }else{
            pendingMarketCloseCount[_order.trade.trader][_order.trade.pairIndex]++;
            openTradesInfo[_order.trade.trader][_order.trade.pairIndex][_order.trade.index].beingMarketClosed = true;
        }
    }
    function unregisterPendingMarketOrder(uint _id, bool _open) external onlyTrading{
        PendingMarketOrder memory _order = reqID_pendingMarketOrder[_id];
        uint[] storage orderIds = pendingOrderIds[_order.trade.trader];

        for(uint i = 0; i < orderIds.length; i++){
            if(orderIds[i] == _id){
                if(_open){ 
                    pendingMarketOpenCount[_order.trade.trader][_order.trade.pairIndex]--;
                }else{
                    pendingMarketCloseCount[_order.trade.trader][_order.trade.pairIndex]--;
                    openTradesInfo[_order.trade.trader][_order.trade.pairIndex][_order.trade.index].beingMarketClosed = false;
                }

                orderIds[i] = orderIds[orderIds.length-1];
                orderIds.pop();

                delete reqID_pendingMarketOrder[_id];
                return;
            }
        }
    }

    // Manage open interest
    function updateOpenInterestDai(uint _pairIndex, uint _leveragedPosDai, bool _open, bool _long) private{
        uint index = _long ? 0 : 1;
        uint[3] storage o = openInterestDai[_pairIndex];
        o[index] = _open ? o[index] + _leveragedPosDai : o[index] - _leveragedPosDai;
    }

    // Manage open limit orders
    function storeOpenLimitOrder(OpenLimitOrder memory o) external onlyTrading{
        o.index = firstEmptyOpenLimitIndex(o.trader, o.pairIndex);
        o.block = block.number;
        openLimitOrders.push(o);
        openLimitOrderIds[o.trader][o.pairIndex][o.index] = openLimitOrders.length-1;
        openLimitOrdersCount[o.trader][o.pairIndex]++;
    }
    function updateOpenLimitOrder(OpenLimitOrder calldata _o) external onlyTrading{
        if(!hasOpenLimitOrder(_o.trader, _o.pairIndex, _o.index)){ return; }
        OpenLimitOrder storage o = openLimitOrders[openLimitOrderIds[_o.trader][_o.pairIndex][_o.index]];
        o.positionSize = _o.positionSize;
        o.buy = _o.buy;
        o.leverage = _o.leverage;
        o.tp = _o.tp;
        o.sl = _o.sl;
        o.minPrice = _o.minPrice;
        o.maxPrice = _o.maxPrice;
        o.block = block.number;
    }
    function unregisterOpenLimitOrder(address _trader, uint _pairIndex, uint _index) external onlyTrading{
        if(!hasOpenLimitOrder(_trader, _pairIndex, _index)){ return; }

        // Copy last order to deleted order => update id of this limit order
        uint id = openLimitOrderIds[_trader][_pairIndex][_index];
        openLimitOrders[id] = openLimitOrders[openLimitOrders.length-1];
        openLimitOrderIds[openLimitOrders[id].trader][openLimitOrders[id].pairIndex][openLimitOrders[id].index] = id;

        // Remove
        delete openLimitOrderIds[_trader][_pairIndex][_index];
        openLimitOrders.pop();

        openLimitOrdersCount[_trader][_pairIndex]--;
    }

    // Manage NFT orders
    function storePendingNftOrder(PendingNftOrder memory _nftOrder, uint _orderId) external onlyTrading{
        reqID_pendingNftOrder[_orderId] = _nftOrder;
    }
    function unregisterPendingNftOrder(uint _order) external onlyTrading{
        delete reqID_pendingNftOrder[_order];
    }

    // Manage open trade
    function updateSl(address _trader, uint _pairIndex, uint _index, uint _newSl) external onlyTrading{
        Trade storage t = openTrades[_trader][_pairIndex][_index];
        TradeInfo storage i = openTradesInfo[_trader][_pairIndex][_index];
        if(t.leverage == 0){ return; }
        t.sl = _newSl;
        i.slLastUpdated = block.number;
    }
    function updateTp(address _trader, uint _pairIndex, uint _index, uint _newTp) external onlyTrading{
        Trade storage t = openTrades[_trader][_pairIndex][_index];
        TradeInfo storage i = openTradesInfo[_trader][_pairIndex][_index];
        if(t.leverage == 0){ return; }
        t.tp = _newTp;
        i.tpLastUpdated = block.number;
    }
    function updateTrade(Trade memory _t) external onlyTrading{ // useful when partial adding/closing
        Trade storage t = openTrades[_t.trader][_t.pairIndex][_t.index];
        if(t.leverage == 0){ return; }
        t.initialPosToken = _t.initialPosToken;
        t.positionSizeDai = _t.positionSizeDai;
        t.openPrice = _t.openPrice;
        t.leverage = _t.leverage;
    }

    // Manage referrals
    function storeReferral(address _trader, address _referral) external onlyTrading{
        Trader storage trader = traders[_trader];
        trader.referral = _referral != address(0) && trader.referral == address(0) && _referral != _trader 
                        ? _referral : trader.referral;
    }
    function increaseReferralRewards(address _referral, uint _amount) external onlyTrading{ 
        traders[_referral].referralRewardsTotal += _amount; 
    }

    // Manage rewards
    function distributeLpRewards(uint _amount) external onlyTrading{ pool.increaseAccTokensPerLp(_amount); }
    function increaseNftRewards(uint _nftId, uint _amount) external onlyTrading{
        nftLastSuccess[_nftId] = block.number; 
        nftRewards += _amount; 
    }

    // Unlock next leverage
    function setLeverageUnlocked(address _trader, uint _newLeverage) external onlyTrading{
        traders[_trader].leverageUnlocked = _newLeverage;
    }

    // Manage dev & gov fees
    function handleDevGovFees(uint _pairIndex, uint _leveragedPositionSize, bool _dai, bool _fullFee) external onlyTrading returns(uint fee){
        fee = _leveragedPositionSize * priceAggregator.openFeeP(_pairIndex) / PRECISION / 100;
        if(!_fullFee){ fee /= 2; }

        if(_dai){
            govFeesDai += fee;
            devFeesDai += fee;
        }else{
            govFeesToken += fee;
            devFeesToken += fee;
        }

        fee *= 2;
    }
    function claimFees() external onlyGov{
        token.mint(dev, devFeesToken);
        token.mint(gov, govFeesToken);

        tokensMinted += devFeesToken + govFeesToken;

        dai.transfer(gov, govFeesDai);
        dai.transfer(dev, devFeesDai);

        devFeesToken = 0;
        govFeesToken = 0;
        devFeesDai = 0;
        govFeesDai = 0;
    }

    // Manage tokens
    function handleTokens(address _a, uint _amount, bool _mint) external onlyTrading{ 
        if(_mint){ token.mint(_a, _amount); tokensMinted += _amount; } 
        else { token.burn(_a, _amount); tokensBurned += _amount; } 
    }
    function transferDai(address _from, address _to, uint _amount) external onlyTrading{ 
        if(_from == address(this)){
            dai.transfer(_to, _amount); 
        }else{
            dai.transferFrom(_from, _to, _amount); 
        }
    }
    function transferLinkToAggregator(address _from, uint _pairIndex, uint _leveragedPosDai) external onlyTrading{ 
        linkErc677.transferFrom(_from, address(priceAggregator), priceAggregator.linkFee(_pairIndex, _leveragedPosDai)); 
    }

    // View utils functions
    function firstEmptyTradeIndex(address trader, uint pairIndex) public view returns(uint index){
        for(uint i = 0; i < maxTradesPerPair; i++){
            if(openTrades[trader][pairIndex][i].leverage == 0){ index = i; break; }
        }
    }
    function firstEmptyOpenLimitIndex(address trader, uint pairIndex) public view returns(uint index){
        for(uint i = 0; i < maxTradesPerPair; i++){
            if(!hasOpenLimitOrder(trader, pairIndex, i)){ index = i; break; }
        }
    }
    function hasOpenLimitOrder(address trader, uint pairIndex, uint index) public view returns(bool){
        if(openLimitOrders.length == 0){ return false; }
        OpenLimitOrder storage o = openLimitOrders[openLimitOrderIds[trader][pairIndex][index]];
        return o.trader == trader && o.pairIndex == pairIndex && o.index == index;
    }

    // Additional getters
    function getReferral(address _trader) external view returns(address){ 
        return traders[_trader].referral; 
    }
    function getLeverageUnlocked(address _trader) external view returns(uint){ 
        return traders[_trader].leverageUnlocked; 
    }
    function pairTradersArray(uint _pairIndex) external view returns(address[] memory){ 
        return pairTraders[_pairIndex]; 
    }
    function getPendingOrderIds(address _trader) external view returns(uint[] memory){ 
        return pendingOrderIds[_trader]; 
    }
    function pendingOrderIdsCount(address _trader) external view returns(uint){ 
        return pendingOrderIds[_trader].length; 
    }
    function getOpenLimitOrder(
        address _trader, 
        uint _pairIndex,
        uint _index
    ) external view returns(OpenLimitOrder memory){ 
        require(hasOpenLimitOrder(_trader, _pairIndex, _index));
        return openLimitOrders[openLimitOrderIds[_trader][_pairIndex][_index]]; 
    }
    function getOpenLimitOrders() external view returns(OpenLimitOrder[] memory){ 
        return openLimitOrders; 
    }
    function getSupportedTokens() external view returns(address[] memory){ 
        return supportedTokens; 
    }
    function getSpreadReductionsArray() external view returns(uint[5] memory){
        return spreadReductionsP;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"contract NftInterfaceV5[5]","name":"nfts","type":"address[5]"}],"name":"NftsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NumberUpdatedPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[5]","name":"","type":"uint256[5]"}],"name":"SpreadReductionsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"SupportedTokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"TradingContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"TradingContractRemoved","type":"event"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trading","type":"address"}],"name":"addTradingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callbacks","outputs":[{"internalType":"contract PausableInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dai","outputs":[{"internalType":"contract TokenInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultLeverageUnlocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeesDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeesToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"distributeLpRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"}],"name":"firstEmptyOpenLimitIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"}],"name":"firstEmptyTradeIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"}],"name":"getLeverageUnlocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getOpenLimitOrder","outputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"positionSize","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.OpenLimitOrder","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOpenLimitOrders","outputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"positionSize","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.OpenLimitOrder[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"}],"name":"getPendingOrderIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"}],"name":"getReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSpreadReductionsArray","outputs":[{"internalType":"uint256[5]","name":"","type":"uint256[5]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupportedTokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govFeesDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govFeesToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_leveragedPositionSize","type":"uint256"},{"internalType":"bool","name":"_dai","type":"bool"},{"internalType":"bool","name":"_fullFee","type":"bool"}],"name":"handleDevGovFees","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_a","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_mint","type":"bool"}],"name":"handleTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"hasOpenLimitOrder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"increaseNftRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referral","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"increaseReferralRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTradingContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkErc677","outputs":[{"internalType":"contract TokenInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxGainP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPendingMarketOrders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSlP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTradesPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTradesPerPair","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftLastSuccess","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftSuccessTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nfts","outputs":[{"internalType":"contract NftInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openInterestDai","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openLimitOrderIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"openLimitOrders","outputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"positionSize","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openLimitOrdersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openTrades","outputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openTradesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"openTradesInfo","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"tokenPriceDai","type":"uint256"},{"internalType":"uint256","name":"openInterestDai","type":"uint256"},{"internalType":"uint256","name":"tpLastUpdated","type":"uint256"},{"internalType":"uint256","name":"slLastUpdated","type":"uint256"},{"internalType":"bool","name":"beingMarketClosed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairTraders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"}],"name":"pairTradersArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairTradersId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingMarketCloseCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingMarketOpenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingOrderIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"}],"name":"pendingOrderIdsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract PoolInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAggregator","outputs":[{"internalType":"contract AggregatorInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_trading","type":"address"}],"name":"removeTradingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reqID_pendingMarketOrder","outputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reqID_pendingNftOrder","outputs":[{"internalType":"address","name":"nftHolder","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"enum GFarmTradingStorageV5.LimitOrder","name":"orderType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_callbacks","type":"address"}],"name":"setCallbacks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lev","type":"uint256"}],"name":"setDefaultLeverageUnlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"}],"name":"setDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_newLeverage","type":"uint256"}],"name":"setLeverageUnlocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxGainP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_newMaxOpenInterest","type":"uint256"}],"name":"setMaxOpenInterestDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPendingMarketOrders","type":"uint256"}],"name":"setMaxPendingMarketOrders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxSlP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTradesPerBlock","type":"uint256"}],"name":"setMaxTradesPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTradesPerPair","type":"uint256"}],"name":"setMaxTradesPerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setNftSuccessTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_aggregator","type":"address"}],"name":"setPriceAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"_r","type":"uint256[5]"}],"name":"setSpreadReductionsP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDaiRouter","type":"address"}],"name":"setTokenDaiRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trading","type":"address"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"spreadReductionsP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"positionSize","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.OpenLimitOrder","name":"o","type":"tuple"}],"name":"storeOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.Trade","name":"trade","type":"tuple"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"wantedPrice","type":"uint256"},{"internalType":"uint256","name":"slippageP","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.PendingMarketOrder","name":"_order","type":"tuple"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"name":"storePendingMarketOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"nftHolder","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"enum GFarmTradingStorageV5.LimitOrder","name":"orderType","type":"uint8"}],"internalType":"struct GFarmTradingStorageV5.PendingNftOrder","name":"_nftOrder","type":"tuple"},{"internalType":"uint256","name":"_orderId","type":"uint256"}],"name":"storePendingNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"address","name":"_referral","type":"address"}],"name":"storeReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.Trade","name":"_trade","type":"tuple"},{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"tokenPriceDai","type":"uint256"},{"internalType":"uint256","name":"openInterestDai","type":"uint256"},{"internalType":"uint256","name":"tpLastUpdated","type":"uint256"},{"internalType":"uint256","name":"slLastUpdated","type":"uint256"},{"internalType":"bool","name":"beingMarketClosed","type":"bool"}],"internalType":"struct GFarmTradingStorageV5.TradeInfo","name":"_tradeInfo","type":"tuple"}],"name":"storeTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supportedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract TokenInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenDaiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"traders","outputs":[{"internalType":"uint256","name":"leverageUnlocked","type":"uint256"},{"internalType":"address","name":"referral","type":"address"},{"internalType":"uint256","name":"referralRewardsTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tradesPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"contract PausableInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_leveragedPosDai","type":"uint256"}],"name":"transferLinkToAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"unregisterOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_open","type":"bool"}],"name":"unregisterPendingMarketOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"unregisterPendingNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"unregisterTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract NftInterfaceV5[5]","name":"_nfts","type":"address[5]"}],"name":"updateNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"positionSize","type":"uint256"},{"internalType":"uint256","name":"spreadReductionP","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"},{"internalType":"uint256","name":"maxPrice","type":"uint256"},{"internalType":"uint256","name":"block","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.OpenLimitOrder","name":"_o","type":"tuple"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSl","type":"uint256"}],"name":"updateSl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TokenInterfaceV5","name":"_newToken","type":"address"}],"name":"updateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"trader","type":"address"},{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"initialPosToken","type":"uint256"},{"internalType":"uint256","name":"positionSizeDai","type":"uint256"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"bool","name":"buy","type":"bool"},{"internalType":"uint256","name":"leverage","type":"uint256"},{"internalType":"uint256","name":"tp","type":"uint256"},{"internalType":"uint256","name":"sl","type":"uint256"}],"internalType":"struct GFarmTradingStorageV5.Trade","name":"_t","type":"tuple"}],"name":"updateTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

600480546001600160a01b031916737075cab6bcca06613e2d071bd918d1a0241379e217905561012060405273f9a4c522e327935bd1f5a338c121e14e4cc1f89860809081527377cd42b925e1a82f41d852d6be727cfc88fddbbc60a052733378ad81d09de23725ee9b9270635c97ed60192160c0527302e2c5825c1a3b69c0417706dbe1327c2af3e6c260e052732d266a94469d05c9e06d52a4d0d9c23b157767c261010052620000b5906005908162000172565b506003600c556005600d819055600e819055610384600f9081556050601055603260118190556012556040805160a08101825291825260146020830152601990820152601e606082015260236080820152620001159160139190620001cf565b50601880546001600160a01b031990811673c66fbe50dd33c9aadd65707f7088d597c86fe00f179091556019805490911673d39a38bd2d2d552f3908ff698a5530aa397fb92d1790553480156200016b57600080fd5b506200021c565b8260058101928215620001bd579160200282015b82811115620001bd57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000186565b50620001cb92915062000205565b5090565b8260058101928215620001bd579160200282015b82811115620001bd578251829060ff16905591602001919060010190620001e3565b5b80821115620001cb576000815560010162000206565b615eb2806200022c6000396000f3fe608060405234801561001057600080fd5b50600436106106875760003560e01c806397e7995a1161035b578063d4bda908116101c8578063ee92a4ff11610104578063f823e2ae116100ad578063fc0c546a11610087578063fc0c546a146111cb578063fdb59413146111de578063fe0fc8d6146111e7578063fece4eac146111fa57600080fd5b8063f823e2ae1461119c578063f8d24b48146111af578063fbfa77cf146111b857600080fd5b8063f4b9fa75116100de578063f4b9fa751461114f578063f65d9dbe1461116a578063f7b3c6fd1461117357600080fd5b8063ee92a4ff14611120578063f013d27814611129578063f2c13bdf1461113c57600080fd5b8063e3cbe3a711610171578063ea5c3c331161014b578063ea5c3c33146110c0578063ec44acf2146110c9578063ecf56a1f146110dc578063eda00d54146110ef57600080fd5b8063e3cbe3a714611091578063e3f04eba146110a4578063e7873b58146110b757600080fd5b8063dcdf339a116101a2578063dcdf339a14611058578063e212991a1461106b578063e378b3671461107e57600080fd5b8063d4bda9081461101d578063d539139314611030578063dc2123ff1461104557600080fd5b8063b8878a2c11610297578063cab9458011610240578063d294f0931161021a578063d294f09314610fe7578063d3b5fe7014610fef578063d3c7c2c714611002578063d477f05f1461100a57600080fd5b8063cab9458014610fae578063cfad57a214610fc1578063cfbacc1414610fd457600080fd5b8063c311ab3111610271578063c311ab3114610f75578063c625562614610f88578063c76faf7814610f9b57600080fd5b8063b8878a2c14610f39578063bcc9f1d314610f59578063c122fea614610f6c57600080fd5b8063a553906c11610304578063b4b0f567116102de578063b4b0f56714610e16578063b66e6b0514610e29578063b767608a14610efb578063b7682d5414610f0e57600080fd5b8063a553906c14610dd7578063aa3b7d7714610dea578063aaf5eb6814610e0a57600080fd5b80639d1a1073116103355780639d1a107314610cdd578063a354418114610cf0578063a3a80ffe14610d0357600080fd5b806397e7995a14610c2357806399794d3514610c4e5780639c8912f114610cb257600080fd5b806356a6796f116104f95780637395d79e116104355780638a0bd702116103de5780638c8ff1d5116103b85780638c8ff1d514610b1c57806390d112b914610ba257806391cca3db14610bb557806392a88fa214610bc857600080fd5b80638a0bd70214610aeb5780638bbb644c14610b005780638bf7f5f914610b0957600080fd5b80637fdb96f31161040f5780637fdb96f314610abc5780638049fde714610acf578063817fa1a414610ad857600080fd5b80637395d79e14610a8d578063796d82d914610aa05780637ad3def214610aa957600080fd5b80636690a806116104a25780636d69fcaf1161047c5780636d69fcaf14610a2b5780636d81d98114610a3e5780636de9f32b14610a715780636e70e7b614610a7a57600080fd5b80636690a806146109dc5780636817031b146109ef57806368ca199d14610a0257600080fd5b80635b621e32116104d35780635b621e32146109895780635c76ac9e1461099c5780635fbfe8cc146109bc57600080fd5b806356a6796f146109625780635a912551146109775780635ad9f9931461098057600080fd5b8063292c1617116105c85780634415b369116105715780634daf04b11161054b5780634daf04b1146109095780635070e8371461091c57806352e5398f1461092f5780635378143e1461094f57600080fd5b80634415b369146108b85780634437152a146108e357806344d44f5a146108f657600080fd5b80633b0f0f2f116105a25780633b0f0f2f146108635780633dae10a01461089257806343b8fab5146108a557600080fd5b8063292c1617146107be5780633078fff5146107d157806332149592146107e457600080fd5b806318407fe01161063557806321f7a30b1161060f57806321f7a30b14610772578063265aa6211461078557806328b1f8871461079857806328daca21146107ab57600080fd5b806318407fe01461071d5780631c8636b414610734578063201d8bdb1461075f57600080fd5b806312d43a511161066657806312d43a51146106e457806313b36ff6146106f757806316f0115b1461070a57600080fd5b8062b127831461068c57806306aef7de146106bc578063099fa934146106d1575b600080fd5b60035461069f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6106cf6106ca366004615585565b611215565b005b6106cf6106df36600461590c565b611287565b60185461069f906001600160a01b031681565b6106cf61070536600461590c565b611318565b60015461069f906001600160a01b031681565b610726601d5481565b6040519081526020016106b3565b6107266107423660046154a7565b602560209081526000928352604080842090915290825290205481565b6106cf61076d36600461590c565b6113aa565b6106cf6107803660046154a7565b6114a9565b61069f61079336600461590c565b611590565b6106cf6107a63660046154a7565b6115b0565b6107266107b9366004615963565b61167f565b6107266107cc3660046154a7565b6116a4565b60005461069f906001600160a01b031681565b6107f76107f236600461590c565b611706565b604080516001600160a01b03909e168e5260208e019c909c529a8c019990995260608b019790975260808a019590955292151560a089015260c088019190915260e08701526101008601526101208501526101408401526101608301526101808201526101a0016106b3565b61069f610871366004615410565b6001600160a01b039081166000908152602260205260409020600101541690565b6107266108a036600461590c565b61178d565b6106cf6108b336600461590c565b6117a4565b6107266108c63660046154a7565b602f60209081526000928352604080842090915290825290205481565b6106cf6108f1366004615410565b611834565b6107266109043660046154a7565b6118e4565b6106cf610917366004615410565b61191b565b6106cf61092a366004615410565b6119cb565b61072661093d36600461590c565b60316020526000908152604090205481565b6106cf61095d3660046154d3565b611a7b565b61096a611c57565b6040516106b39190615b9d565b61072660105481565b61072660205481565b6106cf610997366004615410565b611c93565b6109af6109aa366004615410565b611d0e565b6040516106b39190615bc5565b6109cf6109ca36600461590c565b611d7a565b6040516106b39190615ac0565b6106cf6109ea366004615515565b611de5565b6106cf6109fd366004615410565b611ff8565b610726610a10366004615410565b6001600160a01b031660009081526022602052604090205490565b6106cf610a39366004615410565b6120a8565b610a61610a4c366004615410565b60336020526000908152604090205460ff1681565b60405190151581526020016106b3565b610726601f5481565b6106cf610a88366004615466565b612150565b6106cf610a9b366004615963565b6122c3565b610726600d5481565b6106cf610ab7366004615410565b612399565b6106cf610aca36600461554a565b6125ad565b610726600e5481565b6106cf610ae63660046157cf565b6126ca565b610af3612819565b6040516106b39190615b47565b61072660115481565b6106cf610b1736600461590c565b612908565b610b73610b2a366004615515565b6024602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c0016106b3565b6106cf610bb0366004615515565b612998565b60195461069f906001600160a01b031681565b610c00610bd6366004615410565b60226020526000908152604090208054600182015460029092015490916001600160a01b03169083565b604080519384526001600160a01b039092166020840152908201526060016106b3565b610726610c313660046154a7565b602760209081526000928352604080842090915290825290205481565b610ca0610c5c36600461590c565b602a602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b0394851695939490921692909160ff1686565b6040516106b396959493929190615a64565b610726610cc03660046154a7565b602c60209081526000928352604080842090915290825290205481565b6106cf610ceb36600461542d565b612d35565b6106cf610cfe36600461554a565b612e7b565b610d81610d11366004615515565b602360209081526000938452604080852082529284528284209052825290208054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b03909816989697959694959394929360ff9092169290918a565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452608087019290925260a0860152151560c085015260e0840152610100830152610120820152610140016106b3565b6106cf610de5366004615410565b612f98565b610726610df836600461590c565b60326020526000908152604090205481565b6107266402540be40081565b6106cf610e24366004615515565b613048565b610ee9610e3736600461590c565b60296020908152600091825260409182902082516101408101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460ff16151560c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154600b830154600c840154600d850154600e90950154939492939192909186565b6040516106b396959493929190615c12565b6106cf610f09366004615677565b6133dc565b610726610f1c3660046154a7565b602d60209081526000928352604080842090915290825290205481565b610f4c610f47366004615515565b613591565b6040516106b39190615bfd565b610726610f673660046154a7565b613715565b610726600f5481565b6106cf610f8336600461587c565b613746565b61069f610f9636600461590c565b613a3c565b6106cf610fa936600461573d565b613a66565b6106cf610fbc36600461593e565b613ccd565b6106cf610fcf366004615410565b614055565b610726610fe2366004615985565b614105565b6106cf61430b565b6106cf610ffd36600461568a565b614568565b6109cf614902565b6106cf611018366004615410565b614963565b6106cf61102b36600461585f565b614a13565b610726600080516020615e5d83398151915281565b6106cf61105336600461590c565b614b31565b610a61611066366004615515565b614bc1565b6106cf61107936600461590c565b614c5b565b6106cf61108c366004615963565b614cdc565b61069f61109f366004615963565b614d7a565b6106cf6110b236600461590c565b614db2565b610726601e5481565b610726601b5481565b60025461069f906001600160a01b031681565b6106cf6110ea36600461590c565b614ed8565b6107266110fd366004615515565b602660209081526000938452604080852082529284528284209052825290205481565b610726601a5481565b6106cf611137366004615615565b614f68565b600b5461069f906001600160a01b031681565b61069f738f3cf7ad23cd3cadbd9735aff958023239c6a06381565b610726600c5481565b610726611181366004615410565b6001600160a01b03166000908152602b602052604090205490565b6106cf6111aa366004615410565b615012565b61072660125481565b600a5461069f906001600160a01b031681565b60045461069f906001600160a01b031681565b610726601c5481565b6106cf6111f5366004615410565b61516e565b61069f73b0897686c545045afc77cf20ec7a532e3120e0f181565b6018546001600160a01b0316331461122c57600080fd5b80516001600160a01b031661124057600080fd5b61124c600582816152a9565b507f89a3bfeda71ede5f8735aa09127c97cd56aa3803356c52f7c30caf418238b4648160405161127c9190615b0d565b60405180910390a150565b6018546001600160a01b0316331461129e57600080fd5b60328110156112ac57600080fd5b6010819055604080518181526006918101919091527f6d6178536c5000000000000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b0316331461132f57600080fd5b61012c81101561133e57600080fd5b600f819055604080518181526008918101919091527f6d61784761696e500000000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b3360009081526033602052604090205460ff168015611454575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611454919061565a565b61145d57600080fd5b6000908152602a6020526040812080546001600160a01b03199081168255600182018390556002820180549091169055600381018290556004810191909155600501805460ff19169055565b3360009081526033602052604090205460ff168015611553575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611553919061565a565b61155c57600080fd5b6001600160a01b03821660009081526022602052604081206002018054839290611587908490615d29565b90915550505050565b600581600581106115a057600080fd5b01546001600160a01b0316905081565b3360009081526033602052604090205460ff16801561165a575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561162257600080fd5b505afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a919061565a565b61166357600080fd5b6001600160a01b03909116600090815260226020526040902055565b6030602052816000526040600020816003811061169b57600080fd5b01549150829050565b6000805b600c548110156116ff576001600160a01b038416600090815260236020908152604080832086845282528083208484529091529020600701546116ed578091506116ff565b806116f781615db0565b9150506116a8565b5092915050565b6028818154811061171657600080fd5b60009182526020909120600d9091020180546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01546001600160a01b03909b169c50989a97999698959760ff90951696939592949193909291908d565b6013816005811061179d57600080fd5b0154905081565b6018546001600160a01b031633146117bb57600080fd5b600081116117c857600080fd5b6011819055604080518181526017918101919091527f64656661756c744c65766572616765556e6c6f636b65640000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b0316331461184b57600080fd5b6001600160a01b03811661185e57600080fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526004918101919091527f706f6f6c00000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6000805b600c548110156116ff576118fd848483614bc1565b611909578091506116ff565b8061191381615db0565b9150506118e8565b6018546001600160a01b0316331461193257600080fd5b6001600160a01b03811661194557600080fd5b600b80546001600160a01b0319166001600160a01b03831690811790915560408051818152600e918101919091527f746f6b656e446169526f75746572000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6018546001600160a01b031633146119e257600080fd5b6001600160a01b0381166119f557600080fd5b600080546001600160a01b0319166001600160a01b03831690811790915560408051818152600f918101919091527f707269636541676772656761746f720000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015611b25575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b25919061565a565b611b2e57600080fd5b8015611bb957600480546040516340c10f1960e01b81526001600160a01b0386811693820193909352602481018590529116906340c10f1990604401600060405180830381600087803b158015611b8457600080fd5b505af1158015611b98573d6000803e3d6000fd5b5050505081601f6000828254611bae9190615d29565b90915550611c529050565b600480546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b038681169382019390935260248101859052911690639dc29fac90604401600060405180830381600087803b158015611c2257600080fd5b505af1158015611c36573d6000803e3d6000fd5b5050505081601e6000828254611c4c9190615d29565b90915550505b505050565b611c5f615301565b6040805160a08101918290529060139060059082845b815481526020019060010190808311611c75575b5050505050905090565b6018546001600160a01b03163314611caa57600080fd5b6001600160a01b038116611cbd57600080fd5b6001600160a01b038116600081815260336020908152604091829020805460ff1916905590519182527ff9cf924d7d98e6e0a27ec523cd7214b0bbdfaba197018b33b41a702f5238190e910161127c565b6001600160a01b0381166000908152602b6020908152604091829020805483518184028101840190945280845260609392830182828015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b50505050509050919050565b6000818152602e6020908152604091829020805483518184028101840190945280845260609392830182828015611d6e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dbc5750505050509050919050565b3360009081526033602052604090205460ff168015611e8f575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f919061565a565b611e9857600080fd5b6000546040517fb9e0336f000000000000000000000000000000000000000000000000000000008152600481018490526024810183905273b0897686c545045afc77cf20ec7a532e3120e0f1916323b872dd9186916001600160a01b031690819063b9e0336f9060440160206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f529190615925565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b602060405180830381600087803b158015611fba57600080fd5b505af1158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff2919061565a565b50505050565b6018546001600160a01b0316331461200f57600080fd5b6001600160a01b03811661202257600080fd5b600a80546001600160a01b0319166001600160a01b038316908117909155604080518181526005918101919091527f7661756c74000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6018546001600160a01b031633146120bf57600080fd5b6001600160a01b0381166120d257600080fd5b602180546001810182556000919091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79060200161127c565b3360009081526033602052604090205460ff1680156121fa575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156121c257600080fd5b505afa1580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa919061565a565b61220357600080fd5b6001600160a01b03831630141561225b5760405163a9059cbb60e01b81526001600160a01b038316600482015260248101829052738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401611fa0565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528316602482015260448101829052738f3cf7ad23cd3cadbd9735aff958023239c6a063906323b872dd90606401611fa0565b3360009081526033602052604090205460ff16801561236d575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061565a565b61237657600080fd5b600082815260326020908152604082204390558054839290611587908490615d29565b6018546001600160a01b031633146123b057600080fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612436919061565a565b80156124c35750600360009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b15801561248b57600080fd5b505afa15801561249f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c3919061565a565b6125145760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5041555345440000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811661252757600080fd5b600480546001600160a01b0319166001600160a01b038316908117909155604080518181526005918101919091527f746f6b656e000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015612657575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561261f57600080fd5b505afa158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061565a565b61266057600080fd5b6001600160a01b038416600081815260236020908152604080832087845282528083208684528252808320938352602482528083208784528252808320868452909152902060078201546126b5575050611ff2565b60089091018290554360039091015550505050565b3360009081526033602052604090205460ff168015612774575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561273c57600080fd5b505afa158015612750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612774919061565a565b61277d57600080fd5b6000818152602a6020908152604091829020845181546001600160a01b03199081166001600160a01b03928316178355928601516001808401919091559386015160028301805490941691161790915560608401516003808301919091556080850151600483015560a085015160058301805487959293919260ff1990911691849081111561280e5761280e615de1565b021790555050505050565b60606028805480602002602001604051908101604052809291908181526020016000905b828210156128ff576000848152602090819020604080516101a081018252600d860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460ff16151560a0840152600681015460c0840152600781015460e084015260088101546101008401526009810154610120840152600a810154610140840152600b810154610160840152600c0154610180830152908352909201910161283d565b50505050905090565b6018546001600160a01b0316331461291f57600080fd5b6000811161292c57600080fd5b600d819055604080518181526011918101919091527f6d6178547261646573506572426c6f636b0000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b3360009081526033602052604090205460ff168015612a42575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612a0a57600080fd5b505afa158015612a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a42919061565a565b612a4b57600080fd5b6001600160a01b03831660008181526023602090815260408083208684528252808320858452825280832093835260248252808320868452825280832085845290915290206007820154612aa0575050505050565b60028101546006830154612abb91869160009060ff1661521e565b6001600160a01b038516600090815260256020908152604080832087845290915290205460011415612c29576001600160a01b0385166000908152602f60209081526040808320878452825280832054602e90925290912080548190612b2390600190615d82565b81548110612b3357612b33615e0d565b9060005260206000200160009054906101000a90046001600160a01b0316818381548110612b6357612b63615e0d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081602f6000838581548110612ba857612ba8615e0d565b60009182526020808320909101546001600160a01b03908116845283820194909452604092830182208b8352815282822094909455918a168252602f8352808220898352909252908120558054819080612c0457612c04615df7565b600082815260209020810160001990810180546001600160a01b031916905501905550505b6001600160a01b03851660008181526023602090815260408083208884528252808320878452825280832080546001600160a01b03191681556001808201859055600280830186905560038084018790556004808501889055600580860189905560068601805460ff19908116909155600787018a9055600887018a90556009909601899055898952602488528689208e8a5288528689208d8a52885286892089815594850189905592840188905590830187905582018690550180549091169055928252602581528282208783529052908120805491612d0983615d99565b9091555050436000908152603160205260408120805491612d2983615db0565b91905055505050505050565b3360009081526033602052604090205460ff168015612ddf575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612da757600080fd5b505afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf919061565a565b612de857600080fd5b6001600160a01b03808316600090815260226020526040902090821615801590612e1d575060018101546001600160a01b0316155b8015612e3b5750826001600160a01b0316826001600160a01b031614155b612e525760018101546001600160a01b0316612e54565b815b60019190910180546001600160a01b0319166001600160a01b039092169190911790555050565b3360009081526033602052604090205460ff168015612f25575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612eed57600080fd5b505afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f25919061565a565b612f2e57600080fd5b6001600160a01b03841660008181526023602090815260408083208784528252808320868452825280832093835260248252808320878452825280832086845290915290206007820154612f83575050611ff2565b60099091018290554360049091015550505050565b6018546001600160a01b03163314612faf57600080fd5b6001600160a01b038116612fc257600080fd5b600280546001600160a01b0319166001600160a01b038316908117909155604080518181526007918101919091527f74726164696e6700000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff1680156130f2575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156130ba57600080fd5b505afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f2919061565a565b6130fb57600080fd5b613106838383614bc1565b61310f57505050565b6001600160a01b038316600090815260266020908152604080832085845282528083208484529091529020546028805461314b90600190615d82565b8154811061315b5761315b615e0d565b90600052602060002090600d02016028828154811061317c5761317c615e0d565b6000918252602082208354600d9092020180546001600160a01b0319166001600160a01b0390921691909117815560018084015490820155600280840154908201556003808401549082015560048084015490820155600580840154908201805460ff909216151560ff1990921691909117905560068084015490820155600780840154908201556008808401549082015560098084015490820155600a8084015490820155600b8084015490820155600c9283015492019190915560288054839260269290918490811061325357613253615e0d565b60009182526020808320600d909202909101546001600160a01b031683528201929092526040018120602880549192918590811061329357613293615e0d565b90600052602060002090600d02016001015481526020019081526020016000206000602884815481106132c8576132c8615e0d565b600091825260208083206002600d90930201919091015483528281019390935260409182018120939093556001600160a01b0387168352602682528083208684528252808320858452909152812055602880548061332857613328615df7565b60008281526020808220600d6000199094019384020180546001600160a01b03191681556001810183905560028101839055600381018390556004810183905560058101805460ff1916905560068101839055600781018390556008810183905560098101839055600a8101839055600b8101839055600c01829055919092556001600160a01b038616825260278152604080832086845290915281208054916133d183615d99565b919050555050505050565b3360009081526033602052604090205460ff168015613486575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561344e57600080fd5b505afa158015613462573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613486919061565a565b61348f57600080fd5b6134ae61349f6020830183615410565b82602001358360400135614bc1565b6134b55750565b600060286026826134c96020860186615410565b6001600160a01b031681526020808201929092526040908101600090812086840135825283528181208683013582529092529020548154811061350e5761350e615e0d565b90600052602060002090600d02019050816060013581600301819055508160a001602081019061353e919061563d565b60058201805460ff191691151591909117905560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a82015543600b909101555b50565b613607604051806101a0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613612848484614bc1565b61361b57600080fd5b6001600160a01b0384166000908152602660209081526040808320868452825280832085845290915290205460288054909190811061365c5761365c615e0d565b6000918252602091829020604080516101a081018252600d90930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460ff16151560a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c9091015461018082015290505b9392505050565b602b602052816000526040600020818154811061373157600080fd5b90600052602060002001600091509150505481565b3360009081526033602052604090205460ff1680156137f0575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156137b857600080fd5b505afa1580156137cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f0919061565a565b6137f957600080fd5b61380b826000015183602001516116a4565b604083810191825283516001600160a01b0390811660009081526023602090815283822081880180518452908252848320865184528252848320885181546001600160a01b031916951694851781558151600182015595516002870155606088015160038701556080880151600487015560a0880151600587015560c088015160068701805460ff191691151591909117905560e088015160078701556101008801516008870155610120880151600990960195909555918152602582528281209351815292905281208054916138e183615db0565b909155505043600090815260316020526040812080549161390183615db0565b909155505081516001600160a01b03166000908152602560209081526040808320828601518452909152902054600114156139a257602082810180516000908152602e80845260408083205487516001600160a01b039081168552602f87528285208651865287528285209190915593518352908452812085518154600181018355918352939091200180546001600160a01b031916929091169190911790555b600060a0820181815283516001600160a01b031682526024602090815260408084208287018051865290835281852082880151865283529381902085518155918501516001808401919091559085015160028301819055606086015160038401556080860151600484015592516005909201805460ff191692151592909217909155915160c0850151613a38939192919061521e565b5050565b60218181548110613a4c57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526033602052604090205460ff168015613b10575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015613ad857600080fd5b505afa158015613aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b10919061565a565b613b1957600080fd5b8251516001600160a01b039081166000908152602b602090815260408083208054600180820183559185528385200187905586845260298352928190208751805182546001600160a01b031916961695909517815591840151928201929092558282015160028201556060808401516003830155608080850151600484015560a080860151600585015560c086015160068501805460ff191691151591909117905560e08601516007850155610100860151600885015561012090950151600984015592870151600b830155860151600c82015590850151600d82015590840151600e82015543600a909101558015613c4b578251516001600160a01b03166000908152602c60209081526040808320865183015184529091528120805491613c4183615db0565b9190505550505050565b8251516001600160a01b03166000908152602d60209081526040808320865183015184529091528120805491613c8083615db0565b90915550508251516001600160a01b03166000908152602460209081526040808320865183015184528252808320865182015184529091529020600501805460ff19166001179055505050565b3360009081526033602052604090205460ff168015613d77575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015613d3f57600080fd5b505afa158015613d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d77919061565a565b613d8057600080fd5b600082815260296020908152604080832081516102008101835281546001600160a01b031660c08201818152600184015460e08401526002840154610100840152600384015461012084015260048401546101408401526005840154610160840152600684015460ff16151561018084015260078401546101a084015260088401546101c084015260098401546101e08401528252600a83015482860152600b83015482850152600c8301546060830152600d8301546080830152600e9092015460a0820152908452602b909252822090915b815481101561404e5784828281548110613e6f57613e6f615e0d565b9060005260206000200154141561403c578315613ec5578251516001600160a01b03166000908152602c60209081526040808320865183015184529091528120805491613ebb83615d99565b9190505550613f40565b8251516001600160a01b03166000908152602d60209081526040808320865183015184529091528120805491613efa83615d99565b90915550508251516001600160a01b03166000908152602460209081526040808320865183015184528252808320865182015184529091529020600501805460ff191690555b81548290613f5090600190615d82565b81548110613f6057613f60615e0d565b9060005260206000200154828281548110613f7d57613f7d615e0d565b906000526020600020018190555081805480613f9b57613f9b615df7565b600082815260208082208301600019908101839055909201909255868252602990526040812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560068101805460ff19169055600781018290556008810182905560098101829055600a8101829055600b8101829055600c8101829055600d8101829055600e015550613a38915050565b8061404681615db0565b915050613e53565b5050505050565b6018546001600160a01b0316331461406c57600080fd5b6001600160a01b03811661407f57600080fd5b601880546001600160a01b0319166001600160a01b038316908117909155604080518181526003918101919091527f676f760000000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604081205460ff1680156141af575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561417757600080fd5b505afa15801561418b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141af919061565a565b6141b857600080fd5b6000546040517fe21e5fe0000000000000000000000000000000000000000000000000000000008152600481018790526064916402540be400916001600160a01b039091169063e21e5fe09060240160206040518083038186803b15801561421f57600080fd5b505afa158015614233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142579190615925565b6142619087615d63565b61426b9190615d41565b6142759190615d41565b90508161428a57614287600282615d41565b90505b82156142c65780601d60008282546142a29190615d29565b9250508190555080601b60008282546142bb9190615d29565b909155506142f79050565b80601c60008282546142d89190615d29565b9250508190555080601a60008282546142f19190615d29565b90915550505b614302600282615d63565b95945050505050565b6018546001600160a01b0316331461432257600080fd5b60048054601954601a546040516340c10f1960e01b81526001600160a01b0392831694810194909452602484015216906340c10f1990604401600060405180830381600087803b15801561437557600080fd5b505af1158015614389573d6000803e3d6000fd5b505060048054601854601c546040516340c10f1960e01b81526001600160a01b039283169481019490945260248401521692506340c10f199150604401600060405180830381600087803b1580156143e057600080fd5b505af11580156143f4573d6000803e3d6000fd5b50505050601c54601a546144089190615d29565b601f60008282546144199190615d29565b9091555050601854601d5460405163a9059cbb60e01b81526001600160a01b0390921660048301526024820152738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401602060405180830381600087803b15801561447f57600080fd5b505af1158015614493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b7919061565a565b50601954601b5460405163a9059cbb60e01b81526001600160a01b0390921660048301526024820152738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401602060405180830381600087803b15801561451957600080fd5b505af115801561452d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614551919061565a565b506000601a819055601c819055601b819055601d55565b3360009081526033602052604090205460ff168015614612575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156145da57600080fd5b505afa1580156145ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614612919061565a565b61461b57600080fd5b61462d816000015182602001516118e4565b604082019081524361016083019081526028805460018082018355600083905285517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5600d90930292830180546001600160a01b0319166001600160a01b0390921691909117905560208601517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab683015593517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab782015560608501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab882015560808501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab982015560a08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77aba8201805460ff191691151591909117905560c08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abb82015560e08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abc8201556101008501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abd8201556101208501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abe8201556101408501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abf82015591517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ac08301556101808401517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ac1909201919091555461489c9190615d82565b81516001600160a01b039081166000908152602660209081526040808320828701805185529083528184208288015185528352818420959095558551909316825260278152828220935182529290925281208054916148fa83615db0565b919050555050565b60606021805480602002602001604051908101604052809291908181526020018280548015611c8957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161493c575050505050905090565b6018546001600160a01b0316331461497a57600080fd5b6001600160a01b03811661498d57600080fd5b601980546001600160a01b0319166001600160a01b038316908117909155604080518181526003918101919091527f6465760000000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015614abd575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015614a8557600080fd5b505afa158015614a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614abd919061565a565b614ac657600080fd5b80516001600160a01b03166000908152602360209081526040808320828501518452825280832081850151845290915290206007810154614b05575050565b606082015160038201556080820151600482015560a0820151600582015560e082015160079091015550565b6018546001600160a01b03163314614b4857600080fd5b60008111614b5557600080fd5b600c819055604080518181526010918101919091527f6d617854726164657350657250616972000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b602854600090614bd35750600061370e565b6001600160a01b03841660009081526026602090815260408083208684528252808320858452909152812054602880549091908110614c1457614c14615e0d565b60009182526020909120600d9091020180549091506001600160a01b038681169116148015614c465750838160010154145b80156143025750600201549091149392505050565b6018546001600160a01b03163314614c7257600080fd5b601281815560408051818152908101919091527f6e66745375636365737354696d656c6f636b00000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b03163314614cf357600080fd5b60008281526030602052604090208190600201556040805160608082526012908201527f6d61784f70656e496e74657265737444616900000000000000000000000000006080820152602081018490529081018290527f957cd67ea49f3e1ee953cdd23a1ba1f11d973e842411220d5c24ef0e24e1c9569060a00160405180910390a15050565b602e6020528160005260406000208181548110614d9657600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526033602052604090205460ff168015614e5c575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015614e2457600080fd5b505afa158015614e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5c919061565a565b614e6557600080fd5b6001546040517fc412dcfc000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063c412dcfc90602401600060405180830381600087803b158015614ec457600080fd5b505af115801561404e573d6000803e3d6000fd5b6018546001600160a01b03163314614eef57600080fd5b60008111614efc57600080fd5b600e819055604080518181526016918101919091527f6d617850656e64696e674d61726b65744f7264657273000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b03163314614f7f57600080fd5b803515801590614f93575080356020820135115b8015614fa6575060208101356040820135115b8015614fb9575060408101356060820135115b8015614fcc575060608101356080820135115b614fd557600080fd5b614fe2601382600561531f565b507fdaae5e047a75b6f38ad4e279cdefe910fc35d5a99a91b8303bd948c0a999372a8160405161127c9190615b8a565b6018546001600160a01b0316331461502957600080fd5b60048054604051632474521560e21b8152600080516020615e5d833981519152928101929092526001600160a01b03838116602484015216906391d148549060440160206040518083038186803b15801561508357600080fd5b505afa158015615097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150bb919061565a565b6151075760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e54455200000000000000000000000000000000000000000000604482015260640161250b565b6001600160a01b03811661511a57600080fd5b6001600160a01b038116600081815260336020908152604091829020805460ff1916600117905590519182527fb692fa98cbec9bd705572b4c7e0927e3f7698e9fe526dcef6f40f3d4d4980ca3910161127c565b6018546001600160a01b0316331461518557600080fd5b6001600160a01b03811661519857600080fd5b600380546001600160a01b0319166001600160a01b038316908117909155604080518181526009918101919091527f63616c6c6261636b730000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b60008161522c57600161522f565b60005b600086815260306020526040902060ff9190911691508361526e578481836003811061525d5761525d615e0d565b01546152699190615d82565b61528d565b8481836003811061528157615281615e0d565b015461528d9190615d29565b81836003811061529f5761529f615e0d565b0155505050505050565b82600581019282156152f1579160200282015b828111156152f157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906152bc565b506152fd92915061534d565b5090565b6040518060a001604052806005906020820280368337509192915050565b82600581019282156152f1579160200282015b828111156152f1578235825591602001919060010190615332565b5b808211156152fd576000815560010161534e565b803561536d81615e39565b919050565b803561536d81615e4e565b6000610140828403121561539057600080fd5b615398615cb8565b90506153a382615362565b81526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a08201526153e360c08301615372565b60c082015260e082013560e082015261010080830135818301525061012080830135818301525092915050565b60006020828403121561542257600080fd5b813561370e81615e39565b6000806040838503121561544057600080fd5b823561544b81615e39565b9150602083013561545b81615e39565b809150509250929050565b60008060006060848603121561547b57600080fd5b833561548681615e39565b9250602084013561549681615e39565b929592945050506040919091013590565b600080604083850312156154ba57600080fd5b82356154c581615e39565b946020939093013593505050565b6000806000606084860312156154e857600080fd5b83356154f381615e39565b925060208401359150604084013561550a81615e4e565b809150509250925092565b60008060006060848603121561552a57600080fd5b833561553581615e39565b95602085013595506040909401359392505050565b6000806000806080858703121561556057600080fd5b843561556b81615e39565b966020860135965060408601359560600135945092505050565b600060a0828403121561559757600080fd5b82601f8301126155a657600080fd5b60405160a0810181811067ffffffffffffffff821117156155c9576155c9615e23565b604052808360a081018610156155de57600080fd5b60005b600581101561560a5781356155f581615e39565b835260209283019291909101906001016155e1565b509195945050505050565b600060a0828403121561562757600080fd5b8260a08301111561563757600080fd5b50919050565b60006020828403121561564f57600080fd5b813561370e81615e4e565b60006020828403121561566c57600080fd5b815161370e81615e4e565b60006101a0828403121561563757600080fd5b60006101a0828403121561569d57600080fd5b6156a5615ce2565b6156ae83615362565b8152602083013560208201526040830135604082015260608301356060820152608083013560808201526156e460a08401615372565b60a082015260c0838101359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201526101608084013590820152610180928301359281019290925250919050565b600080600083850361022081121561575457600080fd5b6101e08082121561576457600080fd5b61576c615d06565b9150615778878761537d565b82526101408601356020830152610160860135604083015261018086013560608301526101a086013560808301526101c086013560a083015290935084013591506157c66102008501615372565b90509250925092565b60008082840360e08112156157e357600080fd5b60c08112156157f157600080fd5b506157fa615d06565b833561580581615e39565b815260208481013590820152604084013561581f81615e39565b80604083015250606084013560608201526080840135608082015260a08401356004811061584c57600080fd5b60a08201529460c0939093013593505050565b6000610140828403121561587257600080fd5b61370e838361537d565b60008082840361020081121561589157600080fd5b61589b858561537d565b925060c061013f19820112156158b057600080fd5b506158b9615d06565b6101408401358152610160840135602082015261018084013560408201526101a084013560608201526101c084013560808201526101e08401356158fc81615e4e565b60a0820152919491935090915050565b60006020828403121561591e57600080fd5b5035919050565b60006020828403121561593757600080fd5b5051919050565b6000806040838503121561595157600080fd5b82359150602083013561545b81615e4e565b6000806040838503121561597657600080fd5b50508035926020909101359150565b6000806000806080858703121561599b57600080fd5b843593506020850135925060408501356159b481615e4e565b915060608501356159c481615e4e565b939692955090935050565b80516001600160a01b031682526020810151602083015260408101516040830152606081015160608301526080810151608083015260a0810151615a1760a084018215159052565b5060c0818101519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018090810151910152565b6001600160a01b0387811682526020820187905285166040820152606081018490526080810183905260c0810160048310615aaf57634e487b7160e01b600052602160045260246000fd5b8260a0830152979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615b015783516001600160a01b031683529284019291840191600101615adc565b50909695505050505050565b60a08101818360005b6005811015615b3e5781516001600160a01b0316835260209283019290910190600101615b16565b50505092915050565b6020808252825182820181905260009190848201906040850190845b81811015615b0157615b768385516159cf565b928401926101a09290920191600101615b63565b60a0818101908383376000815292915050565b60a08101818360005b6005811015615b3e578151835260209283019290910190600101615ba6565b6020808252825182820181905260009190848201906040850190845b81811015615b0157835183529284019291840191600101615be1565b6101a08101615c0c82846159cf565b92915050565b86516001600160a01b031681526101e081016020880151602083015260408801516040830152606088015160608301526080880151608083015260a088015160a083015260c0880151615c6960c084018215159052565b5060e08881015190830152610100808901519083015261012097880151978201979097526101408101959095526101608501939093526101808401919091526101a08301526101c09091015290565b604051610140810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60405290565b6040516101a0810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60405160c0810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60008219821115615d3c57615d3c615dcb565b500190565b600082615d5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d7d57615d7d615dcb565b500290565b600082821015615d9457615d94615dcb565b500390565b600081615da857615da8615dcb565b506000190190565b6000600019821415615dc457615dc4615dcb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461358e57600080fd5b801515811461358e57600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122080136f00e3bf01f7f59f1ff4ab44ef6febae106cb1618df120e029a5f92817fb64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106106875760003560e01c806397e7995a1161035b578063d4bda908116101c8578063ee92a4ff11610104578063f823e2ae116100ad578063fc0c546a11610087578063fc0c546a146111cb578063fdb59413146111de578063fe0fc8d6146111e7578063fece4eac146111fa57600080fd5b8063f823e2ae1461119c578063f8d24b48146111af578063fbfa77cf146111b857600080fd5b8063f4b9fa75116100de578063f4b9fa751461114f578063f65d9dbe1461116a578063f7b3c6fd1461117357600080fd5b8063ee92a4ff14611120578063f013d27814611129578063f2c13bdf1461113c57600080fd5b8063e3cbe3a711610171578063ea5c3c331161014b578063ea5c3c33146110c0578063ec44acf2146110c9578063ecf56a1f146110dc578063eda00d54146110ef57600080fd5b8063e3cbe3a714611091578063e3f04eba146110a4578063e7873b58146110b757600080fd5b8063dcdf339a116101a2578063dcdf339a14611058578063e212991a1461106b578063e378b3671461107e57600080fd5b8063d4bda9081461101d578063d539139314611030578063dc2123ff1461104557600080fd5b8063b8878a2c11610297578063cab9458011610240578063d294f0931161021a578063d294f09314610fe7578063d3b5fe7014610fef578063d3c7c2c714611002578063d477f05f1461100a57600080fd5b8063cab9458014610fae578063cfad57a214610fc1578063cfbacc1414610fd457600080fd5b8063c311ab3111610271578063c311ab3114610f75578063c625562614610f88578063c76faf7814610f9b57600080fd5b8063b8878a2c14610f39578063bcc9f1d314610f59578063c122fea614610f6c57600080fd5b8063a553906c11610304578063b4b0f567116102de578063b4b0f56714610e16578063b66e6b0514610e29578063b767608a14610efb578063b7682d5414610f0e57600080fd5b8063a553906c14610dd7578063aa3b7d7714610dea578063aaf5eb6814610e0a57600080fd5b80639d1a1073116103355780639d1a107314610cdd578063a354418114610cf0578063a3a80ffe14610d0357600080fd5b806397e7995a14610c2357806399794d3514610c4e5780639c8912f114610cb257600080fd5b806356a6796f116104f95780637395d79e116104355780638a0bd702116103de5780638c8ff1d5116103b85780638c8ff1d514610b1c57806390d112b914610ba257806391cca3db14610bb557806392a88fa214610bc857600080fd5b80638a0bd70214610aeb5780638bbb644c14610b005780638bf7f5f914610b0957600080fd5b80637fdb96f31161040f5780637fdb96f314610abc5780638049fde714610acf578063817fa1a414610ad857600080fd5b80637395d79e14610a8d578063796d82d914610aa05780637ad3def214610aa957600080fd5b80636690a806116104a25780636d69fcaf1161047c5780636d69fcaf14610a2b5780636d81d98114610a3e5780636de9f32b14610a715780636e70e7b614610a7a57600080fd5b80636690a806146109dc5780636817031b146109ef57806368ca199d14610a0257600080fd5b80635b621e32116104d35780635b621e32146109895780635c76ac9e1461099c5780635fbfe8cc146109bc57600080fd5b806356a6796f146109625780635a912551146109775780635ad9f9931461098057600080fd5b8063292c1617116105c85780634415b369116105715780634daf04b11161054b5780634daf04b1146109095780635070e8371461091c57806352e5398f1461092f5780635378143e1461094f57600080fd5b80634415b369146108b85780634437152a146108e357806344d44f5a146108f657600080fd5b80633b0f0f2f116105a25780633b0f0f2f146108635780633dae10a01461089257806343b8fab5146108a557600080fd5b8063292c1617146107be5780633078fff5146107d157806332149592146107e457600080fd5b806318407fe01161063557806321f7a30b1161060f57806321f7a30b14610772578063265aa6211461078557806328b1f8871461079857806328daca21146107ab57600080fd5b806318407fe01461071d5780631c8636b414610734578063201d8bdb1461075f57600080fd5b806312d43a511161066657806312d43a51146106e457806313b36ff6146106f757806316f0115b1461070a57600080fd5b8062b127831461068c57806306aef7de146106bc578063099fa934146106d1575b600080fd5b60035461069f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6106cf6106ca366004615585565b611215565b005b6106cf6106df36600461590c565b611287565b60185461069f906001600160a01b031681565b6106cf61070536600461590c565b611318565b60015461069f906001600160a01b031681565b610726601d5481565b6040519081526020016106b3565b6107266107423660046154a7565b602560209081526000928352604080842090915290825290205481565b6106cf61076d36600461590c565b6113aa565b6106cf6107803660046154a7565b6114a9565b61069f61079336600461590c565b611590565b6106cf6107a63660046154a7565b6115b0565b6107266107b9366004615963565b61167f565b6107266107cc3660046154a7565b6116a4565b60005461069f906001600160a01b031681565b6107f76107f236600461590c565b611706565b604080516001600160a01b03909e168e5260208e019c909c529a8c019990995260608b019790975260808a019590955292151560a089015260c088019190915260e08701526101008601526101208501526101408401526101608301526101808201526101a0016106b3565b61069f610871366004615410565b6001600160a01b039081166000908152602260205260409020600101541690565b6107266108a036600461590c565b61178d565b6106cf6108b336600461590c565b6117a4565b6107266108c63660046154a7565b602f60209081526000928352604080842090915290825290205481565b6106cf6108f1366004615410565b611834565b6107266109043660046154a7565b6118e4565b6106cf610917366004615410565b61191b565b6106cf61092a366004615410565b6119cb565b61072661093d36600461590c565b60316020526000908152604090205481565b6106cf61095d3660046154d3565b611a7b565b61096a611c57565b6040516106b39190615b9d565b61072660105481565b61072660205481565b6106cf610997366004615410565b611c93565b6109af6109aa366004615410565b611d0e565b6040516106b39190615bc5565b6109cf6109ca36600461590c565b611d7a565b6040516106b39190615ac0565b6106cf6109ea366004615515565b611de5565b6106cf6109fd366004615410565b611ff8565b610726610a10366004615410565b6001600160a01b031660009081526022602052604090205490565b6106cf610a39366004615410565b6120a8565b610a61610a4c366004615410565b60336020526000908152604090205460ff1681565b60405190151581526020016106b3565b610726601f5481565b6106cf610a88366004615466565b612150565b6106cf610a9b366004615963565b6122c3565b610726600d5481565b6106cf610ab7366004615410565b612399565b6106cf610aca36600461554a565b6125ad565b610726600e5481565b6106cf610ae63660046157cf565b6126ca565b610af3612819565b6040516106b39190615b47565b61072660115481565b6106cf610b1736600461590c565b612908565b610b73610b2a366004615515565b6024602090815260009384526040808520825292845282842090528252902080546001820154600283015460038401546004850154600590950154939492939192909160ff1686565b6040805196875260208701959095529385019290925260608401526080830152151560a082015260c0016106b3565b6106cf610bb0366004615515565b612998565b60195461069f906001600160a01b031681565b610c00610bd6366004615410565b60226020526000908152604090208054600182015460029092015490916001600160a01b03169083565b604080519384526001600160a01b039092166020840152908201526060016106b3565b610726610c313660046154a7565b602760209081526000928352604080842090915290825290205481565b610ca0610c5c36600461590c565b602a602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b0394851695939490921692909160ff1686565b6040516106b396959493929190615a64565b610726610cc03660046154a7565b602c60209081526000928352604080842090915290825290205481565b6106cf610ceb36600461542d565b612d35565b6106cf610cfe36600461554a565b612e7b565b610d81610d11366004615515565b602360209081526000938452604080852082529284528284209052825290208054600182015460028301546003840154600485015460058601546006870154600788015460088901546009909901546001600160a01b03909816989697959694959394929360ff9092169290918a565b604080516001600160a01b03909b168b5260208b0199909952978901969096526060880194909452608087019290925260a0860152151560c085015260e0840152610100830152610120820152610140016106b3565b6106cf610de5366004615410565b612f98565b610726610df836600461590c565b60326020526000908152604090205481565b6107266402540be40081565b6106cf610e24366004615515565b613048565b610ee9610e3736600461590c565b60296020908152600091825260409182902082516101408101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460ff16151560c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154600b830154600c840154600d850154600e90950154939492939192909186565b6040516106b396959493929190615c12565b6106cf610f09366004615677565b6133dc565b610726610f1c3660046154a7565b602d60209081526000928352604080842090915290825290205481565b610f4c610f47366004615515565b613591565b6040516106b39190615bfd565b610726610f673660046154a7565b613715565b610726600f5481565b6106cf610f8336600461587c565b613746565b61069f610f9636600461590c565b613a3c565b6106cf610fa936600461573d565b613a66565b6106cf610fbc36600461593e565b613ccd565b6106cf610fcf366004615410565b614055565b610726610fe2366004615985565b614105565b6106cf61430b565b6106cf610ffd36600461568a565b614568565b6109cf614902565b6106cf611018366004615410565b614963565b6106cf61102b36600461585f565b614a13565b610726600080516020615e5d83398151915281565b6106cf61105336600461590c565b614b31565b610a61611066366004615515565b614bc1565b6106cf61107936600461590c565b614c5b565b6106cf61108c366004615963565b614cdc565b61069f61109f366004615963565b614d7a565b6106cf6110b236600461590c565b614db2565b610726601e5481565b610726601b5481565b60025461069f906001600160a01b031681565b6106cf6110ea36600461590c565b614ed8565b6107266110fd366004615515565b602660209081526000938452604080852082529284528284209052825290205481565b610726601a5481565b6106cf611137366004615615565b614f68565b600b5461069f906001600160a01b031681565b61069f738f3cf7ad23cd3cadbd9735aff958023239c6a06381565b610726600c5481565b610726611181366004615410565b6001600160a01b03166000908152602b602052604090205490565b6106cf6111aa366004615410565b615012565b61072660125481565b600a5461069f906001600160a01b031681565b60045461069f906001600160a01b031681565b610726601c5481565b6106cf6111f5366004615410565b61516e565b61069f73b0897686c545045afc77cf20ec7a532e3120e0f181565b6018546001600160a01b0316331461122c57600080fd5b80516001600160a01b031661124057600080fd5b61124c600582816152a9565b507f89a3bfeda71ede5f8735aa09127c97cd56aa3803356c52f7c30caf418238b4648160405161127c9190615b0d565b60405180910390a150565b6018546001600160a01b0316331461129e57600080fd5b60328110156112ac57600080fd5b6010819055604080518181526006918101919091527f6d6178536c5000000000000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b0316331461132f57600080fd5b61012c81101561133e57600080fd5b600f819055604080518181526008918101919091527f6d61784761696e500000000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b3360009081526033602052604090205460ff168015611454575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561141c57600080fd5b505afa158015611430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611454919061565a565b61145d57600080fd5b6000908152602a6020526040812080546001600160a01b03199081168255600182018390556002820180549091169055600381018290556004810191909155600501805460ff19169055565b3360009081526033602052604090205460ff168015611553575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611553919061565a565b61155c57600080fd5b6001600160a01b03821660009081526022602052604081206002018054839290611587908490615d29565b90915550505050565b600581600581106115a057600080fd5b01546001600160a01b0316905081565b3360009081526033602052604090205460ff16801561165a575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561162257600080fd5b505afa158015611636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165a919061565a565b61166357600080fd5b6001600160a01b03909116600090815260226020526040902055565b6030602052816000526040600020816003811061169b57600080fd5b01549150829050565b6000805b600c548110156116ff576001600160a01b038416600090815260236020908152604080832086845282528083208484529091529020600701546116ed578091506116ff565b806116f781615db0565b9150506116a8565b5092915050565b6028818154811061171657600080fd5b60009182526020909120600d9091020180546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c909c01546001600160a01b03909b169c50989a97999698959760ff90951696939592949193909291908d565b6013816005811061179d57600080fd5b0154905081565b6018546001600160a01b031633146117bb57600080fd5b600081116117c857600080fd5b6011819055604080518181526017918101919091527f64656661756c744c65766572616765556e6c6f636b65640000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b0316331461184b57600080fd5b6001600160a01b03811661185e57600080fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080518181526004918101919091527f706f6f6c00000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6000805b600c548110156116ff576118fd848483614bc1565b611909578091506116ff565b8061191381615db0565b9150506118e8565b6018546001600160a01b0316331461193257600080fd5b6001600160a01b03811661194557600080fd5b600b80546001600160a01b0319166001600160a01b03831690811790915560408051818152600e918101919091527f746f6b656e446169526f75746572000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6018546001600160a01b031633146119e257600080fd5b6001600160a01b0381166119f557600080fd5b600080546001600160a01b0319166001600160a01b03831690811790915560408051818152600f918101919091527f707269636541676772656761746f720000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015611b25575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b25919061565a565b611b2e57600080fd5b8015611bb957600480546040516340c10f1960e01b81526001600160a01b0386811693820193909352602481018590529116906340c10f1990604401600060405180830381600087803b158015611b8457600080fd5b505af1158015611b98573d6000803e3d6000fd5b5050505081601f6000828254611bae9190615d29565b90915550611c529050565b600480546040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b038681169382019390935260248101859052911690639dc29fac90604401600060405180830381600087803b158015611c2257600080fd5b505af1158015611c36573d6000803e3d6000fd5b5050505081601e6000828254611c4c9190615d29565b90915550505b505050565b611c5f615301565b6040805160a08101918290529060139060059082845b815481526020019060010190808311611c75575b5050505050905090565b6018546001600160a01b03163314611caa57600080fd5b6001600160a01b038116611cbd57600080fd5b6001600160a01b038116600081815260336020908152604091829020805460ff1916905590519182527ff9cf924d7d98e6e0a27ec523cd7214b0bbdfaba197018b33b41a702f5238190e910161127c565b6001600160a01b0381166000908152602b6020908152604091829020805483518184028101840190945280845260609392830182828015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b50505050509050919050565b6000818152602e6020908152604091829020805483518184028101840190945280845260609392830182828015611d6e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611dbc5750505050509050919050565b3360009081526033602052604090205460ff168015611e8f575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015611e5757600080fd5b505afa158015611e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8f919061565a565b611e9857600080fd5b6000546040517fb9e0336f000000000000000000000000000000000000000000000000000000008152600481018490526024810183905273b0897686c545045afc77cf20ec7a532e3120e0f1916323b872dd9186916001600160a01b031690819063b9e0336f9060440160206040518083038186803b158015611f1a57600080fd5b505afa158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f529190615925565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b602060405180830381600087803b158015611fba57600080fd5b505af1158015611fce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff2919061565a565b50505050565b6018546001600160a01b0316331461200f57600080fd5b6001600160a01b03811661202257600080fd5b600a80546001600160a01b0319166001600160a01b038316908117909155604080518181526005918101919091527f7661756c74000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b6018546001600160a01b031633146120bf57600080fd5b6001600160a01b0381166120d257600080fd5b602180546001810182556000919091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319166001600160a01b0383169081179091556040519081527fd1be2e90bd3d24839d9dd94ad871068e1f9688b02fa43f2a62c9975dfa9de2d79060200161127c565b3360009081526033602052604090205460ff1680156121fa575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156121c257600080fd5b505afa1580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa919061565a565b61220357600080fd5b6001600160a01b03831630141561225b5760405163a9059cbb60e01b81526001600160a01b038316600482015260248101829052738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401611fa0565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301528316602482015260448101829052738f3cf7ad23cd3cadbd9735aff958023239c6a063906323b872dd90606401611fa0565b3360009081526033602052604090205460ff16801561236d575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061565a565b61237657600080fd5b600082815260326020908152604082204390558054839290611587908490615d29565b6018546001600160a01b031633146123b057600080fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b1580156123fe57600080fd5b505afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612436919061565a565b80156124c35750600360009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b815260040160206040518083038186803b15801561248b57600080fd5b505afa15801561249f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c3919061565a565b6125145760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5041555345440000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811661252757600080fd5b600480546001600160a01b0319166001600160a01b038316908117909155604080518181526005918101919091527f746f6b656e000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015612657575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561261f57600080fd5b505afa158015612633573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612657919061565a565b61266057600080fd5b6001600160a01b038416600081815260236020908152604080832087845282528083208684528252808320938352602482528083208784528252808320868452909152902060078201546126b5575050611ff2565b60089091018290554360039091015550505050565b3360009081526033602052604090205460ff168015612774575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561273c57600080fd5b505afa158015612750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612774919061565a565b61277d57600080fd5b6000818152602a6020908152604091829020845181546001600160a01b03199081166001600160a01b03928316178355928601516001808401919091559386015160028301805490941691161790915560608401516003808301919091556080850151600483015560a085015160058301805487959293919260ff1990911691849081111561280e5761280e615de1565b021790555050505050565b60606028805480602002602001604051908101604052809291908181526020016000905b828210156128ff576000848152602090819020604080516101a081018252600d860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460ff16151560a0840152600681015460c0840152600781015460e084015260088101546101008401526009810154610120840152600a810154610140840152600b810154610160840152600c0154610180830152908352909201910161283d565b50505050905090565b6018546001600160a01b0316331461291f57600080fd5b6000811161292c57600080fd5b600d819055604080518181526011918101919091527f6d6178547261646573506572426c6f636b0000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b3360009081526033602052604090205460ff168015612a42575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612a0a57600080fd5b505afa158015612a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a42919061565a565b612a4b57600080fd5b6001600160a01b03831660008181526023602090815260408083208684528252808320858452825280832093835260248252808320868452825280832085845290915290206007820154612aa0575050505050565b60028101546006830154612abb91869160009060ff1661521e565b6001600160a01b038516600090815260256020908152604080832087845290915290205460011415612c29576001600160a01b0385166000908152602f60209081526040808320878452825280832054602e90925290912080548190612b2390600190615d82565b81548110612b3357612b33615e0d565b9060005260206000200160009054906101000a90046001600160a01b0316818381548110612b6357612b63615e0d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081602f6000838581548110612ba857612ba8615e0d565b60009182526020808320909101546001600160a01b03908116845283820194909452604092830182208b8352815282822094909455918a168252602f8352808220898352909252908120558054819080612c0457612c04615df7565b600082815260209020810160001990810180546001600160a01b031916905501905550505b6001600160a01b03851660008181526023602090815260408083208884528252808320878452825280832080546001600160a01b03191681556001808201859055600280830186905560038084018790556004808501889055600580860189905560068601805460ff19908116909155600787018a9055600887018a90556009909601899055898952602488528689208e8a5288528689208d8a52885286892089815594850189905592840188905590830187905582018690550180549091169055928252602581528282208783529052908120805491612d0983615d99565b9091555050436000908152603160205260408120805491612d2983615db0565b91905055505050505050565b3360009081526033602052604090205460ff168015612ddf575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612da757600080fd5b505afa158015612dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddf919061565a565b612de857600080fd5b6001600160a01b03808316600090815260226020526040902090821615801590612e1d575060018101546001600160a01b0316155b8015612e3b5750826001600160a01b0316826001600160a01b031614155b612e525760018101546001600160a01b0316612e54565b815b60019190910180546001600160a01b0319166001600160a01b039092169190911790555050565b3360009081526033602052604090205460ff168015612f25575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015612eed57600080fd5b505afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f25919061565a565b612f2e57600080fd5b6001600160a01b03841660008181526023602090815260408083208784528252808320868452825280832093835260248252808320878452825280832086845290915290206007820154612f83575050611ff2565b60099091018290554360049091015550505050565b6018546001600160a01b03163314612faf57600080fd5b6001600160a01b038116612fc257600080fd5b600280546001600160a01b0319166001600160a01b038316908117909155604080518181526007918101919091527f74726164696e6700000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff1680156130f2575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156130ba57600080fd5b505afa1580156130ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f2919061565a565b6130fb57600080fd5b613106838383614bc1565b61310f57505050565b6001600160a01b038316600090815260266020908152604080832085845282528083208484529091529020546028805461314b90600190615d82565b8154811061315b5761315b615e0d565b90600052602060002090600d02016028828154811061317c5761317c615e0d565b6000918252602082208354600d9092020180546001600160a01b0319166001600160a01b0390921691909117815560018084015490820155600280840154908201556003808401549082015560048084015490820155600580840154908201805460ff909216151560ff1990921691909117905560068084015490820155600780840154908201556008808401549082015560098084015490820155600a8084015490820155600b8084015490820155600c9283015492019190915560288054839260269290918490811061325357613253615e0d565b60009182526020808320600d909202909101546001600160a01b031683528201929092526040018120602880549192918590811061329357613293615e0d565b90600052602060002090600d02016001015481526020019081526020016000206000602884815481106132c8576132c8615e0d565b600091825260208083206002600d90930201919091015483528281019390935260409182018120939093556001600160a01b0387168352602682528083208684528252808320858452909152812055602880548061332857613328615df7565b60008281526020808220600d6000199094019384020180546001600160a01b03191681556001810183905560028101839055600381018390556004810183905560058101805460ff1916905560068101839055600781018390556008810183905560098101839055600a8101839055600b8101839055600c01829055919092556001600160a01b038616825260278152604080832086845290915281208054916133d183615d99565b919050555050505050565b3360009081526033602052604090205460ff168015613486575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561344e57600080fd5b505afa158015613462573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613486919061565a565b61348f57600080fd5b6134ae61349f6020830183615410565b82602001358360400135614bc1565b6134b55750565b600060286026826134c96020860186615410565b6001600160a01b031681526020808201929092526040908101600090812086840135825283528181208683013582529092529020548154811061350e5761350e615e0d565b90600052602060002090600d02019050816060013581600301819055508160a001602081019061353e919061563d565b60058201805460ff191691151591909117905560c0820135600682015560e0820135600782015561010082013560088201556101208201356009820155610140820135600a82015543600b909101555b50565b613607604051806101a0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613612848484614bc1565b61361b57600080fd5b6001600160a01b0384166000908152602660209081526040808320868452825280832085845290915290205460288054909190811061365c5761365c615e0d565b6000918252602091829020604080516101a081018252600d90930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154606082015260048201546080820152600582015460ff16151560a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c9091015461018082015290505b9392505050565b602b602052816000526040600020818154811061373157600080fd5b90600052602060002001600091509150505481565b3360009081526033602052604090205460ff1680156137f0575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156137b857600080fd5b505afa1580156137cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f0919061565a565b6137f957600080fd5b61380b826000015183602001516116a4565b604083810191825283516001600160a01b0390811660009081526023602090815283822081880180518452908252848320865184528252848320885181546001600160a01b031916951694851781558151600182015595516002870155606088015160038701556080880151600487015560a0880151600587015560c088015160068701805460ff191691151591909117905560e088015160078701556101008801516008870155610120880151600990960195909555918152602582528281209351815292905281208054916138e183615db0565b909155505043600090815260316020526040812080549161390183615db0565b909155505081516001600160a01b03166000908152602560209081526040808320828601518452909152902054600114156139a257602082810180516000908152602e80845260408083205487516001600160a01b039081168552602f87528285208651865287528285209190915593518352908452812085518154600181018355918352939091200180546001600160a01b031916929091169190911790555b600060a0820181815283516001600160a01b031682526024602090815260408084208287018051865290835281852082880151865283529381902085518155918501516001808401919091559085015160028301819055606086015160038401556080860151600484015592516005909201805460ff191692151592909217909155915160c0850151613a38939192919061521e565b5050565b60218181548110613a4c57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526033602052604090205460ff168015613b10575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015613ad857600080fd5b505afa158015613aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b10919061565a565b613b1957600080fd5b8251516001600160a01b039081166000908152602b602090815260408083208054600180820183559185528385200187905586845260298352928190208751805182546001600160a01b031916961695909517815591840151928201929092558282015160028201556060808401516003830155608080850151600484015560a080860151600585015560c086015160068501805460ff191691151591909117905560e08601516007850155610100860151600885015561012090950151600984015592870151600b830155860151600c82015590850151600d82015590840151600e82015543600a909101558015613c4b578251516001600160a01b03166000908152602c60209081526040808320865183015184529091528120805491613c4183615db0565b9190505550505050565b8251516001600160a01b03166000908152602d60209081526040808320865183015184529091528120805491613c8083615db0565b90915550508251516001600160a01b03166000908152602460209081526040808320865183015184528252808320865182015184529091529020600501805460ff19166001179055505050565b3360009081526033602052604090205460ff168015613d77575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015613d3f57600080fd5b505afa158015613d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d77919061565a565b613d8057600080fd5b600082815260296020908152604080832081516102008101835281546001600160a01b031660c08201818152600184015460e08401526002840154610100840152600384015461012084015260048401546101408401526005840154610160840152600684015460ff16151561018084015260078401546101a084015260088401546101c084015260098401546101e08401528252600a83015482860152600b83015482850152600c8301546060830152600d8301546080830152600e9092015460a0820152908452602b909252822090915b815481101561404e5784828281548110613e6f57613e6f615e0d565b9060005260206000200154141561403c578315613ec5578251516001600160a01b03166000908152602c60209081526040808320865183015184529091528120805491613ebb83615d99565b9190505550613f40565b8251516001600160a01b03166000908152602d60209081526040808320865183015184529091528120805491613efa83615d99565b90915550508251516001600160a01b03166000908152602460209081526040808320865183015184528252808320865182015184529091529020600501805460ff191690555b81548290613f5090600190615d82565b81548110613f6057613f60615e0d565b9060005260206000200154828281548110613f7d57613f7d615e0d565b906000526020600020018190555081805480613f9b57613f9b615df7565b600082815260208082208301600019908101839055909201909255868252602990526040812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560068101805460ff19169055600781018290556008810182905560098101829055600a8101829055600b8101829055600c8101829055600d8101829055600e015550613a38915050565b8061404681615db0565b915050613e53565b5050505050565b6018546001600160a01b0316331461406c57600080fd5b6001600160a01b03811661407f57600080fd5b601880546001600160a01b0319166001600160a01b038316908117909155604080518181526003918101919091527f676f760000000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604081205460ff1680156141af575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b15801561417757600080fd5b505afa15801561418b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141af919061565a565b6141b857600080fd5b6000546040517fe21e5fe0000000000000000000000000000000000000000000000000000000008152600481018790526064916402540be400916001600160a01b039091169063e21e5fe09060240160206040518083038186803b15801561421f57600080fd5b505afa158015614233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142579190615925565b6142619087615d63565b61426b9190615d41565b6142759190615d41565b90508161428a57614287600282615d41565b90505b82156142c65780601d60008282546142a29190615d29565b9250508190555080601b60008282546142bb9190615d29565b909155506142f79050565b80601c60008282546142d89190615d29565b9250508190555080601a60008282546142f19190615d29565b90915550505b614302600282615d63565b95945050505050565b6018546001600160a01b0316331461432257600080fd5b60048054601954601a546040516340c10f1960e01b81526001600160a01b0392831694810194909452602484015216906340c10f1990604401600060405180830381600087803b15801561437557600080fd5b505af1158015614389573d6000803e3d6000fd5b505060048054601854601c546040516340c10f1960e01b81526001600160a01b039283169481019490945260248401521692506340c10f199150604401600060405180830381600087803b1580156143e057600080fd5b505af11580156143f4573d6000803e3d6000fd5b50505050601c54601a546144089190615d29565b601f60008282546144199190615d29565b9091555050601854601d5460405163a9059cbb60e01b81526001600160a01b0390921660048301526024820152738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401602060405180830381600087803b15801561447f57600080fd5b505af1158015614493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b7919061565a565b50601954601b5460405163a9059cbb60e01b81526001600160a01b0390921660048301526024820152738f3cf7ad23cd3cadbd9735aff958023239c6a0639063a9059cbb90604401602060405180830381600087803b15801561451957600080fd5b505af115801561452d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614551919061565a565b506000601a819055601c819055601b819055601d55565b3360009081526033602052604090205460ff168015614612575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b1580156145da57600080fd5b505afa1580156145ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614612919061565a565b61461b57600080fd5b61462d816000015182602001516118e4565b604082019081524361016083019081526028805460018082018355600083905285517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5600d90930292830180546001600160a01b0319166001600160a01b0390921691909117905560208601517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab683015593517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab782015560608501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab882015560808501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab982015560a08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77aba8201805460ff191691151591909117905560c08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abb82015560e08501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abc8201556101008501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abd8201556101208501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abe8201556101408501517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77abf82015591517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ac08301556101808401517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ac1909201919091555461489c9190615d82565b81516001600160a01b039081166000908152602660209081526040808320828701805185529083528184208288015185528352818420959095558551909316825260278152828220935182529290925281208054916148fa83615db0565b919050555050565b60606021805480602002602001604051908101604052809291908181526020018280548015611c8957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161493c575050505050905090565b6018546001600160a01b0316331461497a57600080fd5b6001600160a01b03811661498d57600080fd5b601980546001600160a01b0319166001600160a01b038316908117909155604080518181526003918101919091527f6465760000000000000000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b3360009081526033602052604090205460ff168015614abd575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015614a8557600080fd5b505afa158015614a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614abd919061565a565b614ac657600080fd5b80516001600160a01b03166000908152602360209081526040808320828501518452825280832081850151845290915290206007810154614b05575050565b606082015160038201556080820151600482015560a0820151600582015560e082015160079091015550565b6018546001600160a01b03163314614b4857600080fd5b60008111614b5557600080fd5b600c819055604080518181526010918101919091527f6d617854726164657350657250616972000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b602854600090614bd35750600061370e565b6001600160a01b03841660009081526026602090815260408083208684528252808320858452909152812054602880549091908110614c1457614c14615e0d565b60009182526020909120600d9091020180549091506001600160a01b038681169116148015614c465750838160010154145b80156143025750600201549091149392505050565b6018546001600160a01b03163314614c7257600080fd5b601281815560408051818152908101919091527f6e66745375636365737354696d656c6f636b00000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b03163314614cf357600080fd5b60008281526030602052604090208190600201556040805160608082526012908201527f6d61784f70656e496e74657265737444616900000000000000000000000000006080820152602081018490529081018290527f957cd67ea49f3e1ee953cdd23a1ba1f11d973e842411220d5c24ef0e24e1c9569060a00160405180910390a15050565b602e6020528160005260406000208181548110614d9657600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526033602052604090205460ff168015614e5c575060048054604051632474521560e21b8152600080516020615e5d833981519152928101929092523360248301526001600160a01b0316906391d148549060440160206040518083038186803b158015614e2457600080fd5b505afa158015614e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e5c919061565a565b614e6557600080fd5b6001546040517fc412dcfc000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063c412dcfc90602401600060405180830381600087803b158015614ec457600080fd5b505af115801561404e573d6000803e3d6000fd5b6018546001600160a01b03163314614eef57600080fd5b60008111614efc57600080fd5b600e819055604080518181526016918101919091527f6d617850656e64696e674d61726b65744f7264657273000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161127c565b6018546001600160a01b03163314614f7f57600080fd5b803515801590614f93575080356020820135115b8015614fa6575060208101356040820135115b8015614fb9575060408101356060820135115b8015614fcc575060608101356080820135115b614fd557600080fd5b614fe2601382600561531f565b507fdaae5e047a75b6f38ad4e279cdefe910fc35d5a99a91b8303bd948c0a999372a8160405161127c9190615b8a565b6018546001600160a01b0316331461502957600080fd5b60048054604051632474521560e21b8152600080516020615e5d833981519152928101929092526001600160a01b03838116602484015216906391d148549060440160206040518083038186803b15801561508357600080fd5b505afa158015615097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150bb919061565a565b6151075760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e54455200000000000000000000000000000000000000000000604482015260640161250b565b6001600160a01b03811661511a57600080fd5b6001600160a01b038116600081815260336020908152604091829020805460ff1916600117905590519182527fb692fa98cbec9bd705572b4c7e0927e3f7698e9fe526dcef6f40f3d4d4980ca3910161127c565b6018546001600160a01b0316331461518557600080fd5b6001600160a01b03811661519857600080fd5b600380546001600160a01b0319166001600160a01b038316908117909155604080518181526009918101919091527f63616c6c6261636b730000000000000000000000000000000000000000000000606082015260208101919091527f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819060800161127c565b60008161522c57600161522f565b60005b600086815260306020526040902060ff9190911691508361526e578481836003811061525d5761525d615e0d565b01546152699190615d82565b61528d565b8481836003811061528157615281615e0d565b015461528d9190615d29565b81836003811061529f5761529f615e0d565b0155505050505050565b82600581019282156152f1579160200282015b828111156152f157825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906152bc565b506152fd92915061534d565b5090565b6040518060a001604052806005906020820280368337509192915050565b82600581019282156152f1579160200282015b828111156152f1578235825591602001919060010190615332565b5b808211156152fd576000815560010161534e565b803561536d81615e39565b919050565b803561536d81615e4e565b6000610140828403121561539057600080fd5b615398615cb8565b90506153a382615362565b81526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a08201526153e360c08301615372565b60c082015260e082013560e082015261010080830135818301525061012080830135818301525092915050565b60006020828403121561542257600080fd5b813561370e81615e39565b6000806040838503121561544057600080fd5b823561544b81615e39565b9150602083013561545b81615e39565b809150509250929050565b60008060006060848603121561547b57600080fd5b833561548681615e39565b9250602084013561549681615e39565b929592945050506040919091013590565b600080604083850312156154ba57600080fd5b82356154c581615e39565b946020939093013593505050565b6000806000606084860312156154e857600080fd5b83356154f381615e39565b925060208401359150604084013561550a81615e4e565b809150509250925092565b60008060006060848603121561552a57600080fd5b833561553581615e39565b95602085013595506040909401359392505050565b6000806000806080858703121561556057600080fd5b843561556b81615e39565b966020860135965060408601359560600135945092505050565b600060a0828403121561559757600080fd5b82601f8301126155a657600080fd5b60405160a0810181811067ffffffffffffffff821117156155c9576155c9615e23565b604052808360a081018610156155de57600080fd5b60005b600581101561560a5781356155f581615e39565b835260209283019291909101906001016155e1565b509195945050505050565b600060a0828403121561562757600080fd5b8260a08301111561563757600080fd5b50919050565b60006020828403121561564f57600080fd5b813561370e81615e4e565b60006020828403121561566c57600080fd5b815161370e81615e4e565b60006101a0828403121561563757600080fd5b60006101a0828403121561569d57600080fd5b6156a5615ce2565b6156ae83615362565b8152602083013560208201526040830135604082015260608301356060820152608083013560808201526156e460a08401615372565b60a082015260c0838101359082015260e080840135908201526101008084013590820152610120808401359082015261014080840135908201526101608084013590820152610180928301359281019290925250919050565b600080600083850361022081121561575457600080fd5b6101e08082121561576457600080fd5b61576c615d06565b9150615778878761537d565b82526101408601356020830152610160860135604083015261018086013560608301526101a086013560808301526101c086013560a083015290935084013591506157c66102008501615372565b90509250925092565b60008082840360e08112156157e357600080fd5b60c08112156157f157600080fd5b506157fa615d06565b833561580581615e39565b815260208481013590820152604084013561581f81615e39565b80604083015250606084013560608201526080840135608082015260a08401356004811061584c57600080fd5b60a08201529460c0939093013593505050565b6000610140828403121561587257600080fd5b61370e838361537d565b60008082840361020081121561589157600080fd5b61589b858561537d565b925060c061013f19820112156158b057600080fd5b506158b9615d06565b6101408401358152610160840135602082015261018084013560408201526101a084013560608201526101c084013560808201526101e08401356158fc81615e4e565b60a0820152919491935090915050565b60006020828403121561591e57600080fd5b5035919050565b60006020828403121561593757600080fd5b5051919050565b6000806040838503121561595157600080fd5b82359150602083013561545b81615e4e565b6000806040838503121561597657600080fd5b50508035926020909101359150565b6000806000806080858703121561599b57600080fd5b843593506020850135925060408501356159b481615e4e565b915060608501356159c481615e4e565b939692955090935050565b80516001600160a01b031682526020810151602083015260408101516040830152606081015160608301526080810151608083015260a0810151615a1760a084018215159052565b5060c0818101519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018090810151910152565b6001600160a01b0387811682526020820187905285166040820152606081018490526080810183905260c0810160048310615aaf57634e487b7160e01b600052602160045260246000fd5b8260a0830152979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015615b015783516001600160a01b031683529284019291840191600101615adc565b50909695505050505050565b60a08101818360005b6005811015615b3e5781516001600160a01b0316835260209283019290910190600101615b16565b50505092915050565b6020808252825182820181905260009190848201906040850190845b81811015615b0157615b768385516159cf565b928401926101a09290920191600101615b63565b60a0818101908383376000815292915050565b60a08101818360005b6005811015615b3e578151835260209283019290910190600101615ba6565b6020808252825182820181905260009190848201906040850190845b81811015615b0157835183529284019291840191600101615be1565b6101a08101615c0c82846159cf565b92915050565b86516001600160a01b031681526101e081016020880151602083015260408801516040830152606088015160608301526080880151608083015260a088015160a083015260c0880151615c6960c084018215159052565b5060e08881015190830152610100808901519083015261012097880151978201979097526101408101959095526101608501939093526101808401919091526101a08301526101c09091015290565b604051610140810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60405290565b6040516101a0810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60405160c0810167ffffffffffffffff81118282101715615cdc57615cdc615e23565b60008219821115615d3c57615d3c615dcb565b500190565b600082615d5e57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d7d57615d7d615dcb565b500290565b600082821015615d9457615d94615dcb565b500390565b600081615da857615da8615dcb565b506000190190565b6000600019821415615dc457615dc4615dcb565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461358e57600080fd5b801515811461358e57600080fdfe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a264697066735822122080136f00e3bf01f7f59f1ff4ab44ef6febae106cb1618df120e029a5f92817fb64736f6c63430008070033

Deployed Bytecode Sourcemap

2419:23016:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3009:36;;;;;-1:-1:-1;;;;;3009:36:0;;;;;;-1:-1:-1;;;;;12951:55:1;;;12933:74;;12921:2;12906:18;3009:36:0;;;;;;;;9336:184;;;;;;:::i;:::-;;:::i;:::-;;12714:153;;;;;;:::i;:::-;;:::i;4122:63::-;;;;;-1:-1:-1;;;;;4122:63:0;;;12340:160;;;;;;:::i;:::-;;:::i;2934:27::-;;;;;-1:-1:-1;;;;;2934:27:0;;;4410:22;;;;;;;;;20287:25:1;;;20275:2;20260:18;4410:22:0;20141:177:1;6787:64:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19231:123;;;;;;:::i;:::-;;:::i;20840:157::-;;;;;;:::i;:::-;;:::i;3151:384::-;;;;;;:::i;:::-;;:::i;21340:152::-;;;;;;:::i;:::-;;:::i;7712:47::-;;;;;;:::i;:::-;;:::i;23184:250::-;;;;;;:::i;:::-;;:::i;2883:44::-;;;;;-1:-1:-1;;;;;2883:44:0;;;7056:39;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;15062:55:1;;;15044:74;;15149:2;15134:18;;15127:34;;;;15177:18;;;15170:34;;;;15235:2;15220:18;;15213:34;;;;15278:3;15263:19;;15256:35;;;;15335:14;;15328:22;15322:3;15307:19;;15300:51;15382:3;15367:19;;15360:35;;;;15426:3;15411:19;;15404:35;15470:3;15455:19;;15448:35;15514:3;15499:19;;15492:35;15558:3;15543:19;;15536:36;15603:3;15588:19;;15581:36;15648:3;15633:19;;15626:36;15031:3;15016:19;7056:39:0;14564:1104:1;24073:121:0;;;;;;:::i;:::-;-1:-1:-1;;;;;24160:16:0;;;24133:7;24160:16;;;:7;:16;;;;;:25;;;;;24073:121;4017:51;;;;;;:::i;:::-;;:::i;12506:202::-;;;;;;:::i;:::-;;:::i;7588:62::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;10502:180;;;;;;:::i;:::-;;:::i;23440:248::-;;;;;;:::i;:::-;;:::i;11300:233::-;;;;;;:::i;:::-;;:::i;10253:243::-;;;;;;:::i;:::-;;:::i;7826:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;22412:231;;;;;;:::i;:::-;;:::i;25316:116::-;;;:::i;:::-;;;;;;;:::i;3820:23::-;;;;;;4549:22;;;;;;9843:209;;;;;;:::i;:::-;;:::i;24479:133::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;24340:::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22906:241::-;;;;;;:::i;:::-;;:::i;10688:170::-;;;;;;:::i;:::-;;:::i;24200:134::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24292:16:0;24268:4;24292:16;;;:7;:16;;;;;:33;;24200:134;10058:189;;;;;;:::i;:::-;;:::i;8003:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20114:14:1;;20107:22;20089:41;;20077:2;20062:18;8003:49:0;19949:187:1;4508:24:0;;;;;;22649:251;;;;;;:::i;:::-;;:::i;21138:165::-;;;;;;:::i;:::-;;:::i;3672:33::-;;;;;;9042:288;;;;;;:::i;:::-;;:::i;19749:355::-;;;;;;:::i;:::-;;:::i;3712:38::-;;;;;;19064:161;;;;;;:::i;:::-;;:::i;25073:119::-;;;:::i;:::-;;;;;;;:::i;3883:40::-;;;;;;11574:240;;;;;;:::i;:::-;;:::i;6695:85::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32755:25:1;;;32811:2;32796:18;;32789:34;;;;32839:18;;;32832:34;;;;32897:2;32882:18;;32875:34;32940:3;32925:19;;32918:35;32997:14;32990:22;32984:3;32969:19;;32962:51;32742:3;32727:19;6695:85:0;32474:545:1;14507:967:0;;;;;;:::i;:::-;;:::i;4192:63::-;;;;;-1:-1:-1;;;;;4192:63:0;;;6537:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6537:41:0;;;;;;;;32050:25:1;;;-1:-1:-1;;;;;32111:55:1;;;32106:2;32091:18;;32084:83;32183:18;;;32176:34;32038:2;32023:18;6537:41:0;31848:368:1;6980:69:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7210:61;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7210:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7334:71::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;20531:303;;;;;;:::i;:::-;;:::i;19388:355::-;;;;;;:::i;:::-;;:::i;6611:77::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6611:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16084:55:1;;;16066:74;;16171:2;16156:18;;16149:34;;;;16199:18;;;16192:34;;;;16257:2;16242:18;;16235:34;;;;16300:3;16285:19;;16278:35;;;;16344:3;16329:19;;16322:35;16401:14;16394:22;16388:3;16373:19;;16366:51;16448:3;16433:19;;16426:35;16492:3;16477:19;;16470:35;16536:3;16521:19;;16514:35;16053:3;16038:19;6611:77:0;15673:882:1;10864:205:0;;;;;;:::i;:::-;;:::i;7876:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;2477:37;;2510:4;2477:37;;18336:694;;;;;;:::i;:::-;;:::i;7136:67::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7136:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17807:523::-;;;;;;:::i;:::-;;:::i;7412:72::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24757:310;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7278:49::-;;;;;;:::i;:::-;;:::i;3757:26::-;;;;;;13665:836;;;;;;:::i;:::-;;:::i;6470:32::-;;;;;;:::i;:::-;;:::i;15519:631::-;;;;;;:::i;:::-;;:::i;16156:915::-;;;;;;:::i;:::-;;:::i;8718:156::-;;;;;;:::i;:::-;;:::i;21530:477::-;;;;;;:::i;:::-;;:::i;22013:369::-;;;:::i;17441:360::-;;;;;;:::i;:::-;;:::i;25198:112::-;;;:::i;8880:156::-;;;;;;:::i;:::-;;:::i;20110:388::-;;;;;;:::i;:::-;;:::i;2521:104::-;;-1:-1:-1;;;;;;;;;;;2521:104:0;;11820:233;;;;;;:::i;:::-;;:::i;23694:344::-;;;;;;:::i;:::-;;:::i;12873:168::-;;;;;;:::i;:::-;;:::i;13301:327::-;;;;;;:::i;:::-;;:::i;7536:45::-;;;;;;:::i;:::-;;:::i;21028:104::-;;;;;;:::i;:::-;;:::i;4467:24::-;;;;;;4328:22;;;;;;2968:34;;;;;-1:-1:-1;;;;;2968:34:0;;;12059:275;;;;;;:::i;:::-;;:::i;6890:83::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4287:24;;;;;;13047:248;;;;;;:::i;:::-;;:::i;3569:29::-;;;;;-1:-1:-1;;;;;3569:29:0;;;2632:99;;2688:42;2632:99;;3633:32;;;;;;24618:133;;;;;;:::i;:::-;-1:-1:-1;;;;;24711:24:0;24687:4;24711:24;;;:15;:24;;;;;:31;;24618:133;9564:273;;;;;;:::i;:::-;;:::i;3946:35::-;;;;;;3542:20;;;;;-1:-1:-1;;;;;3542:20:0;;;3052:92;;;;;-1:-1:-1;;;;;3052:92:0;;;4369:24;;;;;;11075:219;;;;;;:::i;:::-;;:::i;2738:106::-;;2801:42;2738:106;;9336:184;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;9431:8;;-1:-1:-1;;;;;9423:31:0::1;9415:40;;;::::0;::::1;;9466:12;:4;9473:5:::0;9466:4;:12:::1;:::i;:::-;;9494:18;9506:5;9494:18;;;;;;:::i;:::-;;;;;;;;9336:184:::0;:::o;12714:153::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;12787:2:::1;12779:4;:10;;12771:19;;;::::0;::::1;;12801:6;:13:::0;;;12830:29:::1;::::0;;27377:21:1;;;27434:1;27414:18;;;27407:29;;;;27472:8;27467:2;27452:18;;27445:36;27548:4;27533:20;;27526:36;;;12830:29:0::1;::::0;27513:3:1;27498:19;12830:29:0::1;27165:403:1::0;12340:160:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;12415:3:::1;12407:4;:11;;12399:20;;;::::0;::::1;;12430:8;:15:::0;;;12461:31:::1;::::0;;25663:21:1;;;25720:1;25700:18;;;25693:29;;;;25758:10;25753:2;25738:18;;25731:38;25836:4;25821:20;;25814:36;;;12461:31:0::1;::::0;25801:3:1;25786:19;12461:31:0::1;25451:405:1::0;19231:123:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;19317:29:::1;::::0;;;:21:::1;:29;::::0;;;;19310:36;;-1:-1:-1;;;;;;19310:36:0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;;::::0;;-1:-1:-1;;19310:36:0::1;::::0;;19231:123::o;20840:157::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;20938:18:0;::::1;;::::0;;;:7:::1;:18;::::0;;;;:39:::1;;:50:::0;;20981:7;;20938:18;:50:::1;::::0;20981:7;;20938:50:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;20840:157:0:o;3151:384::-;;;;;;;;;;;;;;-1:-1:-1;;;;;3151:384:0;;-1:-1:-1;3151:384:0;:::o;21340:152::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;21436:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:48;21340:152::o;7712:47::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:47:0;;-1:-1:-1;7712:47:0:o;23184:250::-;23266:10;;23288:139;23308:16;;23304:1;:20;23288:139;;;-1:-1:-1;;;;;23348:18:0;;;;;;:10;:18;;;;;;;;:29;;;;;;;;:32;;;;;;;;:41;;;23345:71;;23405:1;23397:9;;23408:5;;23345:71;23326:3;;;;:::i;:::-;;;;23288:139;;;;23184:250;;;;:::o;7056:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7056:39:0;;;;-1:-1:-1;7056:39:0;;;;;;;;;;;;;;;;;;;;;;;;:::o;4017:51::-;;;;;;;;;;;;;;;-1:-1:-1;4017:51:0;:::o;12506:202::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;12595:1:::1;12588:4;:8;12580:17;;;::::0;::::1;;12608:23;:30:::0;;;12654:46:::1;::::0;;26073:21:1;;;26130:2;26110:18;;;26103:30;;;;26169:25;26164:2;26149:18;;26142:53;26262:4;26247:20;;26240:36;;;12654:46:0::1;::::0;26227:3:1;26212:19;12654:46:0::1;25861:421:1::0;10502:180:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;10569:19:0;::::1;10561:28;;;::::0;::::1;;10600:4;:29:::0;;-1:-1:-1;;;;;;10600:29:0::1;-1:-1:-1::0;;;;;10600:29:0;::::1;::::0;;::::1;::::0;;;10645::::1;::::0;;29466:21:1;;;29523:1;29503:18;;;29496:29;;;;29561:6;29556:2;29541:18;;29534:34;29635:4;29620:20;;29613:85;;;;10645:29:0::1;::::0;29600:3:1;29585:19;10645:29:0::1;29254:450:1::0;23440:248:0;23526:10;;23548:133;23568:16;;23564:1;:20;23548:133;;;23609:39;23627:6;23635:9;23646:1;23609:17;:39::i;:::-;23605:65;;23659:1;23651:9;;23662:5;;23605:65;23586:3;;;;:::i;:::-;;;;23548:133;;11300:233;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;11387:29:0;::::1;11379:38;;;::::0;::::1;;11428:14;:32:::0;;-1:-1:-1;;;;;;11428:32:0::1;-1:-1:-1::0;;;;;11428:32:0;::::1;::::0;;::::1;::::0;;;11476:49:::1;::::0;;24404:21:1;;;24461:2;24441:18;;;24434:30;;;;24500:16;24495:2;24480:18;;24473:44;24584:4;24569:20;;24562:85;;;;11476:49:0::1;::::0;24549:3:1;24534:19;11476:49:0::1;24192:461:1::0;10253:243:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;10337:25:0;::::1;10329:34;;;::::0;::::1;;10374:15;:52:::0;;-1:-1:-1;;;;;;10374:52:0::1;-1:-1:-1::0;;;;;10374:52:0;::::1;::::0;;::::1;::::0;;;10442:46:::1;::::0;;28999:21:1;;;29056:2;29036:18;;;29029:30;;;;29095:17;29090:2;29075:18;;29068:45;29180:4;29165:20;;29158:85;;;;10442:46:0::1;::::0;29145:3:1;29130:19;10442:46:0::1;28787:462:1::0;22412:231:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;22507:5:::1;22504:131;;;22515:5;::::0;;:23:::1;::::0;-1:-1:-1;;;22515:23:0;;-1:-1:-1;;;;;13613:55:1;;;22515:23:0;;::::1;13595:74:1::0;;;;13685:18;;;13678:34;;;22515:5:0;::::1;::::0;:10:::1;::::0;13568:18:1;;22515:23:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22556:7;22540:12;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;22504:131:0::1;::::0;-1:-1:-1;22504:131:0::1;;22584:5;::::0;;:23:::1;::::0;;;;-1:-1:-1;;;;;13613:55:1;;;22584:23:0;;::::1;13595:74:1::0;;;;13685:18;;;13678:34;;;22584:5:0;::::1;::::0;:10:::1;::::0;13568:18:1;;22584:23:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22625:7;22609:12;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22504:131:0::1;22412:231:::0;;;:::o;25316:116::-;25374:14;;:::i;:::-;25400:24;;;;;;;;;;;25407:17;;25400:24;;25407:17;25400:24;;;;;;;;;;;;;;;;;;;;;;;;;25316:116;:::o;9843:209::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;9927:22:0;::::1;9919:31;;;::::0;::::1;;-1:-1:-1::0;;;;;9961:27:0;::::1;9991:5;9961:27:::0;;;:17:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;9961:35:0::1;::::0;;10012:32;;12933:74:1;;;10012:32:0::1;::::0;12906:18:1;10012:32:0::1;12787:226:1::0;24479:133:0;-1:-1:-1;;;;;24579:24:0;;;;;;:15;:24;;;;;;;;;24572:31;;;;;;;;;;;;;;;;;24546:13;;24572:31;;;24579:24;24572:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24479:133;;;:::o;24340:::-;24441:23;;;;:11;:23;;;;;;;;;24434:30;;;;;;;;;;;;;;;;;24405:16;;24434:30;;;24441:23;24434:30;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24434:30:0;;;;;;;;;;;;;;;;;;;;;;24340:133;;;:::o;22906:241::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;23066:15:::1;::::0;23084:53:::1;::::0;;;;::::1;::::0;::::1;32395:25:1::0;;;32436:18;;;32429:34;;;2801:42:0::1;::::0;23027:23:::1;::::0;23051:5;;-1:-1:-1;;;;;23066:15:0::1;::::0;;;23084:23:::1;::::0;32368:18:1;;23084:53:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23027:111;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;13299:15:1;;;23027:111:0::1;::::0;::::1;13281:34:1::0;13351:15;;;;13331:18;;;13324:43;13383:18;;;13376:34;13193:18;;23027:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22906:241:::0;;;:::o;10688:170::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;10757:20:0;::::1;10749:29;;;::::0;::::1;;10789:5;:14:::0;;-1:-1:-1;;;;;;10789:14:0::1;-1:-1:-1::0;;;;;10789:14:0;::::1;::::0;;::::1;::::0;;;10819:31:::1;::::0;;23523:21:1;;;23580:1;23560:18;;;23553:29;;;;23618:7;23613:2;23598:18;;23591:35;23693:4;23678:20;;23671:85;;;;10819:31:0::1;::::0;23658:3:1;23643:19;10819:31:0::1;23311:451:1::0;10058:189:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;10136:20:0;::::1;10128:29;;;::::0;::::1;;10168:15;:28:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;10168:28:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;10168:28:0::1;-1:-1:-1::0;;;;;10168:28:0;::::1;::::0;;::::1;::::0;;;10212:27:::1;::::0;12933:74:1;;;10212:27:0::1;::::0;12921:2:1;12906:18;10212:27:0::1;12787:226:1::0;22649:251:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;22747:22:0;::::1;22764:4;22747:22;22744:149;;;22785:26;::::0;-1:-1:-1;;;22785:26:0;;-1:-1:-1;;;;;13613:55:1;;22785:26:0::1;::::0;::::1;13595:74:1::0;13685:18;;;13678:34;;;2688:42:0::1;::::0;22785:12:::1;::::0;13568:18:1;;22785:26:0::1;13421:297:1::0;22744:149:0::1;22843:37;::::0;;;;-1:-1:-1;;;;;13299:15:1;;;22843:37:0::1;::::0;::::1;13281:34:1::0;13351:15;;13331:18;;;13324:43;13383:18;;;13376:34;;;2688:42:0::1;::::0;22843:16:::1;::::0;13193:18:1;;22843:37:0::1;13018:398:1::0;21138:165:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;21224:22:::1;::::0;;;:14:::1;:22;::::0;;;;;;21249:12:::1;21224:37:::0;;21273:21;;21287:7;;21224:22;21273:21:::1;::::0;21287:7;;21273:21:::1;:::i;9042:288::-:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;9126:7:::1;;;;;;;;;-1:-1:-1::0;;;;;9126:7:0::1;-1:-1:-1::0;;;;;9126:16:0::1;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;;;;9148:9;;;;;;;;;-1:-1:-1::0;;;;;9148:9:0::1;-1:-1:-1::0;;;;;9148:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9118:65;;;::::0;-1:-1:-1;;;9118:65:0;;28650:2:1;9118:65:0::1;::::0;::::1;28632:21:1::0;28689:2;28669:18;;;28662:30;28728:12;28708:18;;;28701:40;28758:18;;9118:65:0::1;;;;;;;;;-1:-1:-1::0;;;;;9202:32:0;::::1;9194:41;;;::::0;::::1;;9246:5;:17:::0;;-1:-1:-1;;;;;;9246:17:0::1;-1:-1:-1::0;;;;;9246:17:0;::::1;::::0;;::::1;::::0;;;9279:43:::1;::::0;;27785:21:1;;;27842:1;27822:18;;;27815:29;;;;27880:7;27875:2;27860:18;;27853:35;27955:4;27940:20;;27933:85;;;;9279:43:0::1;::::0;27920:3:1;27905:19;9279:43:0::1;27573:451:1::0;19749:355:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;19876:19:0;::::1;19858:15;19876:19:::0;;;:10:::1;:19;::::0;;;;;;;:31;;;;;;;;:39;;;;;;;;19948:23;;;:14:::1;:23:::0;;;;;:35;;;;;;;;:43;;;;;;;;20005:10:::1;::::0;::::1;::::0;20002:30:::1;;20023:7;;;;20002:30;20042:4;::::0;;::::1;:13:::0;;;20084:12:::1;20066:15;::::0;;::::1;:30:::0;19749:355;;;;:::o;19064:161::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;19174:31:::1;::::0;;;:21:::1;:31;::::0;;;;;;;;:43;;;;-1:-1:-1;;;;;;19174:43:0;;::::1;-1:-1:-1::0;;;;;19174:43:0;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;19174:43:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;;-1:-1:-1;;19174:43:0;;::::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;;;;;19064:161:0:o;25073:119::-;25125:23;25168:15;25161:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25161:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25073:119;:::o;11574:240::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;11685:1:::1;11664:18;:22;11656:31;;;::::0;::::1;;11698:17;:38:::0;;;11752:54:::1;::::0;;26957:21:1;;;27014:2;26994:18;;;26987:30;;;;27053:19;27048:2;27033:18;;27026:47;27140:4;27125:20;;27118:36;;;11752:54:0::1;::::0;27105:3:1;27090:19;11752:54:0::1;26745:415:1::0;14507:967:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;14625:18:0;::::1;14607:15;14625:18:::0;;;:10:::1;:18;::::0;;;;;;;:29;;;;;;;;:36;;;;;;;;14694:22;;;:14:::1;:22:::0;;;;;:33;;;;;;;;:40;;;;;;;;14748:10:::1;::::0;::::1;::::0;14745:30:::1;;14766:7;;22412:231:::0;;;:::o;14745:30::-:1;14820:17;::::0;::::1;::::0;14846:5:::1;::::0;::::1;::::0;14787:65:::1;::::0;14809:9;;14839:5:::1;::::0;14846::::1;;14787:21;:65::i;:::-;-1:-1:-1::0;;;;;14868:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:34;;;;;;;;;14906:1:::1;14868:39;14865:398;;;-1:-1:-1::0;;;;;14945:21:0;::::1;14923:19;14945:21:::0;;;:13:::1;:21;::::0;;;;;;;:32;;;;;;;;;15014:11:::1;:22:::0;;;;;;15075:8;;15014:22;;15075:10:::1;::::0;15084:1:::1;::::0;15075:10:::1;:::i;:::-;15073:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;15073:13:0::1;15053:1;15055:14;15053:17;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;;-1:-1:-1::0;;;;;15053:33:0::1;;;;;-1:-1:-1::0;;;;;15053:33:0::1;;;;;;15147:14;15101:13;:32;15115:1;15117:14;15115:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;15115:17:0;;::::1;15101:32:::0;;;;::::1;::::0;;;;;;;;;;:43;;;;;;;;:60;;;;15197:21;;::::1;::::0;;:13:::1;:21:::0;;;;;:32;;;;;;;;;15190:39;15244:7;;:1;;:7;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;15244:7:0;;;;;-1:-1:-1;;;;;;15244:7:0::1;::::0;;;;;-1:-1:-1;;14865:398:0::1;-1:-1:-1::0;;;;;15282:18:0;::::1;;::::0;;;:10:::1;:18;::::0;;;;;;;:29;;;;;;;;:36;;;;;;;;15275:43;;-1:-1:-1;;;;;;15275:43:0::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;15275:43:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;15336:22;;;:14:::1;:22:::0;;;;;:33;;;;;;;;:40;;;;;;;;15329:47;;;;;::::1;::::0;;;;;::::1;::::0;;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;15389:23;;;:15:::1;:23:::0;;;;;:34;;;;;;;;:36;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;15451:12:0::1;15436:28;::::0;;;:14:::1;:28;::::0;;;;:30;;;::::1;::::0;::::1;:::i;:::-;;;;;;14596:878;;14507:967:::0;;;:::o;20531:303::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;20645:16:0;;::::1;20621:21;20645:16:::0;;;:7:::1;:16;::::0;;;;;20690:23;::::1;::::0;;::::1;::::0;:56:::1;;-1:-1:-1::0;20717:15:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;20717:15:0::1;:29:::0;20690:56:::1;:80;;;;;20763:7;-1:-1:-1::0;;;;;20750:20:0::1;:9;-1:-1:-1::0;;;;;20750:20:0::1;;;20690:80;:136;;20811:15;::::0;::::1;::::0;-1:-1:-1;;;;;20811:15:0::1;20690:136;;;20799:9;20690:136;20672:15;::::0;;;::::1;:154:::0;;-1:-1:-1;;;;;;20672:154:0::1;-1:-1:-1::0;;;;;20672:154:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;20531:303:0:o;19388:355::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;-1:-1:-1;;;;;19515:19:0;::::1;19497:15;19515:19:::0;;;:10:::1;:19;::::0;;;;;;;:31;;;;;;;;:39;;;;;;;;19587:23;;;:14:::1;:23:::0;;;;;:35;;;;;;;;:43;;;;;;;;19644:10:::1;::::0;::::1;::::0;19641:30:::1;;19662:7;;;;19641:30;19681:4;::::0;;::::1;:13:::0;;;19723:12:::1;19705:15;::::0;;::::1;:30:::0;19388:355;;;;:::o;10864:205::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;10937:22:0;::::1;10929:31;;;::::0;::::1;;10971:7;:39:::0;;-1:-1:-1;;;;;;10971:39:0::1;-1:-1:-1::0;;;;;10971:39:0;::::1;::::0;;::::1;::::0;;;11026:35:::1;::::0;;26499:21:1;;;26556:1;26536:18;;;26529:29;;;;26594:9;26589:2;26574:18;;26567:37;26671:4;26656:20;;26649:85;;;;11026:35:0::1;::::0;26636:3:1;26621:19;11026:35:0::1;26287:453:1::0;18336:694:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;18452:46:::1;18470:7;18479:10;18491:6;18452:17;:46::i;:::-;18448:62;;22412:231:::0;;;:::o;18448:62::-:1;-1:-1:-1::0;;;;;18610:26:0;::::1;18600:7;18610:26:::0;;;:17:::1;:26;::::0;;;;;;;:38;;;;;;;;:46;;;;;;;;;18689:15:::1;18705:22:::0;;:24:::1;::::0;18728:1:::1;::::0;18705:24:::1;:::i;:::-;18689:41;;;;;;;;:::i;:::-;;;;;;;;;;;18667:15;18683:2;18667:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:63;;:19:::1;::::0;;::::1;;:63:::0;;-1:-1:-1;;;;;;18667:63:0::1;-1:-1:-1::0;;;;;18667:63:0;;::::1;::::0;;;::::1;::::0;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;18667:63:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;18759:15:::1;:19:::0;;18847:2;;18741:17:::1;::::0;18667:19;;18847:2;;18759:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;:26:::0;-1:-1:-1;;;;;18759:26:0::1;18741:45:::0;;;::::1;::::0;;;;;;;;18787:15:::1;:19:::0;;18741:45;;18759:19;18803:2;;18787:19;::::1;;;;;:::i;:::-;;;;;;;;;;;:29;;;18741:76;;;;;;;;;;;:103;18818:15;18834:2;18818:19;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:25:::1;:19;::::0;;::::1;;:25:::0;;;::::1;::::0;18741:103;;;;::::1;::::0;;;;;;;;;;:108;;;;-1:-1:-1;;;;;18888:26:0;::::1;::::0;;:17:::1;:26:::0;;;;;:38;;;;;;;;:46;;;;;;;;18881:53;18945:15:::1;:21:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;18945:21:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;18945:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;18945:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;;;;;;;-1:-1:-1;;;;;18979:29:0;::::1;::::0;;:20:::1;:29:::0;;;;;;:41;;;;;;;;:43;;;::::1;::::0;::::1;:::i;:::-;;;;;;18437:593;18336:694:::0;;;:::o;17807:523::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;17900:52:::1;17918:9;;::::0;::::1;:2:::0;:9:::1;:::i;:::-;17929:2;:12;;;17943:2;:8;;;17900:17;:52::i;:::-;17896:68;;17807:523:::0;:::o;17896:68::-:1;17974:24;18001:15;18017:17;17974:24:::0;18035:9:::1;;::::0;::::1;:2:::0;:9:::1;:::i;:::-;-1:-1:-1::0;;;;;18017:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;18017:28:0;;;18046:12;;::::1;;18017:42:::0;;;;;;;18060:8;;::::1;;18017:52:::0;;;;;;;;18001:69;;;::::1;;;;;:::i;:::-;;;;;;;;;;;17974:96;;18098:2;:15;;;18081:1;:14;;:32;;;;18132:2;:6;;;;;;;;;;:::i;:::-;18124:5;::::0;::::1;:14:::0;;-1:-1:-1;;18124:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18162:11:::1;::::0;::::1;;18149:10;::::0;::::1;:24:::0;18191:5:::1;::::0;::::1;;18184:4;::::0;::::1;:12:::0;18124:14:::1;18214:5:::0;::::1;;18207:4;::::0;::::1;:12:::0;18243:11:::1;::::0;::::1;;18230:10;::::0;::::1;:24:::0;18278:11:::1;::::0;::::1;;18265:10;::::0;::::1;:24:::0;18310:12:::1;18300:7;::::0;;::::1;:22:::0;8681:1:::1;17807:523:::0;:::o;24757:310::-;24888:21;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24888:21:0;24930:46;24948:7;24957:10;24969:6;24930:17;:46::i;:::-;24922:55;;;;;;-1:-1:-1;;;;;25011:26:0;;;;;;:17;:26;;;;;;;;:38;;;;;;;;:46;;;;;;;;;24995:15;:63;;:15;;25011:46;24995:63;;;;;;:::i;:::-;;;;;;;;;;24988:70;;;;;;;;24995:63;;;;;;;24988:70;;-1:-1:-1;;;;;24988:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24757:310:0;;;;;;:::o;7278:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13665:836::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;13781:53:::1;13802:6;:13;;;13817:6;:16;;;13781:20;:53::i;:::-;13766:12;::::0;;::::1;:68:::0;;;13856:13;;-1:-1:-1;;;;;13845:25:0;;::::1;;::::0;;;:10:::1;:25;::::0;;;;;;13871:16;;::::1;::::0;;13845:43;;;;;;;;13889:12;;13845:57;;;;;;;:66;;;;-1:-1:-1;;;;;;13845:66:0::1;::::0;::::1;::::0;;::::1;::::0;;;;-1:-1:-1;13845:66:0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;13845:66:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;13924:30;;;:15:::1;:30:::0;;;;;13955:16;;13924:48;;;;;;;:50;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;14000:12:0::1;13985:28;::::0;;;:14:::1;:28;::::0;;;;:30;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;14047:13:0;;-1:-1:-1;;;;;14031:30:0::1;;::::0;;;:15:::1;:30;::::0;;;;;;;14062:16;;::::1;::::0;14031:48;;;;;;;;14083:1:::1;14031:53;14028:234;;;14161:16;::::0;;::::1;::::0;;14149:29:::1;::::0;;;:11:::1;:29:::0;;;;;;;:36;14114:13;;-1:-1:-1;;;;;14100:28:0;;::::1;::::0;;:13:::1;:28:::0;;;;;14129:16;;14100:46;;;;;;;:85;;;;14212:16;;14200:29;;;;;;;14235:13;;14200:49;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;14200:49:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;14028:234:::1;14305:5;14274:28;::::0;::::1;:36:::0;;;14336:13;;-1:-1:-1;;;;;14321:29:0::1;::::0;;:14:::1;:29;::::0;;;;;;;14351:16;;::::1;::::0;;14321:47;;;;;;;;14369:12;;::::1;::::0;14321:61;;;;;;;;:74;;;;;;::::1;::::0;14274:36;14321:74;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;14321:74:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;14430:16;;14482:10:::1;::::0;::::1;::::0;14408:85:::1;::::0;14430:16;;14321:74;14274:36;14408:21:::1;:85::i;:::-;13665:836:::0;;:::o;6470:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6470:32:0;;-1:-1:-1;6470:32:0;:::o;15519:631::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;15655:12;;:19;-1:-1:-1;;;;;15639:36:0;;::::1;;::::0;;;:15:::1;:36;::::0;;;;;;;:46;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;15698:29;;;:24:::1;:29:::0;;;;;;:38;;;;;;-1:-1:-1;;;;;;15698:38:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;15698:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;15785:12:::1;15698:38;::::0;;::::1;15747:50:::0;15818:325;::::1;;;15865:12:::0;;:19;-1:-1:-1;;;;;15842:43:0::1;;::::0;;;:22:::1;:43;::::0;;;;;;;15886:12;;:22;::::1;::::0;15842:67;;;;;;;:69;;;::::1;::::0;::::1;:::i;:::-;;;;;;22412:231:::0;;;:::o;15818:325::-:1;15966:12:::0;;:19;-1:-1:-1;;;;;15942:44:0::1;;::::0;;;:23:::1;:44;::::0;;;;;;;15987:12;;:22;::::1;::::0;15942:68;;;;;;;:70;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;16042:12:0;;:19;-1:-1:-1;;;;;16027:35:0::1;;::::0;;;:14:::1;:35;::::0;;;;;;;16063:12;;:22;::::1;::::0;16027:59;;;;;;;16087:12;;:18;::::1;::::0;16027:79;;;;;;;:97:::1;;:104:::0;;-1:-1:-1;;16027:104:0::1;16127:4;16027:104;::::0;;15519:631;;;:::o;16156:915::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;16247:32:::1;16282:29:::0;;;:24:::1;:29;::::0;;;;;;;16247:64;;;;;;;;;-1:-1:-1;;;;;16247:64:0::1;;::::0;::::1;::::0;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;16247:64:0;;;::::1;::::0;;::::1;::::0;-1:-1:-1;16247:64:0;;;16348:36;;;:15:::1;:36:::0;;;;;16247:64;;16397:667:::1;16417:15:::0;;16413:19;::::1;16397:667;;;16471:3;16456:8;16465:1;16456:11;;;;;;;;:::i;:::-;;;;;;;;;:18;16453:600;;;16497:5;16494:367;;;16550:12:::0;;:19;-1:-1:-1;;;;;16527:43:0::1;;::::0;;;:22:::1;:43;::::0;;;;;;;16571:12;;:22;::::1;::::0;16527:67;;;;;;;:69;;;::::1;::::0;::::1;:::i;:::-;;;;;;16494:367;;;16667:12:::0;;:19;-1:-1:-1;;;;;16643:44:0::1;;::::0;;;:23:::1;:44;::::0;;;;;;;16688:12;;:22;::::1;::::0;16643:68;;;;;;;:70;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;16751:12:0;;:19;-1:-1:-1;;;;;16736:35:0::1;16836:5;16736:35:::0;;;:14:::1;:35;::::0;;;;;;;16772:12;;:22;::::1;::::0;16736:59;;;;;;;16796:12;;:18;::::1;::::0;16736:79;;;;;;;:97:::1;;:105:::0;;-1:-1:-1;;16736:105:0::1;::::0;;16494:367:::1;16904:15:::0;;16895:8;;16904:17:::1;::::0;16920:1:::1;::::0;16904:17:::1;:::i;:::-;16895:27;;;;;;;;:::i;:::-;;;;;;;;;16881:8;16890:1;16881:11;;;;;;;;:::i;:::-;;;;;;;;:41;;;;16941:8;:14;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;16941:14:0;;;;;;;;;;;;16983:29;;;:24:::1;:29:::0;;;;;16976:36;;-1:-1:-1;;;;;;16976:36:0::1;::::0;;16941:14:::1;16976:36:::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;16976:36:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;;::::0;-1:-1:-1;17031:7:0::1;::::0;-1:-1:-1;;17031:7:0::1;16453:600;16434:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16397:667;;;;16236:835;;16156:915:::0;;:::o;8718:156::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;8783:18:0;::::1;8775:27;;;::::0;::::1;;8813:3;:10:::0;;-1:-1:-1;;;;;;8813:10:0::1;-1:-1:-1::0;;;;;8813:10:0;::::1;::::0;;::::1;::::0;;;8839:27:::1;::::0;;22116:21:1;;;22173:1;22153:18;;;22146:29;;;;22211:5;22206:2;22191:18;;22184:33;22284:4;22269:20;;22262:85;;;;8839:27:0::1;::::0;22249:3:1;22234:19;8839:27:0::1;21904:449:1::0;21530:477:0;8625:10;21657:8;8607:29;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;21708:15:::1;::::0;:36:::1;::::0;;;;::::1;::::0;::::1;20287:25:1::0;;;21759:3:0::1;::::0;2510:4:::1;::::0;-1:-1:-1;;;;;21708:15:0;;::::1;::::0;:24:::1;::::0;20260:18:1;;21708:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21683:61;::::0;:22;:61:::1;:::i;:::-;:73;;;;:::i;:::-;:79;;;;:::i;:::-;21677:85;;21777:8;21773:26;;21788:8;21795:1;21788:8:::0;::::1;:::i;:::-;;;21773:26;21814:4;21811:168;;;21848:3;21834:10;;:17;;;;;;;:::i;:::-;;;;;;;;21880:3;21866:10;;:17;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;21811:168:0::1;::::0;-1:-1:-1;21811:168:0::1;;21930:3;21914:12;;:19;;;;;;;:::i;:::-;;;;;;;;21964:3;21948:12;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;21811:168:0::1;21991:8;21998:1;21991:8:::0;::::1;:::i;:::-;::::0;21530:477;-1:-1:-1;;;;;21530:477:0:o;22013:369::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;22061:5:::1;::::0;;22072:3:::1;::::0;22077:12:::1;::::0;22061:29:::1;::::0;-1:-1:-1;;;22061:29:0;;-1:-1:-1;;;;;22072:3:0;;::::1;22061:29:::0;;::::1;13595:74:1::0;;;;13685:18;;;13678:34;22061:5:0::1;::::0;:10:::1;::::0;13568:18:1;;22061:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22101:5:0::1;::::0;;22112:3:::1;::::0;22117:12:::1;::::0;22101:29:::1;::::0;-1:-1:-1;;;22101:29:0;;-1:-1:-1;;;;;22112:3:0;;::::1;22101:29:::0;;::::1;13595:74:1::0;;;;13685:18;;;13678:34;22101:5:0::1;::::0;-1:-1:-1;22101:10:0::1;::::0;-1:-1:-1;13568:18:1;;22101:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22174:12;;22159;;:27;;;;:::i;:::-;22143:12;;:43;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22212:3:0::1;::::0;22217:10:::1;::::0;22199:29:::1;::::0;-1:-1:-1;;;22199:29:0;;-1:-1:-1;;;;;22212:3:0;;::::1;22199:29;::::0;::::1;13595:74:1::0;13685:18;;;13678:34;2688:42:0::1;::::0;22199:12:::1;::::0;13568:18:1;;22199:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22252:3:0::1;::::0;22257:10:::1;::::0;22239:29:::1;::::0;-1:-1:-1;;;22239:29:0;;-1:-1:-1;;;;;22252:3:0;;::::1;22239:29;::::0;::::1;13595:74:1::0;13685:18;;;13678:34;2688:42:0::1;::::0;22239:12:::1;::::0;13568:18:1;;22239:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;22296:1:0::1;22281:12;:16:::0;;;22308:12:::1;:16:::0;;;22335:10:::1;:14:::0;;;22360:10:::1;:14:::0;22013:369::o;17441:360::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;17536:47:::1;17561:1;:8;;;17571:1;:11;;;17536:24;:47::i;:::-;17526:7;::::0;::::1;:57:::0;;;17604:12:::1;17594:7;::::0;::::1;:22:::0;;;17627:15:::1;:23:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;17627:23:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;17627:23:0::1;-1:-1:-1::0;;;;;17627:23:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;17627:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;;;;17713:22;:24:::1;::::0;17627:23;17713:24:::1;:::i;:::-;17679:8:::0;;-1:-1:-1;;;;;17661:27:0;;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;17689:11;;::::1;::::0;;17661:40;;;;;;;;17702:7;;::::1;::::0;17661:49;;;;;;;:76;;;;17769:8;;17748:30;;::::1;::::0;;:20:::1;:30:::0;;;;;17779:11;;17748:43;;;;;;;;:45;;;::::1;::::0;::::1;:::i;:::-;;;;;;17441:360:::0;:::o;25198:112::-;25250:16;25286:15;25279:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25279:22:0;;;;;;;;;;;;;;;;;;;;;;25198:112;:::o;8880:156::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;8945:18:0;::::1;8937:27;;;::::0;::::1;;8975:3;:10:::0;;-1:-1:-1;;;;;;8975:10:0::1;-1:-1:-1::0;;;;;8975:10:0;::::1;::::0;;::::1;::::0;;;9001:27:::1;::::0;;24870:21:1;;;24927:1;24907:18;;;24900:29;;;;24965:5;24960:2;24945:18;;24938:33;25038:4;25023:20;;25016:85;;;;9001:27:0::1;::::0;25003:3:1;24988:19;9001:27:0::1;24658:449:1::0;20110:388:0;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;20246:9;;-1:-1:-1;;;;;20235:21:0::1;20217:15;20235:21:::0;;;:10:::1;:21;::::0;;;;;;;20257:12;;::::1;::::0;20235:35;;;;;;;20271:8;;::::1;::::0;20235:45;;;;;;;20294:10:::1;::::0;::::1;::::0;20291:30:::1;;20312:7;17807:523:::0;:::o;20291:30::-:1;20351:18;::::0;::::1;::::0;20331:17:::1;::::0;::::1;:38:::0;20400:18:::1;::::0;::::1;::::0;20380:17:::1;::::0;::::1;:38:::0;20443:12:::1;::::0;::::1;::::0;20429:11:::1;::::0;::::1;:26:::0;20479:11:::1;::::0;::::1;::::0;20466:10:::1;::::0;;::::1;:24:::0;20110:388;:::o;11820:233::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;11928:1:::1;11908:17;:21;11900:30;;;::::0;::::1;;11941:16;:36:::0;;;11993:52:::1;::::0;;28241:21:1;;;28298:2;28278:18;;;28271:30;;;;28337:18;28332:2;28317:18;;28310:46;28423:4;28408:20;;28401:36;;;11993:52:0::1;::::0;28388:3:1;28373:19;11993:52:0::1;28029:414:1::0;23694:344:0;23804:15;:22;23785:4;;23801:48;;-1:-1:-1;23841:5:0;23834:12;;23801:48;-1:-1:-1;;;;;23902:25:0;;23859:24;23902:25;;;:17;:25;;;;;;;;:36;;;;;;;;:43;;;;;;;;;23886:15;:60;;:15;;23902:43;23886:60;;;;;;:::i;:::-;;;;;;;;;;;;;;23964:8;;23886:60;;-1:-1:-1;;;;;;23964:18:0;;;:8;;:18;:46;;;;;24001:9;23986:1;:11;;;:24;23964:46;:66;;;;-1:-1:-1;24014:7:0;;;:16;;;;23957:73;-1:-1:-1;;;23694:344:0:o;12873:168::-;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;12945:18:::1;:28:::0;;;12989:44:::1;::::0;;29921:21:1;;;29958:18;;;29951:30;;;;30017:20;30012:2;29997:18;;29990:48;30105:4;30090:20;;30083:36;;;12989:44:0::1;::::0;30070:3:1;30055:19;12989:44:0::1;29709:416:1::0;13301:327:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;13480:27:::1;::::0;;;:15:::1;:27;::::0;;;;13513:19;;13508:1:::1;13480:30;:52:::0;13548:72:::1;::::0;;22616:2:1;22598:21;;;22655:2;22635:18;;;22628:30;22695:20;22689:3;22674:19;;22667:49;22783:4;22768:20;;22761:36;;;22813:18;;;22806:34;;;13548:72:0::1;::::0;22748:3:1;22733:19;13548:72:0::1;;;;;;;13301:327:::0;;:::o;7536:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7536:45:0;;-1:-1:-1;7536:45:0;;-1:-1:-1;7536:45:0:o;21028:104::-;8625:10;8607:29;;;;:17;:29;;;;;;;;:71;;;;-1:-1:-1;8640:5:0;;;:38;;-1:-1:-1;;;8640:38:0;;-1:-1:-1;;;;;;;;;;;8640:38:0;;;20497:25:1;;;;8667:10:0;20538:18:1;;;20531:83;-1:-1:-1;;;;;8640:5:0;;:13;;20470:18:1;;8640:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8599:80;;;;;;21093:4:::1;::::0;:36:::1;::::0;;;;::::1;::::0;::::1;20287:25:1::0;;;-1:-1:-1;;;;;21093:4:0;;::::1;::::0;:27:::1;::::0;20260:18:1;;21093:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;12059:275:::0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;12185:1:::1;12159:23;:27;12151:36;;;::::0;::::1;;12198:22;:48:::0;;;12262:64:::1;::::0;;23979:21:1;;;24036:2;24016:18;;;24009:30;;;;24075:24;24070:2;24055:18;;24048:52;24167:4;24152:20;;24145:36;;;12262:64:0::1;::::0;24132:3:1;24117:19;12262:64:0::1;23767:420:1::0;13047:248:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;13133:5;::::1;:9:::0;;;;:26:::1;;-1:-1:-1::0;13154:5:0;::::1;;13146::::0;::::1;;:13;13133:26;:43;;;;-1:-1:-1::0;13171:5:0::1;::::0;::::1;;13163::::0;;::::1;;:13;13133:43;:60;;;;-1:-1:-1::0;13188:5:0;;::::1;;13180::::0;;::::1;;:13;13133:60;:77;;;;-1:-1:-1::0;13205:5:0;;::::1;;13197::::0;;::::1;;:13;13133:77;13125:86;;;::::0;::::1;;13222:22;:17;13242:2:::0;13222:22:::1;;:::i;:::-;;13260:27;13284:2;13260:27;;;;;;:::i;9564:273::-:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;9645:5:::1;::::0;;:36:::1;::::0;-1:-1:-1;;;9645:36:0;;-1:-1:-1;;;;;;;;;;;9645:36:0;;::::1;20497:25:1::0;;;;-1:-1:-1;;;;;20558:55:1;;;20538:18;;;20531:83;9645:5:0::1;::::0;:13:::1;::::0;20470:18:1;;9645:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9637:59;;;::::0;-1:-1:-1;;;9637:59:0;;25314:2:1;9637:59:0::1;::::0;::::1;25296:21:1::0;25353:2;25333:18;;;25326:30;25392:12;25372:18;;;25365:40;25422:18;;9637:59:0::1;25112:334:1::0;9637:59:0::1;-1:-1:-1::0;;;;;9715:22:0;::::1;9707:31;;;::::0;::::1;;-1:-1:-1::0;;;;;9749:27:0;::::1;;::::0;;;:17:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;9749:34:0::1;9779:4;9749:34;::::0;;9799:30;;12933:74:1;;;9799:30:0::1;::::0;12906:18:1;9799:30:0::1;12787:226:1::0;11075:219:0;8559:3;;-1:-1:-1;;;;;8559:3:0;8545:10;:17;8537:26;;;;;;-1:-1:-1;;;;;11152:24:0;::::1;11144:33;;;::::0;::::1;;11188:9;:43:::0;;-1:-1:-1;;;;;;11188:43:0::1;-1:-1:-1::0;;;;;11188:43:0;::::1;::::0;;::::1;::::0;;;11247:39:::1;::::0;;23063:21:1;;;23120:1;23100:18;;;23093:29;;;;23158:11;23153:2;23138:18;;23131:39;23237:4;23222:20;;23215:85;;;;11247:39:0::1;::::0;23202:3:1;23187:19;11247:39:0::1;22851:455:1::0;17108:292:0;17221:10;17234:5;:13;;17246:1;17234:13;;;17242:1;17234:13;17258:17;17278:27;;;:15;:27;;;;;17221:26;;;;;;-1:-1:-1;17327:5:0;:65;;17376:16;17365:1;17367:5;17365:8;;;;;;;:::i;:::-;;;:27;;;;:::i;:::-;17327:65;;;17346:16;17335:1;17337:5;17335:8;;;;;;;:::i;:::-;;;:27;;;;:::i;:::-;17316:1;17318:5;17316:8;;;;;;;:::i;:::-;;:76;-1:-1:-1;;;;;;17108:292:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:134:1;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:128::-;218:20;;247:28;218:20;247:28;:::i;286:863::-;338:5;386:6;374:9;369:3;365:19;361:32;358:52;;;406:1;403;396:12;358:52;428:22;;:::i;:::-;419:31;;473:29;492:9;473:29;:::i;:::-;466:5;459:44;563:2;552:9;548:18;535:32;530:2;523:5;519:14;512:56;628:2;617:9;613:18;600:32;595:2;588:5;584:14;577:56;693:2;682:9;678:18;665:32;660:2;653:5;649:14;642:56;759:3;748:9;744:19;731:33;725:3;718:5;714:15;707:58;826:3;815:9;811:19;798:33;792:3;785:5;781:15;774:58;865:36;896:3;885:9;881:19;865:36;:::i;:::-;859:3;852:5;848:15;841:61;963:3;952:9;948:19;935:33;929:3;922:5;918:15;911:58;988:3;1051:2;1040:9;1036:18;1023:32;1018:2;1011:5;1007:14;1000:56;;1075:3;1138:2;1127:9;1123:18;1110:32;1105:2;1098:5;1094:14;1087:56;;286:863;;;;:::o;1154:247::-;1213:6;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;1406:388::-;1474:6;1482;1535:2;1523:9;1514:7;1510:23;1506:32;1503:52;;;1551:1;1548;1541:12;1503:52;1590:9;1577:23;1609:31;1634:5;1609:31;:::i;:::-;1659:5;-1:-1:-1;1716:2:1;1701:18;;1688:32;1729:33;1688:32;1729:33;:::i;:::-;1781:7;1771:17;;;1406:388;;;;;:::o;1799:456::-;1876:6;1884;1892;1945:2;1933:9;1924:7;1920:23;1916:32;1913:52;;;1961:1;1958;1951:12;1913:52;2000:9;1987:23;2019:31;2044:5;2019:31;:::i;:::-;2069:5;-1:-1:-1;2126:2:1;2111:18;;2098:32;2139:33;2098:32;2139:33;:::i;:::-;1799:456;;2191:7;;-1:-1:-1;;;2245:2:1;2230:18;;;;2217:32;;1799:456::o;2260:315::-;2328:6;2336;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;2444:9;2431:23;2463:31;2488:5;2463:31;:::i;:::-;2513:5;2565:2;2550:18;;;;2537:32;;-1:-1:-1;;;2260:315:1:o;2580:450::-;2654:6;2662;2670;2723:2;2711:9;2702:7;2698:23;2694:32;2691:52;;;2739:1;2736;2729:12;2691:52;2778:9;2765:23;2797:31;2822:5;2797:31;:::i;:::-;2847:5;-1:-1:-1;2899:2:1;2884:18;;2871:32;;-1:-1:-1;2955:2:1;2940:18;;2927:32;2968:30;2927:32;2968:30;:::i;:::-;3017:7;3007:17;;;2580:450;;;;;:::o;3035:383::-;3112:6;3120;3128;3181:2;3169:9;3160:7;3156:23;3152:32;3149:52;;;3197:1;3194;3187:12;3149:52;3236:9;3223:23;3255:31;3280:5;3255:31;:::i;:::-;3305:5;3357:2;3342:18;;3329:32;;-1:-1:-1;3408:2:1;3393:18;;;3380:32;;3035:383;-1:-1:-1;;;3035:383:1:o;3423:452::-;3509:6;3517;3525;3533;3586:3;3574:9;3565:7;3561:23;3557:33;3554:53;;;3603:1;3600;3593:12;3554:53;3642:9;3629:23;3661:31;3686:5;3661:31;:::i;:::-;3711:5;3763:2;3748:18;;3735:32;;-1:-1:-1;3814:2:1;3799:18;;3786:32;;3865:2;3850:18;3837:32;;-1:-1:-1;3423:452:1;-1:-1:-1;;;3423:452:1:o;3880:894::-;3984:6;4037:3;4025:9;4016:7;4012:23;4008:33;4005:53;;;4054:1;4051;4044:12;4005:53;4103:7;4096:4;4085:9;4081:20;4077:34;4067:62;;4125:1;4122;4115:12;4067:62;4158:2;4152:9;4200:3;4192:6;4188:16;4270:6;4258:10;4255:22;4234:18;4222:10;4219:34;4216:62;4213:88;;;4281:18;;:::i;:::-;4317:2;4310:22;4352:6;4378:9;4417:3;4402:19;;4399:32;-1:-1:-1;4396:52:1;;;4444:1;4441;4434:12;4396:52;4466:1;4476:267;4490:4;4487:1;4484:11;4476:267;;;4563:3;4550:17;4580:31;4605:5;4580:31;:::i;:::-;4624:18;;4665:4;4689:12;;;;4721;;;;;4510:1;4503:9;4476:267;;;-1:-1:-1;4762:6:1;;3880:894;-1:-1:-1;;;;;3880:894:1:o;4779:253::-;4863:6;4916:3;4904:9;4895:7;4891:23;4887:33;4884:53;;;4933:1;4930;4923:12;4884:53;4973:7;4967:3;4956:9;4952:19;4949:32;4946:52;;;4994:1;4991;4984:12;4946:52;-1:-1:-1;5017:9:1;4779:253;-1:-1:-1;4779:253:1:o;5037:241::-;5093:6;5146:2;5134:9;5125:7;5121:23;5117:32;5114:52;;;5162:1;5159;5152:12;5114:52;5201:9;5188:23;5220:28;5242:5;5220:28;:::i;5283:245::-;5350:6;5403:2;5391:9;5382:7;5378:23;5374:32;5371:52;;;5419:1;5416;5409:12;5371:52;5451:9;5445:16;5470:28;5492:5;5470:28;:::i;5808:200::-;5900:6;5953:3;5941:9;5932:7;5928:23;5924:33;5921:53;;;5970:1;5967;5960:12;6013:1192;6103:6;6156:3;6144:9;6135:7;6131:23;6127:33;6124:53;;;6173:1;6170;6163:12;6124:53;6199:22;;:::i;:::-;6244:29;6263:9;6244:29;:::i;:::-;6237:5;6230:44;6334:2;6323:9;6319:18;6306:32;6301:2;6294:5;6290:14;6283:56;6399:2;6388:9;6384:18;6371:32;6366:2;6359:5;6355:14;6348:56;6464:2;6453:9;6449:18;6436:32;6431:2;6424:5;6420:14;6413:56;6530:3;6519:9;6515:19;6502:33;6496:3;6489:5;6485:15;6478:58;6569:36;6600:3;6589:9;6585:19;6569:36;:::i;:::-;6563:3;6552:15;;6545:61;6667:3;6652:19;;;6639:33;6622:15;;;6615:58;6734:3;6719:19;;;6706:33;6689:15;;;6682:58;6759:3;6807:18;;;6794:32;6778:14;;;6771:56;6846:3;6894:18;;;6881:32;6865:14;;;6858:56;6933:3;6981:18;;;6968:32;6952:14;;;6945:56;7020:3;7068:18;;;7055:32;7039:14;;;7032:56;7107:3;7155:18;;;7142:32;7126:14;;;7119:56;;;;-1:-1:-1;6556:5:1;6013:1192;-1:-1:-1;6013:1192:1:o;7210:867::-;7319:6;7327;7335;7379:9;7370:7;7366:23;7409:3;7405:2;7401:12;7398:32;;;7426:1;7423;7416:12;7398:32;7449:6;7475:2;7471;7467:11;7464:31;;;7491:1;7488;7481:12;7464:31;7517:17;;:::i;:::-;7504:30;;7557:43;7592:7;7581:9;7557:43;:::i;:::-;7543:58;;7663:3;7648:19;;7635:33;7628:4;7617:16;;7610:59;7731:3;7716:19;;7703:33;7696:4;7685:16;;7678:59;7799:3;7784:19;;7771:33;7764:4;7753:16;;7746:59;7867:3;7852:19;;7839:33;7832:4;7821:16;;7814:59;7935:3;7920:19;;7907:33;7900:4;7889:16;;7882:59;7550:5;;-1:-1:-1;7997:18:1;;7984:32;;-1:-1:-1;8035:36:1;8066:3;8051:19;;8035:36;:::i;:::-;8025:46;;7210:867;;;;;:::o;8082:971::-;8182:6;8190;8234:9;8225:7;8221:23;8264:3;8260:2;8256:12;8253:32;;;8281:1;8278;8271:12;8253:32;8305:4;8301:2;8297:13;8294:33;;;8323:1;8320;8313:12;8294:33;;8349:17;;:::i;:::-;8403:9;8390:23;8422:33;8447:7;8422:33;:::i;:::-;8464:22;;8546:2;8531:18;;;8518:32;8502:14;;;8495:56;8603:2;8588:18;;8575:32;8616:33;8575:32;8616:33;:::i;:::-;8681:7;8676:2;8669:5;8665:14;8658:31;;8749:2;8738:9;8734:18;8721:32;8716:2;8709:5;8705:14;8698:56;8815:3;8804:9;8800:19;8787:33;8781:3;8774:5;8770:15;8763:58;8873:3;8862:9;8858:19;8845:33;8909:1;8900:7;8897:14;8887:42;;8925:1;8922;8915:12;8887:42;8956:3;8945:15;;8938:32;8949:5;9041:4;9026:20;;;;9013:34;;-1:-1:-1;;;8082:971:1:o;9058:223::-;9139:6;9192:3;9180:9;9171:7;9167:23;9163:33;9160:53;;;9209:1;9206;9199:12;9160:53;9232:43;9267:7;9256:9;9232:43;:::i;9286:866::-;9402:6;9410;9454:9;9445:7;9441:23;9484:3;9480:2;9476:12;9473:32;;;9501:1;9498;9491:12;9473:32;9524:43;9559:7;9548:9;9524:43;:::i;:::-;9514:53;-1:-1:-1;9602:4:1;-1:-1:-1;;9583:17:1;;9579:28;9576:48;;;9620:1;9617;9610:12;9576:48;;9646:17;;:::i;:::-;9714:3;9703:9;9699:19;9686:33;9679:5;9672:48;9780:3;9769:9;9765:19;9752:33;9747:2;9740:5;9736:14;9729:57;9846:3;9835:9;9831:19;9818:33;9813:2;9806:5;9802:14;9795:57;9912:3;9901:9;9897:19;9884:33;9879:2;9872:5;9868:14;9861:57;9979:3;9968:9;9964:19;9951:33;9945:3;9938:5;9934:15;9927:58;10037:3;10026:9;10022:19;10009:33;10051:30;10073:7;10051:30;:::i;:::-;10108:3;10097:15;;10090:32;9286:866;;10101:5;;-1:-1:-1;9286:866:1;;-1:-1:-1;;9286:866:1:o;10157:180::-;10216:6;10269:2;10257:9;10248:7;10244:23;10240:32;10237:52;;;10285:1;10282;10275:12;10237:52;-1:-1:-1;10308:23:1;;10157:180;-1:-1:-1;10157:180:1:o;10342:184::-;10412:6;10465:2;10453:9;10444:7;10440:23;10436:32;10433:52;;;10481:1;10478;10471:12;10433:52;-1:-1:-1;10504:16:1;;10342:184;-1:-1:-1;10342:184:1:o;10531:309::-;10596:6;10604;10657:2;10645:9;10636:7;10632:23;10628:32;10625:52;;;10673:1;10670;10663:12;10625:52;10709:9;10696:23;10686:33;;10769:2;10758:9;10754:18;10741:32;10782:28;10804:5;10782:28;:::i;10845:248::-;10913:6;10921;10974:2;10962:9;10953:7;10949:23;10945:32;10942:52;;;10990:1;10987;10980:12;10942:52;-1:-1:-1;;11013:23:1;;;11083:2;11068:18;;;11055:32;;-1:-1:-1;10845:248:1:o;11098:513::-;11178:6;11186;11194;11202;11255:3;11243:9;11234:7;11230:23;11226:33;11223:53;;;11272:1;11269;11262:12;11223:53;11308:9;11295:23;11285:33;;11365:2;11354:9;11350:18;11337:32;11327:42;;11419:2;11408:9;11404:18;11391:32;11432:28;11454:5;11432:28;:::i;:::-;11479:5;-1:-1:-1;11536:2:1;11521:18;;11508:32;11549:30;11508:32;11549:30;:::i;:::-;11098:513;;;;-1:-1:-1;11098:513:1;;-1:-1:-1;;11098:513:1:o;11844:938::-;11931:12;;-1:-1:-1;;;;;11682:54:1;11670:67;;11998:4;11991:5;11987:16;11981:23;11974:4;11969:3;11965:14;11958:47;12054:4;12047:5;12043:16;12037:23;12030:4;12025:3;12021:14;12014:47;12110:4;12103:5;12099:16;12093:23;12086:4;12081:3;12077:14;12070:47;12166:4;12159:5;12155:16;12149:23;12142:4;12137:3;12133:14;12126:47;12219:4;12212:5;12208:16;12202:23;12234:45;12273:4;12268:3;12264:14;12250:12;11818:13;11811:21;11799:34;;11748:91;12234:45;-1:-1:-1;12328:4:1;12317:16;;;12311:23;12295:14;;;12288:47;12384:4;12373:16;;;12367:23;12351:14;;;12344:47;12410:6;12452:14;;;12446:21;12432:12;;;12425:43;12487:6;12529:14;;;12523:21;12509:12;;;12502:43;12564:6;12606:14;;;12600:21;12586:12;;;12579:43;12641:6;12683:14;;;12677:21;12663:12;;;12656:43;12718:6;12760:14;;;12754:21;12740:12;;12733:43;11844:938::o;13723:836::-;-1:-1:-1;;;;;14101:15:1;;;14083:34;;14148:2;14133:18;;14126:34;;;14196:15;;14191:2;14176:18;;14169:43;14243:2;14228:18;;14221:34;;;14286:3;14271:19;;14264:35;;;14009:3;13994:19;;14329:1;14318:13;;14308:201;;-1:-1:-1;;;14362:1:1;14355:88;14466:4;14463:1;14456:15;14494:4;14491:1;14484:15;14308:201;14546:6;14540:3;14529:9;14525:19;14518:35;13723:836;;;;;;;;;:::o;16560:681::-;16731:2;16783:21;;;16853:13;;16756:18;;;16875:22;;;16702:4;;16731:2;16954:15;;;;16928:2;16913:18;;;16702:4;16997:218;17011:6;17008:1;17005:13;16997:218;;;17076:13;;-1:-1:-1;;;;;17072:62:1;17060:75;;17190:15;;;;17155:12;;;;17033:1;17026:9;16997:218;;;-1:-1:-1;17232:3:1;;16560:681;-1:-1:-1;;;;;;16560:681:1:o;17246:566::-;17448:3;17433:19;;17437:9;17529:6;17406:4;17563:243;17577:4;17574:1;17571:11;17563:243;;;17640:13;;-1:-1:-1;;;;;17636:62:1;17624:75;;17722:4;17746:12;;;;17781:15;;;;17597:1;17590:9;17563:243;;;17567:3;;;17246:566;;;;:::o;17817:724::-;18050:2;18102:21;;;18172:13;;18075:18;;;18194:22;;;18021:4;;18050:2;18273:15;;;;18247:2;18232:18;;;18021:4;18316:199;18330:6;18327:1;18324:13;18316:199;;;18379:52;18427:3;18418:6;18412:13;18379:52;:::i;:::-;18490:15;;;;18460:6;18451:16;;;;;18352:1;18345:9;18316:199;;18546:261;18728:3;18713:19;;;;18765:6;18717:9;18741:36;18799:1;18793:4;18786:15;18546:261;;;;:::o;18812:495::-;18992:3;18977:19;;18981:9;19073:6;18950:4;19107:194;19121:4;19118:1;19115:11;19107:194;;;19180:13;;19168:26;;19217:4;19241:12;;;;19276:15;;;;19141:1;19134:9;19107:194;;19312:632;19483:2;19535:21;;;19605:13;;19508:18;;;19627:22;;;19454:4;;19483:2;19706:15;;;;19680:2;19665:18;;;19454:4;19749:169;19763:6;19760:1;19757:13;19749:169;;;19824:13;;19812:26;;19893:15;;;;19858:12;;;;19785:1;19778:9;19749:169;;30130:266;30326:3;30311:19;;30339:51;30315:9;30372:6;30339:51;:::i;:::-;30130:266;;;;:::o;30401:1260::-;30751:13;;-1:-1:-1;;;;;11682:54:1;11670:67;;30719:3;30704:19;;30832:4;30824:6;30820:17;30814:24;30807:4;30796:9;30792:20;30785:54;30895:4;30887:6;30883:17;30877:24;30870:4;30859:9;30855:20;30848:54;30958:4;30950:6;30946:17;30940:24;30933:4;30922:9;30918:20;30911:54;31021:4;31013:6;31009:17;31003:24;30996:4;30985:9;30981:20;30974:54;31084:4;31076:6;31072:17;31066:24;31059:4;31048:9;31044:20;31037:54;31138:4;31130:6;31126:17;31120:24;31153:51;31198:4;31187:9;31183:20;31169:12;11818:13;11811:21;11799:34;;11748:91;31153:51;-1:-1:-1;31260:4:1;31248:17;;;31242:24;31220:20;;;31213:54;31286:6;31334:15;;;31328:22;31308:18;;;31301:50;31370:6;31418:15;;;31412:22;31392:18;;;31385:50;;;;31466:3;31451:19;;31444:35;;;;31510:3;31495:19;;31488:35;;;;31554:3;31539:19;;31532:35;;;;31598:3;31583:19;;31576:35;31642:3;31627:19;;;31620:35;30401:1260;:::o;33024:255::-;33096:2;33090:9;33138:6;33126:19;;33175:18;33160:34;;33196:22;;;33157:62;33154:88;;;33222:18;;:::i;:::-;33258:2;33251:22;33024:255;:::o;33284:252::-;33356:2;33350:9;33398:3;33386:16;;33432:18;33417:34;;33453:22;;;33414:62;33411:88;;;33479:18;;:::i;33541:248::-;33608:2;33602:9;33650:4;33638:17;;33685:18;33670:34;;33706:22;;;33667:62;33664:88;;;33732:18;;:::i;33794:128::-;33834:3;33865:1;33861:6;33858:1;33855:13;33852:39;;;33871:18;;:::i;:::-;-1:-1:-1;33907:9:1;;33794:128::o;33927:274::-;33967:1;33993;33983:189;;-1:-1:-1;;;34025:1:1;34018:88;34129:4;34126:1;34119:15;34157:4;34154:1;34147:15;33983:189;-1:-1:-1;34186:9:1;;33927:274::o;34206:168::-;34246:7;34312:1;34308;34304:6;34300:14;34297:1;34294:21;34289:1;34282:9;34275:17;34271:45;34268:71;;;34319:18;;:::i;:::-;-1:-1:-1;34359:9:1;;34206:168::o;34379:125::-;34419:4;34447:1;34444;34441:8;34438:34;;;34452:18;;:::i;:::-;-1:-1:-1;34489:9:1;;34379:125::o;34509:136::-;34548:3;34576:5;34566:39;;34585:18;;:::i;:::-;-1:-1:-1;;;34621:18:1;;34509:136::o;34650:135::-;34689:3;-1:-1:-1;;34710:17:1;;34707:43;;;34730:18;;:::i;:::-;-1:-1:-1;34777:1:1;34766:13;;34650:135::o;34790:184::-;-1:-1:-1;;;34839:1:1;34832:88;34939:4;34936:1;34929:15;34963:4;34960:1;34953:15;34979:184;-1:-1:-1;;;35028:1:1;35021:88;35128:4;35125:1;35118:15;35152:4;35149:1;35142:15;35168:184;-1:-1:-1;;;35217:1:1;35210:88;35317:4;35314:1;35307:15;35341:4;35338:1;35331:15;35357:184;-1:-1:-1;;;35406:1:1;35399:88;35506:4;35503:1;35496:15;35530:4;35527:1;35520:15;35546:184;-1:-1:-1;;;35595:1:1;35588:88;35695:4;35692:1;35685:15;35719:4;35716:1;35709:15;35735:154;-1:-1:-1;;;;;35814:5:1;35810:54;35803:5;35800:65;35790:93;;35879:1;35876;35869:12;35894:118;35980:5;35973:13;35966:21;35959:5;35956:32;35946:60;;36002:1;35999;35992:12

Swarm Source

ipfs://80136f00e3bf01f7f59f1ff4ab44ef6febae106cb1618df120e029a5f92817fb

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.