Contract 0x96059f17be7d2e59406be75e77e23c128141672e 2

 
Ad
Ad
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xae4b66c2539c3fb2e285cf20f275cf3cce1902f7be00aac056527db874cfa49dClose Trade Mark...220630072021-12-02 20:58:591 min ago0x37280fa8243bee40660389d730429f8c318d45f4 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.554051784
0x7f001c6d613286332fd46beb3b83baa97ff16499062ed0f70185bd4951f4ed5c0x9b0a24e2220629562021-12-02 20:56:353 mins ago0x8a67c9f45f9cc67421fae41ab550d5d88625d9d6 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.11847924
0x32600a2800ceaaa5b65ea569a7aa6fec9701cb7e1c85141951b16e2d224d9dedUpdate Sl220629512021-12-02 20:56:153 mins ago0x37280fa8243bee40660389d730429f8c318d45f4 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.035087632
0x532a75961650484df738ef609cb4502a167e5601480ccdad3c5bae2313353908Close Trade Mark...220629462021-12-02 20:55:554 mins ago0xf0ec0bb719237a738047215aabdd746bf967f7c7 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.499116618
0x47bec55f3dc7e3567744956df962893ce6a9d608de32552126babe07043f650eExecute Nft Orde...220628832021-12-02 20:52:357 mins ago0x34a9ab9068e4890e634699ac68b7749a02347ed3 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.173802588534
0xaf8e982db64b0301965c8f81493555ae5166cddafbb6dc69678f59090fa85915Execute Nft Orde...220628832021-12-02 20:52:357 mins ago0x80a7f2851f478affad04d6d312e7fea21a611299 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.173803646433
0x53381c8bbf7dcb6abca150ee3880f99342b59a57fb55e4f9eb90b791ebc3464a0x9b0a24e2220628782021-12-02 20:52:257 mins ago0xe4fd4de76c36b403776815ff80078e6e9642923f IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.599592
0x2f3f51026d7fd252c7bf9b367a32ba615b1f6a39f6f341d3c46f70738cf909120x9b0a24e2220628382021-12-02 20:50:439 mins ago0x187c962bd475e1943da7649459f8771f437bd8b7 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.07914232
0x79aab65e7e6a69060e2cd60c0c9812939380fa9178629b72f84c297100567afbClose Trade Mark...220628362021-12-02 20:50:359 mins ago0x8a67c9f45f9cc67421fae41ab550d5d88625d9d6 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.13711995
0x39c6488ca0272b0b6acb000f06c70bd1b640df10abf55b981688e8fc75d1a61a0x9b0a24e2220628172021-12-02 20:49:1910 mins ago0x8a67c9f45f9cc67421fae41ab550d5d88625d9d6 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.34567384
0x15eab8266eeced4e94bf1c1d0857f55adb5a472d029aa07b1bfd07d25de13a5c0x9b0a24e2220628112021-12-02 20:48:5511 mins ago0x37280fa8243bee40660389d730429f8c318d45f4 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.52560024
0x2f0984681814bb756b95a1c74c5cb955d19a4134d2e740d4e338de129b95b858Close Trade Mark...220627722021-12-02 20:46:3713 mins ago0x8a67c9f45f9cc67421fae41ab550d5d88625d9d6 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.17557691
0x13529ce584f49b7a83ecda5a318c2a0cc5f1d216b1c04745d6311f19b4676fd6Close Trade Mark...220627482021-12-02 20:45:4914 mins ago0xa7e2b78ea7cb8e431b96dbf1b95c01dfea93793b IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.513742746
0xd7487929032abe50654dd6854b0dd243d52e8ae626587ecefef35d98d95c1558Update Tp220627152021-12-02 20:44:3915 mins ago0xc9080ab325dc625eeeb34229ac0c0c417b165a34 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.025433343
0x0435d1ff808d16a502d8891373fbfbd0752fc9e66dd7d5d9d47ff2bcfd0c1c250x9b0a24e2220626782021-12-02 20:43:2516 mins ago0xc9080ab325dc625eeeb34229ac0c0c417b165a34 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.55955872
0x49892971d81bb16738f3425b9a75a3d7105c5d626050595348573b2e327fd80aExecute Nft Orde...220626152021-12-02 20:41:1518 mins ago0x192c580e6ed425bff9f3b372868c30df7e2548ce IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.014507805
0xa115e4e25b2f6e3b7a82de38e13eebde89a34c18f374f4b7d544b2cb721cc518Execute Nft Orde...220626112021-12-02 20:41:0718 mins ago0x192c580e6ed425bff9f3b372868c30df7e2548ce IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.352979241
0x188b7da31a22d21b23e5cf0bc05c986199612af26e5cc6f6d08a138eabff2db90x9b0a24e2220626062021-12-02 20:40:5719 mins ago0x945de57f58df6b68409e1cd863ae7b8c3f50c9c4 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.124620904
0xf2e1d9ee36c17b0b03c96285fdd3ffcb4a9e3824b54b0b3c08775a9afd92489bClose Trade Mark...220625272021-12-02 20:38:1121 mins ago0xe6c4591b6f51d80b8558c4d3cd68b6ce0fe030cb IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.05970834
0xfbf6af9d1a84017cba7bb75eb088930dbb1fae529816011d89f74b2e589875be0x9b0a24e2220623522021-12-02 20:32:1327 mins ago0xa7e2b78ea7cb8e431b96dbf1b95c01dfea93793b IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.5458008
0xfe0299b63c79628c213615cd0e90fff727fc356e682d064dbbaad75011379e7aExecute Nft Orde...220623332021-12-02 20:31:3128 mins ago0x441b28825a6f931f9bb8222520da86c72c765955 IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.0985738
0x872dd503821c585f1ed525c1cc4d97238f45d6e4d8355db80d93e989eeff9a7aExecute Nft Orde...220623332021-12-02 20:31:3128 mins ago0xa2b008e53bf0dee2705e1a36595408a9f0ed03be IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.0985738
0xaafc7b6f229dd13ea4de14b1bae2b68642cab01128e33a5c99f38005c4815a50Execute Nft Orde...220623332021-12-02 20:31:3128 mins ago0x876f60b5503b8e2931b35ac83da7c0bffee75d4b IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.0985738
0xe6312127cd2e30cefbbce43ad95fb468e53bd397053f77195851d1dc88d2a638Execute Nft Orde...220623322021-12-02 20:31:2928 mins ago0x192c580e6ed425bff9f3b372868c30df7e2548ce IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.348951252
0x410d3edd7d1e9223a51c2a51dcd6e35062653f1fbb68dfcfac3f982748b3b829Execute Nft Orde...220623132021-12-02 20:30:5129 mins ago0x192c580e6ed425bff9f3b372868c30df7e2548ce IN  0x96059f17be7d2e59406be75e77e23c128141672e0 MATIC0.348951252
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GFarmTradingV5

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\UniswapRouterInterfaceV5.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

interface UniswapRouterInterfaceV5{
	function swapExactTokensForTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);

	function swapTokensForExactTokens(
		uint amountOut,
		uint amountInMax,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);
}

// 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\TokenInterfaceV5.sol

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\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\VaultInterfaceV5.sol

pragma solidity 0.8.7;

interface VaultInterfaceV5{
	function sendDaiToTrader(address, uint) external;
}

// File: contracts\interfaces\StorageInterfaceV5.sol

pragma solidity 0.8.7;






interface StorageInterfaceV5{
    enum LimitOrder { TP, SL, LIQ, OPEN }
    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;
    }
    function PRECISION() external pure returns(uint);
    function gov() external view returns(address);
    function dev() external view returns(address);
    function dai() external view returns(TokenInterfaceV5);
    function token() external view returns(TokenInterfaceV5);
    function linkErc677() external view returns(TokenInterfaceV5);
    function tokenDaiRouter() external view returns(UniswapRouterInterfaceV5);
    function priceAggregator() external view returns(AggregatorInterfaceV5);
    function vault() external view returns(VaultInterfaceV5);
    function trading() external view returns(address);
    function callbacks() external view returns(address);
    function handleTokens(address,uint,bool) external;
    function transferDai(address, address, uint) external;
    function transferLinkToAggregator(address, uint, uint) external;
    function unregisterTrade(address, uint, uint) external;
    function unregisterPendingMarketOrder(uint, bool) external;
    function unregisterOpenLimitOrder(address, uint, uint) external;
    function hasOpenLimitOrder(address, uint, uint) external view returns(bool);
    function storePendingMarketOrder(PendingMarketOrder memory, uint, bool) external;
    function storeReferral(address, address) external;
    function openTrades(address, uint, uint) external view returns(Trade memory);
    function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory);
    function updateSl(address, uint, uint, uint) external;
    function updateTp(address, uint, uint, uint) external;
    function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory);
    function spreadReductionsP(uint) external view returns(uint);
    function positionSizeTokenDynamic(uint,uint) external view returns(uint);
    function maxSlP() external view returns(uint);
    function storeOpenLimitOrder(OpenLimitOrder memory) external;
    function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory);
    function storePendingNftOrder(PendingNftOrder memory, uint) external;
    function updateOpenLimitOrder(OpenLimitOrder calldata) external;
    function firstEmptyTradeIndex(address, uint) external view returns(uint);
    function firstEmptyOpenLimitIndex(address, uint) external view returns(uint);
    function increaseNftRewards(uint, uint) external;
    function nftSuccessTimelock() external view returns(uint);
    function currentPercentProfit(uint,uint,bool,uint) external view returns(int);
    function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory);
    function setNftLastSuccess(uint) external;
    function updateTrade(Trade memory) external;
    function nftLastSuccess(uint) external view returns(uint);
    function unregisterPendingNftOrder(uint) external;
    function handleDevGovFees(uint, uint, bool, bool) external returns(uint);
    function distributeLpRewards(uint) external;
    function getReferral(address) external view returns(address);
    function increaseReferralRewards(address, uint) external;
    function storeTrade(Trade memory, TradeInfo memory) external;
    function setLeverageUnlocked(address, uint) external;
    function getLeverageUnlocked(address) external view returns(uint);
    function openLimitOrdersCount(address, uint) external view returns(uint);
    function maxOpenLimitOrdersPerPair() external view returns(uint);
    function openTradesCount(address, uint) external view returns(uint);
    function pendingMarketOpenCount(address, uint) external view returns(uint);
    function pendingMarketCloseCount(address, uint) external view returns(uint);
    function maxTradesPerPair() external view returns(uint);
    function maxTradesPerBlock() external view returns(uint);
    function tradesPerBlock(uint) external view returns(uint);
    function pendingOrderIdsCount(address) external view returns(uint);
    function maxPendingMarketOrders() external view returns(uint);
    function maxGainP() external view returns(uint);
    function defaultLeverageUnlocked() external view returns(uint);
    function openInterestDai(uint, uint) external view returns(uint);
    function getPendingOrderIds(address) external view returns(uint[] memory);
    function traders(address) external view returns(Trader memory);
    function nfts(uint) external view returns(NftInterfaceV5);
}

// File: contracts\GFarmTradingV5.sol


pragma solidity 0.8.7;

contract GFarmTradingV5{

    // Is contract active
    bool public isPaused;

    // Trading storage
    StorageInterfaceV5 public storageT;

    // Variables (specific to this implementation)
    uint public maxPosDaiP = 0.3 * 1e10;                 // PRECISION (%)
    uint public minPosDai = 35 * 1e18;                   // 1e18 ($)
    uint public limitOrdersTimelock = 30;                // block
    uint public orderTimeout = 50;                       // block

    // Events
    event Pause(bool paused);
    event NumberUpdated(string name, uint value);
    event AddressUpdated(string name, address a);
    event MarketOrderInitiated(address trader, uint pairIndex, bool open, uint orderId);
    event NftOrderInitiated(address nftHolder, address trader, uint pairIndex, uint orderId);
    event OpenLimitPlaced(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event OpenLimitCanceled(address indexed trader, uint indexed pairIndex, uint index);
    event TpUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event SlUpdated(address indexed trader, uint indexed pairIndex, uint index);
    event ChainlinkCallbackTimeout(uint orderId, StorageInterfaceV5.PendingMarketOrder order);
    event CouldNotCloseTrade(address indexed trader, uint indexed pairIndex, uint index, string message);

    constructor(StorageInterfaceV5 _storageT) {
        require(address(_storageT) != address(0));
        storageT = _storageT;
    }

    // 1. MANAGE STATE

    // Modifiers
    modifier onlyGov(){ require(msg.sender == storageT.gov(), "GOV_ONLY"); _; }

    // Manage trading storage address
    // CAREFUL: IF ADDRESS WRONG, CONTRACT CAN BE STUCK
    function setStorageT(StorageInterfaceV5 _storageT) external onlyGov{
        require(_storageT.gov() == storageT.gov());
        storageT = _storageT;
        emit AddressUpdated("storageT", address(_storageT));
    }

    // Prevent doing anything => during contracts update
    function pause() external onlyGov{ isPaused = !isPaused; emit Pause(isPaused); }

    // Manage variables
    function setMaxPosDaiP(uint _maxP) external onlyGov{
        require(_maxP > 0);
        maxPosDaiP = _maxP;
        emit NumberUpdated("maxPosDaiP", _maxP);
    }
    function setMinPosDai(uint _min) external onlyGov{
        require(_min > 0);
        minPosDai = _min;
        emit NumberUpdated("minPosDai", _min);
    }
    function setLimitOrdersTimelock(uint _blocks) external onlyGov{
        require(_blocks > 0);
        limitOrdersTimelock = _blocks;
        emit NumberUpdated("limitOrdersTimelock", _blocks);
    }
    function setOrderTimeout(uint _orderTimeout) external onlyGov{
        require(_orderTimeout > 0);
        orderTimeout = _orderTimeout;
        emit NumberUpdated("orderTimeout", _orderTimeout);
    }

    // 2. EXTERNAL TRADING FUNCTIONS

    // Modifiers
    modifier notContract(){ require(tx.origin == msg.sender); _; }
    modifier notPaused(){ require(!isPaused, "PAUSED"); _; }

    // Open a new trade (market or limit)
    function openTrade(
        StorageInterfaceV5.Trade memory t,
        bool _limit,
        uint _spreadReductionId,
        uint _slippageP,
        address _referral
    ) external notContract notPaused{

        require(storageT.openTradesCount(msg.sender, t.pairIndex) + storageT.pendingMarketOpenCount(msg.sender, t.pairIndex) 
            + storageT.openLimitOrdersCount(msg.sender, t.pairIndex) < storageT.maxTradesPerPair(), 
            "MAX_TRADES_PER_PAIR");
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        (, uint _reserveDai) = storageT.priceAggregator().tokenDaiReservesLp();
        require(t.positionSizeDai <= _reserveDai*maxPosDaiP/100/storageT.PRECISION(), 
            "ABOVE_MAX_POS");
        require(t.positionSizeDai >= minPosDai, "BELOW_MIN_POS");
        require(t.leverage > 0 && t.leverage >= storageT.priceAggregator().pairMinLeverage(t.pairIndex) 
            && t.leverage <= storageT.priceAggregator().pairMaxLeverage(t.pairIndex), 
            "LEVERAGE_INCORRECT");
        require(t.leverage <= storageT.defaultLeverageUnlocked() || t.leverage <= storageT.getLeverageUnlocked(msg.sender),
            "LEVERAGE_NOT_UNLOCKED");
        require(_spreadReductionId == 0 || storageT.nfts(_spreadReductionId-1).balanceOf(msg.sender) > 0,
            "NO_CORRESPONDING_NFT_SPREAD_REDUCTION");
        require(t.positionSizeDai * t.leverage + storageT.openInterestDai(t.pairIndex, t.buy ? 0 : 1) 
            <= storageT.openInterestDai(t.pairIndex, 2), "MAX_OPEN_INTEREST");
        require(t.tp == 0 || t.buy && t.openPrice < t.tp || !t.buy && t.openPrice > t.tp, "WRONG_TP");
        require(t.sl == 0 || t.buy && t.openPrice > t.sl || !t.buy && t.openPrice < t.sl, "WRONG_SL");

        storageT.transferDai(msg.sender, address(storageT), t.positionSizeDai);

        if(_limit){
            require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(t.pairIndex),
                "SLIPPAGE_TOO_SMALL");

            uint slip = t.openPrice*_slippageP/storageT.PRECISION()/100;
            uint index = storageT.firstEmptyOpenLimitIndex(msg.sender, t.pairIndex);

            storageT.storeOpenLimitOrder(StorageInterfaceV5.OpenLimitOrder(
                msg.sender,
                t.pairIndex,
                index,
                t.positionSizeDai,
                _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                t.buy,
                t.leverage,
                t.tp,
                t.sl,
                t.buy ? t.openPrice - slip : t.openPrice,
                t.buy ? t.openPrice : t.openPrice + slip,
                block.number,
                0
            ));

            emit OpenLimitPlaced(msg.sender, t.pairIndex, index);
        }else{
            uint order = storageT.priceAggregator().getPrice(
                t.pairIndex, 
                AggregatorInterfaceV5.OrderType.MARKET_OPEN, 
                t.positionSizeDai * t.leverage
            );

            storageT.storePendingMarketOrder(
                StorageInterfaceV5.PendingMarketOrder(
                    StorageInterfaceV5.Trade(
                        msg.sender,
                        t.pairIndex,
                        0, 0,
                        t.positionSizeDai,
                        0, 
                        t.buy,
                        t.leverage,
                        t.tp,
                        t.sl
                    ),
                    0,
                    t.openPrice,
                    _slippageP,
                    _spreadReductionId > 0 ? storageT.spreadReductionsP(_spreadReductionId-1) : 0,
                    0
                ), order, true
            );

            emit MarketOrderInitiated(msg.sender, t.pairIndex, true, order);
        }

        storageT.storeReferral(msg.sender, _referral);
    }

    // Update open limit order
    function updateOpenLimitOrder(
        uint _pairIndex, 
        uint _index, 
        uint _price,        // PRECISION
        uint _slippageP,    // PRECISION,
        uint _tp,
        uint _sl
    ) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");
        require(_slippageP >= storageT.priceAggregator().pairMinOpenLimitSlippageP(_pairIndex), 
            "MIN_LIMIT_SLIPPAGE_P");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, 
            "LIMIT_TIMELOCK");

        require(_tp == 0 || o.buy && _price < _tp || !o.buy && _price > _tp, "WRONG_TP");
        require(_sl == 0 || o.buy && _price > _sl || !o.buy && _price < _sl, "WRONG_SL");

        uint slip = _price*_slippageP/storageT.PRECISION()/100;
        o.minPrice = o.buy ? _price - slip : _price;
        o.maxPrice = o.buy ? _price : _price + slip;
        o.tp = _tp;
        o.sl = _sl;

        storageT.updateOpenLimitOrder(o);

        emit OpenLimitUpdated(msg.sender, _pairIndex, _index);
    }

    // Cancel open limit order
    function cancelOpenLimitOrder(uint _pairIndex, uint _index) external notContract notPaused{

        require(storageT.hasOpenLimitOrder(msg.sender, _pairIndex, _index), "NO_LIMIT");

        StorageInterfaceV5.OpenLimitOrder memory o = storageT.getOpenLimitOrder(msg.sender, _pairIndex, _index);
        require(block.number - o.block >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.transferDai(address(storageT), msg.sender, o.positionSize);

        storageT.unregisterOpenLimitOrder(msg.sender, _pairIndex, _index);
        emit OpenLimitCanceled(msg.sender, _pairIndex, _index);
    }

    // Update take profit for an open trade
    // Set to 0 to remove
    // Can be set in loss (for example exit long on a bounce even if in loss)
    // If long and tp is below current price => can be closed instantly
    // If short and tp is above current price => can be closed instantly
    function updateTp(uint _pairIndex, uint _index, uint _newTp) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);

        require(t.leverage > 0, "NO_TRADE");
        require(block.number - i.tpLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");

        storageT.updateTp(msg.sender, _pairIndex, _index, _newTp);

        emit TpUpdated(msg.sender, _pairIndex, _index);
    }

    // Update stop loss for an open trade
    // Set to 0 to remove
    // If long and sl is above current price => can be closed instantly
    // If short and sl is below current price => can be closed instantly
    // Can be set in profit = stop profit
    // must be above -STOP_LOSS_P profit => if liq at -90% => above -80%
    // otherwise can set at -89% and earn 11% of position size while at -90% liquidation earns 0 to trader
    function updateSl(uint _pairIndex, uint _index, uint _newSl) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(t.leverage > 0, "NO_TRADE");

        uint maxSlDist = t.openPrice * storageT.maxSlP() / 100 / t.leverage;
        require(_newSl == 0 || t.buy && _newSl >= t.openPrice - maxSlDist 
            || !t.buy && _newSl <= t.openPrice + maxSlDist, "SL_TOO_BIG");
        require(block.number - i.slLastUpdated >= limitOrdersTimelock, "LIMIT_TIMELOCK");
        
        storageT.updateSl(msg.sender, _pairIndex, _index, _newSl);

        emit SlUpdated(msg.sender, _pairIndex, _index);
    }

    // Close open trade at current price
    function closeTradeMarket(uint _pairIndex, uint _index) external notContract notPaused{
        
        StorageInterfaceV5.Trade memory t = storageT.openTrades(msg.sender, _pairIndex, _index);
        StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(msg.sender, _pairIndex, _index);
        require(storageT.tradesPerBlock(block.number) < storageT.maxTradesPerBlock(), 
            "MAX_TRADES_PER_BLOCK");
        require(storageT.pendingOrderIdsCount(msg.sender) < storageT.maxPendingMarketOrders(), 
            "MAX_PENDING_ORDERS");
        require(!i.beingMarketClosed, "ALREADY_BEING_CLOSED");
        require(t.leverage > 0, "NO_TRADE");

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            AggregatorInterfaceV5.OrderType.MARKET_CLOSE, 
            t.initialPosToken * t.leverage * i.tokenPriceDai / storageT.PRECISION()
        );

        storageT.storePendingMarketOrder(StorageInterfaceV5.PendingMarketOrder(
            StorageInterfaceV5.Trade(
                msg.sender,
                _pairIndex,
                _index,
                0, 0, 0, false, 0, 0, 0
            ),
            0, 0, 0, 0, 0
        ), order, false);
        emit MarketOrderInitiated(msg.sender, _pairIndex, false, order);
    }

    // Try to execute a tp, sl, liquidation, or limit long/short (only done by NFT holders)
    function executeNftOrder(
        StorageInterfaceV5.LimitOrder _orderType, 
        address _trader, 
        uint _pairIndex, 
        uint _index,
        uint _nftId, 
        uint _nftType
    ) external notContract notPaused{

        StorageInterfaceV5.Trade memory t = storageT.openTrades(_trader, _pairIndex, _index);
        require(_nftType > 0 && _nftType < 6, "WRONG_NFT_TYPE");
        require(msg.sender == storageT.gov() || storageT.nfts(_nftType-1).ownerOf(_nftId) == msg.sender,
            "NO_NFT");
        require(block.number >= storageT.nftLastSuccess(_nftId)+storageT.nftSuccessTimelock(),
            "SUCCESS_TIMELOCK");
        require(_orderType != StorageInterfaceV5.LimitOrder.OPEN || storageT.hasOpenLimitOrder(_trader, _pairIndex, _index), 
            "NO_LIMIT");
        require(_orderType == StorageInterfaceV5.LimitOrder.OPEN || t.leverage > 0, "NO_TRADE");
        require(_orderType != StorageInterfaceV5.LimitOrder.SL || t.sl > 0, "NO_SL");

        uint leveragedPosDai;
        if(_orderType == StorageInterfaceV5.LimitOrder.OPEN){
            StorageInterfaceV5.OpenLimitOrder memory l = storageT.getOpenLimitOrder(_trader, _pairIndex, _index);
            leveragedPosDai = l.positionSize * l.leverage;
        }else{
            StorageInterfaceV5.TradeInfo memory i = storageT.openTradesInfo(_trader, _pairIndex, _index);
            leveragedPosDai = t.initialPosToken * i.tokenPriceDai * t.leverage / storageT.PRECISION();
        }

        storageT.transferLinkToAggregator(msg.sender, _pairIndex, leveragedPosDai);

        uint order = storageT.priceAggregator().getPrice(
            _pairIndex, 
            _orderType == StorageInterfaceV5.LimitOrder.OPEN ? 
                AggregatorInterfaceV5.OrderType.LIMIT_OPEN : 
                AggregatorInterfaceV5.OrderType.LIMIT_CLOSE,
            leveragedPosDai
        );

        storageT.storePendingNftOrder(StorageInterfaceV5.PendingNftOrder(
            msg.sender,
            _nftId,
            _trader,
            _pairIndex,
            _index,
            _orderType
        ), order);
        emit NftOrderInitiated(msg.sender, _trader, _pairIndex, order);
    }

    // Claim back position size if market order callback not executed by oracle nodes after 50 blocks
    function openTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage > 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.transferDai(address(storageT), msg.sender, o.trade.positionSizeDai);
        storageT.unregisterPendingMarketOrder(_order, true);

        emit ChainlinkCallbackTimeout(_order, o);
    }

    // Trigger market close again if market close order callback not executed by oracle nodes after 50 blocks
    function closeTradeMarketTimeout(uint _order) external notContract notPaused{

        StorageInterfaceV5.PendingMarketOrder memory o = storageT.reqID_pendingMarketOrder(_order);
        StorageInterfaceV5.Trade memory t = storageT.openTrades(o.trade.trader, o.trade.pairIndex, o.trade.index);

        require(o.block > 0 && block.number >= o.block + orderTimeout, 
            "WAIT_TIMEOUT");
        require(o.trade.trader == msg.sender, "NOT_YOUR_ORDER");
        require(o.trade.leverage == 0, "WRONG_MARKET_ORDER_TYPE");

        storageT.unregisterPendingMarketOrder(_order, false);

        (bool success, bytes memory data) = address(this).delegatecall(
            abi.encodeWithSignature(
                "closeTradeMarket(uint256,uint256)",
                t.pairIndex,
                t.index
            )
        );

        if(!success){
            emit CouldNotCloseTrade(msg.sender, t.pairIndex, t.index, string(data));
        }

        emit ChainlinkCallbackTimeout(_order, o);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"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":"uint256","name":"orderId","type":"uint256"},{"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 StorageInterfaceV5.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"}],"indexed":false,"internalType":"struct StorageInterfaceV5.PendingMarketOrder","name":"order","type":"tuple"}],"name":"ChainlinkCallbackTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"CouldNotCloseTrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"bool","name":"open","type":"bool"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"MarketOrderInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftHolder","type":"address"},{"indexed":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"orderId","type":"uint256"}],"name":"NftOrderInitiated","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":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"OpenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"SlUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"uint256","name":"pairIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TpUpdated","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"cancelOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"closeTradeMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"closeTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum StorageInterfaceV5.LimitOrder","name":"_orderType","type":"uint8"},{"internalType":"address","name":"_trader","type":"address"},{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"uint256","name":"_nftType","type":"uint256"}],"name":"executeNftOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrdersTimelock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPosDaiP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPosDai","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":"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 StorageInterfaceV5.Trade","name":"t","type":"tuple"},{"internalType":"bool","name":"_limit","type":"bool"},{"internalType":"uint256","name":"_spreadReductionId","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"address","name":"_referral","type":"address"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_order","type":"uint256"}],"name":"openTradeMarketTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"orderTimeout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"setLimitOrdersTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxP","type":"uint256"}],"name":"setMaxPosDaiP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMinPosDai","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_orderTimeout","type":"uint256"}],"name":"setOrderTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract StorageInterfaceV5","name":"_storageT","type":"address"}],"name":"setStorageT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storageT","outputs":[{"internalType":"contract StorageInterfaceV5","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_slippageP","type":"uint256"},{"internalType":"uint256","name":"_tp","type":"uint256"},{"internalType":"uint256","name":"_sl","type":"uint256"}],"name":"updateOpenLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"uint256","name":"_pairIndex","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newTp","type":"uint256"}],"name":"updateTp","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405263b2d05e006001556801e5b8fa8fe2ac0000600255601e60035560326004553480156200003057600080fd5b506040516200598338038062005983833981016040819052620000539162000093565b6001600160a01b0381166200006757600080fd5b600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055620000c5565b600060208284031215620000a657600080fd5b81516001600160a01b0381168114620000be57600080fd5b9392505050565b6158ae80620000d56000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c8063a2a3c0cb116100d8578063be73fb991161008c578063d0eccac511610066578063d0eccac5146102db578063d4a1caa7146102ee578063d8defd151461030157600080fd5b8063be73fb99146102ac578063befa3411146102bf578063c641558e146102c857600080fd5b8063b8ebd5cc116100bd578063b8ebd5cc1461027d578063b9b6573a14610290578063ba206004146102a357600080fd5b8063a2a3c0cb1461024d578063b187bd261461026057600080fd5b80638456cb591161012f57806392818d661161011457806392818d6614610214578063990382cf146102275780639b0a24e21461023a57600080fd5b80638456cb59146101f9578063876d3abd1461020157600080fd5b8063530e40bb11610160578063530e40bb146101c85780635bd2150d146101dd57806381fc182b146101e657600080fd5b80630890d22a1461017c57806316fff07414610198575b600080fd5b61018560035481565b6040519081526020015b60405180910390f35b6000546101b09061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161018f565b6101db6101d63660046153b4565b610314565b005b61018560025481565b6101db6101f43660046153b4565b61046a565b6101db6105b4565b6101db61020f3660046153b4565b6106d2565b6101db61022236600461506c565b6109b7565b6101db6102353660046153b4565b610c47565b6101db6102483660046152d5565b61108c565b6101db61025b3660046153e6565b612a0b565b60005461026d9060ff1681565b604051901515815260200161018f565b6101db61028b366004615089565b6131b2565b6101db61029e3660046153e6565b613d05565b61018560045481565b6101db6102ba36600461542c565b61402e565b61018560015481565b6101db6102d6366004615458565b614447565b6101db6102e93660046153b4565b614a0b565b6101db6102fc3660046153b4565b614b55565b6101db61030f36600461542c565b614c9f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561036257600080fd5b505afa158015610376573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039a919061502b565b6001600160a01b0316336001600160a01b0316146103ea5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064015b60405180910390fd5b600081116103f757600080fd5b6002819055604080518181526009918101919091527f6d696e506f7344616900000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab906080015b60405180910390a150565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b857600080fd5b505afa1580156104cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f0919061502b565b6001600160a01b0316336001600160a01b03161461053b5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000811161054857600080fd5b600181905560408051818152600a918101919091527f6d6178506f7344616950000000000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561060257600080fd5b505afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a919061502b565b6001600160a01b0316336001600160a01b0316146106855760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b6000805460ff8082161560ff1990921682179092556040519116151581527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f4593049060200160405180910390a1565b3233146106de57600080fd5b60005460ff161561071a5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b15801561076457600080fd5b505afa158015610778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079c9190615199565b9050600081602001511180156107c3575060045481602001516107bf9190615768565b4310155b6107fe5760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8051516001600160a01b031633146108495760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b805160e0015161089b5760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60005481516080015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b5050600054604051630195728b60e71b815260048101869052600160248201526101009091046001600160a01b0316925063cab945809150604401600060405180830381600087803b15801561096257600080fd5b505af1158015610976573d6000803e3d6000fd5b505050507f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb182826040516109ab9291906156e9565b60405180910390a15050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0557600080fd5b505afa158015610a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3d919061502b565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610ad657600080fd5b505afa158015610aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0e919061502b565b6001600160a01b0316816001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061502b565b6001600160a01b031614610b9b57600080fd5b600080546001600160a01b038316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff9091161790556040517f943e9d45a11aaae5d87503e3bc248665d9807856e5cf2bdb4a988bee444227819061045f90839060408082526008908201527f73746f726167655400000000000000000000000000000000000000000000000060608201526001600160a01b0391909116602082015260800190565b323314610c5357600080fd5b60005460ff1615610c8f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b6000805460405163b66e6b0560e01b8152600481018490526101009091046001600160a01b03169063b66e6b05906024016101e06040518083038186803b158015610cd957600080fd5b505afa158015610ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d119190615199565b6000805482518051602082015160409283015192516351d407ff60e11b81526001600160a01b039283166004820152602481019190915260448101929092529394509192610100909104169063a3a80ffe906064016101406040518083038186803b158015610d7f57600080fd5b505afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906152b8565b905060008260200151118015610dde57506004548260200151610dda9190615768565b4310155b610e195760405162461bcd60e51b815260206004820152600c60248201526b15d0525517d512535153d55560a21b60448201526064016103e1565b8151516001600160a01b03163314610e645760405162461bcd60e51b815260206004820152600e60248201526d2727aa2faca7aaa92fa7a92222a960911b60448201526064016103e1565b815160e0015115610eb75760405162461bcd60e51b815260206004820152601760248201527f57524f4e475f4d41524b45545f4f524445525f5459504500000000000000000060448201526064016103e1565b60008054604051630195728b60e71b815260048101869052602481019290925261010090046001600160a01b03169063cab9458090604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050600080306001600160a01b031683602001518460400151604051602401610f52929190918252602082015260400190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa2a3c0cb0000000000000000000000000000000000000000000000000000000017905251610fb59190615549565b600060405180830381855af49150503d8060008114610ff0576040519150601f19603f3d011682016040523d82523d6000602084013e610ff5565b606091505b50915091508161104c578260200151336001600160a01b03167f6568074ce81701a53e7ce26c7e921b0caf2b92876d65fef4ee1feebdc0d04d498560400151846040516110439291906156af565b60405180910390a35b7f3adaa586cdbe84dd24e45bd7dada6da933d7c2d1c7b4e4cd02fce033356decb1858560405161107d9291906156e9565b60405180910390a15050505050565b32331461109857600080fd5b60005460ff16156110d45760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f65d9dbe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906153cd565b60005460208701516040517f97e7995a00000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b0316906397e7995a9060440160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff91906153cd565b60005460208801516040517f9c8912f100000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690639c8912f19060440160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a491906153cd565b60005460208901516040517f1c8636b400000000000000000000000000000000000000000000000000000000815233600482015260248101919091526101009091046001600160a01b031690631c8636b49060440160206040518083038186803b15801561131157600080fd5b505afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906153cd565b6113539190615768565b61135d9190615768565b106113aa5760405162461bcd60e51b815260206004820152601360248201527f4d41585f5452414445535f5045525f504149520000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b1580156113f857600080fd5b505afa15801561140c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143091906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b15801561147757600080fd5b505afa15801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af91906153cd565b106114fc5760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158291906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906153cd565b1061164e5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d5919061502b565b6001600160a01b0316633a2fbfab6040518163ffffffff1660e01b8152600401604080518083038186803b15801561170c57600080fd5b505afa158015611720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117449190615408565b915050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561179557600080fd5b505afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd91906153cd565b6064600154836117dd91906157a2565b6117e79190615780565b6117f19190615780565b866080015111156118445760405162461bcd60e51b815260206004820152600d60248201527f41424f56455f4d41585f504f530000000000000000000000000000000000000060448201526064016103e1565b6002548660800151101561189a5760405162461bcd60e51b815260206004820152600d60248201527f42454c4f575f4d494e5f504f530000000000000000000000000000000000000060448201526064016103e1565b60008660e001511180156119b85750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f757600080fd5b505afa15801561190b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192f919061502b565b6001600160a01b03166359a992d087602001516040518263ffffffff1660e01b815260040161196091815260200190565b60206040518083038186803b15801561197857600080fd5b505afa15801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b091906153cd565b8660e0015110155b8015611ace5750600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0d57600080fd5b505afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a45919061502b565b6001600160a01b031663281b693c87602001516040518263ffffffff1660e01b8152600401611a7691815260200190565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906153cd565b8660e0015111155b611b1a5760405162461bcd60e51b815260206004820152601260248201527f4c455645524147455f494e434f5252454354000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638bbb644c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba091906153cd565b8660e00151111580611c4d57506000546040517f68ca199d0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b0316906368ca199d9060240160206040518083038186803b158015611c0d57600080fd5b505afa158015611c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4591906153cd565b8660e0015111155b611c995760405162461bcd60e51b815260206004820152601560248201527f4c455645524147455f4e4f545f554e4c4f434b4544000000000000000000000060448201526064016103e1565b831580611dc557506000805461010090046001600160a01b031663265aa621611cc36001886157c1565b6040518263ffffffff1660e01b8152600401611ce191815260200190565b60206040518083038186803b158015611cf957600080fd5b505afa158015611d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d31919061502b565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0391909116906370a082319060240160206040518083038186803b158015611d8b57600080fd5b505afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc391906153cd565b115b611e375760405162461bcd60e51b815260206004820152602560248201527f4e4f5f434f52524553504f4e44494e475f4e46545f5350524541445f5245445560448201527f4354494f4e00000000000000000000000000000000000000000000000000000060648201526084016103e1565b60005460208701516040517f28daca210000000000000000000000000000000000000000000000000000000081526004810191909152600260248201526101009091046001600160a01b0316906328daca219060440160206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd91906153cd565b600060019054906101000a90046001600160a01b03166001600160a01b03166328daca2188602001518960c00151611f16576001611f19565b60005b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925260ff16602482015260440160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906153cd565b8760e001518860800151611fbc91906157a2565b611fc69190615768565b11156120145760405162461bcd60e51b815260206004820152601160248201527f4d41585f4f50454e5f494e54455245535400000000000000000000000000000060448201526064016103e1565b610100860151158061203a57508560c00151801561203a57508561010001518660a00151105b8061205a57508560c0015115801561205a57508561010001518660a00151115b6120915760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b61012086015115806120b757508560c0015180156120b757508561012001518660a00151115b806120d757508560c001511580156120d757508561012001518660a00151105b61210e5760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b600054608087015160405163373873db60e11b81523360048201526101009092046001600160a01b031660248301819052604483019190915290636e70e7b690606401600060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b50505050841561265b57600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156121d757600080fd5b505afa1580156121eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220f919061502b565b6001600160a01b031663d5a9e90c87602001516040518263ffffffff1660e01b815260040161224091815260200190565b60206040518083038186803b15801561225857600080fd5b505afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229091906153cd565b8310156122df5760405162461bcd60e51b815260206004820152601260248201527f534c4950504147455f544f4f5f534d414c4c000000000000000000000000000060448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b15801561233157600080fd5b505afa158015612345573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236991906153cd565b858960a0015161237991906157a2565b6123839190615780565b61238d9190615780565b6000805460208a01516040517f44d44f5a000000000000000000000000000000000000000000000000000000008152336004820152602481019190915292935090916101009091046001600160a01b0316906344d44f5a9060440160206040518083038186803b15801561240057600080fd5b505afa158015612414573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243891906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663d3b5fe70604051806101a00160405280336001600160a01b031681526020018b6020015181526020018481526020018b60800151815260200160008a116124a2576000612531565b60005461010090046001600160a01b0316633dae10a06124c360018d6157c1565b6040518263ffffffff1660e01b81526004016124e191815260200190565b60206040518083038186803b1580156124f957600080fd5b505afa15801561250d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253191906153cd565b81526020018b60c00151151581526020018b60e0015181526020018b610100015181526020018b610120015181526020018b60c00151612575578b60a00151612585565b858c60a0015161258591906157c1565b81526020018b60c001516125a857858c60a001516125a39190615768565b6125ae565b8b60a001515b815260200143815260200160008152506040518263ffffffff1660e01b81526004016125da9190615565565b600060405180830381600087803b1580156125f457600080fd5b505af1158015612608573d6000803e3d6000fd5b505050508760200151336001600160a01b03167fdfabd6f206f17b7f2e1f9e0d33c40d30d1e8d7b6a4f520a03fdc1c18110593438360405161264c91815260200190565b60405180910390a3505061297f565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156126aa57600080fd5b505afa1580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e2919061502b565b6001600160a01b031663fa8dd498886020015160008a60e001518b6080015161270b91906157a2565b6040518463ffffffff1660e01b81526004016127299392919061568e565b602060405180830381600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277b91906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018c60200151815260200160008152602001600081526020018c608001518152602001600081526020018c60c00151151581526020018c60e0015181526020018c610100015181526020018c61012001518152508152602001600081526020018a60a001518152602001878152602001600089116128455760006128d4565b60005461010090046001600160a01b0316633dae10a061286660018c6157c1565b6040518263ffffffff1660e01b815260040161288491815260200190565b60206040518083038186803b15801561289c57600080fd5b505afa1580156128b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d491906153cd565b815260200160008152508360016040518463ffffffff1660e01b81526004016128ff93929190615605565b600060405180830381600087803b15801561291957600080fd5b505af115801561292d573d6000803e3d6000fd5b50505050602087810151604080513381529283019190915260018282015260608201839052517f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9181900360800190a1505b6000546040517f9d1a10730000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03848116602483015261010090920490911690639d1a107390604401600060405180830381600087803b1580156129eb57600080fd5b505af11580156129ff573d6000803e3d6000fd5b50505050505050505050565b323314612a1757600080fd5b60005460ff1615612a535760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101859052604481018490526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015612aaa57600080fd5b505afa158015612abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae291906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018790526044810186905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015612b3d57600080fd5b505afa158015612b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b75919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663796d82d96040518163ffffffff1660e01b815260040160206040518083038186803b158015612bc557600080fd5b505afa158015612bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfd91906153cd565b6000546040516352e5398f60e01b81524360048201526101009091046001600160a01b0316906352e5398f9060240160206040518083038186803b158015612c4457600080fd5b505afa158015612c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7c91906153cd565b10612cc95760405162461bcd60e51b815260206004820152601460248201527f4d41585f5452414445535f5045525f424c4f434b00000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316638049fde76040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1757600080fd5b505afa158015612d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4f91906153cd565b60005460405163f7b3c6fd60e01b81523360048201526101009091046001600160a01b03169063f7b3c6fd9060240160206040518083038186803b158015612d9657600080fd5b505afa158015612daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dce91906153cd565b10612e1b5760405162461bcd60e51b815260206004820152601260248201527f4d41585f50454e44494e475f4f5244455253000000000000000000000000000060448201526064016103e1565b8060a0015115612e6d5760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f4245494e475f434c4f53454400000000000000000000000060448201526064016103e1565b60008260e0015111612eac5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015612efb57600080fd5b505afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f33919061502b565b6001600160a01b031663fa8dd498866001600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b158015612f9257600080fd5b505afa158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca91906153cd565b86602001518860e001518960600151612fe391906157a2565b612fed91906157a2565b612ff79190615780565b6040518463ffffffff1660e01b81526004016130159392919061568e565b602060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306791906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663c76faf786040518060c00160405280604051806101400160405280336001600160a01b031681526020018a81526020018981526020016000815260200160008152602001600081526020016000151581526020016000815260200160008152602001600081525081526020016000815260200160008152602001600081526020016000815260200160008152508360006040518463ffffffff1660e01b815260040161313793929190615605565b600060405180830381600087803b15801561315157600080fd5b505af1158015613165573d6000803e3d6000fd5b50506040805133815260208101899052600091810191909152606081018490527f38d5a346bb323dfce6ee611d2fbbfc595310c725ab7ab45bfe0adf3b81b7adab9250608001905061107d565b3233146131be57600080fd5b60005460ff16156131fa5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063a3a80ffe906064016101406040518083038186803b15801561325557600080fd5b505afa158015613269573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328d91906152b8565b905060008211801561329f5750600682105b6132eb5760405162461bcd60e51b815260206004820152600e60248201527f57524f4e475f4e46545f5459504500000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b15801561333957600080fd5b505afa15801561334d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613371919061502b565b6001600160a01b0316336001600160a01b031614806134a45750600054339061010090046001600160a01b031663265aa6216133ae6001866157c1565b6040518263ffffffff1660e01b81526004016133cc91815260200190565b60206040518083038186803b1580156133e457600080fd5b505afa1580156133f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341c919061502b565b6001600160a01b0316636352211e856040518263ffffffff1660e01b815260040161344991815260200190565b60206040518083038186803b15801561346157600080fd5b505afa158015613475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613499919061502b565b6001600160a01b0316145b6134f05760405162461bcd60e51b815260206004820152600660248201527f4e4f5f4e4654000000000000000000000000000000000000000000000000000060448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b031663f8d24b486040518163ffffffff1660e01b815260040160206040518083038186803b15801561353e57600080fd5b505afa158015613552573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357691906153cd565b6000546040517faa3b7d77000000000000000000000000000000000000000000000000000000008152600481018690526101009091046001600160a01b03169063aa3b7d779060240160206040518083038186803b1580156135d757600080fd5b505afa1580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f91906153cd565b6136199190615768565b4310156136685760405162461bcd60e51b815260206004820152601060248201527f535543434553535f54494d454c4f434b0000000000000000000000000000000060448201526064016103e1565b600387600381111561367c5761367c61581e565b1415806137155750600054604051636e6f99cd60e11b81526001600160a01b03888116600483015260248201889052604482018790526101009092049091169063dcdf339a9060640160206040518083038186803b1580156136dd57600080fd5b505afa1580156136f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613715919061504f565b61374c5760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60038760038111156137605761376061581e565b1480613770575060008160e00151115b6137a75760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60018760038111156137bb576137bb61581e565b1415806137cd57506000816101200151115b6138195760405162461bcd60e51b815260206004820152600560248201527f4e4f5f534c00000000000000000000000000000000000000000000000000000060448201526064016103e1565b6000600388600381111561382f5761382f61581e565b14156138e65760008054604051632e21e28b60e21b81526001600160a01b038a81166004830152602482018a9052604482018990526101009092049091169063b8878a2c906064016101a06040518083038186803b15801561389057600080fd5b505afa1580156138a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c891906150e6565b90508060c0015181606001516138de91906157a2565b915050613a31565b60008054604051638c8ff1d560e01b81526001600160a01b038a81166004830152602482018a90526044820189905261010090920490911690638c8ff1d59060640160c06040518083038186803b15801561394057600080fd5b505afa158015613954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613978919061522a565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156139c857600080fd5b505afa1580156139dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0091906153cd565b8360e0015182602001518560600151613a1991906157a2565b613a2391906157a2565b613a2d9190615780565b9150505b6000546040517f6690a80600000000000000000000000000000000000000000000000000000000815233600482015260248101889052604481018390526101009091046001600160a01b031690636690a80690606401600060405180830381600087803b158015613aa157600080fd5b505af1158015613ab5573d6000803e3d6000fd5b5050505060008060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b158015613b0857600080fd5b505afa158015613b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b40919061502b565b6001600160a01b031663fa8dd4988860038c6003811115613b6357613b6361581e565b14613b6f576003613b72565b60025b856040518463ffffffff1660e01b8152600401613b919392919061568e565b602060405180830381600087803b158015613bab57600080fd5b505af1158015613bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be391906153cd565b9050600060019054906101000a90046001600160a01b03166001600160a01b031663817fa1a46040518060c00160405280336001600160a01b031681526020018881526020018b6001600160a01b031681526020018a81526020018981526020018c6003811115613c5657613c5661581e565b815250836040518363ffffffff1660e01b8152600401613c7792919061562c565b600060405180830381600087803b158015613c9157600080fd5b505af1158015613ca5573d6000803e3d6000fd5b5050604080513381526001600160a01b038c1660208201529081018a9052606081018490527f25a4615e0f832491882811af92c23aeadd8e4ea8679eda01bb90f5276ffdf44f9250608001905060405180910390a1505050505050505050565b323314613d1157600080fd5b60005460ff1615613d4d5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101849052604481018390526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dda919061504f565b613e115760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101859052604481018490526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b158015613e6857600080fd5b505afa158015613e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea091906150e6565b905060035481610160015143613eb691906157c1565b1015613ef55760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b600054606082015160405163373873db60e11b81526101009092046001600160a01b031660048301819052336024840152604483019190915290636e70e7b690606401600060405180830381600087803b158015613f5257600080fd5b505af1158015613f66573d6000803e3d6000fd5b50506000546040517fb4b0f56700000000000000000000000000000000000000000000000000000000815233600482015260248101879052604481018690526101009091046001600160a01b0316925063b4b0f5679150606401600060405180830381600087803b158015613fda57600080fd5b505af1158015613fee573d6000803e3d6000fd5b50506040518481528592503391507ff1b38881d7f4b2b12141c5f39c5124545d6112532eb6afbe9630cdbde3ee53e99060200160405180910390a3505050565b32331461403a57600080fd5b60005460ff16156140765760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b1580156140cd57600080fd5b505afa1580156140e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410591906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b15801561416057600080fd5b505afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614198919061522a565b905060008260e00151116141d95760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b60008260e001516064600060019054906101000a90046001600160a01b03166001600160a01b0316635a9125516040518163ffffffff1660e01b815260040160206040518083038186803b15801561423057600080fd5b505afa158015614244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426891906153cd565b8560a0015161427791906157a2565b6142819190615780565b61428b9190615780565b90508315806142b557508260c0015180156142b55750808360a001516142b191906157c1565b8410155b806142dc57508260c001511580156142dc5750808360a001516142d89190615768565b8411155b6143285760405162461bcd60e51b815260206004820152600a60248201527f534c5f544f4f5f4249470000000000000000000000000000000000000000000060448201526064016103e1565b600354608083015161433a90436157c1565b10156143795760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517fa35441810000000000000000000000000000000000000000000000000000000081523360048201526024810188905260448101879052606481018690526101009091046001600160a01b03169063a354418190608401600060405180830381600087803b1580156143f057600080fd5b505af1158015614404573d6000803e3d6000fd5b50506040518781528892503391507fd84b56773a293a915f0b68564b1c050aa07759e003a9eeb5a81d1e6a105d15f69060200160405180910390a3505050505050565b32331461445357600080fd5b60005460ff161561448f5760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600054604051636e6f99cd60e11b815233600482015260248101889052604481018790526101009091046001600160a01b03169063dcdf339a9060640160206040518083038186803b1580156144e457600080fd5b505afa1580156144f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451c919061504f565b6145535760405162461bcd60e51b81526020600482015260086024820152671393d7d31253525560c21b60448201526064016103e1565b600060019054906101000a90046001600160a01b03166001600160a01b0316633078fff56040518163ffffffff1660e01b815260040160206040518083038186803b1580156145a157600080fd5b505afa1580156145b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145d9919061502b565b6001600160a01b031663d5a9e90c876040518263ffffffff1660e01b815260040161460691815260200190565b60206040518083038186803b15801561461e57600080fd5b505afa158015614632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465691906153cd565b8310156146a55760405162461bcd60e51b815260206004820152601460248201527f4d494e5f4c494d49545f534c4950504147455f5000000000000000000000000060448201526064016103e1565b60008054604051632e21e28b60e21b815233600482015260248101899052604481018890526101009091046001600160a01b03169063b8878a2c906064016101a06040518083038186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061473491906150e6565b90506003548161016001514361474a91906157c1565b10156147895760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b8215806147a157508060a0015180156147a157508285105b806147b857508060a001511580156147b857508285115b6147ef5760405162461bcd60e51b8152602060048201526008602482015267057524f4e475f54560c41b60448201526064016103e1565b81158061480757508060a00151801561480757508185115b8061481e57508060a0015115801561481e57508185105b6148555760405162461bcd60e51b815260206004820152600860248201526715d493d391d7d4d360c21b60448201526064016103e1565b60006064600060019054906101000a90046001600160a01b03166001600160a01b031663aaf5eb686040518163ffffffff1660e01b815260040160206040518083038186803b1580156148a757600080fd5b505afa1580156148bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148df91906153cd565b6148e987896157a2565b6148f39190615780565b6148fd9190615780565b90508160a0015161490e5785614918565b61491881876157c1565b61012083015260a0820151614936576149318187615768565b614938565b855b61014083015260e082018490526101008083018490526000546040517fb767608a0000000000000000000000000000000000000000000000000000000081529190046001600160a01b03169063b767608a90614998908590600401615565565b600060405180830381600087803b1580156149b257600080fd5b505af11580156149c6573d6000803e3d6000fd5b50506040518981528a92503391507f1b720cb4ce3eb09408b2a2e9e02ce28a793f9abecffc9e90283bdac26fd643ce9060200160405180910390a35050505050505050565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614a5957600080fd5b505afa158015614a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a91919061502b565b6001600160a01b0316336001600160a01b031614614adc5760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614ae957600080fd5b600481905560408051818152600c918101919091527f6f7264657254696d656f757400000000000000000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b600060019054906101000a90046001600160a01b03166001600160a01b03166312d43a516040518163ffffffff1660e01b815260040160206040518083038186803b158015614ba357600080fd5b505afa158015614bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bdb919061502b565b6001600160a01b0316336001600160a01b031614614c265760405162461bcd60e51b8152602060048201526008602482015267474f565f4f4e4c5960c01b60448201526064016103e1565b60008111614c3357600080fd5b6003819055604080518181526013918101919091527f6c696d69744f726465727354696d656c6f636b000000000000000000000000006060820152602081018290527f8cf3e35f6221b16e1670a3413180c9484bf5aa71787905909fa82a6a2662e9ab9060800161045f565b323314614cab57600080fd5b60005460ff1615614ce75760405162461bcd60e51b815260206004820152600660248201526514105554d15160d21b60448201526064016103e1565b600080546040516351d407ff60e11b815233600482015260248101869052604481018590526101009091046001600160a01b03169063a3a80ffe906064016101406040518083038186803b158015614d3e57600080fd5b505afa158015614d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7691906152b8565b60008054604051638c8ff1d560e01b8152336004820152602481018890526044810187905292935090916101009091046001600160a01b031690638c8ff1d59060640160c06040518083038186803b158015614dd157600080fd5b505afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e09919061522a565b905060008260e0015111614e4a5760405162461bcd60e51b81526020600482015260086024820152674e4f5f545241444560c01b60448201526064016103e1565b6003546060820151614e5c90436157c1565b1015614e9b5760405162461bcd60e51b815260206004820152600e60248201526d4c494d49545f54494d454c4f434b60901b60448201526064016103e1565b6000546040517f7fdb96f30000000000000000000000000000000000000000000000000000000081523360048201526024810187905260448101869052606481018590526101009091046001600160a01b031690637fdb96f390608401600060405180830381600087803b158015614f1257600080fd5b505af1158015614f26573d6000803e3d6000fd5b50506040518681528792503391507e8aac03745806f29595f6b86f312fe0d5a6427e1c5fc46c3747d29b86f5982c9060200160405180910390a35050505050565b8035614f7281615855565b919050565b8051614f7281615855565b8035614f728161586a565b8051614f728161586a565b60006101408284031215614fab57600080fd5b614fb36156fe565b9050614fbe82614f77565b81526020820151602082015260408201516040820152606082015160608201526080820151608082015260a082015160a0820152614ffe60c08301614f8d565b60c082015260e082015160e082015261010080830151818301525061012080830151818301525092915050565b60006020828403121561503d57600080fd5b815161504881615855565b9392505050565b60006020828403121561506157600080fd5b81516150488161586a565b60006020828403121561507e57600080fd5b813561504881615855565b60008060008060008060c087890312156150a257600080fd5b8635600481106150b157600080fd5b955060208701356150c181615855565b95989597505050506040840135936060810135936080820135935060a0909101359150565b60006101a082840312156150f957600080fd5b615101615736565b61510a83614f77565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015261514060a08401614f8d565b60a082015260c0838101519082015260e080840151908201526101008084015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b60006101e082840312156151ac57600080fd5b60405160c0810181811067ffffffffffffffff821117156151dd57634e487b7160e01b600052604160045260246000fd5b6040526151ea8484614f98565b81526101408301516020820152610160830151604082015261018083015160608201526101a083015160808201526101c09092015160a083015250919050565b600060c0828403121561523c57600080fd5b60405160c0810181811067ffffffffffffffff8211171561526d57634e487b7160e01b600052604160045260246000fd5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a08301516152ac8161586a565b60a08201529392505050565b600061014082840312156152cb57600080fd5b6150488383614f98565b60008060008060008587036101c08112156152ef57600080fd5b610140808212156152ff57600080fd5b6153076156fe565b915061531288614f67565b82526020880135602083015260408801356040830152606088013560608301526080880135608083015260a088013560a083015261535260c08901614f82565b60c083015260e088013560e0830152610100808901358184015250610120808901358184015250819650615387818901614f82565b95505050610160860135925061018086013591506153a86101a08701614f67565b90509295509295909350565b6000602082840312156153c657600080fd5b5035919050565b6000602082840312156153df57600080fd5b5051919050565b600080604083850312156153f957600080fd5b50508035926020909101359150565b6000806040838503121561541b57600080fd5b505080516020909101519092909150565b60008060006060848603121561544157600080fd5b505081359360208301359350604090920135919050565b60008060008060008060c0878903121561547157600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b805180516001600160a01b031683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c08101516154ef60c085018215159052565b5060e081810151908401526101008082015190840152610120908101519083015260208101516101408301526040810151610160830152606081015161018083015260808101516101a083015260a001516101c090910152565b6000825161555b8184602087016157d8565b9190910192915050565b81516001600160a01b031681526101a081016020830151602083015260408301516040830152606083015160608301526080830151608083015260a08301516155b260a084018215159052565b5060c0838101519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b6102208101615614828661549b565b836101e0830152821515610200830152949350505050565b600060e0820190506001600160a01b038085511683526020850151602084015280604086015116604084015250606084015160608301526080840151608083015260a084015161567b81615834565b60a083015260c090910191909152919050565b8381526060810161569e84615834565b602082019390935260400152919050565b82815260406020820152600082518060408401526156d48160608501602087016157d8565b601f01601f1916919091016060019392505050565b8281526102008101615048602083018461549b565b604051610140810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b60405290565b6040516101a0810167ffffffffffffffff8111828210171561573057634e487b7160e01b600052604160045260246000fd5b6000821982111561577b5761577b615808565b500190565b60008261579d57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156157bc576157bc615808565b500290565b6000828210156157d3576157d3615808565b500390565b60005b838110156157f35781810151838201526020016157db565b83811115615802576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6004811061585257634e487b7160e01b600052602160045260246000fd5b50565b6001600160a01b038116811461585257600080fd5b801515811461585257600080fdfea26469706673582212205dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b79864736f6c63430008070033000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

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

000000000000000000000000aee4d11a16b2bc65edd6416fb626eb404a6d65bd

-----Decoded View---------------
Arg [0] : _storageT (address): 0xaee4d11a16b2bc65edd6416fb626eb404a6d65bd

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


Deployed ByteCode Sourcemap

9097:16979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9449:36;;;;;;;;;28776:25:1;;;28764:2;28749:18;9449:36:0;;;;;;;;9209:34;;;;;;;;-1:-1:-1;;;;;9209:34:0;;;;;;-1:-1:-1;;;;;11472:55:1;;;11454:74;;11442:2;11427:18;9209:34:0;11308:226:1;11491:160:0;;;;;;:::i;:::-;;:::i;:::-;;9379:33;;;;;;11318:167;;;;;;:::i;:::-;;:::i;11205:80::-;;;:::i;24295:628::-;;;;;;:::i;:::-;;:::i;10918:221::-;;;;;;:::i;:::-;;:::i;25042:1031::-;;;;;;:::i;:::-;;:::i;12311:4150::-;;;;;;:::i;:::-;;:::i;20544:1311::-;;;;;;:::i;:::-;;:::i;9156:20::-;;;;;;;;;;;;14489:14:1;;14482:22;14464:41;;14452:2;14437:18;9156:20:0;14324:187:1;21956:2228:0;;;;;;:::i;:::-;;:::i;17742:612::-;;;;;;:::i;:::-;;:::i;9516:29::-;;;;;;19683:811;;;;;;:::i;:::-;;:::i;9304:35::-;;;;;;16501:1201;;;;;;:::i;:::-;;:::i;11865:205::-;;;;;;:::i;:::-;;:::i;11657:202::-;;;;;;:::i;:::-;;:::i;18660:573::-;;;;;;:::i;:::-;;:::i;11491:160::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;;;;;;;;;11566:1:::1;11559:4;:8;11551:17;;;::::0;::::1;;11579:9;:16:::0;;;11611:32:::1;::::0;;18814:21:1;;;18871:1;18851:18;;;18844:29;;;;18909:11;18904:2;18889:18;;18882:39;18988:4;18973:20;;18966:36;;;11611:32:0::1;::::0;18953:3:1;18938:19;11611:32:0::1;;;;;;;;11491:160:::0;:::o;11318:167::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11396:1:::1;11388:5;:9;11380:18;;;::::0;::::1;;11409:10;:18:::0;;;11443:34:::1;::::0;;24294:21:1;;;24351:2;24331:18;;;24324:30;;;;24390:12;24385:2;24370:18;;24363:40;24470:4;24455:20;;24448:36;;;11443:34:0::1;::::0;24435:3:1;24420:19;11443:34:0::1;24082:408:1::0;11205:80:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11252:8:::1;::::0;;::::1;::::0;;::::1;11251:9;-1:-1:-1::0;;11240:20:0;;::::1;::::0;::::1;::::0;;;11267:15:::1;::::0;11273:8;;14489:14:1;14482:22;14464:41;;11267:15:0::1;::::0;14452:2:1;14437:18;11267:15:0::1;;;;;;;11205:80::o:0;24295:628::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;24383:46:::2;24432:8:::0;;:41:::2;::::0;-1:-1:-1;;;24432:41:0;;::::2;::::0;::::2;28776:25:1::0;;;24432:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24432:8:0::2;::::0;:33:::2;::::0;28749:18:1;;24432:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24383:90;;24504:1;24494;:7;;;:11;:53;;;;;24535:12;;24525:1;:7;;;:22;;;;:::i;:::-;24509:12;:38;;24494:53;24486:92;;;::::0;-1:-1:-1;;;24486:92:0;;16736:2:1;24486:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;24486:92:0::2;16534:336:1::0;24486:92:0::2;24597:7:::0;;:14;-1:-1:-1;;;;;24597:28:0::2;24615:10;24597:28;24589:55;;;::::0;-1:-1:-1;;;24589:55:0;;21531:2:1;24589:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;24589:55:0::2;21329:338:1::0;24589:55:0::2;24663:7:::0;;:16:::2;;::::0;24655:56:::2;;;::::0;-1:-1:-1;;;24655:56:0;;23932:2:1;24655:56:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;24655:56:0::2;23730:347:1::0;24655:56:0::2;24724:8;::::0;24776:7;;:23:::2;;::::0;24724:76:::2;::::0;-1:-1:-1;;;24724:76:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;24724:8:0::2;:76;::::0;::::2;12134:34:1::0;;;24764:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;24724:8:0;:20:::2;::::0;12046:18:1;;24724:76:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24811:8:0::2;::::0;:51:::2;::::0;-1:-1:-1;;;24811:51:0;;::::2;::::0;::::2;28980:25:1::0;;;24811:8:0::2;29021:18:1::0;;;29014:50;24811:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;24811:8:0::2;::::0;-1:-1:-1;24811:37:0::2;::::0;-1:-1:-1;28953:18:1;;24811:51:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24880:35;24905:6;24913:1;24880:35;;;;;;;:::i;:::-;;;;;;;;24370:553;24295:628:::0;:::o;10918:221::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11023:8:::1;;;;;;;;;-1:-1:-1::0;;;;;11023:8:0::1;-1:-1:-1::0;;;;;11023:12:0::1;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;:9;-1:-1:-1::0;;;;;11004:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11004:33:0::1;;10996:42;;;::::0;::::1;;11049:8;:20:::0;;-1:-1:-1;;;;;11049:20:0;::::1;;;::::0;;;::::1;;::::0;;11085:46:::1;::::0;::::1;::::0;::::1;::::0;11060:9;;19579:2:1;19561:21;;;19618:1;19598:18;;;19591:29;19656:10;19651:2;19636:18;;19629:38;-1:-1:-1;;;;;19741:55:1;;;;19734:4;19719:20;;19712:85;19699:3;19684:19;;19349:454;25042:1031:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;25131:46:::2;25180:8:::0;;:41:::2;::::0;-1:-1:-1;;;25180:41:0;;::::2;::::0;::::2;28776:25:1::0;;;25180:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;25180:8:0::2;::::0;:33:::2;::::0;28749:18:1;;25180:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:33;25268:8:::0;;25288:7;;:14;;25304:17:::2;::::0;::::2;::::0;25323:13:::2;::::0;;::::2;::::0;25268:69;;-1:-1:-1;;;25268:69:0;;-1:-1:-1;;;;;13726:55:1;;;25268:69:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;;13841:18;;;13834:34;;;;25288:7:0;;-1:-1:-1;25232:33:0;;25268:8:::2;::::0;;::::2;;::::0;:19:::2;::::0;13681:18:1;;25268:69:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25232:105;;25368:1;25358;:7;;;:11;:53;;;;;25399:12;;25389:1;:7;;;:22;;;;:::i;:::-;25373:12;:38;;25358:53;25350:92;;;::::0;-1:-1:-1;;;25350:92:0;;16736:2:1;25350:92:0::2;::::0;::::2;16718:21:1::0;16775:2;16755:18;;;16748:30;-1:-1:-1;;;16794:18:1;;;16787:42;16846:18;;25350:92:0::2;16534:336:1::0;25350:92:0::2;25461:7:::0;;:14;-1:-1:-1;;;;;25461:28:0::2;25479:10;25461:28;25453:55;;;::::0;-1:-1:-1;;;25453:55:0;;21531:2:1;25453:55:0::2;::::0;::::2;21513:21:1::0;21570:2;21550:18;;;21543:30;-1:-1:-1;;;21589:18:1;;;21582:44;21643:18;;25453:55:0::2;21329:338:1::0;25453:55:0::2;25527:7:::0;;:16:::2;;::::0;:21;25519:57:::2;;;::::0;-1:-1:-1;;;25519:57:0;;23932:2:1;25519:57:0::2;::::0;::::2;23914:21:1::0;23971:2;23951:18;;;23944:30;24010:25;23990:18;;;23983:53;24053:18;;25519:57:0::2;23730:347:1::0;25519:57:0::2;25589:8;::::0;;:52:::2;::::0;-1:-1:-1;;;25589:52:0;;::::2;::::0;::::2;28980:25:1::0;;;29021:18;;;29014:50;;;;25589:8:0::2;::::0;::::2;-1:-1:-1::0;;;;;25589:8:0::2;::::0;:37:::2;::::0;28953:18:1;;25589:52:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25655:12;25669:17:::0;25698:4:::2;-1:-1:-1::0;;;;;25690:26:0::2;25827:1;:11;;;25857:1;:7;;;25731:148;;;;;;;;29640:25:1::0;;;29696:2;29681:18;;29674:34;29628:2;29613:18;;29458:256;25731:148:0::2;;::::0;;-1:-1:-1;;25731:148:0;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;::::2;;;;::::0;;25690:200;::::2;::::0;25731:148;25690:200:::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25654:236;;;;25907:7;25903:110;;25966:1;:11;;;25954:10;-1:-1:-1::0;;;;;25935:66:0::2;;25979:1;:7;;;25995:4;25935:66;;;;;;;:::i;:::-;;;;;;;;25903:110;26030:35;26055:6;26063:1;26030:35;;;;;;;:::i;:::-;;;;;;;;25118:955;;;;25042:1031:::0;:::o;12311:4150::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;12724:8:::2;;;;;;;;;-1:-1:-1::0;;;;;12724:8:0::2;-1:-1:-1::0;;;;;12724:25:0::2;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12667:8;::::0;12709:11:::2;::::0;::::2;::::0;12667:54:::2;::::0;;;;12697:10:::2;12667:54;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12667:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12667:8:0::2;::::0;:29:::2;::::0;12896:18:1;;12667:54:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12594:8;::::0;12638:11:::2;::::0;::::2;::::0;12594:56:::2;::::0;;;;12626:10:::2;12594:56;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12594:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12594:8:0::2;::::0;:31:::2;::::0;12896:18:1;;12594:56:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12542:8;::::0;12579:11:::2;::::0;::::2;::::0;12542:49:::2;::::0;;;;12567:10:::2;12542:49;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;12542:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12542:8:0::2;::::0;:24:::2;::::0;12896:18:1;;12542:49:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:108;;;;:::i;:::-;:179;;;;:::i;:::-;:209;12534:255;;;::::0;-1:-1:-1;;;12534:255:0;;20346:2:1;12534:255:0::2;::::0;::::2;20328:21:1::0;20385:2;20365:18;;;20358:30;20424:21;20404:18;;;20397:49;20463:18;;12534:255:0::2;20144:343:1::0;12534:255:0::2;12848:8;;;;;;;;;-1:-1:-1::0;;;;;12848:8:0::2;-1:-1:-1::0;;;;;12848:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12808:8;::::0;:37:::2;::::0;-1:-1:-1;;;12808:37:0;;12832:12:::2;12808:37;::::0;::::2;28776:25:1::0;12808:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12808:8:0::2;::::0;:23:::2;::::0;28749:18:1;;12808:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;12800:115;;;::::0;-1:-1:-1;;;12800:115:0;;23583:2:1;12800:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;12800:115:0::2;23381:344:1::0;12800:115:0::2;12978:8;;;;;;;;;-1:-1:-1::0;;;;;12978:8:0::2;-1:-1:-1::0;;;;;12978:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12934:8;::::0;:41:::2;::::0;-1:-1:-1;;;12934:41:0;;12964:10:::2;12934:41;::::0;::::2;11454:74:1::0;12934:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;12934:8:0::2;::::0;:29:::2;::::0;11427:18:1;;12934:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;12926:122;;;::::0;-1:-1:-1;;;12926:122:0;;22554:2:1;12926:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;12926:122:0::2;22352:342:1::0;12926:122:0::2;13062:16;13082:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;13082:8:0::2;-1:-1:-1::0;;;;;13082:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13082:45:0::2;;:47;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13059:70;;;13196:8;;;;;;;;;-1:-1:-1::0;;;;;13196:8:0::2;-1:-1:-1::0;;;;;13196:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13192:3;13181:10;;13169:11;:22;;;;:::i;:::-;:26;;;;:::i;:::-;:47;;;;:::i;:::-;13148:1;:17;;;:68;;13140:108;;;::::0;-1:-1:-1;;;13140:108:0;;15309:2:1;13140:108:0::2;::::0;::::2;15291:21:1::0;15348:2;15328:18;;;15321:30;15387:15;15367:18;;;15360:43;15420:18;;13140:108:0::2;15107:337:1::0;13140:108:0::2;13288:9;;13267:1;:17;;;:30;;13259:56;;;::::0;-1:-1:-1;;;13259:56:0;;17772:2:1;13259:56:0::2;::::0;::::2;17754:21:1::0;17811:2;17791:18;;;17784:30;17850:15;17830:18;;;17823:43;17883:18;;13259:56:0::2;17570:337:1::0;13259:56:0::2;13347:1;13334;:10;;;:14;:87;;;;;13366:8;;;;;;;;;-1:-1:-1::0;;;;;13366:8:0::2;-1:-1:-1::0;;;;;13366:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13366:42:0::2;;13409:1;:11;;;13366:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13366:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13352:1;:10;;;:69;;13334:87;:174;;;;;13453:8;;;;;;;;;-1:-1:-1::0;;;;;13453:8:0::2;-1:-1:-1::0;;;;;13453:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13453:42:0::2;;13496:1;:11;;;13453:55;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13453:55:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13439:1;:10;;;:69;;13334:174;13326:219;;;::::0;-1:-1:-1;;;13326:219:0;;18114:2:1;13326:219:0::2;::::0;::::2;18096:21:1::0;18153:2;18133:18;;;18126:30;18192:20;18172:18;;;18165:48;18230:18;;13326:219:0::2;17912:342:1::0;13326:219:0::2;13578:8;;;;;;;;;-1:-1:-1::0;;;;;13578:8:0::2;-1:-1:-1::0;;;;;13578:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13564:1;:10;;;:48;;:106;;;-1:-1:-1::0;13630:8:0::2;::::0;:40:::2;::::0;;;;13659:10:::2;13630:40;::::0;::::2;11454:74:1::0;13630:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13630:8:0::2;::::0;:28:::2;::::0;11427:18:1;;13630:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13616:1;:10;;;:54;;13564:106;13556:153;;;::::0;-1:-1:-1;;;13556:153:0;;17422:2:1;13556:153:0::2;::::0;::::2;17404:21:1::0;17461:2;17441:18;;;17434:30;17500:23;17480:18;;;17473:51;17541:18;;13556:153:0::2;17220:345:1::0;13556:153:0::2;13728:23:::0;;;:88:::2;;-1:-1:-1::0;13815:1:0::2;13755:8:::0;;::::2;::::0;::::2;-1:-1:-1::0;;;;;13755:8:0::2;:13;13769:20;13755:8;13769:18:::0;:20:::2;:::i;:::-;13755:35;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;13755:35:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;::::0;;;;13801:10:::2;13755:57;::::0;::::2;11454:74:1::0;-1:-1:-1;;;;;13755:45:0;;;::::2;::::0;::::2;::::0;11427:18:1;;13755:57:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;13728:88;13720:151;;;::::0;-1:-1:-1;;;13720:151:0;;15651:2:1;13720:151:0::2;::::0;::::2;15633:21:1::0;15690:2;15670:18;;;15663:30;15729:34;15709:18;;;15702:62;15800:7;15780:18;;;15773:35;15825:19;;13720:151:0::2;15449:401:1::0;13720:151:0::2;13993:8;::::0;14018:11:::2;::::0;::::2;::::0;13993:40:::2;::::0;;;;::::2;::::0;::::2;29640:25:1::0;;;;14031:1:0::2;29681:18:1::0;;;29674:34;13993:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;13993:8:0::2;::::0;:24:::2;::::0;29613:18:1;;13993:40:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13923:8;;;;;;;;;-1:-1:-1::0;;;;;13923:8:0::2;-1:-1:-1::0;;;;;13923:24:0::2;;13948:1;:11;;;13961:1;:5;;;:13;;13973:1;13961:13;;;13969:1;13961:13;13923:52;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;30957:25:1::0;;;;31030:4;31018:17;30998:18;;;30991:45;30930:18;;13923:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13910:1;:10;;;13890:1;:17;;;:30;;;;:::i;:::-;:85;;;;:::i;:::-;:143;;13882:173;;;::::0;-1:-1:-1;;;13882:173:0;;23237:2:1;13882:173:0::2;::::0;::::2;23219:21:1::0;23276:2;23256:18;;;23249:30;23315:19;23295:18;;;23288:47;23352:18;;13882:173:0::2;23035:341:1::0;13882:173:0::2;14074:4;::::0;::::2;::::0;:9;;:40:::2;;;14087:1;:5;;;:27;;;;;14110:1;:4;;;14096:1;:11;;;:18;14087:27;14074:72;;;;14119:1;:5;;;14118:6;:28;;;;;14142:1;:4;;;14128:1;:11;;;:18;14118:28;14066:93;;;::::0;-1:-1:-1;;;14066:93:0;;19215:2:1;14066:93:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;14066:93:0::2;19013:331:1::0;14066:93:0::2;14178:4;::::0;::::2;::::0;:9;;:40:::2;;;14191:1;:5;;;:27;;;;;14214:1;:4;;;14200:1;:11;;;:18;14191:27;14178:72;;;;14223:1;:5;;;14222:6;:28;;;;;14246:1;:4;;;14232:1;:11;;;:18;14222:28;14170:93;;;::::0;-1:-1:-1;;;14170:93:0;;20010:2:1;14170:93:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;14170:93:0::2;19808:331:1::0;14170:93:0::2;14276:8;::::0;14328:17:::2;::::0;::::2;::::0;14276:70:::2;::::0;-1:-1:-1;;;14276:70:0;;14297:10:::2;14276:70;::::0;::::2;12134:34:1::0;14276:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;14276:8:0::2;12184:18:1::0;;;12177:43;;;12236:18;;;12229:34;;;;14276:8:0;:20:::2;::::0;12046:18:1;;14276:70:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;14362:6;14359:2037;;;14406:8;;;;;;;;;-1:-1:-1::0;;;;;14406:8:0::2;-1:-1:-1::0;;;;;14406:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14406:52:0::2;;14459:1;:11;;;14406:65;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14406:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14392:10;:79;;14384:127;;;::::0;-1:-1:-1;;;14384:127:0;;21874:2:1;14384:127:0::2;::::0;::::2;21856:21:1::0;21913:2;21893:18;;;21886:30;21952:20;21932:18;;;21925:48;21990:18;;14384:127:0::2;21672:342:1::0;14384:127:0::2;14528:9;14584:3;14563:8;;;;;;;;;-1:-1:-1::0;;;;;14563:8:0::2;-1:-1:-1::0;;;;;14563:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14552:10;14540:1;:11;;;:22;;;;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;14602:10;14615:8:::0;;14661:11:::2;::::0;::::2;::::0;14615:58:::2;::::0;;;;14649:10:::2;14615:58;::::0;::::2;12923:74:1::0;13013:18;;;13006:34;;;;14528:59:0;;-1:-1:-1;14602:10:0;;14615:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;14615:8:0::2;::::0;:33:::2;::::0;12896:18:1;;14615:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14602:71;;14690:8;;;;;;;;;-1:-1:-1::0;;;;;14690:8:0::2;-1:-1:-1::0;;;;;14690:28:0::2;;14719:531;;;;;;;;14771:10;-1:-1:-1::0;;;;;14719:531:0::2;;;;;14800:1;:11;;;14719:531;;;;14830:5;14719:531;;;;14854:1;:17;;;14719:531;;;;14911:1;14890:18;:22;:77;;14966:1;14890:77;;;14915:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;14915:8:0::2;:26;14942:20;14915:8;14942:18:::0;:20:::2;:::i;:::-;14915:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;14915:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14719:531;;;;14986:1;:5;;;14719:531;;;;;;15010:1;:10;;;14719:531;;;;15039:1;:4;;;14719:531;;;;15062:1;:4;;;14719:531;;;;15085:1;:5;;;:40;;15114:1;:11;;;15085:40;;;15107:4;15093:1;:11;;;:18;;;;:::i;:::-;14719:531;;;;15144:1;:5;;;:40;;15180:4;15166:1;:11;;;:18;;;;:::i;:::-;15144:40;;;15152:1;:11;;;15144:40;14719:531;;;;15203:12;14719:531;;;;15234:1;14719:531;;::::0;14690:561:::2;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;15301:1;:11;;;15289:10;-1:-1:-1::0;;;;;15273:47:0::2;;15314:5;15273:47;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;15273:47:0::2;;;;;;;;14369:963;;14359:2037;;;15351:10;15364:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;15364:8:0::2;-1:-1:-1::0;;;;;15364:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15364:35:0::2;;15418:1;:11;;;15449:43;15532:1;:10;;;15512:1;:17;;;:30;;;;:::i;:::-;15364:193;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15351:206;;15574:8;;;;;;;;;-1:-1:-1::0;;;;;15574:8:0::2;-1:-1:-1::0;;;;;15574:32:0::2;;15625:651;;;;;;;;15685:357;;;;;;;;15736:10;-1:-1:-1::0;;;;;15685:357:0::2;;;;;15773:1;:11;;;15685:357;;;;15811:1;15685:357;;;;15814:1;15685:357;;;;15842:1;:17;;;15685:357;;;;15886:1;15685:357;;;;15915:1;:5;;;15685:357;;;;;;15947:1;:10;;;15685:357;;;;15984:1;:4;;;15685:357;;;;16015:1;:4;;;15685:357;;::::0;15625:651:::2;;;;16065:1;15625:651;;;;16089:1;:11;;;15625:651;;;;16123:10;15625:651;;;;16177:1;16156:18;:22;:77;;16232:1;16156:77;;;16181:8;::::0;::::2;::::0;::::2;-1:-1:-1::0;;;;;16181:8:0::2;:26;16208:20;16181:8;16208:18:::0;:20:::2;:::i;:::-;16181:48;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16181:48:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15625:651;;;;16256:1;15625:651;;::::0;16278:5:::2;16285:4;15574:730;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;;16359:11:0::2;::::0;;::::2;::::0;16326:58:::2;::::0;;16347:10:::2;13276:74:1::0;;13366:18;;;13359:34;;;;16372:4:0::2;13409:18:1::0;;;13402:50;13483:2;13468:18;;13461:34;;;16326:58:0;::::2;::::0;;;;13263:3:1;16326:58:0;;::::2;15336:1060;14359:2037;16408:8;::::0;:45:::2;::::0;;;;16431:10:::2;16408:45;::::0;::::2;11774:34:1::0;-1:-1:-1;;;;;11844:15:1;;;11824:18;;;11817:43;16408:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:22:::2;::::0;11686:18:1;;16408:45:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;12521:3940;12311:4150:::0;;;;;:::o;20544:1311::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;20651:33:::2;20687:8:::0;;:51:::2;::::0;-1:-1:-1;;;20687:51:0;;20707:10:::2;20687:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20687:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20687:8:0::2;::::0;:19:::2;::::0;13681:18:1;;20687:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:37;20789:8:::0;;:55:::2;::::0;-1:-1:-1;;;20789:55:0;;20813:10:::2;20789:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;20651:87:0;;-1:-1:-1;20749:37:0;;20789:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;20789:8:0::2;::::0;:23:::2;::::0;13681:18:1;;20789:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20749:95;;20903:8;;;;;;;;;-1:-1:-1::0;;;;;20903:8:0::2;-1:-1:-1::0;;;;;20903:26:0::2;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20863:8;::::0;:37:::2;::::0;-1:-1:-1;;;20863:37:0;;20887:12:::2;20863:37;::::0;::::2;28776:25:1::0;20863:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20863:8:0::2;::::0;:23:::2;::::0;28749:18:1;;20863:37:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;20855:115;;;::::0;-1:-1:-1;;;20855:115:0;;23583:2:1;20855:115:0::2;::::0;::::2;23565:21:1::0;23622:2;23602:18;;;23595:30;23661:22;23641:18;;;23634:50;23701:18;;20855:115:0::2;23381:344:1::0;20855:115:0::2;21033:8;;;;;;;;;-1:-1:-1::0;;;;;21033:8:0::2;-1:-1:-1::0;;;;;21033:31:0::2;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20989:8;::::0;:41:::2;::::0;-1:-1:-1;;;20989:41:0;;21019:10:::2;20989:41;::::0;::::2;11454:74:1::0;20989:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20989:8:0::2;::::0;:29:::2;::::0;11427:18:1;;20989:41:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;20981:122;;;::::0;-1:-1:-1;;;20981:122:0;;22554:2:1;20981:122:0::2;::::0;::::2;22536:21:1::0;22593:2;22573:18;;;22566:30;22632:20;22612:18;;;22605:48;22670:18;;20981:122:0::2;22352:342:1::0;20981:122:0::2;21123:1;:19;;;21122:20;21114:53;;;::::0;-1:-1:-1;;;21114:53:0;;25036:2:1;21114:53:0::2;::::0;::::2;25018:21:1::0;25075:2;25055:18;;;25048:30;25114:22;25094:18;;;25087:50;25154:18;;21114:53:0::2;24834:344:1::0;21114:53:0::2;21199:1;21186;:10;;;:14;21178:35;;;::::0;-1:-1:-1;;;21178:35:0;;16057:2:1;21178:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;21178:35:0::2;15855:331:1::0;21178:35:0::2;21226:10;21239:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;21239:8:0::2;-1:-1:-1::0;;;;;21239:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21239:35:0::2;;21289:10;21315:44;21426:8;;;;;;;;;-1:-1:-1::0;;;;;21426:8:0::2;-1:-1:-1::0;;;;;21426:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21408:1;:15;;;21395:1;:10;;;21375:1;:17;;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;21239:218;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21226:231;;21470:8;;;;;;;;;-1:-1:-1::0;;;;;21470:8:0::2;-1:-1:-1::0;;;;;21470:32:0::2;;21503:255;;;;;;;;21555:164;;;;;;;;21598:10;-1:-1:-1::0;;;;;21555:164:0::2;;;;;21627:10;21555:164;;;;21656:6;21555:164;;;;21681:1;21555:164;;;;21684:1;21555:164;;;;21687:1;21555:164;;;;21690:5;21555:164;;;;;;21697:1;21555:164;;;;21700:1;21555:164;;;;21703:1;21555:164;;::::0;21503:255:::2;;;;21734:1;21503:255;;;;21737:1;21503:255;;;;21740:1;21503:255;;;;21743:1;21503:255;;;;21746:1;21503:255;;::::0;21760:5:::2;21767;21470:303;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;21789:58:0::2;::::0;;21810:10:::2;13276:74:1::0;;13381:2;13366:18;;13359:34;;;21834:5:0::2;13409:18:1::0;;;13402:50;;;;13483:2;13468:18;;13461:34;;;21789:58:0::2;::::0;-1:-1:-1;13263:3:1;13248:19;;-1:-1:-1;21789:58:0::2;13051:450:1::0;21956:2228:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;22206:33:::2;22242:8:::0;;:48:::2;::::0;-1:-1:-1;;;22242:48:0;;-1:-1:-1;;;;;13726:55:1;;;22242:48:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22242:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:19:::2;::::0;13681:18:1;;22242:48:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22206:84;;22320:1;22309:8;:12;:28;;;;;22336:1;22325:8;:12;22309:28;22301:55;;;::::0;-1:-1:-1;;;22301:55:0;;16393:2:1;22301:55:0::2;::::0;::::2;16375:21:1::0;16432:2;16412:18;;;16405:30;16471:16;16451:18;;;16444:44;16505:18;;22301:55:0::2;16191:338:1::0;22301:55:0::2;22389:8;;;;;;;;;-1:-1:-1::0;;;;;22389:8:0::2;-1:-1:-1::0;;;;;22389:12:0::2;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22375:28:0::2;:10;-1:-1:-1::0;;;;;22375:28:0::2;;:87;;;-1:-1:-1::0;22407:8:0::2;::::0;22452:10:::2;::::0;22407:8:::2;::::0;::::2;-1:-1:-1::0;;;;;22407:8:0::2;:13;22421:10;22407:8;22421::::0;:10:::2;:::i;:::-;22407:25;;;;;;;;;;;;;28776::1::0;;28764:2;28749:18;;28630:177;22407:25:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:33:0::2;;22441:6;22407:41;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;22407:41:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22407:55:0::2;;22375:87;22367:119;;;::::0;-1:-1:-1;;;22367:119:0;;25385:2:1;22367:119:0::2;::::0;::::2;25367:21:1::0;25424:1;25404:18;;;25397:29;25462:8;25442:18;;;25435:36;25488:18;;22367:119:0::2;25183:329:1::0;22367:119:0::2;22553:8;;;;;;;;;-1:-1:-1::0;;;;;22553:8:0::2;-1:-1:-1::0;;;;;22553:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22521:8;::::0;:31:::2;::::0;;;;::::2;::::0;::::2;28776:25:1::0;;;22521:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;22521:8:0::2;::::0;:23:::2;::::0;28749:18:1;;22521:31:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;22505:12;:77;;22497:119;;;::::0;-1:-1:-1;;;22497:119:0;;17077:2:1;22497:119:0::2;::::0;::::2;17059:21:1::0;17116:2;17096:18;;;17089:30;17155:18;17135;;;17128:46;17191:18;;22497:119:0::2;16875:340:1::0;22497:119:0::2;22649:34;22635:10;:48;;;;;;;;:::i;:::-;;;:107;;;-1:-1:-1::0;22687:8:0::2;::::0;:55:::2;::::0;-1:-1:-1;;;22687:55:0;;-1:-1:-1;;;;;13726:55:1;;;22687::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;22687:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;22687:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22627:142;;;::::0;-1:-1:-1;;;22627:142:0;;22901:2:1;22627:142:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;22627:142:0::2;22699:331:1::0;22627:142:0::2;22802:34;22788:10;:48;;;;;;;;:::i;:::-;;:66;;;;22853:1;22840;:10;;;:14;22788:66;22780:87;;;::::0;-1:-1:-1;;;22780:87:0;;16057:2:1;22780:87:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;22780:87:0::2;15855:331:1::0;22780:87:0::2;22900:32;22886:10;:46;;;;;;;;:::i;:::-;;;:58;;;;22943:1;22936;:4;;;:8;22886:58;22878:76;;;::::0;-1:-1:-1;;;22878:76:0;;22221:2:1;22878:76:0::2;::::0;::::2;22203:21:1::0;22260:1;22240:18;;;22233:29;22298:7;22278:18;;;22271:35;22323:18;;22878:76:0::2;22019:328:1::0;22878:76:0::2;22967:20;23015:34;23001:10;:48;;;;;;;;:::i;:::-;;22998:466;;;23065:42;23110:8:::0;;:55:::2;::::0;-1:-1:-1;;;23110:55:0;;-1:-1:-1;;;;;13726:55:1;;;23110::0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23110:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:26:::2;::::0;13681:18:1;;23110:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23065:100;;23215:1;:10;;;23198:1;:14;;;:27;;;;:::i;:::-;23180:45;;23050:187;22998:466;;;23256:37;23296:8:::0;;:52:::2;::::0;-1:-1:-1;;;23296:52:0;;-1:-1:-1;;;;;13726:55:1;;;23296:52:0::2;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23296:8:0::2;::::0;;::::2;::::0;;::::2;::::0;:23:::2;::::0;13681:18:1;;23296:52:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23256:92;;23432:8;;;;;;;;;-1:-1:-1::0;;;;;23432:8:0::2;-1:-1:-1::0;;;;;23432:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23419:1;:10;;;23401:1;:15;;;23381:1;:17;;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:71;;;;:::i;:::-;23363:89;;23241:223;22998:466;23476:8;::::0;:74:::2;::::0;;;;23510:10:::2;23476:74;::::0;::::2;13708::1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;23476:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;23476:8:0::2;::::0;:33:::2;::::0;13681:18:1;;23476:74:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;23563:10;23576:8:::0;::::2;;;;;;;;-1:-1:-1::0;;;;;23576:8:0::2;-1:-1:-1::0;;;;;23576:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23576:35:0::2;;23626:10:::0;23666:34:::2;23652:10;:48;;;;;;;;:::i;:::-;;:175;;23784:43;23652:175;;;23721:42;23652:175;23842:15;23576:292;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23563:305;;23881:8;;;;;;;;;-1:-1:-1::0;;;;;23881:8:0::2;-1:-1:-1::0;;;;;23881:29:0::2;;23911:184;;;;;;;;23960:10;-1:-1:-1::0;;;;;23911:184:0::2;;;;;23985:6;23911:184;;;;24006:7;-1:-1:-1::0;;;;;23911:184:0::2;;;;;24028:10;23911:184;;;;24053:6;23911:184;;;;24074:10;23911:184;;;;;;;;:::i;:::-;;;::::0;24097:5:::2;23881:222;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;24119:57:0::2;::::0;;24137:10:::2;12566:34:1::0;;-1:-1:-1;;;;;12636:15:1;;12631:2;12616:18;;12609:43;12668:18;;;12661:34;;;12726:2;12711:18;;12704:34;;;24119:57:0::2;::::0;-1:-1:-1;12492:3:1;12477:19;;-1:-1:-1;24119:57:0::2;;;;;;;22193:1991;;;21956:2228:::0;;;;;;:::o;17742:612::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;17853:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;17853:58:0;;17880:10:::2;17853:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17853:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17853:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17853:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17845:79;;;::::0;-1:-1:-1;;;17845:79:0;;22901:2:1;17845:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;17845:79:0::2;22699:331:1::0;17845:79:0::2;17937:42;17982:8:::0;;:58:::2;::::0;-1:-1:-1;;;17982:58:0;;18009:10:::2;17982:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17982:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17982:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17982:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17937:103;;18085:19;;18074:1;:7;;;18059:12;:22;;;;:::i;:::-;:45;;18051:72;;;::::0;-1:-1:-1;;;18051:72:0;;18461:2:1;18051:72:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;18051:72:0::2;18259:338:1::0;18051:72:0::2;18136:8;::::0;18188:14:::2;::::0;::::2;::::0;18136:67:::2;::::0;-1:-1:-1;;;18136:67:0;;:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18136:8:0::2;:67;::::0;::::2;12134:34:1::0;;;18176:10:0::2;12184:18:1::0;;;12177:43;12236:18;;;12229:34;;;;18136:8:0;:20:::2;::::0;12046:18:1;;18136:67:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18216:8:0::2;::::0;:65:::2;::::0;;;;18250:10:::2;18216:65;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18216:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18216:8:0::2;::::0;-1:-1:-1;18216:33:0::2;::::0;-1:-1:-1;13681:18:1;;18216:65:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;18297:49:0::2;::::0;28776:25:1;;;18327:10:0;;-1:-1:-1;18315:10:0::2;::::0;-1:-1:-1;18297:49:0::2;::::0;28764:2:1;28749:18;18297:49:0::2;;;;;;;17832:522;17742:612:::0;;:::o;19683:811::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;19787:33:::2;19823:8:::0;;:51:::2;::::0;-1:-1:-1;;;19823:51:0;;19843:10:::2;19823:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19823:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19823:8:0::2;::::0;:19:::2;::::0;13681:18:1;;19823:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:37;19925:8:::0;;:55:::2;::::0;-1:-1:-1;;;19925:55:0;;19949:10:::2;19925:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;19787:87:0;;-1:-1:-1;19885:37:0;;19925:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;19925:8:0::2;::::0;:23:::2;::::0;13681:18:1;;19925:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19885:95;;20012:1;19999;:10;;;:14;19991:35;;;::::0;-1:-1:-1;;;19991:35:0;;16057:2:1;19991:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;19991:35:0::2;15855:331:1::0;19991:35:0::2;20039:14;20096:1;:10;;;20090:3;20070:8;;;;;;;;;-1:-1:-1::0;;;;;20070:8:0::2;-1:-1:-1::0;;;;;20070:15:0::2;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20056:1;:11;;;:31;;;;:::i;:::-;:37;;;;:::i;:::-;:50;;;;:::i;:::-;20039:67:::0;-1:-1:-1;20125:11:0;;;:57:::2;;;20140:1;:5;;;:42;;;;;20173:9;20159:1;:11;;;:23;;;;:::i;:::-;20149:6;:33;;20140:42;20125:118;;;;20201:1;:5;;;20200:6;:43;;;;;20234:9;20220:1;:11;;;:23;;;;:::i;:::-;20210:6;:33;;20200:43;20117:141;;;::::0;-1:-1:-1;;;20117:141:0;;24697:2:1;20117:141:0::2;::::0;::::2;24679:21:1::0;24736:2;24716:18;;;24709:30;24775:12;24755:18;;;24748:40;24805:18;;20117:141:0::2;24495:334:1::0;20117:141:0::2;20311:19;::::0;20292:15:::2;::::0;::::2;::::0;20277:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;20269:80;;;::::0;-1:-1:-1;;;20269:80:0;;18461:2:1;20269:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;20269:80:0::2;18259:338:1::0;20269:80:0::2;20370:8;::::0;:57:::2;::::0;;;;20388:10:::2;20370:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;20370:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;20370:8:0::2;::::0;:17:::2;::::0;14082:19:1;;20370:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;20445:41:0::2;::::0;28776:25:1;;;20467:10:0;;-1:-1:-1;20455:10:0::2;::::0;-1:-1:-1;20445:41:0::2;::::0;28764:2:1;28749:18;20445:41:0::2;;;;;;;19774:720;;;19683:811:::0;;;:::o;16501:1201::-;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;16762:8:::2;::::0;:58:::2;::::0;-1:-1:-1;;;16762:58:0;;16789:10:::2;16762:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;16762:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;16762:8:0::2;::::0;:26:::2;::::0;13681:18:1;;16762:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16754:79;;;::::0;-1:-1:-1;;;16754:79:0;;22901:2:1;16754:79:0::2;::::0;::::2;22883:21:1::0;22940:1;22920:18;;;22913:29;-1:-1:-1;;;22958:18:1;;;22951:38;23006:18;;16754:79:0::2;22699:331:1::0;16754:79:0::2;16866:8;;;;;;;;;-1:-1:-1::0;;;;;16866:8:0::2;-1:-1:-1::0;;;;;16866:24:0::2;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16866:52:0::2;;16919:10;16866:64;;;;;;;;;;;;;28776:25:1::0;;28764:2;28749:18;;28630:177;16866:64:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16852:10;:78;;16844:125;;;::::0;-1:-1:-1;;;16844:125:0;;26055:2:1;16844:125:0::2;::::0;::::2;26037:21:1::0;26094:2;26074:18;;;26067:30;26133:22;26113:18;;;26106:50;26173:18;;16844:125:0::2;25853:344:1::0;16844:125:0::2;16982:42;17027:8:::0;;:58:::2;::::0;-1:-1:-1;;;17027:58:0;;17054:10:::2;17027:58;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;17027:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;17027:8:0::2;::::0;:26:::2;::::0;13681:18:1;;17027:58:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16982:103;;17130:19;;17119:1;:7;;;17104:12;:22;;;;:::i;:::-;:45;;17096:86;;;::::0;-1:-1:-1;;;17096:86:0;;18461:2:1;17096:86:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;17096:86:0::2;18259:338:1::0;17096:86:0::2;17203:8:::0;;;:33:::2;;;17215:1;:5;;;:21;;;;;17233:3;17224:6;:12;17215:21;17203:59;;;;17241:1;:5;;;17240:6;:22;;;;;17259:3;17250:6;:12;17240:22;17195:80;;;::::0;-1:-1:-1;;;17195:80:0;;19215:2:1;17195:80:0::2;::::0;::::2;19197:21:1::0;19254:1;19234:18;;;19227:29;-1:-1:-1;;;19272:18:1;;;19265:38;19320:18;;17195:80:0::2;19013:331:1::0;17195:80:0::2;17294:8:::0;;;:33:::2;;;17306:1;:5;;;:21;;;;;17324:3;17315:6;:12;17306:21;17294:59;;;;17332:1;:5;;;17331:6;:22;;;;;17350:3;17341:6;:12;17331:22;17286:80;;;::::0;-1:-1:-1;;;17286:80:0;;20010:2:1;17286:80:0::2;::::0;::::2;19992:21:1::0;20049:1;20029:18;;;20022:29;-1:-1:-1;;;20067:18:1;;;20060:38;20115:18;;17286:80:0::2;19808:331:1::0;17286:80:0::2;17379:9;17430:3;17409:8;;;;;;;;;-1:-1:-1::0;;;;;17409:8:0::2;-1:-1:-1::0;;;;;17409:18:0::2;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17391:17;17398:10:::0;17391:6;:17:::2;:::i;:::-;:38;;;;:::i;:::-;:42;;;;:::i;:::-;17379:54;;17457:1;:5;;;:30;;17481:6;17457:30;;;17465:13;17474:4:::0;17465:6;:13:::2;:::i;:::-;17444:10;::::0;::::2;:43:::0;17511:5:::2;::::0;::::2;::::0;:30:::2;;17528:13;17537:4:::0;17528:6;:13:::2;:::i;:::-;17511:30;;;17519:6;17511:30;17498:10;::::0;::::2;:43:::0;17552:4:::2;::::0;::::2;:10:::0;;;17573:4:::2;::::0;;::::2;:10:::0;;;-1:-1:-1;17596:8:0;-1:-1:-1;17596:32:0;;;;:8;;::::2;-1:-1:-1::0;;;;;17596:8:0::2;::::0;:29:::2;::::0;:32:::2;::::0;17498:10;;17596:32:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;17646:48:0::2;::::0;28776:25:1;;;17675:10:0;;-1:-1:-1;17663:10:0::2;::::0;-1:-1:-1;17646:48:0::2;::::0;28764:2:1;28749:18;17646:48:0::2;;;;;;;16741:961;;16501:1201:::0;;;;;;:::o;11865:205::-;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11961:1:::1;11945:13;:17;11937:26;;;::::0;::::1;;11974:12;:28:::0;;;12018:44:::1;::::0;;20704:21:1;;;20761:2;20741:18;;;20734:30;;;;20800:14;20795:2;20780:18;;20773:42;20882:4;20867:20;;20860:36;;;12018:44:0::1;::::0;20847:3:1;20832:19;12018:44:0::1;20492:410:1::0;11657:202:0;10781:8;;;;;;;;;-1:-1:-1;;;;;10781:8:0;-1:-1:-1;;;;;10781:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10767:28:0;:10;-1:-1:-1;;;;;10767:28:0;;10759:49;;;;-1:-1:-1;;;10759:49:0;;25719:2:1;10759:49:0;;;25701:21:1;25758:1;25738:18;;;25731:29;-1:-1:-1;;;25776:18:1;;;25769:38;25824:18;;10759:49:0;25517:331:1;10759:49:0;11748:1:::1;11738:7;:11;11730:20;;;::::0;::::1;;11761:19;:29:::0;;;11806:45:::1;::::0;;21119:21:1;;;21176:2;21156:18;;;21149:30;;;;21215:21;21210:2;21195:18;;21188:49;21304:4;21289:20;;21282:36;;;11806:45:0::1;::::0;21269:3:1;21254:19;11806:45:0::1;20907:417:1::0;18660:573:0;12168:9;12181:10;12168:23;12160:32;;;;;;12235:8:::1;::::0;::::1;;12234:9;12226:28;;;::::0;-1:-1:-1;;;12226:28:0;;14975:2:1;12226:28:0::1;::::0;::::1;14957:21:1::0;15014:1;14994:18;;;14987:29;-1:-1:-1;;;15032:18:1;;;15025:36;15078:18;;12226:28:0::1;14773:329:1::0;12226:28:0::1;18764:33:::2;18800:8:::0;;:51:::2;::::0;-1:-1:-1;;;18800:51:0;;18820:10:::2;18800:51;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18800:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;18800:8:0::2;::::0;:19:::2;::::0;13681:18:1;;18800:51:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:37;18902:8:::0;;:55:::2;::::0;-1:-1:-1;;;18902:55:0;;18926:10:::2;18902:55;::::0;::::2;13708:74:1::0;13798:18;;;13791:34;;;13841:18;;;13834:34;;;18764:87:0;;-1:-1:-1;18862:37:0;;18902:8:::2;::::0;;::::2;-1:-1:-1::0;;;;;18902:8:0::2;::::0;:23:::2;::::0;13681:18:1;;18902:55:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18862:95;;18991:1;18978;:10;;;:14;18970:35;;;::::0;-1:-1:-1;;;18970:35:0;;16057:2:1;18970:35:0::2;::::0;::::2;16039:21:1::0;16096:1;16076:18;;;16069:29;-1:-1:-1;;;16114:18:1;;;16107:38;16162:18;;18970:35:0::2;15855:331:1::0;18970:35:0::2;19058:19;::::0;19039:15:::2;::::0;::::2;::::0;19024:30:::2;::::0;:12:::2;:30;:::i;:::-;:53;;19016:80;;;::::0;-1:-1:-1;;;19016:80:0;;18461:2:1;19016:80:0::2;::::0;::::2;18443:21:1::0;18500:2;18480:18;;;18473:30;-1:-1:-1;;;18519:18:1;;;18512:44;18573:18;;19016:80:0::2;18259:338:1::0;19016:80:0::2;19109:8;::::0;:57:::2;::::0;;;;19127:10:::2;19109:57;::::0;::::2;14110:74:1::0;14200:18;;;14193:34;;;14243:18;;;14236:34;;;14286:18;;;14279:34;;;19109:8:0::2;::::0;;::::2;-1:-1:-1::0;;;;;19109:8:0::2;::::0;:17:::2;::::0;14082:19:1;;19109:57:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;19184:41:0::2;::::0;28776:25:1;;;19206:10:0;;-1:-1:-1;19194:10:0::2;::::0;-1:-1:-1;19184:41:0::2;::::0;28764:2:1;28749:18;19184:41:0::2;;;;;;;18751:482;;18660:573:::0;;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;14:134;;;:::o;153:138::-;232:13;;254:31;232:13;254:31;:::i;296:128::-;361:20;;390:28;361:20;390:28;:::i;429:132::-;505:13;;527:28;505:13;527:28;:::i;566:840::-;629:5;677:6;665:9;660:3;656:19;652:32;649:52;;;697:1;694;687:12;649:52;719:22;;:::i;:::-;710:31;;764:40;794:9;764:40;:::i;:::-;757:5;750:55;858:2;847:9;843:18;837:25;832:2;825:5;821:14;814:49;916:2;905:9;901:18;895:25;890:2;883:5;879:14;872:49;974:2;963:9;959:18;953:25;948:2;941:5;937:14;930:49;1033:3;1022:9;1018:19;1012:26;1006:3;999:5;995:15;988:51;1093:3;1082:9;1078:19;1072:26;1066:3;1059:5;1055:15;1048:51;1132:47;1174:3;1163:9;1159:19;1132:47;:::i;:::-;1126:3;1119:5;1115:15;1108:72;1234:3;1223:9;1219:19;1213:26;1207:3;1200:5;1196:15;1189:51;1259:3;1315:2;1304:9;1300:18;1294:25;1289:2;1282:5;1278:14;1271:49;;1339:3;1395:2;1384:9;1380:18;1374:25;1369:2;1362:5;1358:14;1351:49;;566:840;;;;:::o;1411:251::-;1481:6;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1582:9;1576:16;1601:31;1626:5;1601:31;:::i;:::-;1651:5;1411:251;-1:-1:-1;;;1411:251:1:o;1667:245::-;1734:6;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1835:9;1829:16;1854:28;1876:5;1854:28;:::i;2480:273::-;2565:6;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2673:9;2660:23;2692:31;2717:5;2692:31;:::i;2758:686::-;2876:6;2884;2892;2900;2908;2916;2969:3;2957:9;2948:7;2944:23;2940:33;2937:53;;;2986:1;2983;2976:12;2937:53;3025:9;3012:23;3064:1;3057:5;3054:12;3044:40;;3080:1;3077;3070:12;3044:40;3103:5;-1:-1:-1;3160:2:1;3145:18;;3132:32;3173:33;3132:32;3173:33;:::i;:::-;2758:686;;3225:7;;-1:-1:-1;;;;3279:2:1;3264:18;;3251:32;;3330:2;3315:18;;3302:32;;3381:3;3366:19;;3353:33;;-1:-1:-1;3433:3:1;3418:19;;;3405:33;;-1:-1:-1;2758:686:1:o;3449:1143::-;3550:6;3603:3;3591:9;3582:7;3578:23;3574:33;3571:53;;;3620:1;3617;3610:12;3571:53;3646:17;;:::i;:::-;3686:40;3716:9;3686:40;:::i;:::-;3679:5;3672:55;3780:2;3769:9;3765:18;3759:25;3754:2;3747:5;3743:14;3736:49;3838:2;3827:9;3823:18;3817:25;3812:2;3805:5;3801:14;3794:49;3896:2;3885:9;3881:18;3875:25;3870:2;3863:5;3859:14;3852:49;3955:3;3944:9;3940:19;3934:26;3928:3;3921:5;3917:15;3910:51;3994:47;4036:3;4025:9;4021:19;3994:47;:::i;:::-;3988:3;3977:15;;3970:72;4096:3;4081:19;;;4075:26;4058:15;;;4051:51;4156:3;4141:19;;;4135:26;4118:15;;;4111:51;4181:3;4222:18;;;4216:25;4200:14;;;4193:49;4261:3;4302:18;;;4296:25;4280:14;;;4273:49;4341:3;4382:18;;;4376:25;4360:14;;;4353:49;4421:3;4462:18;;;4456:25;4440:14;;;4433:49;4501:3;4542:18;;;4536:25;4520:14;;;4513:49;;;;-1:-1:-1;3981:5:1;3449:1143;-1:-1:-1;3449:1143:1:o;4597:955::-;4702:6;4755:3;4743:9;4734:7;4730:23;4726:33;4723:53;;;4772:1;4769;4762:12;4723:53;4805:2;4799:9;4847:4;4839:6;4835:17;4918:6;4906:10;4903:22;4882:18;4870:10;4867:34;4864:62;4861:242;;;-1:-1:-1;;;4956:1:1;4949:88;5060:4;5057:1;5050:15;5088:4;5085:1;5078:15;4861:242;5119:2;5112:22;5158:54;5204:7;5193:9;5158:54;:::i;:::-;5143:70;;5269:3;5254:19;;5248:26;5241:4;5229:17;;5222:53;5329:3;5314:19;;5308:26;5303:2;5291:15;;5284:51;5391:3;5376:19;;5370:26;5363:4;5351:17;;5344:53;5453:3;5438:19;;5432:26;5425:4;5413:17;;5406:53;5515:3;5500:19;;;5494:26;5487:4;5475:17;;5468:53;-1:-1:-1;5150:6:1;4597:955;-1:-1:-1;4597:955:1:o;5557:962::-;5653:6;5706:3;5694:9;5685:7;5681:23;5677:33;5674:53;;;5723:1;5720;5713:12;5674:53;5756:2;5750:9;5798:3;5790:6;5786:16;5868:6;5856:10;5853:22;5832:18;5820:10;5817:34;5814:62;5811:242;;;-1:-1:-1;;;5906:1:1;5899:88;6010:4;6007:1;6000:15;6038:4;6035:1;6028:15;5811:242;6073:10;6069:2;6062:22;;6114:9;6108:16;6100:6;6093:32;6179:2;6168:9;6164:18;6158:25;6153:2;6145:6;6141:15;6134:50;6238:2;6227:9;6223:18;6217:25;6212:2;6204:6;6200:15;6193:50;6297:2;6286:9;6282:18;6276:25;6271:2;6263:6;6259:15;6252:50;6357:3;6346:9;6342:19;6336:26;6330:3;6322:6;6318:16;6311:52;6406:3;6395:9;6391:19;6385:26;6420:28;6442:5;6420:28;:::i;:::-;6476:3;6464:16;;6457:31;6468:6;5557:962;-1:-1:-1;;;5557:962:1:o;6524:245::-;6616:6;6669:3;6657:9;6648:7;6644:23;6640:33;6637:53;;;6686:1;6683;6676:12;6637:53;6709:54;6755:7;6744:9;6709:54;:::i;6774:1289::-;6888:6;6896;6904;6912;6920;6964:9;6955:7;6951:23;6994:3;6990:2;6986:12;6983:32;;;7011:1;7008;7001:12;6983:32;7034:6;7060:2;7056;7052:11;7049:31;;;7076:1;7073;7066:12;7049:31;7102:22;;:::i;:::-;7089:35;;7147:29;7166:9;7147:29;:::i;:::-;7140:5;7133:44;7237:2;7226:9;7222:18;7209:32;7204:2;7197:5;7193:14;7186:56;7302:2;7291:9;7287:18;7274:32;7269:2;7262:5;7258:14;7251:56;7367:2;7356:9;7352:18;7339:32;7334:2;7327:5;7323:14;7316:56;7433:3;7422:9;7418:19;7405:33;7399:3;7392:5;7388:15;7381:58;7500:3;7489:9;7485:19;7472:33;7466:3;7459:5;7455:15;7448:58;7539:36;7570:3;7559:9;7555:19;7539:36;:::i;:::-;7533:3;7526:5;7522:15;7515:61;7637:3;7626:9;7622:19;7609:33;7603:3;7596:5;7592:15;7585:58;7662:3;7725:2;7714:9;7710:18;7697:32;7692:2;7685:5;7681:14;7674:56;;7749:3;7812:2;7801:9;7797:18;7784:32;7779:2;7772:5;7768:14;7761:56;;7836:5;7826:15;;7860:35;7891:2;7880:9;7876:18;7860:35;:::i;:::-;7850:45;;;;7942:3;7931:9;7927:19;7914:33;7904:43;;7994:3;7983:9;7979:19;7966:33;7956:43;;8018:39;8052:3;8041:9;8037:19;8018:39;:::i;:::-;8008:49;;6774:1289;;;;;;;;:::o;8068:180::-;8127:6;8180:2;8168:9;8159:7;8155:23;8151:32;8148:52;;;8196:1;8193;8186:12;8148:52;-1:-1:-1;8219:23:1;;8068:180;-1:-1:-1;8068:180:1:o;8253:184::-;8323:6;8376:2;8364:9;8355:7;8351:23;8347:32;8344:52;;;8392:1;8389;8382:12;8344:52;-1:-1:-1;8415:16:1;;8253:184;-1:-1:-1;8253:184:1:o;8442:248::-;8510:6;8518;8571:2;8559:9;8550:7;8546:23;8542:32;8539:52;;;8587:1;8584;8577:12;8539:52;-1:-1:-1;;8610:23:1;;;8680:2;8665:18;;;8652:32;;-1:-1:-1;8442:248:1:o;8695:245::-;8774:6;8782;8835:2;8823:9;8814:7;8810:23;8806:32;8803:52;;;8851:1;8848;8841:12;8803:52;-1:-1:-1;;8874:16:1;;8930:2;8915:18;;;8909:25;8874:16;;8909:25;;-1:-1:-1;8695:245:1:o;8945:316::-;9022:6;9030;9038;9091:2;9079:9;9070:7;9066:23;9062:32;9059:52;;;9107:1;9104;9097:12;9059:52;-1:-1:-1;;9130:23:1;;;9200:2;9185:18;;9172:32;;-1:-1:-1;9251:2:1;9236:18;;;9223:32;;8945:316;-1:-1:-1;8945:316:1:o;9266:523::-;9370:6;9378;9386;9394;9402;9410;9463:3;9451:9;9442:7;9438:23;9434:33;9431:53;;;9480:1;9477;9470:12;9431:53;-1:-1:-1;;9503:23:1;;;9573:2;9558:18;;9545:32;;-1:-1:-1;9624:2:1;9609:18;;9596:32;;9675:2;9660:18;;9647:32;;-1:-1:-1;9726:3:1;9711:19;;9698:33;;-1:-1:-1;9778:3:1;9763:19;9750:33;;-1:-1:-1;9266:523:1;-1:-1:-1;9266:523:1:o;10022:1002::-;10104:12;;10144:9;;-1:-1:-1;;;;;9860:54:1;9848:67;;10205:4;10201:2;10197:13;10191:20;10184:4;10179:3;10175:14;10168:44;10258:4;10254:2;10250:13;10244:20;10237:4;10232:3;10228:14;10221:44;10311:4;10307:2;10303:13;10297:20;10290:4;10285:3;10281:14;10274:44;10364:4;10360:2;10356:13;10350:20;10343:4;10338:3;10334:14;10327:44;10417:4;10413:2;10409:13;10403:20;10396:4;10391:3;10387:14;10380:44;10467:4;10463:2;10459:13;10453:20;10482:45;10521:4;10516:3;10512:14;10498:12;9996:13;9989:21;9977:34;;9926:91;10482:45;-1:-1:-1;10573:4:1;10565:13;;;10559:20;10543:14;;;10536:44;10599:6;10641:11;;;10635:18;10621:12;;;10614:40;10673:6;10715:11;;;10709:18;10695:12;;;10688:40;10779:4;10768:16;;10762:23;10753:6;10744:16;;10737:49;10837:4;10826:16;;10820:23;10811:6;10802:16;;10795:49;10895:4;10884:16;;10878:23;10869:6;10860:16;;10853:49;10953:4;10942:16;;10936:23;10927:6;10918:16;;10911:49;11011:4;11000:16;10994:23;10985:6;10976:16;;;10969:49;10022:1002::o;11029:274::-;11158:3;11196:6;11190:13;11212:53;11258:6;11253:3;11246:4;11238:6;11234:17;11212:53;:::i;:::-;11281:16;;;;;11029:274;-1:-1:-1;;11029:274:1:o;26202:1170::-;26430:13;;-1:-1:-1;;;;;9860:54:1;9848:67;;26398:3;26383:19;;26511:4;26503:6;26499:17;26493:24;26486:4;26475:9;26471:20;26464:54;26574:4;26566:6;26562:17;26556:24;26549:4;26538:9;26534:20;26527:54;26637:4;26629:6;26625:17;26619:24;26612:4;26601:9;26597:20;26590:54;26700:4;26692:6;26688:17;26682:24;26675:4;26664:9;26660:20;26653:54;26754:4;26746:6;26742:17;26736:24;26769:51;26814:4;26803:9;26799:20;26785:12;9996:13;9989:21;9977:34;;9926:91;26769:51;-1:-1:-1;26876:4:1;26864:17;;;26858:24;26836:20;;;26829:54;26939:4;26927:17;;;26921:24;26899:20;;;26892:54;26965:6;27013:15;;;27007:22;26987:18;;;26980:50;27049:6;27097:15;;;27091:22;27071:18;;;27064:50;27133:6;27181:15;;;27175:22;27155:18;;;27148:50;27217:6;27265:15;;;27259:22;27239:18;;;27232:50;27301:6;27349:15;;;27343:22;27323:18;;;;27316:50;;;;26202:1170;:::o;27377:432::-;27631:3;27616:19;;27644:55;27620:9;27681:6;27644:55;:::i;:::-;27736:6;27730:3;27719:9;27715:19;27708:35;27794:6;27787:14;27780:22;27774:3;27763:9;27759:19;27752:51;27377:432;;;;;;:::o;27814:811::-;27998:4;28040:3;28029:9;28025:19;28017:27;;-1:-1:-1;;;;;28151:2:1;28142:6;28136:13;28132:22;28121:9;28114:41;28211:4;28203:6;28199:17;28193:24;28186:4;28175:9;28171:20;28164:54;28286:2;28278:4;28270:6;28266:17;28260:24;28256:33;28249:4;28238:9;28234:20;28227:63;;28346:4;28338:6;28334:17;28328:24;28321:4;28310:9;28306:20;28299:54;28409:4;28401:6;28397:17;28391:24;28384:4;28373:9;28369:20;28362:54;28463:4;28455:6;28451:17;28445:24;28478:46;28511:12;28478:46;:::i;:::-;28555:4;28540:20;;28533:42;28606:3;28591:19;;;28584:35;;;;27814:811;;-1:-1:-1;27814:811:1:o;29075:378::-;29287:25;;;29275:2;29260:18;;29321:40;29354:6;29321:40;:::i;:::-;29392:2;29377:18;;29370:34;;;;29435:2;29420:18;29413:34;29075:378;;-1:-1:-1;29075:378:1:o;29719:454::-;29896:6;29885:9;29878:25;29939:2;29934;29923:9;29919:18;29912:30;29859:4;29971:6;29965:13;30014:6;30009:2;29998:9;29994:18;29987:34;30030:66;30089:6;30084:2;30073:9;30069:18;30064:2;30056:6;30052:15;30030:66;:::i;:::-;30157:2;30136:15;-1:-1:-1;;30132:29:1;30117:45;;;;30164:2;30113:54;;29719:454;-1:-1:-1;;;29719:454:1:o;30178:349::-;30423:25;;;30410:3;30395:19;;30457:64;30517:2;30502:18;;30494:6;30457:64;:::i;31047:409::-;31119:2;31113:9;31161:6;31149:19;;31198:18;31183:34;;31219:22;;;31180:62;31177:242;;;-1:-1:-1;;;31272:1:1;31265:88;31376:4;31373:1;31366:15;31404:4;31401:1;31394:15;31177:242;31435:2;31428:22;31047:409;:::o;31461:401::-;31528:2;31522:9;31570:3;31558:16;;31604:18;31589:34;;31625:22;;;31586:62;31583:242;;;-1:-1:-1;;;31678:1:1;31671:88;31782:4;31779:1;31772:15;31810:4;31807:1;31800:15;31867:128;31907:3;31938:1;31934:6;31931:1;31928:13;31925:39;;;31944:18;;:::i;:::-;-1:-1:-1;31980:9:1;;31867:128::o;32000:274::-;32040:1;32066;32056:189;;-1:-1:-1;;;32098:1:1;32091:88;32202:4;32199:1;32192:15;32230:4;32227:1;32220:15;32056:189;-1:-1:-1;32259:9:1;;32000:274::o;32279:168::-;32319:7;32385:1;32381;32377:6;32373:14;32370:1;32367:21;32362:1;32355:9;32348:17;32344:45;32341:71;;;32392:18;;:::i;:::-;-1:-1:-1;32432:9:1;;32279:168::o;32452:125::-;32492:4;32520:1;32517;32514:8;32511:34;;;32525:18;;:::i;:::-;-1:-1:-1;32562:9:1;;32452:125::o;32582:258::-;32654:1;32664:113;32678:6;32675:1;32672:13;32664:113;;;32754:11;;;32748:18;32735:11;;;32728:39;32700:2;32693:10;32664:113;;;32795:6;32792:1;32789:13;32786:48;;;32830:1;32821:6;32816:3;32812:16;32805:27;32786:48;;32582:258;;;:::o;32845:184::-;-1:-1:-1;;;32894:1:1;32887:88;32994:4;32991:1;32984:15;33018:4;33015:1;33008:15;33034:184;-1:-1:-1;;;33083:1:1;33076:88;33183:4;33180:1;33173:15;33207:4;33204:1;33197:15;33223:269;33306:1;33299:5;33296:12;33286:200;;-1:-1:-1;;;33339:1:1;33332:88;33443:4;33440:1;33433:15;33471:4;33468:1;33461:15;33286:200;33223:269;:::o;33497:154::-;-1:-1:-1;;;;;33576:5:1;33572:54;33565:5;33562:65;33552:93;;33641:1;33638;33631:12;33656:118;33742:5;33735:13;33728:21;33721:5;33718:32;33708:60;;33764:1;33761;33754:12

Swarm Source

ipfs://5dec3529b37f38929b3b6b4d605ebac74a18fa136f97505a725dfd5de683b798
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.