ETH Price: $1,568.62 (-1.76%)
Gas: 0.06 GWei

Contract

0x07964f135f276412b3182a3B2407b8dd45000000
Transaction Hash
Method
Block
From
To
Cross182103372025-04-20 10:46:411 hr ago1745146001IN
0x07964f13...d45000000
0.00235051 ETH0.000008120.08323453
Aggregate182103232025-04-20 10:46:041 hr ago1745145964IN
0x07964f13...d45000000
0 ETH0.000020170.07766642
Exact Input V3Sw...182031742025-04-20 5:11:436 hrs ago1745125903IN
0x07964f13...d45000000
0.00231516 ETH0.000037020.12
Exact Input V3Sw...181858352025-04-19 13:16:5622 hrs ago1745068616IN
0x07964f13...d45000000
0.0032 ETH0.000013240.061036
Exact Input V3Sw...181858122025-04-19 13:15:5122 hrs ago1745068551IN
0x07964f13...d45000000
0 ETH0.000028740.11200005
Aggregate181857842025-04-19 13:14:3222 hrs ago1745068472IN
0x07964f13...d45000000
0.00938428 ETH0.000035740.10213303
Cross181837752025-04-19 11:41:5124 hrs ago1745062911IN
0x07964f13...d45000000
0 ETH0.000039670.0487319
Exact Input V3Sw...181348452025-04-17 19:47:132 days ago1744919233IN
0x07964f13...d45000000
0.00364223 ETH0.000036550.1016215
Exact Input V3Sw...181311812025-04-17 16:39:032 days ago1744907943IN
0x07964f13...d45000000
0 ETH0.000044580.21274257
Exact Input V3Sw...181311662025-04-17 16:38:242 days ago1744907904IN
0x07964f13...d45000000
0.0089 ETH0.0000650.33863472
Aggregate180934762025-04-16 12:29:173 days ago1744806557IN
0x07964f13...d45000000
0 ETH0.000018480.06062099
Cross180917962025-04-16 11:18:264 days ago1744802306IN
0x07964f13...d45000000
0 ETH0.000069560.06
Aggregate180735182025-04-15 21:32:014 days ago1744752721IN
0x07964f13...d45000000
0 ETH0.000017520.07754703
Cross180685092025-04-15 17:37:034 days ago1744738623IN
0x07964f13...d45000000
0.273 ETH0.000010180.1041433
Cross180559502025-04-15 9:08:125 days ago1744708092IN
0x07964f13...d45000000
0.002 ETH0.000007480.07668379
Cross180307462025-04-14 13:29:015 days ago1744637341IN
0x07964f13...d45000000
0.03804718 ETH0.000060520.61872838
Cross180232432025-04-14 8:11:246 days ago1744618284IN
0x07964f13...d45000000
0.02927394 ETH0.000010950.11194074
Cross180221212025-04-14 7:24:506 days ago1744615490IN
0x07964f13...d45000000
0.029 ETH0.00000680.06952813
Cross180206632025-04-14 6:21:426 days ago1744611702IN
0x07964f13...d45000000
0.02608 ETH0.000007170.07335009
Exact Input V3Sw...179832522025-04-13 0:52:257 days ago1744505545IN
0x07964f13...d45000000
0.02184251 ETH0.000022960.07059363
Cross179823892025-04-13 0:04:217 days ago1744502661IN
0x07964f13...d45000000
0.00103356 ETH0.000007490.07660429
Cross179738682025-04-12 16:35:197 days ago1744475719IN
0x07964f13...d45000000
0.00335443 ETH0.000008310.08503695
Cross179728152025-04-12 15:48:097 days ago1744472889IN
0x07964f13...d45000000
0.01013727 ETH0.000009220.09450258
Cross179721582025-04-12 15:19:257 days ago1744471165IN
0x07964f13...d45000000
0.00529792 ETH0.000020690.21153957
Cross179704142025-04-12 14:09:057 days ago1744466945IN
0x07964f13...d45000000
0.00076222 ETH0.000026750.10380883
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
182103372025-04-20 10:46:411 hr ago1745146001
0x07964f13...d45000000
0 ETH
182103372025-04-20 10:46:411 hr ago1745146001
0x07964f13...d45000000
0.00234581 ETH
182103232025-04-20 10:46:041 hr ago1745145964
0x07964f13...d45000000
0 ETH
182103232025-04-20 10:46:041 hr ago1745145964
0x07964f13...d45000000
0 ETH
182103232025-04-20 10:46:041 hr ago1745145964
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0 ETH
182031742025-04-20 5:11:436 hrs ago1745125903
0x07964f13...d45000000
0.00230822 ETH
181858352025-04-19 13:16:5622 hrs ago1745068616
0x07964f13...d45000000
0 ETH
181858352025-04-19 13:16:5622 hrs ago1745068616
0x07964f13...d45000000
0 ETH
181858352025-04-19 13:16:5622 hrs ago1745068616
0x07964f13...d45000000
0 ETH
181858352025-04-19 13:16:5622 hrs ago1745068616
0x07964f13...d45000000
0 ETH
181858352025-04-19 13:16:5622 hrs ago1745068616
0x07964f13...d45000000
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TransitSwapRouterV5

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 100 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 15: TransitSwapRouterV5.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.20;

import "./UniswapV2Router.sol";
import "./UniswapV3Router.sol";
import "./AggregateRouter.sol";
import "./CrossRouter.sol";

contract TransitSwapRouterV5 is UniswapV2Router, UniswapV3Router, AggregateRouter, CrossRouter  {

    function withdrawTokens(address[] memory tokens, address recipient) external onlyExecutor {
        for (uint index; index < tokens.length; index++) {
            uint amount;
            if (TransferHelper.isETH(tokens[index])) {
                amount = address(this).balance;
                TransferHelper.safeTransferETH(recipient, amount);
            } else {
                amount = IERC20(tokens[index]).balanceOf(address(this));
                TransferHelper.safeTransferWithoutRequire(tokens[index], recipient, amount);
            }
            emit Withdraw(tokens[index], msg.sender, recipient, amount);
        }
    }
}

File 2 of 15: AggregateRouter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./BaseCore.sol";

contract AggregateRouter is BaseCore {

    using SafeMath for uint256;

    constructor() {

    }

    function aggregateAndGasUsed(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount, uint256 gasUsed) {
        uint256 gasLeftBefore = gasleft();
        returnAmount = _executeAggregate(desc, callbytesDesc);
        gasUsed = gasLeftBefore - gasleft();
    }

    function aggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) external payable returns (uint256 returnAmount) {
        returnAmount = _executeAggregate(desc, callbytesDesc);
    }

    function _executeAggregate(TransitSwapDescription calldata desc, CallbytesDescription calldata callbytesDesc) internal nonReentrant whenNotPaused(FunctionFlag.executeAggregate) returns (uint256 returnAmount) {
        require(callbytesDesc.calldatas.length > 0, "data should be not zero");
        require(desc.amount > 0, "amount should be greater than 0");
        require(desc.dstReceiver != address(0), "receiver should be not address(0)");
        require(desc.minReturnAmount > 0, "minReturnAmount should be greater than 0");
        require(_wrapped_allowed[desc.wrappedToken], "invalid wrapped address");

        uint256 toBeforeBalance;
        address bridgeAddress = _aggregate_bridge;
        uint256 swapAmount = executeFunds(FunctionFlag.executeAggregate, desc.srcToken, desc.wrappedToken, bridgeAddress, desc.amount, desc.fee, desc.signature);

        if (TransferHelper.isETH(desc.dstToken)) {
            toBeforeBalance = desc.dstReceiver.balance;
        } else {
            toBeforeBalance = IERC20(desc.dstToken).balanceOf(desc.dstReceiver);
        }

        {
            //bytes4(keccak256(bytes('callbytes(CallbytesDescription)')));
            (bool success, bytes memory result) = bridgeAddress.call{value : swapAmount}(abi.encodeWithSelector(0x3f3204d2, callbytesDesc));
            if (!success) {
                revert(RevertReasonParser.parse(result, "TransitSwap:"));
            }
        }

        if (TransferHelper.isETH(desc.dstToken)) {
            returnAmount = desc.dstReceiver.balance.sub(toBeforeBalance);
        } else {
            returnAmount = IERC20(desc.dstToken).balanceOf(desc.dstReceiver).sub(toBeforeBalance);
        }
        require(returnAmount >= desc.minReturnAmount, "Too little received");

        _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, returnAmount, 0, desc.channel);

    }
}

File 3 of 15: BaseCore.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./Pausable.sol";
import "./ReentrancyGuard.sol";
import "./TransferHelper.sol";
import "./RevertReasonParser.sol";
import "./SafeMath.sol";
import "./Ownable.sol";
import "./IERC20.sol";
import "./IUniswapV2.sol";
import "./IUniswapV3Pool.sol";


contract BaseCore is Ownable, Pausable, ReentrancyGuard {

    using SafeMath for uint256;

    struct ExactInputV2SwapParams {
        address dstReceiver;
        address wrappedToken;
        uint256 router;
        uint256 amount;
        uint256 minReturnAmount;
        uint256 fee;
        address[] path;
        address[] pool;
        bytes signature;
        string channel;
    }

    struct ExactInputV3SwapParams {
        address srcToken;
        address dstToken;
        address dstReceiver;
        address wrappedToken;
        uint256 amount;
        uint256 minReturnAmount;
        uint256 fee;
        uint256 deadline;
        uint256[] pools;
        bytes signature;
        string channel;
    }

    struct TransitSwapDescription {
        address srcToken;
        address dstToken;
        address dstReceiver;
        address wrappedToken;
        uint256 amount;
        uint256 minReturnAmount;
        uint256 fee;
        string channel;
        bytes signature;
    }

    struct CrossDescription {
        address srcToken;
        address dstToken;
        address caller;
        address dstReceiver;
        address wrappedToken;
        uint256 amount;
        uint256 fee;
        uint256 toChain;
        string channel;
        bytes calls;
        bytes signature;
    }

    struct CallbytesDescription {
        address srcToken;
        bytes calldatas;
    }

    struct UniswapV3Pool {
        address factory;
        bytes initCodeHash;
    }

    uint256 internal _aggregate_fee;
    uint256 internal _cross_fee;
    address internal _aggregate_bridge;
    address internal _fee_signer;
    address internal _vault;
    bytes32 public DOMAIN_SEPARATOR;
    //whitelist cross's caller
    mapping(address => bool) internal _cross_caller_allowed;
    //whitelist wrapped
    mapping(address => bool) internal _wrapped_allowed;
    //whitelist uniswap v3 factory
    mapping(uint => UniswapV3Pool) internal _uniswapV3_factory_allowed;
    bytes32 public constant CHECKFEE_TYPEHASH = keccak256("CheckFee(address payer,uint256 amount,uint256 fee)");

    event Receipt(address from, uint256 amount);
    event Withdraw(address indexed token, address indexed executor, address indexed recipient, uint amount);
    event ChangeWrappedAllowed(address[] wrappedTokens, bool[] newAllowed);
    event ChangeV3FactoryAllowed(uint256[] poolIndex, address[] factories, bytes[] initCodeHash);
    event ChangeCrossCallerAllowed(address[] callers);
    event ChangeFeeRate(bool isAggregate, uint256 newRate);
    event ChangeSigner(address preSigner, address newSigner);
    event ChangeAggregateBridge(address newBridge);
    event ChangeVault(address preVault, address newVault);
    event TransitSwapped(address indexed srcToken, address indexed dstToken, address indexed dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string channel);
    
    constructor() Ownable(msg.sender) {
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes("TransitSwapV5")),
                keccak256(bytes("5")),
                block.chainid,
                address(this)
            )
        );
    }

    receive() external payable {
        emit Receipt(msg.sender, msg.value);
    }

    function calculateTradeFee(bool isAggregate, uint256 tradeAmount, uint256 fee, bytes calldata signature) internal view returns (uint256) {
        uint256 thisFee;
        if (isAggregate) {
            thisFee = tradeAmount.mul(_aggregate_fee).div(10000);
        } else {
            thisFee = tradeAmount.mul(_cross_fee).div(10000);
        }
        if (fee < thisFee) {
            require(verifySignature(tradeAmount, fee, signature), "Invalid signature fee");
        }
        return tradeAmount.sub(fee);
    }

    function _emitTransit(address srcToken, address dstToken, address dstReceiver, uint256 amount, uint256 returnAmount, uint256 toChainID, string memory channel) internal {
        emit TransitSwapped (
            srcToken, 
            dstToken, 
            dstReceiver,
            amount,
            returnAmount,
            toChainID,
            channel
        );
    }

    function changeFee(bool[] memory isAggregate, uint256[] memory newRate) external onlyExecutor {
        for (uint i; i < isAggregate.length; i++) {
            require(newRate[i] >= 0 && newRate[i] <= 1000, "fee rate is:0-1000");
            if (isAggregate[i]) {
                _aggregate_fee = newRate[i];
            } else {
                _cross_fee = newRate[i];
            }
            emit ChangeFeeRate(isAggregate[i], newRate[i]);
        }
    }

    function changeTransitProxy(address aggregator, address signer, address vault) external onlyExecutor {
        if (aggregator != address(0)) {
            _aggregate_bridge = aggregator;
            emit ChangeAggregateBridge(aggregator);
        }
        if (signer != address(0)) {
            address preSigner = _fee_signer;
            _fee_signer = signer;
            emit ChangeSigner(preSigner, signer);
        }
        if (vault != address(0)) {
            address preVault = _vault;
            _vault = vault;
            emit ChangeVault(preVault, vault);
        }
    }

    function changeAllowed(address[] calldata crossCallers, address[] calldata wrappedTokens) public onlyExecutor {
        if(crossCallers.length != 0){
            for (uint i; i < crossCallers.length; i++) {
                _cross_caller_allowed[crossCallers[i]] = !_cross_caller_allowed[crossCallers[i]];
            }
            emit ChangeCrossCallerAllowed(crossCallers);
        }
        if(wrappedTokens.length != 0) {
            bool[] memory newAllowed = new bool[](wrappedTokens.length);
            for (uint index; index < wrappedTokens.length; index++) {
                _wrapped_allowed[wrappedTokens[index]] = !_wrapped_allowed[wrappedTokens[index]];
                newAllowed[index] = _wrapped_allowed[wrappedTokens[index]];
            }
            emit ChangeWrappedAllowed(wrappedTokens, newAllowed);
        }
    }

    function changeUniswapV3FactoryAllowed(uint[] calldata poolIndex, address[] calldata factories, bytes[] calldata initCodeHash) public onlyExecutor {
        require(poolIndex.length == initCodeHash.length, "invalid data");
        require(factories.length == initCodeHash.length, "invalid data");
        uint len = factories.length;
        for (uint i; i < len; i++) {
            _uniswapV3_factory_allowed[poolIndex[i]] = UniswapV3Pool(factories[i],initCodeHash[i]);
        }
        emit ChangeV3FactoryAllowed(poolIndex, factories, initCodeHash);
    }

    function changePause(bool paused, FunctionFlag[] calldata flags) external onlyExecutor {
        uint len = flags.length;
        for (uint i; i < len; i++) {
            if (paused) {
                _pause(flags[i]);
            } else {
                _unpause(flags[i]);
            }
        }
    }

    function transitProxyAddress() external view returns (address bridgeProxy, address feeSigner) {
        bridgeProxy = _aggregate_bridge;
        feeSigner = _fee_signer;
    }

    function transitFee() external view returns (uint256, uint256, address) {
        return (_aggregate_fee, _cross_fee, _vault);
    }

    function transitAllowedQuery(address crossCaller, address wrappedToken, uint256 poolIndex) external view returns (bool isCrossCallerAllowed, bool isWrappedAllowed, UniswapV3Pool memory pool) {
        isCrossCallerAllowed = _cross_caller_allowed[crossCaller];
        isWrappedAllowed = _wrapped_allowed[wrappedToken];
        pool = _uniswapV3_factory_allowed[poolIndex];
    }

    function verifySignature(uint256 amount, uint256 fee, bytes calldata signature) internal view returns (bool) {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(CHECKFEE_TYPEHASH, msg.sender, amount, fee))
            )
        );
        (uint8 v, bytes32 r, bytes32 s) = splitSignature(signature);
        address recovered = ecrecover(digest, v, r, s);
        return recovered == _fee_signer;
    }

    function splitSignature(bytes memory _signature) internal pure returns (uint8 v, bytes32 r, bytes32 s) {
        require(bytes(_signature).length == 65, "Invalid signature length");

        assembly {
            r := mload(add(_signature, 0x20))
            s := mload(add(_signature, 0x40))
            v := byte(0, mload(add(_signature, 0x60)))
        }

        return (v, r, s);
    }

    function splitFee(uint256 fee) internal view returns (bool isToVault, uint256 vaultFee) {
        uint vaultFlag = fee % 10;
        vaultFee = (fee.sub(vaultFlag)).div(10);
        if (vaultFlag == 1 && vaultFee > 0 && _vault != address(0)) {
            isToVault = true;
        }
    }

    function executeFunds(FunctionFlag flag, address srcToken, address wrappedToken, address caller, uint256 amount, uint256 fee, bytes calldata signature) internal returns (uint256 swapAmount) {
        (bool isToVault, uint256 vaultFee) = splitFee(fee);
        bool isAggregate = flag == FunctionFlag.cross ? false : true;
        uint256 actualAmountIn = calculateTradeFee(isAggregate, amount, vaultFee, signature);
        if (TransferHelper.isETH(srcToken)) {
            if (flag == FunctionFlag.cross) {
                require(msg.value >= amount, "invalid msg.value");
                swapAmount = msg.value.sub(vaultFee);
            } else {
                require(msg.value == amount, "invalid msg.value");
                swapAmount = actualAmountIn;
            }
            if (wrappedToken != address(0)) {
                require(_wrapped_allowed[wrappedToken], "Invalid wrapped address");
                if (flag == FunctionFlag.cross) {
                    TransferHelper.safeDeposit(wrappedToken, swapAmount);
                    TransferHelper.safeApprove(wrappedToken, caller, swapAmount);
                    swapAmount = 0;
                } else if (flag == FunctionFlag.executeV3Swap) {
                    TransferHelper.safeDeposit(wrappedToken, actualAmountIn);
                }
            }
            if (isToVault) {
                TransferHelper.safeTransferETH(_vault, vaultFee);
            }
        } else {
            TransferHelper.safeTransferFrom(srcToken, msg.sender, address(this), amount);
            if (flag == FunctionFlag.cross) {
                TransferHelper.safeApprove(srcToken, caller, actualAmountIn);
                swapAmount = msg.value;
            } else if (flag == FunctionFlag.executeAggregate) {
                TransferHelper.safeTransfer(srcToken, caller, actualAmountIn);
            } else if (flag == FunctionFlag.executeV3Swap) {
                swapAmount = actualAmountIn;
            }
            if (isToVault) {
                TransferHelper.safeTransferWithoutRequire(srcToken, _vault, vaultFee);
            }
        }
    }

}

File 4 of 15: CrossRouter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./BaseCore.sol";

contract CrossRouter is BaseCore {

    using SafeMath for uint256;

    constructor() {}

    function cross(CrossDescription calldata desc) external payable nonReentrant whenNotPaused(FunctionFlag.cross) {
        require(desc.calls.length > 0, "data should be not zero");
        require(desc.amount > 0, "amount should be greater than 0");
        require(_cross_caller_allowed[desc.caller], "invalid caller");
        
        uint256 swapAmount = executeFunds(FunctionFlag.cross, desc.srcToken, desc.wrappedToken, desc.caller, desc.amount, desc.fee, desc.signature);

        {
            (bool success, bytes memory result) = desc.caller.call{value:swapAmount}(desc.calls);
            if (!success) {
                revert(RevertReasonParser.parse(result, "TransitCrossV5:"));
            }
            TransferHelper.safeApprove(desc.srcToken, desc.caller, 0);
        }

        _emitTransit(desc.srcToken, desc.dstToken, desc.dstReceiver, desc.amount, 0, desc.toChain, desc.channel);
    } 
}

File 5 of 15: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.9;

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

File 6 of 15: IUniswapV2.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.9;

interface IUniswapV2 {
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountsOut(uint amountIn, address[] memory path) external view returns (uint[] memory amounts);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

File 7 of 15: IUniswapV3Pool.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IUniswapV3Pool {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function fee() external view returns (uint24);
    function swap(
        address recipient,
        bool zeroForOne,
        int256 amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes calldata data
    ) external returns (int256 amount0, int256 amount1);
}

File 8 of 15: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
// Add executor extension

pragma solidity ^0.8.0;

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

    address private _executor;
    address private _pendingExecutor;
    bool internal _initialized;

    event ExecutorshipTransferStarted(address indexed previousExecutor, address indexed newExecutor);
    event ExecutorshipTransferred(address indexed previousExecutor, address indexed newExecutor);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address newExecutor) {
        require(!_initialized, "Ownable: initialized");
        _transferExecutorship(newExecutor);
        _initialized = true;
    }

    /**
     * @dev Throws if called by any account other than the executor.
     */
    modifier onlyExecutor() {
        _checkExecutor();
        _;
    }

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

    /**
     * @dev Returns the address of the pending executor.
     */
    function pendingExecutor() public view virtual returns (address) {
        return _pendingExecutor;
    }

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

    /**
     * @dev Transfers executorship of the contract to a new account (`newExecutor`).
     * Can only be called by the current executor.
     */
    function transferExecutorship(address newExecutor) public virtual onlyExecutor {
        _pendingExecutor = newExecutor;
        emit ExecutorshipTransferStarted(executor(), newExecutor);
    }

    function _transferExecutorship(address newExecutor) internal virtual {
        delete _pendingExecutor;
        address oldExecutor = _executor;
        _executor = newExecutor;
        emit ExecutorshipTransferred(oldExecutor, newExecutor);
    }

    function acceptExecutorship() external {
        address sender = msg.sender;
        require(pendingExecutor() == sender, "Ownable: caller is not the new executor");
        _transferExecutorship(sender);
    }
}

File 9 of 15: Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account, FunctionFlag flag);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account, FunctionFlag flag);

    mapping(FunctionFlag => bool) private _paused;

    enum FunctionFlag {executeAggregate, executeV2Swap, executeV3Swap, cross}

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused(FunctionFlag flag) {
        _requireNotPaused(flag);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused(FunctionFlag flag) {
        _requirePaused(flag);
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused(FunctionFlag flag) public view virtual returns (bool) {
        return _paused[flag];
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused(FunctionFlag flag) internal view virtual {
        require(!paused(flag), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused(FunctionFlag flag) internal view virtual {
        require(paused(flag), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause(FunctionFlag flag) internal virtual whenNotPaused(flag) {
        _paused[flag] = true;
        emit Paused(msg.sender, flag);
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause(FunctionFlag flag) internal virtual whenPaused(flag) {
        _paused[flag] = false;
        emit Unpaused(msg.sender, flag);
    }

    function pausedOverAll() public view virtual returns (bool executeAggregate, bool executeV2Swap, bool executeV3Swap, bool cross) {
        executeAggregate = _paused[FunctionFlag.executeAggregate];
        executeV2Swap = _paused[FunctionFlag.executeV2Swap];
        executeV3Swap = _paused[FunctionFlag.executeV3Swap];
        cross = _paused[FunctionFlag.cross];
    }
}

File 10 of 15: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        assembly {
            sstore(_status.slot, _ENTERED)
        }
        _;
        assembly {
            sstore(_status.slot, _NOT_ENTERED)
        }
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 11 of 15: RevertReasonParser.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

library RevertReasonParser {
        function parse(bytes memory data, string memory prefix) internal pure returns (string memory) {
        // https://solidity.readthedocs.io/en/latest/control-structures.html#revert
        // We assume that revert reason is abi-encoded as Error(string)

        // 68 = 4-byte selector 0x08c379a0 + 32 bytes offset + 32 bytes length
        if (data.length >= 68 && data[0] == "\x08" && data[1] == "\xc3" && data[2] == "\x79" && data[3] == "\xa0") {
            string memory reason;
            // solhint-disable no-inline-assembly
            assembly {
                // 68 = 32 bytes data length + 4-byte selector + 32 bytes offset
                reason := add(data, 68)
            }
            /*
                revert reason is padded up to 32 bytes with ABI encoder: Error(string)
                also sometimes there is extra 32 bytes of zeros padded in the end:
                https://github.com/ethereum/solidity/issues/10170
                because of that we can't check for equality and instead check
                that string length + extra 68 bytes is less than overall data length
            */
            require(data.length >= 68 + bytes(reason).length, "Invalid revert reason");
            return string(abi.encodePacked(prefix, "Error(", reason, ")"));
        }
        // 36 = 4-byte selector 0x4e487b71 + 32 bytes integer
        else if (data.length == 36 && data[0] == "\x4e" && data[1] == "\x48" && data[2] == "\x7b" && data[3] == "\x71") {
            uint256 code;
            // solhint-disable no-inline-assembly
            assembly {
                // 36 = 32 bytes data length + 4-byte selector
                code := mload(add(data, 36))
            }
            return string(abi.encodePacked(prefix, "Panic(", _toHex(code), ")"));
        }

        return string(abi.encodePacked(prefix, "Unknown(", _toHex(data), ")"));
    }
    
    function _toHex(uint256 value) private pure returns(string memory) {
        return _toHex(abi.encodePacked(value));
    }

    function _toHex(bytes memory data) private pure returns(string memory) {
        bytes16 alphabet = 0x30313233343536373839616263646566;
        bytes memory str = new bytes(2 + data.length * 2);
        str[0] = "0";
        str[1] = "x";
        for (uint256 i = 0; i < data.length; i++) {
            str[2 * i + 2] = alphabet[uint8(data[i] >> 4)];
            str[2 * i + 3] = alphabet[uint8(data[i] & 0x0f)];
        }
        return string(str);
    }
}

File 12 of 15: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

library SafeMath {

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

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
    
    function div(uint x, uint y) internal pure returns (uint z) {
        require(y != 0 , 'ds-math-div-zero');
        z = x / y;
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }

    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }
}

File 13 of 15: TransferHelper.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

library TransferHelper {
    
    address private constant _ETH_ADDRESS = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    address private constant _ZERO_ADDRESS = address(0);
    
    function isETH(address token) internal pure returns (bool) {
        return (token == _ZERO_ADDRESS || token == _ETH_ADDRESS);
    }
    
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_TOKEN_FAILED');
    }

    function safeTransferWithoutRequire(address token, address to, uint256 value) internal returns (bool) {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        return (success && (data.length == 0 || abi.decode(data, (bool))));
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        // solium-disable-next-line
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: TRANSFER_FAILED');
    }

    function safeDeposit(address wrapped, uint value) internal {
        // bytes4(keccak256(bytes('deposit()')));
        (bool success, bytes memory data) = wrapped.call{value:value}(abi.encodeWithSelector(0xd0e30db0));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: DEPOSIT_FAILED');
    }

    function safeWithdraw(address wrapped, uint value) internal {
        // bytes4(keccak256(bytes('withdraw(uint256 wad)')));
        (bool success, bytes memory data) = wrapped.call{value:0}(abi.encodeWithSelector(0x2e1a7d4d, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: WITHDRAW_FAILED');
    }
}

File 14 of 15: UniswapV2Router.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./BaseCore.sol";

contract UniswapV2Router is BaseCore {

    using SafeMath for uint256;

    constructor() {

    }

    function _beforeSwap(ExactInputV2SwapParams calldata exactInput, bool supportingFeeOn) internal returns (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) {
        require(exactInput.path.length == exactInput.pool.length + 1, "Invalid path");
        require(_wrapped_allowed[exactInput.wrappedToken], "Invalid wrapped address");

        (bool isToVault, uint256 vaultFee) = splitFee(exactInput.fee);
        actualAmountIn = calculateTradeFee(true, exactInput.amount, vaultFee, exactInput.signature);
        address[] memory path = exactInput.path;
        address dstToken = path[exactInput.path.length - 1];
        if (TransferHelper.isETH(exactInput.path[0])) {
            require(msg.value == exactInput.amount, "Invalid msg.value");
            if (isToVault) {
                TransferHelper.safeTransferETH(_vault, vaultFee);
            }
            path[0] = exactInput.wrappedToken;
            TransferHelper.safeDeposit(exactInput.wrappedToken, actualAmountIn);
        } else {
            if (supportingFeeOn) {
                actualAmountIn = IERC20(path[0]).balanceOf(address(this));
                TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount);
                actualAmountIn = IERC20(path[0]).balanceOf(address(this)).sub(actualAmountIn).sub(exactInput.fee);
            } else {
                TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), exactInput.amount);
            }
            if (isToVault) {
                TransferHelper.safeTransferWithoutRequire(path[0], _vault, vaultFee);
            }
        }
        if (TransferHelper.isETH(dstToken)) {
            path[path.length - 1] = exactInput.wrappedToken;
            isToETH = true;
            thisAddressBeforeBalance = IERC20(exactInput.wrappedToken).balanceOf(address(this));
        } else {
            if (supportingFeeOn) {
                toBeforeBalance = IERC20(dstToken).balanceOf(exactInput.dstReceiver);
            }
        }
        paths = path;
    }

    function exactInputV2SwapAndGasUsed(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount, uint256 gasUsed) {
        uint256 gasLeftBefore = gasleft();
        returnAmount = _executeV2Swap(exactInput, deadline);
        gasUsed = gasLeftBefore - gasleft();
    }

    function exactInputV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) external payable returns (uint256 returnAmount) {
        returnAmount = _executeV2Swap(exactInput, deadline);
    }

    function _executeV2Swap(ExactInputV2SwapParams calldata exactInput, uint256 deadline) internal nonReentrant whenNotPaused(FunctionFlag.executeV2Swap) returns (uint256 returnAmount) {
        require(deadline >= block.timestamp, "Expired");
        
        bool supportingFeeOn = exactInput.router >> 248 & 0xf == 1;
        {
            (bool isToETH, uint256 actualAmountIn, address[] memory paths, uint256 thisAddressBeforeBalance, uint256 toBeforeBalance) = _beforeSwap(exactInput, supportingFeeOn);
            
            TransferHelper.safeTransfer(paths[0], exactInput.pool[0], actualAmountIn);

            if (supportingFeeOn) {
                if(isToETH) {
                    _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, address(this));
                    returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance);
                } else {
                    _swapSupportingFeeOnTransferTokens(address(uint160(exactInput.router)), paths, exactInput.pool, exactInput.dstReceiver);
                    returnAmount = IERC20(paths[paths.length - 1]).balanceOf(exactInput.dstReceiver).sub(toBeforeBalance);
                }
            } else {
                uint[] memory amounts = IUniswapV2(address(uint160(exactInput.router))).getAmountsOut(actualAmountIn, paths);
                if(isToETH) {
                    _swap(amounts, paths, exactInput.pool, address(this));
                    returnAmount = IERC20(exactInput.wrappedToken).balanceOf(address(this)).sub(thisAddressBeforeBalance);
                } else {
                    _swap(amounts, paths, exactInput.pool, exactInput.dstReceiver);
                    returnAmount = IERC20(paths[paths.length - 1]).balanceOf(exactInput.dstReceiver).sub(toBeforeBalance);
                }
            }

            require(returnAmount >= exactInput.minReturnAmount, "Too little received");
            if (isToETH) {
                TransferHelper.safeWithdraw(exactInput.wrappedToken, returnAmount);
                TransferHelper.safeTransferETH(exactInput.dstReceiver, returnAmount);
            }
        }
        string memory channel = exactInput.channel;

        _emitTransit(exactInput.path[0], exactInput.path[exactInput.path.length - 1], exactInput.dstReceiver, exactInput.amount, returnAmount, 0, channel);
        
    }

    function _swap(uint[] memory amounts, address[] memory path, address[] memory pool, address _to) internal {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = input < output ? (input, output) : (output, input);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? pool[i + 1] : _to;
            IUniswapV2(pool[i]).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    function _swapSupportingFeeOnTransferTokens(address router, address[] memory path, address[] memory pool, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = input < output ? (input, output) : (output, input);
            IUniswapV2 pair = IUniswapV2(pool[i]);
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
                (uint reserve0, uint reserve1,) = pair.getReserves();
                (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
                amountOutput = IUniswapV2(router).getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? pool[i + 1] : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

}

File 15 of 15: UniswapV3Router.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./BaseCore.sol";

contract UniswapV3Router is BaseCore {

    using SafeMath for uint256;

    uint256 private constant _ZERO_FOR_ONE_MASK = 1 << 255;
    uint160 private constant MIN_SQRT_RATIO = 4295128739;
    uint160 private constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

    constructor() {}

    fallback() external {
        (int256 amount0Delta, int256 amount1Delta, bytes memory _data) = abi.decode(msg.data[4:], (int256,int256,bytes));
        _executeCallback(amount0Delta, amount1Delta, _data);
    }

    function pancakeV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        _executeCallback(amount0Delta, amount1Delta, _data);
    }

    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        _executeCallback(amount0Delta, amount1Delta, _data);
    }

    function _executeCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes memory _data
    ) internal {
        require(amount0Delta > 0 || amount1Delta > 0, "M0 or M1"); // swaps entirely within 0-liquidity regions are not supported
        (uint256 pool, bytes memory tokenInAndPoolSalt) = abi.decode(_data, (uint256, bytes));
        (address tokenIn, bytes32 poolSalt) = abi.decode(tokenInAndPoolSalt, (address, bytes32));
        _verifyCallback(pool, poolSalt, msg.sender);

        uint256 amountToPay = uint256(amount1Delta);
        if (amount0Delta > 0) {
            amountToPay = uint256(amount0Delta);
        }

        TransferHelper.safeTransfer(tokenIn, msg.sender, amountToPay);
    }

    function exactInputV3SwapAndGasUsed(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount, uint256 gasUsed) {
        uint256 gasLeftBefore = gasleft();
        returnAmount = _executeV3Swap(params);
        gasUsed = gasLeftBefore - gasleft();

    }

    function exactInputV3Swap(ExactInputV3SwapParams calldata params) external payable returns (uint256 returnAmount) {
        returnAmount = _executeV3Swap(params);
    }

    function _executeV3Swap(ExactInputV3SwapParams calldata params) internal nonReentrant whenNotPaused(FunctionFlag.executeV3Swap) returns (uint256 returnAmount) {
        require(params.pools.length > 0, "Empty pools");
        require(params.deadline >= block.timestamp, "Expired");
        require(_wrapped_allowed[params.wrappedToken], "Invalid wrapped address");
        address tokenIn = params.srcToken;
        address tokenOut = params.dstToken;

        uint256 toBeforeBalance;
        bool isToETH;
        if (TransferHelper.isETH(params.srcToken)) {
            tokenIn = params.wrappedToken;
        }
        uint256 actualAmountIn = executeFunds(FunctionFlag.executeV3Swap, params.srcToken, params.wrappedToken, address(0), params.amount, params.fee, params.signature);

        if (TransferHelper.isETH(params.dstToken)) {
            tokenOut = params.wrappedToken;
            toBeforeBalance = IERC20(params.wrappedToken).balanceOf(address(this));
            isToETH = true;
        } else {
            toBeforeBalance = IERC20(params.dstToken).balanceOf(params.dstReceiver);
        }

        {
            uint256 len = params.pools.length;
            address recipient = address(this);
            bytes memory tokenInAndPoolSalt;
            if (len > 1) {
                address thisTokenIn = tokenIn;
                address thisTokenOut = address(0);
                for (uint256 i; i < len; i++) {
                    uint256 thisPool = params.pools[i];
                    (thisTokenIn, tokenInAndPoolSalt) = _verifyPool(thisTokenIn, thisTokenOut, thisPool);
                    if (i == len - 1 && !isToETH) {
                        recipient = params.dstReceiver;
                        thisTokenOut = tokenOut;
                    } 
                    actualAmountIn = _swap(recipient, thisPool, tokenInAndPoolSalt, actualAmountIn);
                }
                returnAmount = actualAmountIn;
            } else {
                (, tokenInAndPoolSalt) = _verifyPool(tokenIn, tokenOut, params.pools[0]);
                if (!isToETH) {
                    recipient = params.dstReceiver;
                }
                returnAmount = _swap(recipient, params.pools[0], tokenInAndPoolSalt, actualAmountIn);
            }
        }

        if (isToETH) {
            returnAmount = IERC20(params.wrappedToken).balanceOf(address(this)).sub(toBeforeBalance);
            require(returnAmount >= params.minReturnAmount, "Too little received");
            TransferHelper.safeWithdraw(params.wrappedToken, returnAmount);
            TransferHelper.safeTransferETH(params.dstReceiver, returnAmount);
        } else {
            returnAmount = IERC20(params.dstToken).balanceOf(params.dstReceiver).sub(toBeforeBalance);
            require(returnAmount >= params.minReturnAmount, "Too little received");
        }
        
        _emitTransit(params.srcToken, params.dstToken, params.dstReceiver, params.amount, returnAmount, 0, params.channel);

    }

    function _swap(address recipient, uint256 pool, bytes memory tokenInAndPoolSalt, uint256 amount) internal returns (uint256 amountOut) {
        bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0;
        if (zeroForOne) {
            (, int256 amount1) =
                IUniswapV3Pool(address(uint160(pool))).swap(
                    recipient,
                    zeroForOne,
                    amount.toInt256(),
                    MIN_SQRT_RATIO + 1,
                    abi.encode(pool, tokenInAndPoolSalt)
                );
            amountOut = SafeMath.toUint256(-amount1);
        } else {
            (int256 amount0,) =
                IUniswapV3Pool(address(uint160(pool))).swap(
                    recipient,
                    zeroForOne,
                    amount.toInt256(),
                    MAX_SQRT_RATIO - 1,
                    abi.encode(pool, tokenInAndPoolSalt)
                );
            amountOut = SafeMath.toUint256(-amount0);
        }
    }

    function _verifyPool(address tokenIn, address tokenOut, uint256 pool) internal view returns (address nextTokenIn, bytes memory tokenInAndPoolSalt) {
        IUniswapV3Pool iPool = IUniswapV3Pool(address(uint160(pool)));
        address token0 = iPool.token0();
        address token1 = iPool.token1();
        uint24 fee = iPool.fee();
        bytes32 poolSalt = keccak256(abi.encode(token0, token1, fee));

        bool zeroForOne = pool & _ZERO_FOR_ONE_MASK == 0;
        if (zeroForOne) {
            require(tokenIn == token0, "Bad pool");
            if (tokenOut != address(0)) {
                require(tokenOut == token1, "Bad pool");
            }
            nextTokenIn = token1;
            tokenInAndPoolSalt = abi.encode(token0, poolSalt);
        } else {
            require(tokenIn == token1, "Bad pool");
            if (tokenOut != address(0)) {
                require(tokenOut == token0, "Bad pool");
            }
            nextTokenIn = token0;
            tokenInAndPoolSalt = abi.encode(token1, poolSalt);
        }
        _verifyCallback(pool, poolSalt, address(uint160(pool)));
    }

    function _verifyCallback(uint256 pool, bytes32 poolSalt, address caller) internal view {
        uint poolDigit = pool >> 248 & 0xf;
        UniswapV3Pool memory v3Pool = _uniswapV3_factory_allowed[poolDigit];
        require(v3Pool.factory != address(0), "Callback bad pool indexed");
        address calcPool = address(
            uint160(
                uint256(
                    keccak256(
                        abi.encodePacked(
                            hex'ff',
                            v3Pool.factory,
                            poolSalt,
                            v3Pool.initCodeHash
                        )
                    )
                )
            )
        );
        require(calcPool == caller, "Callback bad pool");
    }

}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newBridge","type":"address"}],"name":"ChangeAggregateBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"callers","type":"address[]"}],"name":"ChangeCrossCallerAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isAggregate","type":"bool"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ChangeFeeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preSigner","type":"address"},{"indexed":false,"internalType":"address","name":"newSigner","type":"address"}],"name":"ChangeSigner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"indexed":false,"internalType":"address[]","name":"factories","type":"address[]"},{"indexed":false,"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"ChangeV3FactoryAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"preVault","type":"address"},{"indexed":false,"internalType":"address","name":"newVault","type":"address"}],"name":"ChangeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"wrappedTokens","type":"address[]"},{"indexed":false,"internalType":"bool[]","name":"newAllowed","type":"bool[]"}],"name":"ChangeWrappedAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousExecutor","type":"address"},{"indexed":true,"internalType":"address","name":"newExecutor","type":"address"}],"name":"ExecutorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Receipt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"srcToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstToken","type":"address"},{"indexed":true,"internalType":"address","name":"dstReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"string","name":"channel","type":"string"}],"name":"TransitSwapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"executor","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"CHECKFEE_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.TransitSwapDescription","name":"desc","type":"tuple"},{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"bytes","name":"calldatas","type":"bytes"}],"internalType":"struct BaseCore.CallbytesDescription","name":"callbytesDesc","type":"tuple"}],"name":"aggregateAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"crossCallers","type":"address[]"},{"internalType":"address[]","name":"wrappedTokens","type":"address[]"}],"name":"changeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool[]","name":"isAggregate","type":"bool[]"},{"internalType":"uint256[]","name":"newRate","type":"uint256[]"}],"name":"changeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"enum Pausable.FunctionFlag[]","name":"flags","type":"uint8[]"}],"name":"changePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"vault","type":"address"}],"name":"changeTransitProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"poolIndex","type":"uint256[]"},{"internalType":"address[]","name":"factories","type":"address[]"},{"internalType":"bytes[]","name":"initCodeHash","type":"bytes[]"}],"name":"changeUniswapV3FactoryAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"toChain","type":"uint256"},{"internalType":"string","name":"channel","type":"string"},{"internalType":"bytes","name":"calls","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct BaseCore.CrossDescription","name":"desc","type":"tuple"}],"name":"cross","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"router","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"pool","type":"address[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV2SwapParams","name":"exactInput","type":"tuple"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"exactInputV2SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3Swap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"srcToken","type":"address"},{"internalType":"address","name":"dstToken","type":"address"},{"internalType":"address","name":"dstReceiver","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256[]","name":"pools","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"channel","type":"string"}],"internalType":"struct BaseCore.ExactInputV3SwapParams","name":"params","type":"tuple"}],"name":"exactInputV3SwapAndGasUsed","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Pausable.FunctionFlag","name":"flag","type":"uint8"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausedOverAll","outputs":[{"internalType":"bool","name":"executeAggregate","type":"bool"},{"internalType":"bool","name":"executeV2Swap","type":"bool"},{"internalType":"bool","name":"executeV3Swap","type":"bool"},{"internalType":"bool","name":"cross","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newExecutor","type":"address"}],"name":"transferExecutorship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"crossCaller","type":"address"},{"internalType":"address","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"poolIndex","type":"uint256"}],"name":"transitAllowedQuery","outputs":[{"internalType":"bool","name":"isCrossCallerAllowed","type":"bool"},{"internalType":"bool","name":"isWrappedAllowed","type":"bool"},{"components":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"bytes","name":"initCodeHash","type":"bytes"}],"internalType":"struct BaseCore.UniswapV3Pool","name":"pool","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transitProxyAddress","outputs":[{"internalType":"address","name":"bridgeProxy","type":"address"},{"internalType":"address","name":"feeSigner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506001543390600160a01b900460ff1615620000735760405162461bcd60e51b815260206004820152601460248201527f4f776e61626c653a20696e697469616c697a6564000000000000000000000000604482015260640160405180910390fd5b6200007e8162000176565b506001805460ff60a01b1916600160a01b1781556003819055604080518082018252600d81526c5472616e73697453776170563560981b60209182015281518083018352928352603560f81b9281019290925280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f928101929092527f20b7d1a4a088b240a0e093c572f43e31015ce187a55e6f343e049dcb744e5341908201527fceebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c160608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600955620001d0565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b615f2180620001e06000396000f3fe6080604052600436106101655760003560e01c80637ec753fe116100c1578063b9b5149b1161007a578063b9b5149b14610538578063bf5c55a21461054b578063c34c08e51461056b578063d63234e014610592578063d808d889146105b0578063fa461e3314610289578063fa9ec7af146105c3576101a5565b80637ec753fe1461048357806392bcc8be146104a357806394d3d793146104c3578063afed2d0e146104d8578063b93c0beb146104f8578063b946fd3b14610518576101a5565b80633644e5151161011e5780633644e515146102d15780633c481d57146102e75780634c42342f146103bf5780635ac86ab7146103d25780636b3ec416146104025780636fbf72f9146104155780637e467ecf1461044f576101a5565b80630ced9fb9146101e35780630dc4bdae146102195780630e8cc7051461023a5780631975b0961461025a57806323a69e75146102895780632adb806f146102a9576101a5565b366101a5577f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef333460405161019b929190614b58565b60405180910390a1005b3480156101b157600080fd5b50600080806101c33660048184614b71565b8101906101d09190614c08565b9250925092506101e18383836105d6565b005b3480156101ef57600080fd5b50600654600754604051610210926001600160a01b03908116921690614c9a565b60405180910390f35b61022c610227366004614cb4565b610684565b604051908152602001610210565b34801561024657600080fd5b506101e1610255366004614d46565b610697565b34801561026657600080fd5b5061027a610275366004614df1565b61081b565b60405161021093929190614e82565b34801561029557600080fd5b506101e16102a4366004614ec0565b61091d565b6102bc6102b7366004614f3f565b610964565b60408051928352602083019190915201610210565b3480156102dd57600080fd5b5061022c60095481565b3480156102f357600080fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460036000527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff9384169392831692918216911660408051941515855292151560208501529015159183019190915215156060820152608001610210565b6102bc6103cd366004614fcb565b61098d565b3480156103de57600080fd5b506103f26103ed366004615007565b6109b3565b6040519015158152602001610210565b6101e1610410366004614fcb565b6109f6565b34801561042157600080fd5b506004546005546008546040805193845260208401929092526001600160a01b031690820152606001610210565b34801561045b57600080fd5b5061022c7f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b34801561048f57600080fd5b506101e161049e36600461509c565b610cc3565b3480156104af57600080fd5b506101e16104be36600461519e565b610e4a565b3480156104cf57600080fd5b506101e1610ff8565b3480156104e457600080fd5b506101e16104f3366004615237565b61107e565b34801561050457600080fd5b506101e1610513366004615254565b6110ef565b34801561052457600080fd5b506101e16105333660046152bf565b6113ae565b61022c610546366004614fcb565b6114f5565b34801561055757600080fd5b506101e161056636600461530a565b611506565b34801561057757600080fd5b506000546001600160a01b03165b604051610210919061535e565b34801561059e57600080fd5b506001546001600160a01b0316610585565b61022c6105be366004614f3f565b61159c565b6102bc6105d1366004614cb4565b6115a8565b60008313806105e55750600082135b6106215760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906106389190615372565b915091506000808280602001905181019061065391906153f4565b915091506106628482336115ba565b85600088131561066f5750865b61067a83338361176f565b5050505050505050565b60006106908383611893565b9392505050565b61069f611e1d565b60005b82518110156108165760006106cf8483815181106106c2576106c2615422565b6020026020010151611e94565b156106e55750476106e08382611ecd565b610793565b8382815181106106f7576106f7615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161072a919061535e565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190615438565b905061079184838151811061078257610782615422565b60200260200101518483611f8a565b505b826001600160a01b0316336001600160a01b03168584815181106107b9576107b9615422565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516107fb91815260200190565b60405180910390a4508061080e81615467565b9150506106a2565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089090615480565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90615480565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b505050505081525050905093509350939050565b61095e848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105d692505050565b50505050565b60008060005a90506109768585612060565b92505a61098390826154b4565b9150509250929050565b60008060005a905061099e84612516565b92505a6109ab90826154b4565b915050915091565b6000600260008360038111156109cb576109cb6154c7565b60038111156109dc576109dc6154c7565b815260208101919091526040016000205460ff1692915050565b600260035403610a185760405162461bcd60e51b8152600401610618906154dd565b60026003556003610a2881612a4f565b6000610a38610120840184615514565b905011610a575760405162461bcd60e51b81526004016106189061555a565b60008260a0013511610a7b5760405162461bcd60e51b81526004016106189061558b565b600a6000610a8f6060850160408601615237565b6001600160a01b0316815260208101919091526040016000205460ff16610ae95760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610618565b6000610b3a6003610afd6020860186615237565b610b0d60a0870160808801615237565b610b1d6060880160408901615237565b60a088013560c0890135610b356101408b018b615514565b612a98565b9050600080610b4f6060860160408701615237565b6001600160a01b031683610b67610120880188615514565b604051610b759291906155c2565b60006040518083038185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b509150915081610c0b57610bf2816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612cce565b60405162461bcd60e51b815260040161061891906155d2565b610c32610c1b6020870187615237565b610c2b6060880160408901615237565b6000612f44565b50610cb99050610c456020850185615237565b610c556040860160208701615237565b610c656080870160608801615237565b60a0870135600060e0890135610c7f6101008b018b615514565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305a92505050565b5050600160035550565b610ccb611e1d565b60005b8251811015610816576000828281518110610ceb57610ceb615422565b602002602001015110158015610d1c57506103e8828281518110610d1157610d11615422565b602002602001015111155b610d5d5760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610618565b828181518110610d6f57610d6f615422565b602002602001015115610da157818181518110610d8e57610d8e615422565b6020026020010151600481905550610dc2565b818181518110610db357610db3615422565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610df557610df5615422565b6020026020010151838381518110610e0f57610e0f615422565b6020026020010151604051610e309291909115158252602082015260400190565b60405180910390a180610e4281615467565b915050610cce565b610e52611e1d565b848114610e715760405162461bcd60e51b8152600401610618906155e5565b828114610e905760405162461bcd60e51b8152600401610618906155e5565b8260005b81811015610fad576040518060400160405280878784818110610eb957610eb9615422565b9050602002016020810190610ece9190615237565b6001600160a01b03168152602001858584818110610eee57610eee615422565b9050602002810190610f009190615514565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600c92508b90508a85818110610f4d57610f4d615422565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b03909116178155908201516001820190610f969082615651565b509050508080610fa590615467565b915050610e94565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa940024878787878787604051610fe7969594939291906157c7565b60405180910390a150505050505050565b338061100c6001546001600160a01b031690565b6001600160a01b0316146110725760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610618565b61107b816130be565b50565b611086611e1d565b600180546001600160a01b0383166001600160a01b031990911681179091556110b76000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b6110f7611e1d565b82156111f35760005b838110156111b857600a600086868481811061111e5761111e615422565b90506020020160208101906111339190615237565b6001600160a01b03168152602081019190915260400160009081205460ff161590600a9087878581811061116957611169615422565b905060200201602081019061117e9190615237565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111b081615467565b915050611100565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd69269584846040516111ea92919061587a565b60405180910390a15b801561095e576000816001600160401b0381111561121357611213614b9b565b60405190808252806020026020018201604052801561123c578160200160208202803683370190505b50905060005b8281101561136b57600b600085858481811061126057611260615422565b90506020020160208101906112759190615237565b6001600160a01b03168152602081019190915260400160009081205460ff161590600b908686858181106112ab576112ab615422565b90506020020160208101906112c09190615237565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600b9085858481811061130057611300615422565b90506020020160208101906113159190615237565b6001600160a01b03168152602081019190915260400160002054825160ff9091169083908390811061134957611349615422565b911515602092830291909101909101528061136381615467565b915050611242565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161139f9392919061588e565b60405180910390a15050505050565b6113b6611e1d565b6001600160a01b0383161561141957600680546001600160a01b0319166001600160a01b0385161790556040517f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39061141090859061535e565b60405180910390a15b6001600160a01b0382161561148557600780546001600160a01b038481166001600160a01b03198316179092556040519116907ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e9061147b9083908690614c9a565b60405180910390a1505b6001600160a01b0381161561081657600880546001600160a01b038381166001600160a01b03198316179092556040519116907fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11906114e79083908590614c9a565b60405180910390a150505050565b600061150082612516565b92915050565b61150e611e1d565b8060005b818110156115955784156115545761154f84848381811061153557611535615422565b905060200201602081019061154a9190615007565b613118565b611583565b61158384848381811061156957611569615422565b905060200201602081019061157e9190615007565b6131ad565b8061158d81615467565b915050611512565b5050505050565b60006106908383612060565b60008060005a90506109768585611893565b600f60f884901c166000818152600c60209081526040808320815180830190925280546001600160a01b0316825260018101805492939192918401916115ff90615480565b80601f016020809104026020016040519081016040528092919081815260200182805461162b90615480565b80156116785780601f1061164d57610100808354040283529160200191611678565b820191906000526020600020905b81548152906001019060200180831161165b57829003601f168201915b5050509190925250508151919250506001600160a01b03166116d85760405162461bcd60e51b815260206004820152601960248201527810d85b1b189858dac8189859081c1bdbdb081a5b99195e1959603a1b6044820152606401610618565b600081600001518583602001516040516020016116f7939291906158e9565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146117675760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610618565b505050505050565b600080846001600160a01b031663a9059cbb8585604051602401611794929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516117cd9190615932565b6000604051808303816000865af19150503d806000811461180a576040519150601f19603f3d011682016040523d82523d6000602084013e61180f565b606091505b5091509150818015611839575080511580611839575080806020019051810190611839919061594e565b6115955760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610618565b60006002600354036118b75760405162461bcd60e51b8152600401610618906154dd565b600260035560016118c781612a4f565b428310156118e75760405162461bcd60e51b81526004016106189061596b565b6001600f604086013560f81c16146000808080806119058a87613236565b945094509450945094506119698360008151811061192557611925615422565b60200260200101518b8060e0019061193d919061598c565b600081811061194e5761194e615422565b90506020020160208101906119639190615237565b8661176f565b8515611b27578415611a51576119c460408b01358461198b60e08e018e61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613768915050565b611a4a826119d860408d0160208e01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a03919061535e565b602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190615438565b90613a6d565b9750611cc9565b611abf60408b013584611a6760e08e018e61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611aba9190615237565b613768565b611a4a818460018651611ad291906154b4565b81518110611ae257611ae2615422565b60200260200101516001600160a01b03166370a082318d6000016020810190611b0b9190615237565b6040518263ffffffff1660e01b8152600401611a03919061535e565b60008a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611b5b9291906159d5565b600060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ba09190810190615a2c565b90508515611c0e57611bf38185611bba60e08f018f61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ac3915050565b611c07836119d860408e0160208f01615237565b9850611cc7565b611c788185611c2060e08f018f61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508e6000016020810190611c739190615237565b613ac3565b611cc4828560018751611c8b91906154b4565b81518110611c9b57611c9b615422565b60200260200101516001600160a01b03166370a082318e6000016020810190611b0b9190615237565b98505b505b8960800135881015611ced5760405162461bcd60e51b815260040161061890615ab1565b8415611d2257611d0c611d0660408c0160208d01615237565b89613cbb565b611d22611d1c60208c018c615237565b89611ecd565b5050505050600085806101200190611d3a9190615514565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611e0f9250611d8391505060c088018861598c565b6000818110611d9457611d94615422565b9050602002016020810190611da99190615237565b611db660c089018961598c565b6001611dc560c08c018c61598c565b611dd09291506154b4565b818110611ddf57611ddf615422565b9050602002016020810190611df49190615237565b611e0160208a018a615237565b89606001358860008761305a565b505050600160035592915050565b33611e306000546001600160a01b031690565b6001600160a01b031614611e925760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610618565b565b60006001600160a01b038216158061150057506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611ef79190615932565b60006040518083038185875af1925050503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b50509050806108165760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610618565b6000806000856001600160a01b031663a9059cbb8686604051602401611fb1929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611fea9190615932565b6000604051808303816000865af19150503d8060008114612027576040519150601f19603f3d011682016040523d82523d6000602084013e61202c565b606091505b5091509150818015612056575080511580612056575080806020019051810190612056919061594e565b9695505050505050565b60006002600354036120845760405162461bcd60e51b8152600401610618906154dd565b6002600355600061209481612a4f565b60006120a36020850185615514565b9050116120c25760405162461bcd60e51b81526004016106189061555a565b60008460800135116120e65760405162461bcd60e51b81526004016106189061558b565b60006120f86060860160408701615237565b6001600160a01b0316036121585760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610618565b60008460a00135116121bd5760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610618565b600b60006121d16080870160608801615237565b6001600160a01b0316815260208101919091526040016000205460ff166122345760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642077726170706564206164647265737360481b6044820152606401610618565b6006546000906001600160a01b03168161227e8161225560208a018a615237565b61226560808b0160608c01615237565b8560808c013560c08d0135610b356101008f018f615514565b90506122986122936040890160208a01615237565b611e94565b156122be576122ad6060880160408901615237565b6001600160a01b031631925061234c565b6122ce6040880160208901615237565b6001600160a01b03166370a082316122ec60608a0160408b01615237565b6040518263ffffffff1660e01b8152600401612308919061535e565b602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190615438565b92505b600080836001600160a01b031683633f3204d28a6040516024016123709190615ade565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123a99190615932565b60006040518083038185875af1925050503d80600081146123e6576040519150601f19603f3d011682016040523d82523d6000602084013e6123eb565b606091505b50915091508161242357610bf2816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612cce565b5061243990506122936040890160208a01615237565b15612469576124628361245260608a0160408b01615237565b6001600160a01b03163190613a6d565b945061249e565b61249b8361247d60408a0160208b01615237565b6001600160a01b03166370a08231611b0b60608c0160408d01615237565b94505b8660a001358510156124c25760405162461bcd60e51b815260040161061890615ab1565b6125076124d26020890189615237565b6124e260408a0160208b01615237565b6124f260608b0160408c01615237565b60808b0135896000610c7f60e08f018f615514565b50505050600160035592915050565b600060026003540361253a5760405162461bcd60e51b8152600401610618906154dd565b6002600355600261254a81612a4f565b600061255a61010085018561598c565b9050116125975760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610618565b428360e0013510156125bb5760405162461bcd60e51b81526004016106189061596b565b600b60006125cf6080860160608701615237565b6001600160a01b0316815260208101919091526040016000205460ff166126085760405162461bcd60e51b815260040161061890615b2a565b60006126176020850185615237565b9050600061262b6040860160208701615237565b90506000806126406122936020890189615237565b15612658576126556080880160608901615237565b93505b6000612699600261266c60208b018b615237565b61267c60808c0160608d01615237565b60008c608001358d60c001358e806101200190610b359190615514565b90506126ae61229360408a0160208b01615237565b1561274c576126c36080890160608a01615237565b93506126d56080890160608a01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612700919061535e565b602060405180830381865afa15801561271d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127419190615438565b9250600191506127da565b61275c6040890160208a01615237565b6001600160a01b03166370a0823161277a60608b0160408c01615237565b6040518263ffffffff1660e01b8152600401612796919061535e565b602060405180830381865afa1580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d79190615438565b92505b60006127ea6101008a018a61598c565b9150309050606060018311156128a457876000805b858110156128995760008e80610100019061281a919061598c565b8381811061282a5761282a615422565b90506020020135905061283e848483613dd3565b9550935061284d6001886154b4565b82148015612859575088155b15612877578e60400160208101906128719190615237565b95508a92505b6128838682878b6140b4565b975050808061289190615467565b9150506127ff565b50859b505050612924565b6128d488886128b76101008f018f61598c565b60008181106128c8576128c8615422565b90506020020135613dd3565b91508590506128f0576128ed60608c0160408d01615237565b91505b612921826129026101008e018e61598c565b600081811061291357612913615422565b9050602002013583876140b4565b99505b505050811561299e57612941836119d860808b0160608c01615237565b96508760a001358710156129675760405162461bcd60e51b815260040161061890615ab1565b61298061297a60808a0160608b01615237565b88613cbb565b61299961299360608a0160408b01615237565b88611ecd565b6129f6565b6129d0836129b260408b0160208c01615237565b6001600160a01b03166370a08231611b0b60608d0160408e01615237565b96508760a001358710156129f65760405162461bcd60e51b815260040161061890615ab1565b612a3f612a0660208a018a615237565b612a1660408b0160208c01615237565b612a2660608c0160408d01615237565b8b608001358b60008e806101400190610c7f9190615514565b5050505050506001600355919050565b612a58816109b3565b1561107b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610618565b6000806000612aa68661426c565b9092509050600060038c6003811115612ac157612ac16154c7565b14612acd576001612ad0565b60005b90506000612ae1828a858a8a6142ca565b9050612aec8c611e94565b15612c205760038d6003811115612b0557612b056154c7565b03612b3b5788341015612b2a5760405162461bcd60e51b815260040161061890615b5b565b612b343484613a6d565b9450612b5e565b883414612b5a5760405162461bcd60e51b815260040161061890615b5b565b8094505b6001600160a01b038b1615612bff576001600160a01b038b166000908152600b602052604090205460ff16612ba55760405162461bcd60e51b815260040161061890615b2a565b60038d6003811115612bb957612bb96154c7565b03612bdc57612bc88b86614380565b612bd38b8b87612f44565b60009450612bff565b60028d6003811115612bf057612bf06154c7565b03612bff57612bff8b82614380565b8315612c1b57600854612c1b906001600160a01b031684611ecd565b612cbe565b612c2c8c33308c61447e565b60038d6003811115612c4057612c406154c7565b03612c5857612c508c8b83612f44565b349450612c9e565b60008d6003811115612c6c57612c6c6154c7565b03612c8157612c7c8c8b8361176f565b612c9e565b60028d6003811115612c9557612c956154c7565b03612c9e578094505b8315612cbe57600854612cbc908d906001600160a01b031685611f8a565b505b5050505098975050505050505050565b60606044835110158015612d07575082600081518110612cf057612cf0615422565b6020910101516001600160f81b031916600160fb1b145b8015612d38575082600181518110612d2157612d21615422565b6020910101516001600160f81b03191660c360f81b145b8015612d69575082600281518110612d5257612d52615422565b6020910101516001600160f81b031916607960f81b145b8015612d9a575082600381518110612d8357612d83615422565b6020910101516001600160f81b031916600560fd1b145b15612e2457604483810180519091612db29190615b86565b84511015612dfa5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610618565b8281604051602001612e0d929190615b99565b604051602081830303815290604052915050611500565b82516024148015612e5a575082600081518110612e4357612e43615422565b6020910101516001600160f81b031916602760f91b145b8015612e8b575082600181518110612e7457612e74615422565b6020910101516001600160f81b031916600960fb1b145b8015612ebc575082600281518110612ea557612ea5615422565b6020910101516001600160f81b031916607b60f81b145b8015612eed575082600381518110612ed657612ed6615422565b6020910101516001600160f81b031916607160f81b145b15612f1257602483015182612f01826145a6565b604051602001612e0d929190615be8565b81612f1c846145ce565b604051602001612f2d929190615c1d565b604051602081830303815290604052905092915050565b600080846001600160a01b031663095ea7b38585604051602401612f69929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612fa29190615932565b6000604051808303816000865af19150503d8060008114612fdf576040519150601f19603f3d011682016040523d82523d6000602084013e612fe4565b606091505b509150915081801561300e57508051158061300e57508080602001905181019061300e919061594e565b6115955760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610618565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516130ad9493929190615c6e565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061312281612a4f565b60016002600084600381111561313a5761313a6154c7565b600381111561314b5761314b6154c7565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516131a1929190615c93565b60405180910390a15050565b806131b7816147b5565b6000600260008460038111156131cf576131cf6154c7565b60038111156131e0576131e06154c7565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516131a1929190615c93565b6000806060818061324a60e088018861598c565b61325691506001615b86565b61326360c089018961598c565b9050146132a15760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610618565b600b60006132b560408a0160208b01615237565b6001600160a01b0316815260208101919091526040016000205460ff166132ee5760405162461bcd60e51b815260040161061890615b2a565b6000806132fe8960a0013561426c565b9092509050613321600160608b01358361331c6101008e018e615514565b6142ca565b9550600061333260c08b018b61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613378905060c08e018e61598c565b6133839291506154b4565b8151811061339357613393615422565b602002602001015190506133d68b8060c001906133b0919061598c565b60008181106133c1576133c1615422565b90506020020160208101906122939190615237565b15613497578a6060013534146134225760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610618565b831561343e5760085461343e906001600160a01b031684611ecd565b61344e60408c0160208d01615237565b8260008151811061346157613461615422565b6001600160a01b039092166020928302919091018201526134929061348c9060408e01908e01615237565b89614380565b6135fa565b89156135a957816000815181106134b0576134b0615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016134e3919061535e565b602060405180830381865afa158015613500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135249190615438565b97506135508260008151811061353c5761353c615422565b602002602001015133308e6060013561447e565b6135a28b60a00135611a448a8560008151811061356f5761356f615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a03919061535e565b97506135bf565b6135bf8260008151811061353c5761353c615422565b83156135fa576135f8826000815181106135db576135db615422565b60209081029190910101516008546001600160a01b031685611f8a565b505b61360381611e94565b156136d55761361860408c0160208d01615237565b826001845161362791906154b4565b8151811061363757613637615422565b6001600160a01b03909216602092830291909101820152600199506136629060408d01908d01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161368d919061535e565b602060405180830381865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190615438565b9550613757565b8915613757576001600160a01b0381166370a082316136f760208e018e615237565b6040518263ffffffff1660e01b8152600401613713919061535e565b602060405180830381865afa158015613730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137549190615438565b94505b819650505050509295509295909350565b60005b6001845161377991906154b4565b8110156115955760008085838151811061379557613795615422565b6020026020010151868460016137ab9190615b86565b815181106137bb576137bb615422565b6020026020010151915091506000816001600160a01b0316836001600160a01b0316106137e95781836137ec565b82825b509050600086858151811061380357613803615422565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138759190615ce5565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b0316146138af5782846138b2565b83835b915091506138e6828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b8152600401611a03919061535e565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613929939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396a9190615438565b945050505050600080856001600160a01b0316886001600160a01b03161461399457826000613998565b6000835b91509150600060028d516139ac91906154b4565b8a106139b8578a6139dd565b8b6139c48b6001615b86565b815181106139d4576139d4615422565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613a1f9086908690869060248101615d2a565b600060405180830381600087803b158015613a3957600080fd5b505af1158015613a4d573d6000803e3d6000fd5b505050505050505050505050508080613a6590615467565b91505061376b565b600082613a7a83826154b4565b91508111156115005760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610618565b60005b60018451613ad491906154b4565b81101561159557600080858381518110613af057613af0615422565b602002602001015186846001613b069190615b86565b81518110613b1657613b16615422565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613b44578183613b47565b82825b509050600088613b58866001615b86565b81518110613b6857613b68615422565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613b9657826000613b9a565b6000835b91509150600060028b51613bae91906154b4565b8810613bba5788613bdf565b89613bc6896001615b86565b81518110613bd657613bd6615422565b60200260200101515b9050898881518110613bf357613bf3615422565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613c2557613c25614b9b565b6040519080825280601f01601f191660200182016040528015613c4f576020820181803683370190505b506040518563ffffffff1660e01b8152600401613c6f9493929190615d2a565b600060405180830381600087803b158015613c8957600080fd5b505af1158015613c9d573d6000803e3d6000fd5b50505050505050505050508080613cb390615467565b915050613ac6565b600080836001600160a01b03166000632e1a7d4d85604051602401613ce291815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613d1b9190615932565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150818015613d87575080511580613d87575080806020019051810190613d87919061594e565b61095e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610618565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e409190615d57565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea69190615d57565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0c9190615d74565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561400257846001600160a01b03168b6001600160a01b031614613f965760405162461bcd60e51b815260040161061890615d99565b6001600160a01b038a1615613fd657836001600160a01b03168a6001600160a01b031614613fd65760405162461bcd60e51b815260040161061890615d99565b8397508482604051602001613fec929190614b58565b604051602081830303815290604052965061409b565b836001600160a01b03168b6001600160a01b0316146140335760405162461bcd60e51b815260040161061890615d99565b6001600160a01b038a161561407357846001600160a01b03168a6001600160a01b0316146140735760405162461bcd60e51b815260040161061890615d99565b8497508382604051602001614089929190614b58565b60405160208183030381529060405296505b6140a689838b6115ba565b505050505050935093915050565b6000600160ff1b8416158015614191576000856001600160a01b031663128acb0888846140e088614801565b6140f06401000276a36001615dbb565b8b8b604051602001614103929190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614132959493929190615dfb565b60408051808303816000875af1158015614150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141749190615e36565b9150506141898161418490615e5a565b61486f565b925050614263565b6000856001600160a01b031663128acb0888846141ad88614801565b6141cc600173fffd8963efd1fc6a506488495d951d5263988d26615e76565b8b8b6040516020016141df929190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161420e959493929190615dfb565b60408051808303816000875af115801561422c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142509190615e36565b50905061425f61418482615e5a565b9250505b50949350505050565b6000808061427b600a85615eac565b9050614292600a61428c8684613a6d565b906148c1565b91508060011480156142a45750600082115b80156142ba57506008546001600160a01b031615155b156142c457600192505b50915091565b60008086156142f5576142ee61271061428c6004548961491090919063ffffffff16565b9050614313565b61431061271061428c6005548961491090919063ffffffff16565b90505b8085101561436b5761432786868686614977565b61436b5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610618565b6143758686613a6d565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b0386169185916143c69190615932565b60006040518083038185875af1925050503d8060008114614403576040519150601f19603f3d011682016040523d82523d6000602084013e614408565b606091505b5091509150818015614432575080511580614432575080806020019051810190614432919061594e565b61095e5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610618565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916144e29190615932565b6000604051808303816000865af19150503d806000811461451f576040519150601f19603f3d011682016040523d82523d6000602084013e614524565b606091505b509150915081801561454e57508051158061454e57508080602001905181019061454e919061594e565b6117675760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610618565b6060611500826040516020016145be91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145f6906002615ec0565b614601906002615b86565b6001600160401b0381111561461857614618614b9b565b6040519080825280601f01601f191660200182016040528015614642576020820181803683370190505b509050600360fc1b8160008151811061465d5761465d615422565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061468c5761468c615422565b60200101906001600160f81b031916908160001a90535060005b84518110156147ad578260048683815181106146c4576146c4615422565b01602001516001600160f81b031916901c60f81c601081106146e8576146e8615422565b1a60f81b826146f8836002615ec0565b614703906002615b86565b8151811061471357614713615422565b60200101906001600160f81b031916908160001a9053508285828151811061473d5761473d615422565b60209101015160f81c600f166010811061475957614759615422565b1a60f81b82614769836002615ec0565b614774906003615b86565b8151811061478457614784615422565b60200101906001600160f81b031916908160001a905350806147a581615467565b9150506146a6565b509392505050565b6147be816109b3565b61107b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610618565b60006001600160ff1b0382111561486b5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610618565b5090565b60008082121561486b5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610618565b6000816000036149065760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610618565b6106908284615ed7565b6000811580614934575082826149268183615ec0565b92506149329083615ed7565b145b6115005760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610618565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a001604051602081830303815290604052805190602001206040516020016149ff92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000806000614a5b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614aeb92505050565b925092509250600060018585858560405160008152602001604052604051614a9f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614ac1573d6000803e3d6000fd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b60008060008351604114614b3c5760405162461bcd60e51b8152602060048201526018602482015277092dcecc2d8d2c840e6d2cedcc2e8eae4ca40d8cadccee8d60431b6044820152606401610618565b5050506020810151604082015160609092015160001a92909190565b6001600160a01b03929092168252602082015260400190565b60008085851115614b8157600080fd5b83861115614b8e57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614bd957614bd9614b9b565b604052919050565b60006001600160401b03821115614bfa57614bfa614b9b565b50601f01601f191660200190565b600080600060608486031215614c1d57600080fd5b833592506020840135915060408401356001600160401b03811115614c4157600080fd5b8401601f81018613614c5257600080fd5b8035614c65614c6082614be1565b614bb1565b818152876020838501011115614c7a57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6001600160a01b0392831681529116602082015260400190565b60008060408385031215614cc757600080fd5b82356001600160401b03811115614cdd57600080fd5b83016101408186031215614cf057600080fd5b946020939093013593505050565b60006001600160401b03821115614d1757614d17614b9b565b5060051b60200190565b6001600160a01b038116811461107b57600080fd5b8035614d4181614d21565b919050565b60008060408385031215614d5957600080fd5b82356001600160401b03811115614d6f57600080fd5b8301601f81018513614d8057600080fd5b80356020614d90614c6083614cfe565b82815260059290921b83018101918181019088841115614daf57600080fd5b938201935b83851015614dd6578435614dc781614d21565b82529382019390820190614db4565b9550614de59050868201614d36565b93505050509250929050565b600080600060608486031215614e0657600080fd5b8335614e1181614d21565b92506020840135614e2181614d21565b929592945050506040919091013590565b60005b83811015614e4d578181015183820152602001614e35565b50506000910152565b60008151808452614e6e816020860160208601614e32565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b038251166060820152600060208301516040608084015261205660a0840182614e56565b60008060008060608587031215614ed657600080fd5b843593506020850135925060408501356001600160401b0380821115614efb57600080fd5b818701915087601f830112614f0f57600080fd5b813581811115614f1e57600080fd5b886020828501011115614f3057600080fd5b95989497505060200194505050565b60008060408385031215614f5257600080fd5b82356001600160401b0380821115614f6957600080fd5b908401906101208287031215614f7e57600080fd5b90925060208401359080821115614f9457600080fd5b50830160408186031215614fa757600080fd5b809150509250929050565b60006101608284031215614fc557600080fd5b50919050565b600060208284031215614fdd57600080fd5b81356001600160401b03811115614ff357600080fd5b614fff84828501614fb2565b949350505050565b60006020828403121561501957600080fd5b81356004811061069057600080fd5b801515811461107b57600080fd5b600082601f83011261504757600080fd5b81356020615057614c6083614cfe565b82815260059290921b8401810191818101908684111561507657600080fd5b8286015b84811015615091578035835291830191830161507a565b509695505050505050565b600080604083850312156150af57600080fd5b82356001600160401b03808211156150c657600080fd5b818501915085601f8301126150da57600080fd5b813560206150ea614c6083614cfe565b82815260059290921b8401810191818101908984111561510957600080fd5b948201945b8386101561513057853561512181615028565b8252948201949082019061510e565b9650508601359250508082111561514657600080fd5b5061098385828601615036565b60008083601f84011261516557600080fd5b5081356001600160401b0381111561517c57600080fd5b6020830191508360208260051b850101111561519757600080fd5b9250929050565b600080600080600080606087890312156151b757600080fd5b86356001600160401b03808211156151ce57600080fd5b6151da8a838b01615153565b909850965060208901359150808211156151f357600080fd5b6151ff8a838b01615153565b9096509450604089013591508082111561521857600080fd5b5061522589828a01615153565b979a9699509497509295939492505050565b60006020828403121561524957600080fd5b813561069081614d21565b6000806000806040858703121561526a57600080fd5b84356001600160401b038082111561528157600080fd5b61528d88838901615153565b909650945060208701359150808211156152a657600080fd5b506152b387828801615153565b95989497509550505050565b6000806000606084860312156152d457600080fd5b83356152df81614d21565b925060208401356152ef81614d21565b915060408401356152ff81614d21565b809150509250925092565b60008060006040848603121561531f57600080fd5b833561532a81615028565b925060208401356001600160401b0381111561534557600080fd5b61535186828701615153565b9497909650939450505050565b6001600160a01b0391909116815260200190565b6000806040838503121561538557600080fd5b8251915060208301516001600160401b038111156153a257600080fd5b8301601f810185136153b357600080fd5b80516153c1614c6082614be1565b8181528660208385010111156153d657600080fd5b6153e7826020830160208601614e32565b8093505050509250929050565b6000806040838503121561540757600080fd5b825161541281614d21565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561544a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161547957615479615451565b5060010190565b600181811c9082168061549457607f821691505b602082108103614fc557634e487b7160e01b600052602260045260246000fd5b8181038181111561150057611500615451565b634e487b7160e01b600052602160045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e1984360301811261552b57600080fd5b8301803591506001600160401b0382111561554557600080fd5b60200191503681900382131561519757600080fd5b602080825260179082015276646174612073686f756c64206265206e6f74207a65726f60481b604082015260600190565b6020808252601f908201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604082015260600190565b8183823760009101908152919050565b6020815260006106906020830184614e56565b6020808252600c908201526b696e76616c6964206461746160a01b604082015260600190565b601f82111561081657600081815260208120601f850160051c810160208610156156325750805b601f850160051c820191505b818110156117675782815560010161563e565b81516001600160401b0381111561566a5761566a614b9b565b61567e816156788454615480565b8461560b565b602080601f8311600181146156b3576000841561569b5750858301515b600019600386901b1c1916600185901b178555611767565b600085815260208120601f198616915b828110156156e2578886015182559484019460019091019084016156c3565b50858210156157005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561574e57813561573381614d21565b6001600160a01b031687529582019590820190600101615720565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261579957600080fd5b83016020810192503590506001600160401b038111156157b857600080fd5b80360382131561519757600080fd5b6060808252810186905260006001600160fb1b038711156157e757600080fd5b8660051b80896080850137808301905060206080848303018185015261581160808301888a615710565b84810360408601528581529150808201600586901b830182018760005b8881101561586857858303601f19018452615849828b615782565b615854858284615759565b95870195945050509084019060010161582e565b50909c9b505050505050505050505050565b602081526000614fff602083018486615710565b6040815260006158a2604083018587615710565b82810360208481019190915284518083528582019282019060005b818110156158db5784511515835293830193918301916001016158bd565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615923816035850160208701614e32565b91909101603501949350505050565b60008251615944818460208701614e32565b9190910192915050565b60006020828403121561596057600080fd5b815161069081615028565b602080825260079082015266115e1c1a5c995960ca1b604082015260600190565b6000808335601e198436030181126159a357600080fd5b8301803591506001600160401b038211156159bd57600080fd5b6020019150600581901b360382131561519757600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015615a1f5784516001600160a01b0316835293830193918301916001016159fa565b5090979650505050505050565b60006020808385031215615a3f57600080fd5b82516001600160401b03811115615a5557600080fd5b8301601f81018513615a6657600080fd5b8051615a74614c6082614cfe565b81815260059190911b82018301908381019087831115615a9357600080fd5b928401925b8284101561437557835182529284019290840190615a98565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b6020815260008235615aef81614d21565b6001600160a01b0316602083810191909152615b0d90840184615782565b604080850152615b21606085018284615759565b95945050505050565b602080825260179082015276496e76616c69642077726170706564206164647265737360481b604082015260600190565b602080825260119082015270696e76616c6964206d73672e76616c756560781b604082015260600190565b8082018082111561150057611500615451565b60008351615bab818460208801614e32565b6508ae4e4dee4560d31b9083019081528351615bce816006840160208801614e32565b602960f81b60069290910191820152600701949350505050565b60008351615bfa818460208801614e32565b650a0c2dcd2c6560d31b9083019081528351615bce816006840160208801614e32565b60008351615c2f818460208801614e32565b670aadcd6dcdeeedc560c31b9083019081528351615c54816008840160208801614e32565b602960f81b60089290910191820152600901949350505050565b8481528360208201528260408201526080606082015260006120566080830184614e56565b6001600160a01b03831681526040810160048310615cc157634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b80516001600160701b0381168114614d4157600080fd5b600080600060608486031215615cfa57600080fd5b615d0384615cce565b9250615d1160208501615cce565b9150604084015163ffffffff811681146152ff57600080fd5b84815283602082015260018060a01b03831660408201526080606082015260006120566080830184614e56565b600060208284031215615d6957600080fd5b815161069081614d21565b600060208284031215615d8657600080fd5b815162ffffff8116811461069057600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615ddb57615ddb615451565b5092915050565b828152604060208201526000614fff6040830184614e56565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061437590830184614e56565b60008060408385031215615e4957600080fd5b505080516020909101519092909150565b6000600160ff1b8201615e6f57615e6f615451565b5060000390565b6001600160a01b03828116828216039080821115615ddb57615ddb615451565b634e487b7160e01b600052601260045260246000fd5b600082615ebb57615ebb615e96565b500690565b808202811582820484141761150057611500615451565b600082615ee657615ee6615e96565b50049056fea2646970667358221220af26bc8f138765be2c257e6b14ca2516659cabbd553254e68c065dd1379b20a364736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101655760003560e01c80637ec753fe116100c1578063b9b5149b1161007a578063b9b5149b14610538578063bf5c55a21461054b578063c34c08e51461056b578063d63234e014610592578063d808d889146105b0578063fa461e3314610289578063fa9ec7af146105c3576101a5565b80637ec753fe1461048357806392bcc8be146104a357806394d3d793146104c3578063afed2d0e146104d8578063b93c0beb146104f8578063b946fd3b14610518576101a5565b80633644e5151161011e5780633644e515146102d15780633c481d57146102e75780634c42342f146103bf5780635ac86ab7146103d25780636b3ec416146104025780636fbf72f9146104155780637e467ecf1461044f576101a5565b80630ced9fb9146101e35780630dc4bdae146102195780630e8cc7051461023a5780631975b0961461025a57806323a69e75146102895780632adb806f146102a9576101a5565b366101a5577f7784f8d436dc514f0690e472c7e2d7f660a73e504c69b2350f6be5a5f02432ef333460405161019b929190614b58565b60405180910390a1005b3480156101b157600080fd5b50600080806101c33660048184614b71565b8101906101d09190614c08565b9250925092506101e18383836105d6565b005b3480156101ef57600080fd5b50600654600754604051610210926001600160a01b03908116921690614c9a565b60405180910390f35b61022c610227366004614cb4565b610684565b604051908152602001610210565b34801561024657600080fd5b506101e1610255366004614d46565b610697565b34801561026657600080fd5b5061027a610275366004614df1565b61081b565b60405161021093929190614e82565b34801561029557600080fd5b506101e16102a4366004614ec0565b61091d565b6102bc6102b7366004614f3f565b610964565b60408051928352602083019190915201610210565b3480156102dd57600080fd5b5061022c60095481565b3480156102f357600080fd5b5060026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b547fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0547f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5460036000527f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35460ff9384169392831692918216911660408051941515855292151560208501529015159183019190915215156060820152608001610210565b6102bc6103cd366004614fcb565b61098d565b3480156103de57600080fd5b506103f26103ed366004615007565b6109b3565b6040519015158152602001610210565b6101e1610410366004614fcb565b6109f6565b34801561042157600080fd5b506004546005546008546040805193845260208401929092526001600160a01b031690820152606001610210565b34801561045b57600080fd5b5061022c7f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f81565b34801561048f57600080fd5b506101e161049e36600461509c565b610cc3565b3480156104af57600080fd5b506101e16104be36600461519e565b610e4a565b3480156104cf57600080fd5b506101e1610ff8565b3480156104e457600080fd5b506101e16104f3366004615237565b61107e565b34801561050457600080fd5b506101e1610513366004615254565b6110ef565b34801561052457600080fd5b506101e16105333660046152bf565b6113ae565b61022c610546366004614fcb565b6114f5565b34801561055757600080fd5b506101e161056636600461530a565b611506565b34801561057757600080fd5b506000546001600160a01b03165b604051610210919061535e565b34801561059e57600080fd5b506001546001600160a01b0316610585565b61022c6105be366004614f3f565b61159c565b6102bc6105d1366004614cb4565b6115a8565b60008313806105e55750600082135b6106215760405162461bcd60e51b81526020600482015260086024820152674d30206f72204d3160c01b60448201526064015b60405180910390fd5b600080828060200190518101906106389190615372565b915091506000808280602001905181019061065391906153f4565b915091506106628482336115ba565b85600088131561066f5750865b61067a83338361176f565b5050505050505050565b60006106908383611893565b9392505050565b61069f611e1d565b60005b82518110156108165760006106cf8483815181106106c2576106c2615422565b6020026020010151611e94565b156106e55750476106e08382611ecd565b610793565b8382815181106106f7576106f7615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161072a919061535e565b602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190615438565b905061079184838151811061078257610782615422565b60200260200101518483611f8a565b505b826001600160a01b0316336001600160a01b03168584815181106107b9576107b9615422565b60200260200101516001600160a01b03167f3115d1449a7b732c986cba18244e897a450f61e1bb8d589cd2e69e6c8924f9f7846040516107fb91815260200190565b60405180910390a4508061080e81615467565b9150506106a2565b505050565b604080518082018252600080825260606020808401919091526001600160a01b038781168352600a8252848320548782168452600b835285842054878552600c84529386902086518088019097528054909216865260018201805460ff92831697929095169594919384019161089090615480565b80601f01602080910402602001604051908101604052809291908181526020018280546108bc90615480565b80156109095780601f106108de57610100808354040283529160200191610909565b820191906000526020600020905b8154815290600101906020018083116108ec57829003601f168201915b505050505081525050905093509350939050565b61095e848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105d692505050565b50505050565b60008060005a90506109768585612060565b92505a61098390826154b4565b9150509250929050565b60008060005a905061099e84612516565b92505a6109ab90826154b4565b915050915091565b6000600260008360038111156109cb576109cb6154c7565b60038111156109dc576109dc6154c7565b815260208101919091526040016000205460ff1692915050565b600260035403610a185760405162461bcd60e51b8152600401610618906154dd565b60026003556003610a2881612a4f565b6000610a38610120840184615514565b905011610a575760405162461bcd60e51b81526004016106189061555a565b60008260a0013511610a7b5760405162461bcd60e51b81526004016106189061558b565b600a6000610a8f6060850160408601615237565b6001600160a01b0316815260208101919091526040016000205460ff16610ae95760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21031b0b63632b960911b6044820152606401610618565b6000610b3a6003610afd6020860186615237565b610b0d60a0870160808801615237565b610b1d6060880160408901615237565b60a088013560c0890135610b356101408b018b615514565b612a98565b9050600080610b4f6060860160408701615237565b6001600160a01b031683610b67610120880188615514565b604051610b759291906155c2565b60006040518083038185875af1925050503d8060008114610bb2576040519150601f19603f3d011682016040523d82523d6000602084013e610bb7565b606091505b509150915081610c0b57610bf2816040518060400160405280600f81526020016e2a3930b739b4ba21b937b9b9ab1a9d60891b815250612cce565b60405162461bcd60e51b815260040161061891906155d2565b610c32610c1b6020870187615237565b610c2b6060880160408901615237565b6000612f44565b50610cb99050610c456020850185615237565b610c556040860160208701615237565b610c656080870160608801615237565b60a0870135600060e0890135610c7f6101008b018b615514565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061305a92505050565b5050600160035550565b610ccb611e1d565b60005b8251811015610816576000828281518110610ceb57610ceb615422565b602002602001015110158015610d1c57506103e8828281518110610d1157610d11615422565b602002602001015111155b610d5d5760405162461bcd60e51b8152602060048201526012602482015271066656520726174652069733a302d313030360741b6044820152606401610618565b828181518110610d6f57610d6f615422565b602002602001015115610da157818181518110610d8e57610d8e615422565b6020026020010151600481905550610dc2565b818181518110610db357610db3615422565b60200260200101516005819055505b7f5fa95345cbe35dad70f67a9ca1430c22453a695590cb4fca05d58f637e85af4f838281518110610df557610df5615422565b6020026020010151838381518110610e0f57610e0f615422565b6020026020010151604051610e309291909115158252602082015260400190565b60405180910390a180610e4281615467565b915050610cce565b610e52611e1d565b848114610e715760405162461bcd60e51b8152600401610618906155e5565b828114610e905760405162461bcd60e51b8152600401610618906155e5565b8260005b81811015610fad576040518060400160405280878784818110610eb957610eb9615422565b9050602002016020810190610ece9190615237565b6001600160a01b03168152602001858584818110610eee57610eee615422565b9050602002810190610f009190615514565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250600c92508b90508a85818110610f4d57610f4d615422565b6020908102929092013583525081810192909252604001600020825181546001600160a01b0319166001600160a01b03909116178155908201516001820190610f969082615651565b509050508080610fa590615467565b915050610e94565b507f652c1af850dcc0b28fcb71cd9473023f56a89edd81bbe7b51056a04caa940024878787878787604051610fe7969594939291906157c7565b60405180910390a150505050505050565b338061100c6001546001600160a01b031690565b6001600160a01b0316146110725760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206e657720656044820152663c32b1baba37b960c91b6064820152608401610618565b61107b816130be565b50565b611086611e1d565b600180546001600160a01b0383166001600160a01b031990911681179091556110b76000546001600160a01b031690565b6001600160a01b03167fdd01547fc40682edc3cd8d164d53f5a1ae6b46138a83f045658ed760823ddba860405160405180910390a350565b6110f7611e1d565b82156111f35760005b838110156111b857600a600086868481811061111e5761111e615422565b90506020020160208101906111339190615237565b6001600160a01b03168152602081019190915260400160009081205460ff161590600a9087878581811061116957611169615422565b905060200201602081019061117e9190615237565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111b081615467565b915050611100565b507fb05655746bd43b7fe3ccd9d28b7685b4c67ddc51e70890062b0f7f85dd69269584846040516111ea92919061587a565b60405180910390a15b801561095e576000816001600160401b0381111561121357611213614b9b565b60405190808252806020026020018201604052801561123c578160200160208202803683370190505b50905060005b8281101561136b57600b600085858481811061126057611260615422565b90506020020160208101906112759190615237565b6001600160a01b03168152602081019190915260400160009081205460ff161590600b908686858181106112ab576112ab615422565b90506020020160208101906112c09190615237565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600b9085858481811061130057611300615422565b90506020020160208101906113159190615237565b6001600160a01b03168152602081019190915260400160002054825160ff9091169083908390811061134957611349615422565b911515602092830291909101909101528061136381615467565b915050611242565b507f4a28b173d9bc739be3886d172e07fef80392184787fc6b92406ce0f0c05b7e6383838360405161139f9392919061588e565b60405180910390a15050505050565b6113b6611e1d565b6001600160a01b0383161561141957600680546001600160a01b0319166001600160a01b0385161790556040517f347fade115440908839b750620f0add8f417b77a392657edd70b950373eda9c39061141090859061535e565b60405180910390a15b6001600160a01b0382161561148557600780546001600160a01b038481166001600160a01b03198316179092556040519116907ff9c6fa562c9d8326f8518a29a53ef18ab03cd6b9eead73ac667c5e289354c73e9061147b9083908690614c9a565b60405180910390a1505b6001600160a01b0381161561081657600880546001600160a01b038381166001600160a01b03198316179092556040519116907fb3911b5760f95a64aaa8d7f1775f57a7b6ed0bcf1ebb3fbfcc045e2f04eaad11906114e79083908590614c9a565b60405180910390a150505050565b600061150082612516565b92915050565b61150e611e1d565b8060005b818110156115955784156115545761154f84848381811061153557611535615422565b905060200201602081019061154a9190615007565b613118565b611583565b61158384848381811061156957611569615422565b905060200201602081019061157e9190615007565b6131ad565b8061158d81615467565b915050611512565b5050505050565b60006106908383612060565b60008060005a90506109768585611893565b600f60f884901c166000818152600c60209081526040808320815180830190925280546001600160a01b0316825260018101805492939192918401916115ff90615480565b80601f016020809104026020016040519081016040528092919081815260200182805461162b90615480565b80156116785780601f1061164d57610100808354040283529160200191611678565b820191906000526020600020905b81548152906001019060200180831161165b57829003601f168201915b5050509190925250508151919250506001600160a01b03166116d85760405162461bcd60e51b815260206004820152601960248201527810d85b1b189858dac8189859081c1bdbdb081a5b99195e1959603a1b6044820152606401610618565b600081600001518583602001516040516020016116f7939291906158e9565b6040516020818303038152906040528051906020012060001c9050836001600160a01b0316816001600160a01b0316146117675760405162461bcd60e51b815260206004820152601160248201527010d85b1b189858dac8189859081c1bdbdb607a1b6044820152606401610618565b505050505050565b600080846001600160a01b031663a9059cbb8585604051602401611794929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516117cd9190615932565b6000604051808303816000865af19150503d806000811461180a576040519150601f19603f3d011682016040523d82523d6000602084013e61180f565b606091505b5091509150818015611839575080511580611839575080806020019051810190611839919061594e565b6115955760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657248656c7065723a205452414e534645525f544f4b454e5f46604482015264105253115160da1b6064820152608401610618565b60006002600354036118b75760405162461bcd60e51b8152600401610618906154dd565b600260035560016118c781612a4f565b428310156118e75760405162461bcd60e51b81526004016106189061596b565b6001600f604086013560f81c16146000808080806119058a87613236565b945094509450945094506119698360008151811061192557611925615422565b60200260200101518b8060e0019061193d919061598c565b600081811061194e5761194e615422565b90506020020160208101906119639190615237565b8661176f565b8515611b27578415611a51576119c460408b01358461198b60e08e018e61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613768915050565b611a4a826119d860408d0160208e01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a03919061535e565b602060405180830381865afa158015611a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a449190615438565b90613a6d565b9750611cc9565b611abf60408b013584611a6760e08e018e61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d6000016020810190611aba9190615237565b613768565b611a4a818460018651611ad291906154b4565b81518110611ae257611ae2615422565b60200260200101516001600160a01b03166370a082318d6000016020810190611b0b9190615237565b6040518263ffffffff1660e01b8152600401611a03919061535e565b60008a604001356001600160a01b031663d06ca61f86866040518363ffffffff1660e01b8152600401611b5b9291906159d5565b600060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ba09190810190615a2c565b90508515611c0e57611bf38185611bba60e08f018f61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613ac3915050565b611c07836119d860408e0160208f01615237565b9850611cc7565b611c788185611c2060e08f018f61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508e6000016020810190611c739190615237565b613ac3565b611cc4828560018751611c8b91906154b4565b81518110611c9b57611c9b615422565b60200260200101516001600160a01b03166370a082318e6000016020810190611b0b9190615237565b98505b505b8960800135881015611ced5760405162461bcd60e51b815260040161061890615ab1565b8415611d2257611d0c611d0660408c0160208d01615237565b89613cbb565b611d22611d1c60208c018c615237565b89611ecd565b5050505050600085806101200190611d3a9190615514565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350611e0f9250611d8391505060c088018861598c565b6000818110611d9457611d94615422565b9050602002016020810190611da99190615237565b611db660c089018961598c565b6001611dc560c08c018c61598c565b611dd09291506154b4565b818110611ddf57611ddf615422565b9050602002016020810190611df49190615237565b611e0160208a018a615237565b89606001358860008761305a565b505050600160035592915050565b33611e306000546001600160a01b031690565b6001600160a01b031614611e925760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f74207468652065786563756044820152623a37b960e91b6064820152608401610618565b565b60006001600160a01b038216158061150057506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b604080516000808252602082019092526001600160a01b038416908390604051611ef79190615932565b60006040518083038185875af1925050503d8060008114611f34576040519150601f19603f3d011682016040523d82523d6000602084013e611f39565b606091505b50509050806108165760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610618565b6000806000856001600160a01b031663a9059cbb8686604051602401611fb1929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611fea9190615932565b6000604051808303816000865af19150503d8060008114612027576040519150601f19603f3d011682016040523d82523d6000602084013e61202c565b606091505b5091509150818015612056575080511580612056575080806020019051810190612056919061594e565b9695505050505050565b60006002600354036120845760405162461bcd60e51b8152600401610618906154dd565b6002600355600061209481612a4f565b60006120a36020850185615514565b9050116120c25760405162461bcd60e51b81526004016106189061555a565b60008460800135116120e65760405162461bcd60e51b81526004016106189061558b565b60006120f86060860160408701615237565b6001600160a01b0316036121585760405162461bcd60e51b815260206004820152602160248201527f72656365697665722073686f756c64206265206e6f74206164647265737328306044820152602960f81b6064820152608401610618565b60008460a00135116121bd5760405162461bcd60e51b815260206004820152602860248201527f6d696e52657475726e416d6f756e742073686f756c6420626520677265617465604482015267072207468616e20360c41b6064820152608401610618565b600b60006121d16080870160608801615237565b6001600160a01b0316815260208101919091526040016000205460ff166122345760405162461bcd60e51b8152602060048201526017602482015276696e76616c69642077726170706564206164647265737360481b6044820152606401610618565b6006546000906001600160a01b03168161227e8161225560208a018a615237565b61226560808b0160608c01615237565b8560808c013560c08d0135610b356101008f018f615514565b90506122986122936040890160208a01615237565b611e94565b156122be576122ad6060880160408901615237565b6001600160a01b031631925061234c565b6122ce6040880160208901615237565b6001600160a01b03166370a082316122ec60608a0160408b01615237565b6040518263ffffffff1660e01b8152600401612308919061535e565b602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190615438565b92505b600080836001600160a01b031683633f3204d28a6040516024016123709190615ade565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123a99190615932565b60006040518083038185875af1925050503d80600081146123e6576040519150601f19603f3d011682016040523d82523d6000602084013e6123eb565b606091505b50915091508161242357610bf2816040518060400160405280600c81526020016b2a3930b739b4ba29bbb0b81d60a11b815250612cce565b5061243990506122936040890160208a01615237565b15612469576124628361245260608a0160408b01615237565b6001600160a01b03163190613a6d565b945061249e565b61249b8361247d60408a0160208b01615237565b6001600160a01b03166370a08231611b0b60608c0160408d01615237565b94505b8660a001358510156124c25760405162461bcd60e51b815260040161061890615ab1565b6125076124d26020890189615237565b6124e260408a0160208b01615237565b6124f260608b0160408c01615237565b60808b0135896000610c7f60e08f018f615514565b50505050600160035592915050565b600060026003540361253a5760405162461bcd60e51b8152600401610618906154dd565b6002600355600261254a81612a4f565b600061255a61010085018561598c565b9050116125975760405162461bcd60e51b815260206004820152600b60248201526a456d70747920706f6f6c7360a81b6044820152606401610618565b428360e0013510156125bb5760405162461bcd60e51b81526004016106189061596b565b600b60006125cf6080860160608701615237565b6001600160a01b0316815260208101919091526040016000205460ff166126085760405162461bcd60e51b815260040161061890615b2a565b60006126176020850185615237565b9050600061262b6040860160208701615237565b90506000806126406122936020890189615237565b15612658576126556080880160608901615237565b93505b6000612699600261266c60208b018b615237565b61267c60808c0160608d01615237565b60008c608001358d60c001358e806101200190610b359190615514565b90506126ae61229360408a0160208b01615237565b1561274c576126c36080890160608a01615237565b93506126d56080890160608a01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612700919061535e565b602060405180830381865afa15801561271d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127419190615438565b9250600191506127da565b61275c6040890160208a01615237565b6001600160a01b03166370a0823161277a60608b0160408c01615237565b6040518263ffffffff1660e01b8152600401612796919061535e565b602060405180830381865afa1580156127b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d79190615438565b92505b60006127ea6101008a018a61598c565b9150309050606060018311156128a457876000805b858110156128995760008e80610100019061281a919061598c565b8381811061282a5761282a615422565b90506020020135905061283e848483613dd3565b9550935061284d6001886154b4565b82148015612859575088155b15612877578e60400160208101906128719190615237565b95508a92505b6128838682878b6140b4565b975050808061289190615467565b9150506127ff565b50859b505050612924565b6128d488886128b76101008f018f61598c565b60008181106128c8576128c8615422565b90506020020135613dd3565b91508590506128f0576128ed60608c0160408d01615237565b91505b612921826129026101008e018e61598c565b600081811061291357612913615422565b9050602002013583876140b4565b99505b505050811561299e57612941836119d860808b0160608c01615237565b96508760a001358710156129675760405162461bcd60e51b815260040161061890615ab1565b61298061297a60808a0160608b01615237565b88613cbb565b61299961299360608a0160408b01615237565b88611ecd565b6129f6565b6129d0836129b260408b0160208c01615237565b6001600160a01b03166370a08231611b0b60608d0160408e01615237565b96508760a001358710156129f65760405162461bcd60e51b815260040161061890615ab1565b612a3f612a0660208a018a615237565b612a1660408b0160208c01615237565b612a2660608c0160408d01615237565b8b608001358b60008e806101400190610c7f9190615514565b5050505050506001600355919050565b612a58816109b3565b1561107b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610618565b6000806000612aa68661426c565b9092509050600060038c6003811115612ac157612ac16154c7565b14612acd576001612ad0565b60005b90506000612ae1828a858a8a6142ca565b9050612aec8c611e94565b15612c205760038d6003811115612b0557612b056154c7565b03612b3b5788341015612b2a5760405162461bcd60e51b815260040161061890615b5b565b612b343484613a6d565b9450612b5e565b883414612b5a5760405162461bcd60e51b815260040161061890615b5b565b8094505b6001600160a01b038b1615612bff576001600160a01b038b166000908152600b602052604090205460ff16612ba55760405162461bcd60e51b815260040161061890615b2a565b60038d6003811115612bb957612bb96154c7565b03612bdc57612bc88b86614380565b612bd38b8b87612f44565b60009450612bff565b60028d6003811115612bf057612bf06154c7565b03612bff57612bff8b82614380565b8315612c1b57600854612c1b906001600160a01b031684611ecd565b612cbe565b612c2c8c33308c61447e565b60038d6003811115612c4057612c406154c7565b03612c5857612c508c8b83612f44565b349450612c9e565b60008d6003811115612c6c57612c6c6154c7565b03612c8157612c7c8c8b8361176f565b612c9e565b60028d6003811115612c9557612c956154c7565b03612c9e578094505b8315612cbe57600854612cbc908d906001600160a01b031685611f8a565b505b5050505098975050505050505050565b60606044835110158015612d07575082600081518110612cf057612cf0615422565b6020910101516001600160f81b031916600160fb1b145b8015612d38575082600181518110612d2157612d21615422565b6020910101516001600160f81b03191660c360f81b145b8015612d69575082600281518110612d5257612d52615422565b6020910101516001600160f81b031916607960f81b145b8015612d9a575082600381518110612d8357612d83615422565b6020910101516001600160f81b031916600560fd1b145b15612e2457604483810180519091612db29190615b86565b84511015612dfa5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610618565b8281604051602001612e0d929190615b99565b604051602081830303815290604052915050611500565b82516024148015612e5a575082600081518110612e4357612e43615422565b6020910101516001600160f81b031916602760f91b145b8015612e8b575082600181518110612e7457612e74615422565b6020910101516001600160f81b031916600960fb1b145b8015612ebc575082600281518110612ea557612ea5615422565b6020910101516001600160f81b031916607b60f81b145b8015612eed575082600381518110612ed657612ed6615422565b6020910101516001600160f81b031916607160f81b145b15612f1257602483015182612f01826145a6565b604051602001612e0d929190615be8565b81612f1c846145ce565b604051602001612f2d929190615c1d565b604051602081830303815290604052905092915050565b600080846001600160a01b031663095ea7b38585604051602401612f69929190614b58565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612fa29190615932565b6000604051808303816000865af19150503d8060008114612fdf576040519150601f19603f3d011682016040523d82523d6000602084013e612fe4565b606091505b509150915081801561300e57508051158061300e57508080602001905181019061300e919061594e565b6115955760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c454400006044820152606401610618565b846001600160a01b0316866001600160a01b0316886001600160a01b03167f2251435bd151cd72851a82be055bf6d1c3d7f34d08d56493dddf874229b8e897878787876040516130ad9493929190615c6e565b60405180910390a450505050505050565b600180546001600160a01b0319908116909155600080546001600160a01b03848116938216841783556040519116929183917f88436636ea40d5bb1bcc55ff9cd54788af71da886f4147a87f199adcca733d4d9190a35050565b8061312281612a4f565b60016002600084600381111561313a5761313a6154c7565b600381111561314b5761314b6154c7565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f534f879afd40abb4e39f8e1b77a316be4c8e3521d9cf5a3a3db8959d574d455933836040516131a1929190615c93565b60405180910390a15050565b806131b7816147b5565b6000600260008460038111156131cf576131cf6154c7565b60038111156131e0576131e06154c7565b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4cd3e1443d03aba343c5d882744f8f172c07b495e955ac3defb325cbd73c855033836040516131a1929190615c93565b6000806060818061324a60e088018861598c565b61325691506001615b86565b61326360c089018961598c565b9050146132a15760405162461bcd60e51b815260206004820152600c60248201526b092dcecc2d8d2c840e0c2e8d60a31b6044820152606401610618565b600b60006132b560408a0160208b01615237565b6001600160a01b0316815260208101919091526040016000205460ff166132ee5760405162461bcd60e51b815260040161061890615b2a565b6000806132fe8960a0013561426c565b9092509050613321600160608b01358361331c6101008e018e615514565b6142ca565b9550600061333260c08b018b61598c565b80806020026020016040519081016040528093929190818152602001838360200280828437600092018290525093945084925060019150613378905060c08e018e61598c565b6133839291506154b4565b8151811061339357613393615422565b602002602001015190506133d68b8060c001906133b0919061598c565b60008181106133c1576133c1615422565b90506020020160208101906122939190615237565b15613497578a6060013534146134225760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b6044820152606401610618565b831561343e5760085461343e906001600160a01b031684611ecd565b61344e60408c0160208d01615237565b8260008151811061346157613461615422565b6001600160a01b039092166020928302919091018201526134929061348c9060408e01908e01615237565b89614380565b6135fa565b89156135a957816000815181106134b0576134b0615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016134e3919061535e565b602060405180830381865afa158015613500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135249190615438565b97506135508260008151811061353c5761353c615422565b602002602001015133308e6060013561447e565b6135a28b60a00135611a448a8560008151811061356f5761356f615422565b60200260200101516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a03919061535e565b97506135bf565b6135bf8260008151811061353c5761353c615422565b83156135fa576135f8826000815181106135db576135db615422565b60209081029190910101516008546001600160a01b031685611f8a565b505b61360381611e94565b156136d55761361860408c0160208d01615237565b826001845161362791906154b4565b8151811061363757613637615422565b6001600160a01b03909216602092830291909101820152600199506136629060408d01908d01615237565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161368d919061535e565b602060405180830381865afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190615438565b9550613757565b8915613757576001600160a01b0381166370a082316136f760208e018e615237565b6040518263ffffffff1660e01b8152600401613713919061535e565b602060405180830381865afa158015613730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137549190615438565b94505b819650505050509295509295909350565b60005b6001845161377991906154b4565b8110156115955760008085838151811061379557613795615422565b6020026020010151868460016137ab9190615b86565b815181106137bb576137bb615422565b6020026020010151915091506000816001600160a01b0316836001600160a01b0316106137e95781836137ec565b82825b509050600086858151811061380357613803615422565b60200260200101519050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138759190615ce5565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b0316146138af5782846138b2565b83835b915091506138e6828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b8152600401611a03919061535e565b95508e6001600160a01b031663054d50d48784846040518463ffffffff1660e01b8152600401613929939291909283526020830191909152604082015260600190565b602060405180830381865afa158015613946573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396a9190615438565b945050505050600080856001600160a01b0316886001600160a01b03161461399457826000613998565b6000835b91509150600060028d516139ac91906154b4565b8a106139b8578a6139dd565b8b6139c48b6001615b86565b815181106139d4576139d4615422565b60200260200101515b6040805160008152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f90613a1f9086908690869060248101615d2a565b600060405180830381600087803b158015613a3957600080fd5b505af1158015613a4d573d6000803e3d6000fd5b505050505050505050505050508080613a6590615467565b91505061376b565b600082613a7a83826154b4565b91508111156115005760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610618565b60005b60018451613ad491906154b4565b81101561159557600080858381518110613af057613af0615422565b602002602001015186846001613b069190615b86565b81518110613b1657613b16615422565b6020026020010151915091506000816001600160a01b0316836001600160a01b031610613b44578183613b47565b82825b509050600088613b58866001615b86565b81518110613b6857613b68615422565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613b9657826000613b9a565b6000835b91509150600060028b51613bae91906154b4565b8810613bba5788613bdf565b89613bc6896001615b86565b81518110613bd657613bd6615422565b60200260200101515b9050898881518110613bf357613bf3615422565b60200260200101516001600160a01b031663022c0d9f84848460006001600160401b03811115613c2557613c25614b9b565b6040519080825280601f01601f191660200182016040528015613c4f576020820181803683370190505b506040518563ffffffff1660e01b8152600401613c6f9493929190615d2a565b600060405180830381600087803b158015613c8957600080fd5b505af1158015613c9d573d6000803e3d6000fd5b50505050505050505050508080613cb390615467565b915050613ac6565b600080836001600160a01b03166000632e1a7d4d85604051602401613ce291815260200190565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613d1b9190615932565b60006040518083038185875af1925050503d8060008114613d58576040519150601f19603f3d011682016040523d82523d6000602084013e613d5d565b606091505b5091509150818015613d87575080511580613d87575080806020019051810190613d87919061594e565b61095e5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a2057495448445241575f4641494c4544006044820152606401610618565b6000606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e409190615d57565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ea69190615d57565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0c9190615d74565b604080516001600160a01b03808716602083015285169181019190915262ffffff8216606082015290915060009060800160408051601f1981840301815291905280516020909101209050600160ff1b881615801561400257846001600160a01b03168b6001600160a01b031614613f965760405162461bcd60e51b815260040161061890615d99565b6001600160a01b038a1615613fd657836001600160a01b03168a6001600160a01b031614613fd65760405162461bcd60e51b815260040161061890615d99565b8397508482604051602001613fec929190614b58565b604051602081830303815290604052965061409b565b836001600160a01b03168b6001600160a01b0316146140335760405162461bcd60e51b815260040161061890615d99565b6001600160a01b038a161561407357846001600160a01b03168a6001600160a01b0316146140735760405162461bcd60e51b815260040161061890615d99565b8497508382604051602001614089929190614b58565b60405160208183030381529060405296505b6140a689838b6115ba565b505050505050935093915050565b6000600160ff1b8416158015614191576000856001600160a01b031663128acb0888846140e088614801565b6140f06401000276a36001615dbb565b8b8b604051602001614103929190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401614132959493929190615dfb565b60408051808303816000875af1158015614150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141749190615e36565b9150506141898161418490615e5a565b61486f565b925050614263565b6000856001600160a01b031663128acb0888846141ad88614801565b6141cc600173fffd8963efd1fc6a506488495d951d5263988d26615e76565b8b8b6040516020016141df929190615de2565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161420e959493929190615dfb565b60408051808303816000875af115801561422c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142509190615e36565b50905061425f61418482615e5a565b9250505b50949350505050565b6000808061427b600a85615eac565b9050614292600a61428c8684613a6d565b906148c1565b91508060011480156142a45750600082115b80156142ba57506008546001600160a01b031615155b156142c457600192505b50915091565b60008086156142f5576142ee61271061428c6004548961491090919063ffffffff16565b9050614313565b61431061271061428c6005548961491090919063ffffffff16565b90505b8085101561436b5761432786868686614977565b61436b5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207369676e61747572652066656560581b6044820152606401610618565b6143758686613a6d565b979650505050505050565b60408051600481526024810182526020810180516001600160e01b0316630d0e30db60e41b179052905160009182916001600160a01b0386169185916143c69190615932565b60006040518083038185875af1925050503d8060008114614403576040519150601f19603f3d011682016040523d82523d6000602084013e614408565b606091505b5091509150818015614432575080511580614432575080806020019051810190614432919061594e565b61095e5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a204445504f5349545f4641494c454400006044820152606401610618565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916144e29190615932565b6000604051808303816000865af19150503d806000811461451f576040519150601f19603f3d011682016040523d82523d6000602084013e614524565b606091505b509150915081801561454e57508051158061454e57508080602001905181019061454e919061594e565b6117675760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610618565b6060611500826040516020016145be91815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b906000906145f6906002615ec0565b614601906002615b86565b6001600160401b0381111561461857614618614b9b565b6040519080825280601f01601f191660200182016040528015614642576020820181803683370190505b509050600360fc1b8160008151811061465d5761465d615422565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061468c5761468c615422565b60200101906001600160f81b031916908160001a90535060005b84518110156147ad578260048683815181106146c4576146c4615422565b01602001516001600160f81b031916901c60f81c601081106146e8576146e8615422565b1a60f81b826146f8836002615ec0565b614703906002615b86565b8151811061471357614713615422565b60200101906001600160f81b031916908160001a9053508285828151811061473d5761473d615422565b60209101015160f81c600f166010811061475957614759615422565b1a60f81b82614769836002615ec0565b614774906003615b86565b8151811061478457614784615422565b60200101906001600160f81b031916908160001a905350806147a581615467565b9150506146a6565b509392505050565b6147be816109b3565b61107b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610618565b60006001600160ff1b0382111561486b5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610618565b5090565b60008082121561486b5760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610618565b6000816000036149065760405162461bcd60e51b815260206004820152601060248201526f64732d6d6174682d6469762d7a65726f60801b6044820152606401610618565b6106908284615ed7565b6000811580614934575082826149268183615ec0565b92506149329083615ed7565b145b6115005760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610618565b600954604080517f048f880a603b1aab0e626a287e33d603417b3d53a36f7527b7c86365bf7def4f602082015233918101919091526060810186905260808101859052600091829160a001604051602081830303815290604052805190602001206040516020016149ff92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000806000614a5b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614aeb92505050565b925092509250600060018585858560405160008152602001604052604051614a9f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015614ac1573d6000803e3d6000fd5b5050604051601f1901516007546001600160a01b039081169116149b9a5050505050505050505050565b60008060008351604114614b3c5760405162461bcd60e51b8152602060048201526018602482015277092dcecc2d8d2c840e6d2cedcc2e8eae4ca40d8cadccee8d60431b6044820152606401610618565b5050506020810151604082015160609092015160001a92909190565b6001600160a01b03929092168252602082015260400190565b60008085851115614b8157600080fd5b83861115614b8e57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614bd957614bd9614b9b565b604052919050565b60006001600160401b03821115614bfa57614bfa614b9b565b50601f01601f191660200190565b600080600060608486031215614c1d57600080fd5b833592506020840135915060408401356001600160401b03811115614c4157600080fd5b8401601f81018613614c5257600080fd5b8035614c65614c6082614be1565b614bb1565b818152876020838501011115614c7a57600080fd5b816020840160208301376000602083830101528093505050509250925092565b6001600160a01b0392831681529116602082015260400190565b60008060408385031215614cc757600080fd5b82356001600160401b03811115614cdd57600080fd5b83016101408186031215614cf057600080fd5b946020939093013593505050565b60006001600160401b03821115614d1757614d17614b9b565b5060051b60200190565b6001600160a01b038116811461107b57600080fd5b8035614d4181614d21565b919050565b60008060408385031215614d5957600080fd5b82356001600160401b03811115614d6f57600080fd5b8301601f81018513614d8057600080fd5b80356020614d90614c6083614cfe565b82815260059290921b83018101918181019088841115614daf57600080fd5b938201935b83851015614dd6578435614dc781614d21565b82529382019390820190614db4565b9550614de59050868201614d36565b93505050509250929050565b600080600060608486031215614e0657600080fd5b8335614e1181614d21565b92506020840135614e2181614d21565b929592945050506040919091013590565b60005b83811015614e4d578181015183820152602001614e35565b50506000910152565b60008151808452614e6e816020860160208601614e32565b601f01601f19169290920160200192915050565b831515815282151560208201526060604082015260018060a01b038251166060820152600060208301516040608084015261205660a0840182614e56565b60008060008060608587031215614ed657600080fd5b843593506020850135925060408501356001600160401b0380821115614efb57600080fd5b818701915087601f830112614f0f57600080fd5b813581811115614f1e57600080fd5b886020828501011115614f3057600080fd5b95989497505060200194505050565b60008060408385031215614f5257600080fd5b82356001600160401b0380821115614f6957600080fd5b908401906101208287031215614f7e57600080fd5b90925060208401359080821115614f9457600080fd5b50830160408186031215614fa757600080fd5b809150509250929050565b60006101608284031215614fc557600080fd5b50919050565b600060208284031215614fdd57600080fd5b81356001600160401b03811115614ff357600080fd5b614fff84828501614fb2565b949350505050565b60006020828403121561501957600080fd5b81356004811061069057600080fd5b801515811461107b57600080fd5b600082601f83011261504757600080fd5b81356020615057614c6083614cfe565b82815260059290921b8401810191818101908684111561507657600080fd5b8286015b84811015615091578035835291830191830161507a565b509695505050505050565b600080604083850312156150af57600080fd5b82356001600160401b03808211156150c657600080fd5b818501915085601f8301126150da57600080fd5b813560206150ea614c6083614cfe565b82815260059290921b8401810191818101908984111561510957600080fd5b948201945b8386101561513057853561512181615028565b8252948201949082019061510e565b9650508601359250508082111561514657600080fd5b5061098385828601615036565b60008083601f84011261516557600080fd5b5081356001600160401b0381111561517c57600080fd5b6020830191508360208260051b850101111561519757600080fd5b9250929050565b600080600080600080606087890312156151b757600080fd5b86356001600160401b03808211156151ce57600080fd5b6151da8a838b01615153565b909850965060208901359150808211156151f357600080fd5b6151ff8a838b01615153565b9096509450604089013591508082111561521857600080fd5b5061522589828a01615153565b979a9699509497509295939492505050565b60006020828403121561524957600080fd5b813561069081614d21565b6000806000806040858703121561526a57600080fd5b84356001600160401b038082111561528157600080fd5b61528d88838901615153565b909650945060208701359150808211156152a657600080fd5b506152b387828801615153565b95989497509550505050565b6000806000606084860312156152d457600080fd5b83356152df81614d21565b925060208401356152ef81614d21565b915060408401356152ff81614d21565b809150509250925092565b60008060006040848603121561531f57600080fd5b833561532a81615028565b925060208401356001600160401b0381111561534557600080fd5b61535186828701615153565b9497909650939450505050565b6001600160a01b0391909116815260200190565b6000806040838503121561538557600080fd5b8251915060208301516001600160401b038111156153a257600080fd5b8301601f810185136153b357600080fd5b80516153c1614c6082614be1565b8181528660208385010111156153d657600080fd5b6153e7826020830160208601614e32565b8093505050509250929050565b6000806040838503121561540757600080fd5b825161541281614d21565b6020939093015192949293505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561544a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161547957615479615451565b5060010190565b600181811c9082168061549457607f821691505b602082108103614fc557634e487b7160e01b600052602260045260246000fd5b8181038181111561150057611500615451565b634e487b7160e01b600052602160045260246000fd5b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6000808335601e1984360301811261552b57600080fd5b8301803591506001600160401b0382111561554557600080fd5b60200191503681900382131561519757600080fd5b602080825260179082015276646174612073686f756c64206265206e6f74207a65726f60481b604082015260600190565b6020808252601f908201527f616d6f756e742073686f756c642062652067726561746572207468616e203000604082015260600190565b8183823760009101908152919050565b6020815260006106906020830184614e56565b6020808252600c908201526b696e76616c6964206461746160a01b604082015260600190565b601f82111561081657600081815260208120601f850160051c810160208610156156325750805b601f850160051c820191505b818110156117675782815560010161563e565b81516001600160401b0381111561566a5761566a614b9b565b61567e816156788454615480565b8461560b565b602080601f8311600181146156b3576000841561569b5750858301515b600019600386901b1c1916600185901b178555611767565b600085815260208120601f198616915b828110156156e2578886015182559484019460019091019084016156c3565b50858210156157005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8183526000602080850194508260005b8581101561574e57813561573381614d21565b6001600160a01b031687529582019590820190600101615720565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e1984360301811261579957600080fd5b83016020810192503590506001600160401b038111156157b857600080fd5b80360382131561519757600080fd5b6060808252810186905260006001600160fb1b038711156157e757600080fd5b8660051b80896080850137808301905060206080848303018185015261581160808301888a615710565b84810360408601528581529150808201600586901b830182018760005b8881101561586857858303601f19018452615849828b615782565b615854858284615759565b95870195945050509084019060010161582e565b50909c9b505050505050505050505050565b602081526000614fff602083018486615710565b6040815260006158a2604083018587615710565b82810360208481019190915284518083528582019282019060005b818110156158db5784511515835293830193918301916001016158bd565b509098975050505050505050565b60ff60f81b81526bffffffffffffffffffffffff198460601b16600182015282601582015260008251615923816035850160208701614e32565b91909101603501949350505050565b60008251615944818460208701614e32565b9190910192915050565b60006020828403121561596057600080fd5b815161069081615028565b602080825260079082015266115e1c1a5c995960ca1b604082015260600190565b6000808335601e198436030181126159a357600080fd5b8301803591506001600160401b038211156159bd57600080fd5b6020019150600581901b360382131561519757600080fd5b6000604082018483526020604081850152818551808452606086019150828701935060005b81811015615a1f5784516001600160a01b0316835293830193918301916001016159fa565b5090979650505050505050565b60006020808385031215615a3f57600080fd5b82516001600160401b03811115615a5557600080fd5b8301601f81018513615a6657600080fd5b8051615a74614c6082614cfe565b81815260059190911b82018301908381019087831115615a9357600080fd5b928401925b8284101561437557835182529284019290840190615a98565b602080825260139082015272151bdbc81b1a5d1d1b19481c9958d95a5d9959606a1b604082015260600190565b6020815260008235615aef81614d21565b6001600160a01b0316602083810191909152615b0d90840184615782565b604080850152615b21606085018284615759565b95945050505050565b602080825260179082015276496e76616c69642077726170706564206164647265737360481b604082015260600190565b602080825260119082015270696e76616c6964206d73672e76616c756560781b604082015260600190565b8082018082111561150057611500615451565b60008351615bab818460208801614e32565b6508ae4e4dee4560d31b9083019081528351615bce816006840160208801614e32565b602960f81b60069290910191820152600701949350505050565b60008351615bfa818460208801614e32565b650a0c2dcd2c6560d31b9083019081528351615bce816006840160208801614e32565b60008351615c2f818460208801614e32565b670aadcd6dcdeeedc560c31b9083019081528351615c54816008840160208801614e32565b602960f81b60089290910191820152600901949350505050565b8481528360208201528260408201526080606082015260006120566080830184614e56565b6001600160a01b03831681526040810160048310615cc157634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b80516001600160701b0381168114614d4157600080fd5b600080600060608486031215615cfa57600080fd5b615d0384615cce565b9250615d1160208501615cce565b9150604084015163ffffffff811681146152ff57600080fd5b84815283602082015260018060a01b03831660408201526080606082015260006120566080830184614e56565b600060208284031215615d6957600080fd5b815161069081614d21565b600060208284031215615d8657600080fd5b815162ffffff8116811461069057600080fd5b602080825260089082015267109859081c1bdbdb60c21b604082015260600190565b6001600160a01b03818116838216019080821115615ddb57615ddb615451565b5092915050565b828152604060208201526000614fff6040830184614e56565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061437590830184614e56565b60008060408385031215615e4957600080fd5b505080516020909101519092909150565b6000600160ff1b8201615e6f57615e6f615451565b5060000390565b6001600160a01b03828116828216039080821115615ddb57615ddb615451565b634e487b7160e01b600052601260045260246000fd5b600082615ebb57615ebb615e96565b500690565b808202811582820484141761150057611500615451565b600082615ee657615ee6615e96565b50049056fea2646970667358221220af26bc8f138765be2c257e6b14ca2516659cabbd553254e68c065dd1379b20a364736f6c63430008140033

Deployed Bytecode Sourcemap

183:740:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3661:30:1;3669:10;3681:9;3661:30;;;;;;;:::i;:::-;;;;;;;;183:740:12;;;;;;;;;;;-1:-1:-1;429:19:14;;;504:12;:8;513:1;504:8;429:19;504:12;:::i;:::-;493:47;;;;;;;:::i;:::-;428:112;;;;;;550:51;567:12;581;595:5;550:16;:51::i;:::-;418:190;7391:175:1;;;;;;;;;;-1:-1:-1;7509:17:1;;7548:11;;7391:175;;;;-1:-1:-1;;;;;7509:17:1;;;;7548:11;;7391:175;:::i;:::-;;;;;;;;2616:204:13;;;;;;:::i;:::-;;:::i;:::-;;;2971:25:15;;;2959:2;2944:18;2616:204:13;2825:177:15;286:635:12;;;;;;;;;;-1:-1:-1;286:635:12;;;;;:::i;:::-;;:::i;7710:378:1:-;;;;;;;;;;-1:-1:-1;7710:378:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;614:202:14:-;;;;;;;;;;-1:-1:-1;614:202:14;;;;;:::i;:::-;;:::i;188:335:0:-;;;;;;:::i;:::-;;:::i;:::-;;;;7715:25:15;;;7771:2;7756:18;;7749:34;;;;7688:18;188:335:0;7541:248:15;1986:31:1;;;;;;;;;;;;;;;;2803:370:7;;;;;;;;;;-1:-1:-1;2961:7:7;:38;;;;3025:35;;3086;;3147:18;2857:21;3139:27;;;2961:38;;;;;3025:35;;;;3086;;;;3139:27;2803:370;;;8208:14:15;;8201:22;8183:41;;8267:14;;8260:22;8255:2;8240:18;;8233:50;8326:14;;8319:22;8299:18;;;8292:50;;;;8385:14;8378:22;8373:2;8358:18;;8351:50;8170:3;8155:19;2803:370:7;7976:431:15;1763:284:14;;;;;;:::i;:::-;;:::i;1731:107:7:-;;;;;;;;;;-1:-1:-1;1731:107:7;;;;;:::i;:::-;;:::i;:::-;;;9421:14:15;;9414:22;9396:41;;9384:2;9369:18;1731:107:7;9256:187:15;178:907:2;;;;;;:::i;:::-;;:::i;7572:132:1:-;;;;;;;;;;-1:-1:-1;7662:14:1;;7678:10;;7690:6;;7572:132;;;10034:25:15;;;10090:2;10075:18;;10068:34;;;;-1:-1:-1;;;;;7690:6:1;10118:18:15;;;10111:60;10022:2;10007:18;7572:132:1;9832:345:15;2302:107:1;;;;;;;;;;;;2346:63;2302:107;;4611:460;;;;;;;;;;-1:-1:-1;4611:460:1;;;;;:::i;:::-;;:::i;6515:559::-;;;;;;;;;;-1:-1:-1;6515:559:1;;;;;:::i;:::-;;:::i;2585:211:6:-;;;;;;;;;;;;;:::i;2133:193::-;;;;;;;;;;-1:-1:-1;2133:193:6;;;;;:::i;:::-;;:::i;5671:838:1:-;;;;;;;;;;-1:-1:-1;5671:838:1;;;;;:::i;:::-;;:::i;5077:588::-;;;;;;;;;;-1:-1:-1;5077:588:1;;;;;:::i;:::-;;:::i;2053:168:14:-;;;;;;:::i;:::-;;:::i;7080:305:1:-;;;;;;;;;;-1:-1:-1;7080:305:1;;;;;:::i;:::-;;:::i;1487:91:6:-;;;;;;;;;;-1:-1:-1;1536:7:6;1562:9;-1:-1:-1;;;;;1562:9:6;1487:91;;;;;;;:::i;1657:105::-;;;;;;;;;;-1:-1:-1;1739:16:6;;-1:-1:-1;;;;;1739:16:6;1657:105;;529:220:0;;;;;;:::i;:::-;;:::i;2291:319:13:-;;;;;;:::i;:::-;;:::i;1030:727:14:-;1190:1;1175:12;:16;:36;;;;1210:1;1195:12;:16;1175:36;1167:57;;;;-1:-1:-1;;;1167:57:14;;16224:2:15;1167:57:14;;;16206:21:15;16263:1;16243:18;;;16236:29;-1:-1:-1;;;16281:18:15;;;16274:38;16329:18;;1167:57:14;;;;;;;;;1298:12;1312:31;1358:5;1347:35;;;;;;;;;;;;:::i;:::-;1297:85;;;;1393:15;1410:16;1441:18;1430:50;;;;;;;;;;;;:::i;:::-;1392:88;;;;1490:43;1506:4;1512:8;1522:10;1490:15;:43::i;:::-;1574:12;1544:19;1601:16;;1597:82;;;-1:-1:-1;1655:12:14;1597:82;1689:61;1717:7;1726:10;1738:11;1689:27;:61::i;:::-;1157:600;;;;;1030:727;;;:::o;2616:204:13:-;2730:20;2777:36;2792:10;2804:8;2777:14;:36::i;:::-;2762:51;2616:204;-1:-1:-1;;;2616:204:13:o;286:635:12:-;1374:16:6;:14;:16::i;:::-;391:10:12::1;386:529;411:6;:13;403:5;:21;386:529;;;449:11;478:35;499:6;506:5;499:13;;;;;;;;:::i;:::-;;;;;;;478:20;:35::i;:::-;474:358;;;-1:-1:-1::0;542:21:12::1;581:49;612:9:::0;542:21;581:30:::1;:49::i;:::-;474:358;;;685:6;692:5;685:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;678:31:12::1;;718:4;678:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;669:55;;742:75;784:6;791:5;784:13;;;;;;;;:::i;:::-;;;;;;;799:9;810:6;742:41;:75::i;:::-;;474:358;886:9;-1:-1:-1::0;;;;;850:54:12::1;874:10;-1:-1:-1::0;;;;;850:54:12::1;859:6;866:5;859:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;850:54:12::1;;897:6;850:54;;;;2971:25:15::0;;2959:2;2944:18;;2825:177;850:54:12::1;;;;;;;;-1:-1:-1::0;426:7:12;::::1;::::0;::::1;:::i;:::-;;;;386:529;;;;286:635:::0;;:::o;7710:378:1:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;7934:34:1;;;;;:21;:34;;;;;;7997:30;;;;;:16;:30;;;;;;8044:37;;;:26;:37;;;;;;8037:44;;;;;;;;;;;;;;;7934:34;8037:44;;;;7934:34;;;;;7997:30;;;;;-1:-1:-1;8037:44:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7710:378;;;;;;;:::o;614:202:14:-;758:51;775:12;789;803:5;;758:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;758:16:14;;-1:-1:-1;;;758:51:14:i;:::-;614:202;;;;:::o;188:335:0:-;326:20;348:15;375:21;399:9;375:33;;433:38;451:4;457:13;433:17;:38::i;:::-;418:53;;507:9;491:25;;:13;:25;:::i;:::-;481:35;;365:158;188:335;;;;;:::o;1763:284:14:-;1865:20;1887:15;1914:21;1938:9;1914:33;;1972:22;1987:6;1972:14;:22::i;:::-;1957:37;;2030:9;2014:25;;:13;:25;:::i;:::-;2004:35;;1904:143;1763:284;;;:::o;1731:107:7:-;1795:4;1818:7;:13;1826:4;1818:13;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;1818:13:7;;;;;1731:107;-1:-1:-1;;1731:107:7:o;178:907:2:-;1744:1:8;2254:7;;:19;2246:63;;;;-1:-1:-1;;;2246:63:8;;;;;;;:::i;:::-;2363:8;2349:12;2342:30;269:18:2::1;1330:23:7;1348:4;1330:17;:23::i;:::-;327:1:2::2;307:10;;::::0;::::2;:4:::0;:10:::2;:::i;:::-;:17;;:21;299:57;;;;-1:-1:-1::0;;;299:57:2::2;;;;;;;:::i;:::-;388:1;374:4;:11;;;:15;366:59;;;;-1:-1:-1::0;;;366:59:2::2;;;;;;;:::i;:::-;443:21;:34;465:11;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;443:34:2::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;443:34:2;;::::2;;435:61;;;::::0;-1:-1:-1;;;435:61:2;;20439:2:15;435:61:2::2;::::0;::::2;20421:21:15::0;20478:2;20458:18;;;20451:30;-1:-1:-1;;;20497:18:15;;;20490:44;20551:18;;435:61:2::2;20237:338:15::0;435:61:2::2;515:18;536:118;549:18;569:13;;::::0;::::2;:4:::0;:13:::2;:::i;:::-;584:17;::::0;;;::::2;::::0;::::2;;:::i;:::-;603:11;::::0;;;::::2;::::0;::::2;;:::i;:::-;616;::::0;::::2;;629:8;::::0;::::2;;639:14;;::::0;::::2;616:4:::0;639:14:::2;:::i;:::-;536:12;:118::i;:::-;515:139:::0;-1:-1:-1;680:12:2::2;::::0;717:11:::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;717:16:2::2;740:10:::0;752::::2;;::::0;::::2;:4:::0;:10:::2;:::i;:::-;717:46;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;679:84;;;;782:7;777:106;;816:51;841:6;816:51;;;;;;;;;;;;;-1:-1:-1::0;;;816:51:2::2;;::::0;:24:::2;:51::i;:::-;809:59;;-1:-1:-1::0;;;809:59:2::2;;;;;;;;:::i;777:106::-;896:57;923:13;;::::0;::::2;:4:::0;:13:::2;:::i;:::-;938:11;::::0;;;::::2;::::0;::::2;;:::i;:::-;951:1;896:26;:57::i;:::-;-1:-1:-1::0;974:104:2::2;::::0;-1:-1:-1;987:13:2::2;;::::0;::::2;:4:::0;:13:::2;:::i;:::-;1002;::::0;;;::::2;::::0;::::2;;:::i;:::-;1017:16;::::0;;;::::2;::::0;::::2;;:::i;:::-;1035:11;::::0;::::2;;1048:1;1051:12;::::0;::::2;;1065;;::::0;::::2;1035:4:::0;1065:12:::2;:::i;:::-;974:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;974:12:2::2;::::0;-1:-1:-1;;;974:104:2:i:2;:::-;289:796;2391:1:8::1;2446:12:::0;2432;2425:34;178:907:2;:::o;4611:460:1:-;1374:16:6;:14;:16::i;:::-;4720:6:1::1;4715:350;4732:11;:18;4728:1;:22;4715:350;;;4793:1;4779:7;4787:1;4779:10;;;;;;;;:::i;:::-;;;;;;;:15;;:37;;;;;4812:4;4798:7;4806:1;4798:10;;;;;;;;:::i;:::-;;;;;;;:18;;4779:37;4771:68;;;::::0;-1:-1:-1;;;4771:68:1;;21809:2:15;4771:68:1::1;::::0;::::1;21791:21:15::0;21848:2;21828:18;;;21821:30;-1:-1:-1;;;21867:18:15;;;21860:48;21925:18;;4771:68:1::1;21607:342:15::0;4771:68:1::1;4857:11;4869:1;4857:14;;;;;;;;:::i;:::-;;;;;;;4853:142;;;4908:7;4916:1;4908:10;;;;;;;;:::i;:::-;;;;;;;4891:14;:27;;;;4853:142;;;4970:7;4978:1;4970:10;;;;;;;;:::i;:::-;;;;;;;4957;:23;;;;4853:142;5013:41;5027:11;5039:1;5027:14;;;;;;;;:::i;:::-;;;;;;;5043:7;5051:1;5043:10;;;;;;;;:::i;:::-;;;;;;;5013:41;;;;;;22147:14:15::0;;22140:22;22122:41;;22194:2;22179:18;;22172:34;22110:2;22095:18;;21954:258;5013:41:1::1;;;;;;;;4752:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4715:350;;6515:559:::0;1374:16:6;:14;:16::i;:::-;6680:39:1;;::::1;6672:64;;;;-1:-1:-1::0;;;6672:64:1::1;;;;;;;:::i;:::-;6754:39:::0;;::::1;6746:64;;;;-1:-1:-1::0;;;6746:64:1::1;;;;;;;:::i;:::-;6831:9:::0;6820:8:::1;6857:138;6874:3;6870:1;:7;6857:138;;;6941:43;;;;;;;;6955:9;;6965:1;6955:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6941:43:1::1;;;;;6968:12;;6981:1;6968:15;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6941:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6941:43:1;;;;-1:-1:-1;6898:26:1::1;::::0;-1:-1:-1;6925:9:1;;-1:-1:-1;6925:9:1;6935:1;6925:12;;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;6898:40:::0;;-1:-1:-1;6898:40:1;;::::1;::::0;;;;;;-1:-1:-1;6898:40:1;:86;;;;-1:-1:-1;;;;;;6898:86:1::1;-1:-1:-1::0;;;;;6898:86:1;;::::1;;::::0;;;;::::1;::::0;-1:-1:-1;6898:86:1;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;;;;;6879:3;;;;;:::i;:::-;;;;6857:138;;;;7009:58;7032:9;;7043;;7054:12;;7009:58;;;;;;;;;;;:::i;:::-;;;;;;;;6662:412;6515:559:::0;;;;;;:::o;2585:211:6:-;2651:10;;2679:17;1739:16;;-1:-1:-1;;;;;1739:16:6;;1657:105;2679:17;-1:-1:-1;;;;;2679:27:6;;2671:79;;;;-1:-1:-1;;;2671:79:6;;27733:2:15;2671:79:6;;;27715:21:15;27772:2;27752:18;;;27745:30;27811:34;27791:18;;;27784:62;-1:-1:-1;;;27862:18:15;;;27855:37;27909:19;;2671:79:6;27531:403:15;2671:79:6;2760:29;2782:6;2760:21;:29::i;:::-;2624:172;2585:211::o;2133:193::-;1374:16;:14;:16::i;:::-;2222::::1;:30:::0;;-1:-1:-1;;;;;2222:30:6;::::1;-1:-1:-1::0;;;;;;2222:30:6;;::::1;::::0;::::1;::::0;;;2295:10:::1;1536:7:::0;1562:9;-1:-1:-1;;;;;1562:9:6;;1487:91;2295:10:::1;-1:-1:-1::0;;;;;2267:52:6::1;;;;;;;;;;;2133:193:::0;:::o;5671:838:1:-;1374:16:6;:14;:16::i;:::-;5794:24:1;;5791:265:::1;;5838:6;5833:156;5846:23:::0;;::::1;5833:156;;;5936:21;:38;5958:12;;5971:1;5958:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5936:38:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;5936:38:1;;;;::::1;;5935:39;::::0;5894:21:::1;::::0;5916:12;;5929:1;5916:15;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5894:38:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;5894:38:1;:80;;-1:-1:-1;;5894:80:1::1;::::0;::::1;;::::0;;;::::1;::::0;;5871:3;::::1;::::0;::::1;:::i;:::-;;;;5833:156;;;;6007:38;6032:12;;6007:38;;;;;;;:::i;:::-;;;;;;;;5791:265;6068:25:::0;;6065:438:::1;;6109:24;6147:13:::0;-1:-1:-1;;;;;6136:32:1;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;6136:32:1::1;;6109:59;;6187:10;6182:245;6199:28:::0;;::::1;6182:245;;;6298:16;:38;6315:13;;6329:5;6315:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6298:38:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6298:38:1;;;;::::1;;6297:39;::::0;6256:16:::1;::::0;6273:13;;6287:5;6273:20;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6256:38:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6256:38:1;;;:80;;-1:-1:-1;;6256:80:1::1;::::0;::::1;;::::0;;;::::1;::::0;;;6374:16:::1;::::0;6391:13;;6405:5;6391:20;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6374:38:1::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;6374:38:1;;6354:17;;6374:38:::1;::::0;;::::1;::::0;6354:10;;6365:5;;6354:17;::::1;;;;;:::i;:::-;:58:::0;::::1;;:17;::::0;;::::1;::::0;;;;;;;:58;6229:7;::::1;::::0;::::1;:::i;:::-;;;;6182:245;;;;6445:47;6466:13;;6481:10;6445:47;;;;;;;;:::i;:::-;;;;;;;;6095:408;5671:838:::0;;;;:::o;5077:588::-;1374:16:6;:14;:16::i;:::-;-1:-1:-1;;;;;5192:24:1;::::1;::::0;5188:137:::1;;5232:17;:30:::0;;-1:-1:-1;;;;;;5232:30:1::1;-1:-1:-1::0;;;;;5232:30:1;::::1;;::::0;;5281:33:::1;::::0;::::1;::::0;::::1;::::0;5232:30;;5281:33:::1;:::i;:::-;;;;;;;;5188:137;-1:-1:-1::0;;;;;5338:20:1;::::1;::::0;5334:166:::1;;5394:11;::::0;;-1:-1:-1;;;;;5419:20:1;;::::1;-1:-1:-1::0;;;;;;5419:20:1;::::1;;::::0;;;5458:31:::1;::::0;5394:11;::::1;::::0;5458:31:::1;::::0;::::1;::::0;5394:11;;5433:6;;5458:31:::1;:::i;:::-;;;;;;;;5360:140;5334:166;-1:-1:-1::0;;;;;5513:19:1;::::1;::::0;5509:150:::1;;5567:6;::::0;;-1:-1:-1;;;;;5587:14:1;;::::1;-1:-1:-1::0;;;;;;5587:14:1;::::1;;::::0;;;5620:28:::1;::::0;5567:6;::::1;::::0;5620:28:::1;::::0;::::1;::::0;5567:6;;5596:5;;5620:28:::1;:::i;:::-;;;;;;;;5534:125;5077:588:::0;;;:::o;2053:168:14:-;2145:20;2192:22;2207:6;2192:14;:22::i;:::-;2177:37;2053:168;-1:-1:-1;;2053:168:14:o;7080:305:1:-;1374:16:6;:14;:16::i;:::-;7188:5:1;7177:8:::1;7210:169;7227:3;7223:1;:7;7210:169;;;7255:6;7251:118;;;7281:16;7288:5;;7294:1;7288:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7281:6;:16::i;:::-;7251:118;;;7336:18;7345:5;;7351:1;7345:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;7336;:18::i;:::-;7232:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7210:169;;;;7167:218;7080:305:::0;;;:::o;529:220:0:-;657:20;704:38;722:4;728:13;704:17;:38::i;2291:319:13:-;2415:20;2437:15;2464:21;2488:9;2464:33;;2522:36;2537:10;2549:8;2522:14;:36::i;7334:762:14:-;7462:3;7456;7448:11;;;:17;7431:14;7505:37;;;:26;:37;;;;;;;;7475:67;;;;;;;;;;-1:-1:-1;;;;;7475:67:14;;;;;;;;;;7505:37;;7475:67;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7475:67:14;;;;-1:-1:-1;;7560:14:14;;7475:67;;-1:-1:-1;;;;;;;7560:28:14;7552:66;;;;-1:-1:-1;;;7552:66:14;;29280:2:15;7552:66:14;;;29262:21:15;29319:2;29299:18;;;29292:30;-1:-1:-1;;;29338:18:15;;;29331:55;29403:18;;7552:66:14;29078:349:15;7552:66:14;7628:16;7840:6;:14;;;7884:8;7922:6;:19;;;7757:210;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7722:267;;;;;;7693:314;;7628:403;;8061:6;-1:-1:-1;;;;;8049:18:14;:8;-1:-1:-1;;;;;8049:18:14;;8041:48;;;;-1:-1:-1;;;8041:48:14;;30256:2:15;8041:48:14;;;30238:21:15;30295:2;30275:18;;;30268:30;-1:-1:-1;;;30314:18:15;;;30307:47;30371:18;;8041:48:14;30054:341:15;8041:48:14;7421:675;;;7334:762;;;:::o;753:363:11:-;900:12;914:17;935:5;-1:-1:-1;;;;;935:10:11;969;981:2;985:5;946:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;946:45:11;;;;;;;;;;;935:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:93;;;;1010:7;:57;;;;-1:-1:-1;1022:11:11;;:16;;:44;;;1053:4;1042:24;;;;;;;;;;;;:::i;:::-;1002:107;;;;-1:-1:-1;;;1002:107:11;;31144:2:15;1002:107:11;;;31126:21:15;31183:2;31163:18;;;31156:30;31222:34;31202:18;;;31195:62;-1:-1:-1;;;31273:18:15;;;31266:35;31318:19;;1002:107:11;30942:401:15;2826:2405:13;2985:20;1744:1:8;2254:7;;:19;2246:63;;;;-1:-1:-1;;;2246:63:8;;;;;;;:::i;:::-;2363:8;2349:12;2342:30;2948:26:13::1;1330:23:7;1348:4;1330:17;:23::i;:::-;3037:15:13::2;3025:8;:27;;3017:47;;;;-1:-1:-1::0;;;3017:47:13::2;;;;;;;:::i;:::-;3140:1;3133:3;3106:17;::::0;::::2;;3127:3;3106:24;:30;:35;3083:20;::::0;;;;3289:40:::2;3106:10:::0;:35;3289:11:::2;:40::i;:::-;3165:164;;;;;;;;;;3356:73;3384:5;3390:1;3384:8;;;;;;;;:::i;:::-;;;;;;;3394:10;:15;;;;;;;;:::i;:::-;3410:1;3394:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3414:14;3356:27;:73::i;:::-;3448:15;3444:1253;;;3486:7;3483:575;;;3517:110;3568:17;::::0;::::2;;3589:5:::0;3596:15:::2;;::::0;::::2;3568:10:::0;3596:15:::2;:::i;:::-;3517:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;3621:4:13::2;::::0;-1:-1:-1;3517:34:13::2;::::0;-1:-1:-1;;3517:110:13:i:2;:::-;3664:86;3725:24:::0;3671:23:::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;3664:41:13::2;;3714:4;3664:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60:::0;::::2;:86::i;:::-;3649:101;;3444:1253;;3483:575;3797:119;3848:17;::::0;::::2;;3869:5:::0;3876:15:::2;;::::0;::::2;3848:10:::0;3876:15:::2;:::i;:::-;3797:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3893:10;:22;;;;;;;;;;:::i;:::-;3797:34;:119::i;:::-;3953:86;4023:15;3960:5;3981:1;3966:5;:12;:16;;;;:::i;:::-;3960:23;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;3953:41:13::2;;3995:10;:22;;;;;;;;;;:::i;:::-;3953:65;;;;;;;;;;;;;;;:::i;3444:1253::-;4096:21;4147:10;:17;;;-1:-1:-1::0;;;;;4120:61:13::2;;4182:14;4198:5;4120:84;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;4120:84:13::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;:::i;:::-;4096:108;;4225:7;4222:461;;;4256:53;4262:7:::0;4271:5;4278:15:::2;;::::0;::::2;:10:::0;:15:::2;:::i;:::-;4256:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;4303:4:13::2;::::0;-1:-1:-1;4256:5:13::2;::::0;-1:-1:-1;;4256:53:13:i:2;:::-;4346:86;4407:24:::0;4353:23:::2;::::0;;;::::2;::::0;::::2;;:::i;4346:86::-;4331:101;;4222:461;;;4479:62;4485:7:::0;4494:5;4501:15:::2;;::::0;::::2;:10:::0;:15:::2;:::i;:::-;4479:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4518:10;:22;;;;;;;;;;:::i;:::-;4479:5;:62::i;:::-;4578:86;4648:15;4585:5;4606:1;4591:5;:12;:16;;;;:::i;:::-;4585:23;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;4578:41:13::2;;4620:10;:22;;;;;;;;;;:::i;4578:86::-;4563:101;;4222:461;4078:619;3444:1253;4735:10;:26;;;4719:12;:42;;4711:74;;;;-1:-1:-1::0;;;4711:74:13::2;;;;;;;:::i;:::-;4803:7;4799:198;;;4830:66;4858:23;::::0;;;::::2;::::0;::::2;;:::i;:::-;4883:12;4830:27;:66::i;:::-;4914:68;4945:22;;::::0;::::2;:10:::0;:22:::2;:::i;:::-;4969:12;4914:30;:68::i;:::-;3151:1856;;;;;5016:21;5040:10;:18;;;;;;;;:::i;:::-;5016:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;5016:42:13;;-1:-1:-1;5069:146:13::2;::::0;-1:-1:-1;5082:15:13::2;::::0;-1:-1:-1;;5082:15:13::2;::::0;::::2;:10:::0;:15:::2;:::i;:::-;5098:1;5082:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5102:15;;::::0;::::2;:10:::0;:15:::2;:::i;:::-;5143:1;5118:15;;::::0;::::2;:10:::0;:15:::2;:::i;:::-;:26;::::0;;-1:-1:-1;5118:26:13::2;:::i;:::-;5102:43;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5147:22;;::::0;::::2;:10:::0;:22:::2;:::i;:::-;5171:10;:17;;;5190:12;5204:1;5207:7;5069:12;:146::i;:::-;3007:2224;;2391:1:8::1;2446:12:::0;2432;2425:34;2826:2405:13;;;;:::o;1838:137:6:-;1918:10;1904;1536:7;1562:9;-1:-1:-1;;;;;1562:9:6;;1487:91;1904:10;-1:-1:-1;;;;;1904:24:6;;1896:72;;;;-1:-1:-1;;;1896:72:6;;34403:2:15;1896:72:6;;;34385:21:15;34442:2;34422:18;;;34415:30;34481:34;34461:18;;;34454:62;-1:-1:-1;;;34532:18:15;;;34525:33;34575:19;;1896:72:6;34201:399:15;1896:72:6;1838:137::o;251:132:11:-;304:4;-1:-1:-1;;;;;328:22:11;;;;:47;;-1:-1:-1;;;;;;354:21:11;;140:42;354:21;320:56;251:132;-1:-1:-1;;251:132:11:o;1886:224::-;2029:12;;;1991;2029;;;;;;;;;-1:-1:-1;;;;;2008:7:11;;;2022:5;;2008:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1990:52;;;2060:7;2052:51;;;;-1:-1:-1;;;2052:51:11;;34807:2:15;2052:51:11;;;34789:21:15;34846:2;34826:18;;;34819:30;34885:33;34865:18;;;34858:61;34936:18;;2052:51:11;34605:355:15;1122:354:11;1218:4;1301:12;1315:17;1336:5;-1:-1:-1;;;;;1336:10:11;1370;1382:2;1386:5;1347:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1347:45:11;;;;;;;;;;;1336:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1300:93;;;;1411:7;:57;;;;-1:-1:-1;1423:11:11;;:16;;:44;;;1454:4;1443:24;;;;;;;;;;;;:::i;:::-;1403:66;1122:354;-1:-1:-1;;;;;;1122:354:11:o;755:1880:0:-;941:20;1744:1:8;2254:7;;:19;2246:63;;;;-1:-1:-1;;;2246:63:8;;;;;;;:::i;:::-;2363:8;2349:12;2342:30;901:29:0::1;1330:23:7;1348:4;1330:17;:23::i;:::-;1014:1:0::2;981:23;;::::0;::::2;:13:::0;:23:::2;:::i;:::-;:30;;:34;973:70;;;;-1:-1:-1::0;;;973:70:0::2;;;;;;;:::i;:::-;1075:1;1061:4;:11;;;:15;1053:59;;;;-1:-1:-1::0;;;1053:59:0::2;;;;;;;:::i;:::-;1158:1;1130:16;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1130:30:0::2;::::0;1122:76:::2;;;::::0;-1:-1:-1;;;1122:76:0;;35167:2:15;1122:76:0::2;::::0;::::2;35149:21:15::0;35206:2;35186:18;;;35179:30;35245:34;35225:18;;;35218:62;-1:-1:-1;;;35296:18:15;;;35289:31;35337:19;;1122:76:0::2;34965:397:15::0;1122:76:0::2;1239:1;1216:4;:20;;;:24;1208:77;;;::::0;-1:-1:-1;;;1208:77:0;;35569:2:15;1208:77:0::2;::::0;::::2;35551:21:15::0;35608:2;35588:18;;;35581:30;35647:34;35627:18;;;35620:62;-1:-1:-1;;;35698:18:15;;;35691:38;35746:19;;1208:77:0::2;35367:404:15::0;1208:77:0::2;1303:16;:35;1320:17;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1303:35:0::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1303:35:0;;::::2;;1295:71;;;::::0;-1:-1:-1;;;1295:71:0;;35978:2:15;1295:71:0::2;::::0;::::2;35960:21:15::0;36017:2;35997:18;;;35990:30;-1:-1:-1;;;36036:18:15;;;36029:53;36099:18;;1295:71:0::2;35776:347:15::0;1295:71:0::2;1434:17;::::0;1377:23:::2;::::0;-1:-1:-1;;;;;1434:17:0::2;1377:23:::0;1482:131:::2;1377:23:::0;1526:13:::2;;::::0;::::2;:4:::0;:13:::2;:::i;:::-;1541:17;::::0;;;::::2;::::0;::::2;;:::i;:::-;1560:13:::0;1575:11:::2;::::0;::::2;;1588:8;::::0;::::2;;1598:14;;::::0;::::2;1575:4:::0;1598:14:::2;:::i;1482:131::-;1461:152:::0;-1:-1:-1;1628:35:0::2;1649:13;::::0;;;::::2;::::0;::::2;;:::i;:::-;1628:20;:35::i;:::-;1624:206;;;1697:16;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1697:24:0::2;;1679:42;;1624:206;;;1777:13;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;1770:31:0::2;;1802:16;::::0;;;::::2;::::0;::::2;;:::i;:::-;1770:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1752:67;;1624:206;1930:12;1944:19:::0;1967:13:::2;-1:-1:-1::0;;;;;1967:18:0::2;1994:10;2029;2041:13;2006:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;2006:49:0::2;;;;;;;;;;;1967:89;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1929:127;;;;2075:7;2070:103;;2109:48;2134:6;2109:48;;;;;;;;;;;;;-1:-1:-1::0;;;2109:48:0::2;;::::0;:24:::2;:48::i;2070:103::-;-1:-1:-1::0;2197:35:0::2;::::0;-1:-1:-1;2218:13:0::2;::::0;;;::::2;::::0;::::2;;:::i;2197:35::-;2193:242;;;2263:45;2292:15:::0;2263:16:::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;2263:24:0::2;;::::0;:28:::2;:45::i;:::-;2248:60;;2193:242;;;2354:70;2408:15:::0;2361:13:::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;2354:31:0::2;;2386:16;::::0;;;::::2;::::0;::::2;;:::i;2354:70::-;2339:85;;2193:242;2468:4;:20;;;2452:12;:36;;2444:68;;;;-1:-1:-1::0;;;2444:68:0::2;;;;;;;:::i;:::-;2523:104;2536:13;;::::0;::::2;:4:::0;:13:::2;:::i;:::-;2551;::::0;;;::::2;::::0;::::2;;:::i;:::-;2566:16;::::0;;;::::2;::::0;::::2;;:::i;:::-;2584:11;::::0;::::2;;2597:12:::0;2611:1:::2;2614:12;;::::0;::::2;2584:4:::0;2614:12:::2;:::i;2523:104::-;963:1672;;;2391:1:8::1;2446:12:::0;2432;2425:34;755:1880:0;;;;:::o;2227:2993:14:-;2364:20;1744:1:8;2254:7;;:19;2246:63;;;;-1:-1:-1;;;2246:63:8;;;;;;;:::i;:::-;2363:8;2349:12;2342:30;2327:26:14::1;1330:23:7;1348:4;1330:17;:23::i;:::-;2426:1:14::2;2404:12;;::::0;::::2;:6:::0;:12:::2;:::i;:::-;:19;;:23;2396:47;;;::::0;-1:-1:-1;;;2396:47:14;;37480:2:15;2396:47:14::2;::::0;::::2;37462:21:15::0;37519:2;37499:18;;;37492:30;-1:-1:-1;;;37538:18:15;;;37531:41;37589:18;;2396:47:14::2;37278:335:15::0;2396:47:14::2;2480:15;2461:6;:15;;;:34;;2453:54;;;;-1:-1:-1::0;;;2453:54:14::2;;;;;;;:::i;:::-;2525:16;:37;2542:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;2525:37:14::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;2525:37:14;;::::2;;2517:73;;;;-1:-1:-1::0;;;2517:73:14::2;;;;;;;:::i;:::-;2600:15;2618;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;2600:33:::0;-1:-1:-1;2643:16:14::2;2662:15;::::0;;;::::2;::::0;::::2;;:::i;:::-;2643:34:::0;-1:-1:-1;2688:23:14::2;::::0;2747:37:::2;2768:15;;::::0;::::2;:6:::0;:15:::2;:::i;2747:37::-;2743:97;;;2810:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;2800:29;;2743:97;2849:22;2874:135;2887:26;2915:15;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;2932:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;2961:1;2965:6;:13;;;2980:6;:10;;;2992:6;:16;;;;;;;;:::i;2874:135::-;2849:160:::0;-1:-1:-1;3024:37:14::2;3045:15;::::0;;;::::2;::::0;::::2;;:::i;3024:37::-;3020:312;;;3088:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;3077:30:::0;-1:-1:-1;3146:19:14::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;3139:37:14::2;;3185:4;3139:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3121:70;;3215:4;3205:14;;3020:312;;;3275:15;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;3268:33:14::2;;3302:18;::::0;;;::::2;::::0;::::2;;:::i;:::-;3268:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3250:71;;3020:312;3356:11;3370:12;;::::0;::::2;:6:::0;:12:::2;:::i;:::-;:19:::0;-1:-1:-1;3431:4:14::2;::::0;-1:-1:-1;3450:31:14::2;3505:1;3499:7:::0;::::2;3495:997;;;3548:7:::0;3526:19:::2;::::0;3624:492:::2;3644:3;3640:1;:7;3624:492;;;3676:16;3695:6;:12;;;;;;;;:::i;:::-;3708:1;3695:15;;;;;;;:::i;:::-;;;;;;;3676:34;;3768:48;3780:11;3793:12;3807:8;3768:11;:48::i;:::-;3732:84:::0;-1:-1:-1;3732:84:14;-1:-1:-1;3847:7:14::2;3853:1;3847:3:::0;:7:::2;:::i;:::-;3842:1;:12;:24;;;;;3859:7;3858:8;3842:24;3838:158;;;3906:6;:18;;;;;;;;;;:::i;:::-;3894:30;;3965:8;3950:23;;3838:158;4035:62;4041:9;4052:8;4062:18;4082:14;4035:5;:62::i;:::-;4018:79;;3654:462;3649:3;;;;;:::i;:::-;;;;3624:492;;;;4148:14;4133:29;;3508:669;;3495:997;;;4226:47;4238:7:::0;4247:8;4257:12:::2;;::::0;::::2;:6:::0;:12:::2;:::i;:::-;4270:1;4257:15;;;;;;;:::i;:::-;;;;;;;4226:11;:47::i;:::-;4201:72:::0;-1:-1:-1;4296:7:14;;-1:-1:-1;4291:85:14::2;;4339:18;::::0;;;::::2;::::0;::::2;;:::i;:::-;4327:30;;4291:85;4408:69;4414:9:::0;4425:12:::2;;::::0;::::2;:6:::0;:12:::2;:::i;:::-;4438:1;4425:15;;;;;;;:::i;:::-;;;;;;;4442:18;4462:14;4408:5;:69::i;:::-;4393:84;;3495:997;3342:1160;;;4516:7;4512:568;;;4554:73;4611:15:::0;4561:19:::2;::::0;;;::::2;::::0;::::2;;:::i;4554:73::-;4539:88;;4665:6;:22;;;4649:12;:38;;4641:70;;;;-1:-1:-1::0;;;4641:70:14::2;;;;;;;:::i;:::-;4725:62;4753:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;4774:12;4725:27;:62::i;:::-;4801:64;4832:18;::::0;;;::::2;::::0;::::2;;:::i;:::-;4852:12;4801:30;:64::i;:::-;4512:568;;;4911:74;4969:15:::0;4918::::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;4911:33:14::2;;4945:18;::::0;;;::::2;::::0;::::2;;:::i;4911:74::-;4896:89;;5023:6;:22;;;5007:12;:38;;4999:70;;;;-1:-1:-1::0;;;4999:70:14::2;;;;;;;:::i;:::-;5098:114;5111:15;;::::0;::::2;:6:::0;:15:::2;:::i;:::-;5128;::::0;;;::::2;::::0;::::2;;:::i;:::-;5145:18;::::0;;;::::2;::::0;::::2;;:::i;:::-;5165:6;:13;;;5180:12;5194:1;5197:6;:14;;;;;;;;:::i;5098:114::-;2386:2834;;;;;2391:1:8::1;2446:12:::0;2432;2425:34;2227:2993:14;;;:::o;1906:127:7:-;1993:12;2000:4;1993:6;:12::i;:::-;1992:13;1984:42;;;;-1:-1:-1;;;1984:42:7;;38172:2:15;1984:42:7;;;38154:21:15;38211:2;38191:18;;;38184:30;-1:-1:-1;;;38230:18:15;;;38223:46;38286:18;;1984:42:7;37970:340:15;9309:2111:1;9479:18;9510:14;9526:16;9546:13;9555:3;9546:8;:13::i;:::-;9509:50;;-1:-1:-1;9509:50:1;-1:-1:-1;9569:16:1;9596:18;9588:4;:26;;;;;;;;:::i;:::-;;:41;;9625:4;9588:41;;;9617:5;9588:41;9569:60;;9639:22;9664:59;9682:11;9695:6;9703:8;9713:9;;9664:17;:59::i;:::-;9639:84;;9737:30;9758:8;9737:20;:30::i;:::-;9733:1681;;;9795:18;9787:4;:26;;;;;;;;:::i;:::-;;9783:301;;9854:6;9841:9;:19;;9833:49;;;;-1:-1:-1;;;9833:49:1;;;;;;;:::i;:::-;9913:23;:9;9927:8;9913:13;:23::i;:::-;9900:36;;9783:301;;;9996:6;9983:9;:19;9975:49;;;;-1:-1:-1;;;9975:49:1;;;;;;;:::i;:::-;10055:14;10042:27;;9783:301;-1:-1:-1;;;;;10101:26:1;;;10097:534;;-1:-1:-1;;;;;10155:30:1;;;;;;:16;:30;;;;;;;;10147:66;;;;-1:-1:-1;;;10147:66:1;;;;;;;:::i;:::-;10243:18;10235:4;:26;;;;;;;;:::i;:::-;;10231:386;;10285:52;10312:12;10326:10;10285:26;:52::i;:::-;10359:60;10386:12;10400:6;10408:10;10359:26;:60::i;:::-;10454:1;10441:14;;10231:386;;;10492:26;10484:4;:34;;;;;;;;:::i;:::-;;10480:137;;10542:56;10569:12;10583:14;10542:26;:56::i;:::-;10648:9;10644:96;;;10708:6;;10677:48;;-1:-1:-1;;;;;10708:6:1;10716:8;10677:30;:48::i;:::-;9733:1681;;;10770:76;10802:8;10812:10;10832:4;10839:6;10770:31;:76::i;:::-;10872:18;10864:4;:26;;;;;;;;:::i;:::-;;10860:414;;10910:60;10937:8;10947:6;10955:14;10910:26;:60::i;:::-;11001:9;10988:22;;10860:414;;;11043:29;11035:4;:37;;;;;;;;:::i;:::-;;11031:243;;11092:61;11120:8;11130:6;11138:14;11092:27;:61::i;:::-;11031:243;;;11186:26;11178:4;:34;;;;;;;;:::i;:::-;;11174:100;;11245:14;11232:27;;11174:100;11291:9;11287:117;;;11372:6;;11320:69;;11362:8;;-1:-1:-1;;;;;11372:6:1;11380:8;11320:41;:69::i;:::-;;11287:117;9499:1921;;;;9309:2111;;;;;;;;;;:::o;95:1877:9:-;174:13;454:2;439:4;:11;:17;;:38;;;;;460:4;465:1;460:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;460:7:9;-1:-1:-1;;;460:17:9;439:38;:59;;;;;481:4;486:1;481:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;481:7:9;-1:-1:-1;;;481:17:9;439:59;:80;;;;;502:4;507:1;502:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;502:7:9;-1:-1:-1;;;502:17:9;439:80;:101;;;;;523:4;528:1;523:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;523:7:9;-1:-1:-1;;;523:17:9;439:101;435:1450;;;768:2;758:13;;;1255:20;;758:13;;1250:25;;1255:20;1250:25;:::i;:::-;1235:4;:11;:40;;1227:74;;;;-1:-1:-1;;;1227:74:9;;38993:2:15;1227:74:9;;;38975:21:15;39032:2;39012:18;;;39005:30;-1:-1:-1;;;39051:18:15;;;39044:51;39112:18;;1227:74:9;38791:345:15;1227:74:9;1346:6;1364;1329:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1315:62;;;;;435:1450;1468:4;:11;1483:2;1468:17;:38;;;;;1489:4;1494:1;1489:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;1489:7:9;-1:-1:-1;;;1489:17:9;1468:38;:59;;;;;1510:4;1515:1;1510:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;1510:7:9;-1:-1:-1;;;1510:17:9;1468:59;:80;;;;;1531:4;1536:1;1531:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;1531:7:9;-1:-1:-1;;;1531:17:9;1468:80;:101;;;;;1552:4;1557:1;1552:7;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;1552:7:9;-1:-1:-1;;;1552:17:9;1468:101;1464:421;;;1775:2;1765:13;;1759:20;1837:6;1855:12;1759:20;1855:6;:12::i;:::-;1820:53;;;;;;;;;:::i;1464:421::-;1926:6;1946:12;1953:4;1946:6;:12::i;:::-;1909:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1895:70;;95:1877;;;;:::o;393:354:11:-;538:12;552:17;573:5;-1:-1:-1;;;;;573:10:11;607;619:2;623:5;584:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;584:45:11;;;;;;;;;;;573:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;537:93;;;;648:7;:57;;;;-1:-1:-1;660:11:11;;:16;;:44;;;691:4;680:24;;;;;;;;;;;;:::i;:::-;640:100;;;;-1:-1:-1;;;640:100:11;;41757:2:15;640:100:11;;;41739:21:15;41796:2;41776:18;;;41769:30;41835:32;41815:18;;;41808:60;41885:18;;640:100:11;41555:354:15;4229:376:1;4487:11;-1:-1:-1;;;;;4412:186:1;4464:8;-1:-1:-1;;;;;4412:186:1;4441:8;-1:-1:-1;;;;;4412:186:1;;4512:6;4532:12;4558:9;4581:7;4412:186;;;;;;;;;:::i;:::-;;;;;;;;4229:376;;;;;;;:::o;2332:247:6:-;2418:16;2411:23;;-1:-1:-1;;;;;;2411:23:6;;;;;;2418:16;2466:9;;-1:-1:-1;;;;;2485:23:6;;;;;;;;;;2523:49;;2466:9;;;2485:23;2466:9;;2523:49;;2418:16;2523:49;2401:178;2332:247;:::o;2367:148:7:-;2433:4;1330:23;1348:4;1330:17;:23::i;:::-;2465:4:::1;2449:7;:13;2457:4;2449:13;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;2484:24;2491:10;2503:4;2484:24;;;;;;;:::i;:::-;;;;;;;;2367:148:::0;;:::o;2647:150::-;2712:4;1598:20;1613:4;1598:14;:20::i;:::-;2744:5:::1;2728:7;:13;2736:4;2728:13;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;2764:26;2773:10;2785:4;2764:26;;;;;;;:::i;188:2097:13:-:0;293:12;;331:22;293:12;;458:15;;;;:10;:15;:::i;:::-;:26;;-1:-1:-1;483:1:13;458:26;:::i;:::-;432:15;;;;:10;:15;:::i;:::-;:22;;:52;424:77;;;;-1:-1:-1;;;424:77:13;;43002:2:15;424:77:13;;;42984:21:15;43041:2;43021:18;;;43014:30;-1:-1:-1;;;43060:18:15;;;43053:42;43112:18;;424:77:13;42800:336:15;424:77:13;519:16;:41;536:23;;;;;;;;:::i;:::-;-1:-1:-1;;;;;519:41:13;;;;;;;;;;;;-1:-1:-1;519:41:13;;;;511:77;;;;-1:-1:-1;;;511:77:13;;;;;;;:::i;:::-;600:14;616:16;636:24;645:10;:14;;;636:8;:24::i;:::-;599:61;;-1:-1:-1;599:61:13;-1:-1:-1;687:74:13;705:4;711:17;;;;599:61;740:20;;;;711:10;740:20;:::i;:::-;687:17;:74::i;:::-;670:91;-1:-1:-1;771:21:13;795:15;;;;:10;:15;:::i;:::-;771:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;771:39:13;;-1:-1:-1;771:39:13;;-1:-1:-1;869:1:13;;-1:-1:-1;844:15:13;;-1:-1:-1;844:15:13;;;:10;:15;:::i;:::-;:26;;;-1:-1:-1;844:26:13;:::i;:::-;839:32;;;;;;;;:::i;:::-;;;;;;;820:51;;885:40;906:10;:15;;;;;;;;:::i;:::-;922:1;906:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;885:40::-;881:982;;;962:10;:17;;;949:9;:30;941:60;;;;-1:-1:-1;;;941:60:13;;43343:2:15;941:60:13;;;43325:21:15;43382:2;43362:18;;;43355:30;-1:-1:-1;;;43401:18:15;;;43394:47;43458:18;;941:60:13;43141:341:15;941:60:13;1019:9;1015:96;;;1079:6;;1048:48;;-1:-1:-1;;;;;1079:6:13;1087:8;1048:30;:48::i;:::-;1134:23;;;;;;;;:::i;:::-;1124:4;1129:1;1124:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1124:33:13;;;:7;;;;;;;;;;:33;1171:67;;1198:23;;;;;;;;;:::i;:::-;1223:14;1171:26;:67::i;:::-;881:982;;;1273:15;1269:455;;;1332:4;1337:1;1332:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1325:25:13;;1359:4;1325:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1308:57;;1383:86;1415:4;1420:1;1415:7;;;;;;;;:::i;:::-;;;;;;;1424:10;1444:4;1451:10;:17;;;1383:31;:86::i;:::-;1504:80;1569:10;:14;;;1504:60;1549:14;1511:4;1516:1;1511:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1504:25:13;;1538:4;1504:40;;;;;;;;;;;;;;;:::i;:80::-;1487:97;;1269:455;;;1623:86;1655:4;1660:1;1655:7;;;;;;;;:::i;1623:86::-;1741:9;1737:116;;;1770:68;1812:4;1817:1;1812:7;;;;;;;;:::i;:::-;;;;;;;;;;;1821:6;;-1:-1:-1;;;;;1821:6:13;1829:8;1770:41;:68::i;:::-;;1737:116;1876:30;1897:8;1876:20;:30::i;:::-;1872:385;;;1946:23;;;;;;;;:::i;:::-;1922:4;1941:1;1927:4;:11;:15;;;;:::i;:::-;1922:21;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1922:47:13;;;:21;;;;;;;;;;:47;1993:4;;-1:-1:-1;2045:23:13;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2038:41:13;;2088:4;2038:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2011:83;;1872:385;;;2129:15;2125:122;;;-1:-1:-1;;;;;2182:26:13;;;2209:22;;;;:10;:22;:::i;:::-;2182:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2164:68;;2125:122;2274:4;2266:12;;414:1871;;;;188:2097;;;;;;;;:::o;5902:1170::-;6053:6;6048:1018;6079:1;6065:4;:11;:15;;;;:::i;:::-;6061:1;:19;6048:1018;;;6102:13;6117:14;6136:4;6141:1;6136:7;;;;;;;;:::i;:::-;;;;;;;6145:4;6150:1;6154;6150:5;;;;:::i;:::-;6145:11;;;;;;;;:::i;:::-;;;;;;;6101:56;;;;6172:14;6199:6;-1:-1:-1;;;;;6191:14:13;:5;-1:-1:-1;;;;;6191:14:13;;:50;;6227:6;6235:5;6191:50;;;6209:5;6216:6;6191:50;6171:70;;;6255:15;6284:4;6289:1;6284:7;;;;;;;;:::i;:::-;;;;;;;6255:37;;6306:16;6336:17;6426:13;6441;6459:4;-1:-1:-1;;;;;6459:16:13;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6425:52;-1:-1:-1;;;;;6425:52:13;;;-1:-1:-1;;;;;6425:52:13;;;6496:17;6515:18;6546:6;-1:-1:-1;;;;;6537:15:13;:5;-1:-1:-1;;;;;6537:15:13;;:61;;6579:8;6589;6537:61;;;6556:8;6566;6537:61;6495:103;;;;6630:56;6673:12;6637:5;-1:-1:-1;;;;;6630:23:13;;6662:4;6630:38;;;;;;;;;;;;;;;:::i;:56::-;6616:70;;6730:6;-1:-1:-1;;;;;6719:31:13;;6751:11;6764:12;6778:13;6719:73;;;;;;;;;;;;;;;;44326:25:15;;;44382:2;44367:18;;44360:34;;;;44425:2;44410:18;;44403:34;44314:2;44299:18;;44124:319;6719:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6704:88;;6367:440;;;;6821:15;6838;6866:6;-1:-1:-1;;;;;6857:15:13;:5;-1:-1:-1;;;;;6857:15:13;;:67;;6902:12;6921:1;6857:67;;;6881:1;6885:12;6857:67;6820:104;;;;6938:10;6969:1;6955:4;:11;:15;;;;:::i;:::-;6951:1;:19;:39;;6987:3;6951:39;;;6973:4;6978:5;:1;6982;6978:5;:::i;:::-;6973:11;;;;;;;;:::i;:::-;;;;;;;6951:39;7042:12;;;7052:1;7042:12;;;;;;;;;-1:-1:-1;;;7004:51:13;;;6938:52;;-1:-1:-1;;;;;;7004:9:13;;;;;:51;;7014:10;;7026;;6938:52;;7004:51;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6087:979;;;;;;;;;6082:3;;;;;:::i;:::-;;;;6048:1018;;82:127:10;134:6;175:1;165:5;169:1;175;165:5;:::i;:::-;161:9;;;160:16;;152:50;;;;-1:-1:-1;;;152:50:10;;45113:2:15;152:50:10;;;45095:21:15;45152:2;45132:18;;;45125:30;-1:-1:-1;;;45171:18:15;;;45164:51;45232:18;;152:50:10;44911:345:15;5237:659:13;5358:6;5353:537;5384:1;5370:4;:11;:15;;;;:::i;:::-;5366:1;:19;5353:537;;;5407:13;5422:14;5441:4;5446:1;5441:7;;;;;;;;:::i;:::-;;;;;;;5450:4;5455:1;5459;5455:5;;;;:::i;:::-;5450:11;;;;;;;;:::i;:::-;;;;;;;5406:56;;;;5477:14;5504:6;-1:-1:-1;;;;;5496:14:13;:5;-1:-1:-1;;;;;5496:14:13;;:50;;5532:6;5540:5;5496:50;;;5514:5;5521:6;5496:50;-1:-1:-1;5476:70:13;-1:-1:-1;5560:14:13;5577:7;5585:5;:1;5589;5585:5;:::i;:::-;5577:14;;;;;;;;:::i;:::-;;;;;;;5560:31;;5606:15;5623;5651:6;-1:-1:-1;;;;;5642:15:13;:5;-1:-1:-1;;;;;5642:15:13;;:61;;5684:9;5700:1;5642:61;;;5666:1;5670:9;5642:61;5605:98;;;;5717:10;5748:1;5734:4;:11;:15;;;;:::i;:::-;5730:1;:19;:39;;5766:3;5730:39;;;5752:4;5757:5;:1;5761;5757:5;:::i;:::-;5752:11;;;;;;;;:::i;:::-;;;;;;;5730:39;5717:52;;5794:4;5799:1;5794:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;5783:24:13;;5825:10;5837;5849:2;5863:1;-1:-1:-1;;;;;5853:12:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5853:12:13;;5783:96;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5392:498;;;;;;;5387:3;;;;;:::i;:::-;;;;5353:537;;2455:350:11;2588:12;2602:17;2623:7;-1:-1:-1;;;;;2623:12:11;2642:1;2668:10;2680:5;2645:41;;;;;;2971:25:15;;2959:2;2944:18;;2825:177;2645:41:11;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2645:41:11;;;;;;;;;;;2623:64;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2587:100;;;;2705:7;:57;;;;-1:-1:-1;2717:11:11;;:16;;:44;;;2748:4;2737:24;;;;;;;;;;;;:::i;:::-;2697:101;;;;-1:-1:-1;;;2697:101:11;;45463:2:15;2697:101:11;;;45445:21:15;45502:2;45482:18;;;45475:30;45541:33;45521:18;;;45514:61;45592:18;;2697:101:11;45261:355:15;6215:1113:14;6308:19;6329:31;6372:20;6426:4;6372:61;;6443:14;6460:5;-1:-1:-1;;;;;6460:12:14;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6443:31;;6484:14;6501:5;-1:-1:-1;;;;;6501:12:14;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6484:31;;6525:10;6538:5;-1:-1:-1;;;;;6538:9:14;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6588:31;;;-1:-1:-1;;;;;46416:15:15;;;6588:31:14;;;46398:34:15;46468:15;;46448:18;;;46441:43;;;;46532:8;46520:21;;46500:18;;;46493:49;6525:24:14;;-1:-1:-1;6559:16:14;;46333:18:15;;6588:31:14;;;-1:-1:-1;;6588:31:14;;;;;;;;;6578:42;;6588:31;6578:42;;;;;-1:-1:-1;;;;6649:25:14;;:30;6689:568;;;;6738:6;-1:-1:-1;;;;;6727:17:14;:7;-1:-1:-1;;;;;6727:17:14;;6719:38;;;;-1:-1:-1;;;6719:38:14;;;;;;;:::i;:::-;-1:-1:-1;;;;;6775:22:14;;;6771:100;;6837:6;-1:-1:-1;;;;;6825:18:14;:8;-1:-1:-1;;;;;6825:18:14;;6817:39;;;;-1:-1:-1;;;6817:39:14;;;;;;;:::i;:::-;6898:6;6884:20;;6950:6;6958:8;6939:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6918:49;;6689:568;;;7017:6;-1:-1:-1;;;;;7006:17:14;:7;-1:-1:-1;;;;;7006:17:14;;6998:38;;;;-1:-1:-1;;;6998:38:14;;;;;;;:::i;:::-;-1:-1:-1;;;;;7054:22:14;;;7050:100;;7116:6;-1:-1:-1;;;;;7104:18:14;:8;-1:-1:-1;;;;;7104:18:14;;7096:39;;;;-1:-1:-1;;;7096:39:14;;;;;;;:::i;:::-;7177:6;7163:20;;7229:6;7237:8;7218:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7197:49;;6689:568;7266:55;7282:4;7288:8;7314:4;7266:15;:55::i;:::-;6362:966;;;;;;6215:1113;;;;;;:::o;5226:983::-;5341:17;-1:-1:-1;;;5388:25:14;;:30;5428:775;;;;5461:14;5526:4;-1:-1:-1;;;;;5495:43:14;;5560:9;5591:10;5623:17;:6;:15;:17::i;:::-;5662:18;262:10;5679:1;5662:18;:::i;:::-;5713:4;5719:18;5702:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5495:261;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5458:298;;;5782:28;5802:7;5801:8;;;:::i;:::-;5782:18;:28::i;:::-;5770:40;;5444:377;5428:775;;;5842:14;5908:4;-1:-1:-1;;;;;5877:43:14;;5942:9;5973:10;6005:17;:6;:15;:17::i;:::-;6044:18;6061:1;320:49;6044:18;:::i;:::-;6095:4;6101:18;6084:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5877:261;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5841:297:14;-1:-1:-1;6164:28:14;6183:8;5841:297;6183:8;:::i;6164:28::-;6152:40;;5827:376;5428:775;5360:849;5226:983;;;;;;:::o;9014:289:1:-;9068:14;;;9129:8;9135:2;9129:3;:8;:::i;:::-;9112:25;-1:-1:-1;9158:28:1;9183:2;9159:18;:3;9112:25;9159:7;:18::i;:::-;9158:24;;:28::i;:::-;9147:39;;9200:9;9213:1;9200:14;:30;;;;;9229:1;9218:8;:12;9200:30;:54;;;;-1:-1:-1;9234:6:1;;-1:-1:-1;;;;;9234:6:1;:20;;9200:54;9196:101;;;9282:4;9270:16;;9196:101;9102:201;9014:289;;;:::o;3704:519::-;3832:7;3851:15;3880:11;3876:173;;;3917:42;3953:5;3917:31;3933:14;;3917:11;:15;;:31;;;;:::i;:42::-;3907:52;;3876:173;;;4000:38;4032:5;4000:27;4016:10;;4000:11;:15;;:27;;;;:::i;:38::-;3990:48;;3876:173;4068:7;4062:3;:13;4058:122;;;4099:44;4115:11;4128:3;4133:9;;4099:15;:44::i;:::-;4091:78;;;;-1:-1:-1;;;4091:78:1;;49251:2:15;4091:78:1;;;49233:21:15;49290:2;49270:18;;;49263:30;-1:-1:-1;;;49309:18:15;;;49302:51;49370:18;;4091:78:1;49049:345:15;4091:78:1;4196:20;:11;4212:3;4196:15;:20::i;:::-;4189:27;3704:519;-1:-1:-1;;;;;;;3704:519:1:o;2116:333:11:-;2297:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2297:34:11;-1:-1:-1;;;2297:34:11;;;2271:61;;2236:12;;;;-1:-1:-1;;;;;2271:12:11;;;2290:5;;2271:61;;2297:34;2271:61;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2235:97;;;;2350:7;:57;;;;-1:-1:-1;2362:11:11;;:16;;:44;;;2393:4;2382:24;;;;;;;;;;;;:::i;:::-;2342:100;;;;-1:-1:-1;;;2342:100:11;;49601:2:15;2342:100:11;;;49583:21:15;49640:2;49620:18;;;49613:30;49679:32;49659:18;;;49652:60;49729:18;;2342:100:11;49399:354:15;1482:398:11;1705:51;;;-1:-1:-1;;;;;50016:15:15;;;1705:51:11;;;49998:34:15;50068:15;;;50048:18;;;50041:43;50100:18;;;;50093:34;;;1705:51:11;;;;;;;;;;49933:18:15;;;;1705:51:11;;;;;;;-1:-1:-1;;;;;1705:51:11;-1:-1:-1;;;1705:51:11;;;1694:63;;-1:-1:-1;;;;1694:10:11;;;;:63;;1705:51;1694:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1658:99;;;;1775:7;:57;;;;-1:-1:-1;1787:11:11;;:16;;:44;;;1818:4;1807:24;;;;;;;;;;;;:::i;:::-;1767:106;;;;-1:-1:-1;;;1767:106:11;;50340:2:15;1767:106:11;;;50322:21:15;50379:2;50359:18;;;50352:30;50418:34;50398:18;;;50391:62;-1:-1:-1;;;50469:18:15;;;50462:34;50513:19;;1767:106:11;50138:400:15;1982:122:9;2034:13;2066:31;2090:5;2073:23;;;;;;50672:19:15;;50716:2;50707:12;;50543:182;2073:23:9;;;;;;;;;;;;;2110:456;2287:11;;2166:13;;-1:-1:-1;;;2191:53:9;:16;;2287:15;;2301:1;2287:15;:::i;:::-;2283:19;;:1;:19;:::i;:::-;-1:-1:-1;;;;;2273:30:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2273:30:9;;2254:49;;-1:-1:-1;;;2313:3:9;2317:1;2313:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;2313:12:9;;;;;;;;;-1:-1:-1;;;2335:3:9;2339:1;2335:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;2335:12:9;;;;;;;;;2362:9;2357:175;2381:4;:11;2377:1;:15;2357:175;;;2430:8;2456:1;2445:4;2450:1;2445:7;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;2445:7:9;:12;;:7;2439:19;2430:29;;;;;;;:::i;:::-;;;;2413:3;2417:5;2421:1;2417;:5;:::i;:::-;:9;;2425:1;2417:9;:::i;:::-;2413:14;;;;;;;;:::i;:::-;;;;:46;-1:-1:-1;;;;;2413:46:9;;;;;;;;;2490:8;2505:4;2510:1;2505:7;;;;;;;;:::i;:::-;;;;;;;;2515:4;2499:21;2490:31;;;;;;;:::i;:::-;;;;2473:3;2477:5;2481:1;2477;:5;:::i;:::-;:9;;2485:1;2477:9;:::i;:::-;2473:14;;;;;;;;:::i;:::-;;;;:48;-1:-1:-1;;;;;2473:48:9;;;;;;;;-1:-1:-1;2394:3:9;;;;:::i;:::-;;;;2357:175;;;-1:-1:-1;2555:3:9;2110:456;-1:-1:-1;;;2110:456:9:o;2105:127:7:-;2188:12;2195:4;2188:6;:12::i;:::-;2180:45;;;;-1:-1:-1;;;2180:45:7;;51105:2:15;2180:45:7;;;51087:21:15;51144:2;51124:18;;;51117:30;-1:-1:-1;;;51163:18:15;;;51156:50;51223:18;;2180:45:7;50903:344:15;503:198:10;559:6;-1:-1:-1;;;;;585:5:10;:34;;577:87;;;;-1:-1:-1;;;577:87:10;;51454:2:15;577:87:10;;;51436:21:15;51493:2;51473:18;;;51466:30;51532:34;51512:18;;;51505:62;-1:-1:-1;;;51583:18:15;;;51576:38;51631:19;;577:87:10;51252:404:15;577:87:10;-1:-1:-1;688:5:10;503:198::o;707:168::-;763:7;799:1;790:5;:10;;782:55;;;;-1:-1:-1;;;782:55:10;;51863:2:15;782:55:10;;;51845:21:15;;;51882:18;;;51875:30;51941:34;51921:18;;;51914:62;51993:18;;782:55:10;51661:356:15;365:132:10;417:6;443:1;448;443:6;435:36;;;;-1:-1:-1;;;435:36:10;;52224:2:15;435:36:10;;;52206:21:15;52263:2;52243:18;;;52236:30;-1:-1:-1;;;52282:18:15;;;52275:46;52338:18;;435:36:10;52022:340:15;435:36:10;485:5;489:1;485;:5;:::i;215:140::-;267:6;293;;;:30;;-1:-1:-1;322:1:10;317;308:5;317:1;322;308:5;:::i;:::-;304:9;-1:-1:-1;303:15:10;;304:9;303:15;:::i;:::-;:20;293:30;285:63;;;;-1:-1:-1;;;285:63:10;;52694:2:15;285:63:10;;;52676:21:15;52733:2;52713:18;;;52706:30;-1:-1:-1;;;52752:18:15;;;52745:50;52812:18;;285:63:10;52492:344:15;8094:517:1;8315:16;;8359:54;;;2346:63;8359:54;;;53072:25:15;8389:10:1;53113:18:15;;;53106:60;;;;53182:18;;;53175:34;;;53225:18;;;53218:34;;;8197:4:1;;;;53044:19:15;;8359:54:1;;;;;;;;;;;;8349:65;;;;;;8253:175;;;;;;;;-1:-1:-1;;;53521:27:15;;53573:1;53564:11;;53557:27;;;;53609:2;53600:12;;53593:28;53646:2;53637:12;;53263:392;8253:175:1;;;;;;;;;;;;;8230:208;;;;;;8213:225;;8449:7;8458:9;8469;8482:25;8497:9;;8482:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8482:14:1;;-1:-1:-1;;;8482:25:1:i;:::-;8448:59;;;;;;8517:17;8537:26;8547:6;8555:1;8558;8561;8537:26;;;;;;;;;;;;;;;;;53887:25:15;;;53960:4;53948:17;;;;53943:2;53928:18;;53921:45;53997:2;53982:18;;53975:34;54040:2;54025:18;;54018:34;53874:3;53859:19;;53660:398;8537:26:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8537:26:1;;-1:-1:-1;;8537:26:1;;8593:11;;-1:-1:-1;;;;;8593:11:1;;;8580:24;;;;8094:517;-1:-1:-1;;;;;;;;;;;8094:517:1:o;8617:391::-;8689:7;8698:9;8709;8744:10;8738:24;8766:2;8738:30;8730:67;;;;-1:-1:-1;;;8730:67:1;;54265:2:15;8730:67:1;;;54247:21:15;54304:2;54284:18;;;54277:30;-1:-1:-1;;;54323:18:15;;;54316:54;54387:18;;8730:67:1;54063:348:15;8730:67:1;-1:-1:-1;;;8858:4:1;8842:21;;8836:28;8904:4;8888:21;;8882:28;8958:4;8942:21;;;8936:28;8933:1;8928:37;;8836:28;;8882;8617:391::o;14:274:15:-;-1:-1:-1;;;;;206:32:15;;;;188:51;;270:2;255:18;;248:34;176:2;161:18;;14:274::o;293:331::-;398:9;409;451:8;439:10;436:24;433:44;;;473:1;470;463:12;433:44;502:6;492:8;489:20;486:40;;;522:1;519;512:12;486:40;-1:-1:-1;;548:23:15;;;593:25;;;;;-1:-1:-1;293:331:15:o;629:127::-;690:10;685:3;681:20;678:1;671:31;721:4;718:1;711:15;745:4;742:1;735:15;761:275;832:2;826:9;897:2;878:13;;-1:-1:-1;;874:27:15;862:40;;-1:-1:-1;;;;;917:34:15;;953:22;;;914:62;911:88;;;979:18;;:::i;:::-;1015:2;1008:22;761:275;;-1:-1:-1;761:275:15:o;1041:186::-;1089:4;-1:-1:-1;;;;;1114:6:15;1111:30;1108:56;;;1144:18;;:::i;:::-;-1:-1:-1;1210:2:15;1189:15;-1:-1:-1;;1185:29:15;1216:4;1181:40;;1041:186::o;1232:805::-;1316:6;1324;1332;1385:2;1373:9;1364:7;1360:23;1356:32;1353:52;;;1401:1;1398;1391:12;1353:52;1437:9;1424:23;1414:33;;1494:2;1483:9;1479:18;1466:32;1456:42;;1549:2;1538:9;1534:18;1521:32;-1:-1:-1;;;;;1568:6:15;1565:30;1562:50;;;1608:1;1605;1598:12;1562:50;1631:22;;1684:4;1676:13;;1672:27;-1:-1:-1;1662:55:15;;1713:1;1710;1703:12;1662:55;1749:2;1736:16;1774:48;1790:31;1818:2;1790:31;:::i;:::-;1774:48;:::i;:::-;1845:2;1838:5;1831:17;1885:7;1880:2;1875;1871;1867:11;1863:20;1860:33;1857:53;;;1906:1;1903;1896:12;1857:53;1961:2;1956;1952;1948:11;1943:2;1936:5;1932:14;1919:45;2005:1;2000:2;1995;1988:5;1984:14;1980:23;1973:34;2026:5;2016:15;;;;;1232:805;;;;;:::o;2042:304::-;-1:-1:-1;;;;;2272:15:15;;;2254:34;;2324:15;;2319:2;2304:18;;2297:43;2204:2;2189:18;;2042:304::o;2351:469::-;2460:6;2468;2521:2;2509:9;2500:7;2496:23;2492:32;2489:52;;;2537:1;2534;2527:12;2489:52;2577:9;2564:23;-1:-1:-1;;;;;2602:6:15;2599:30;2596:50;;;2642:1;2639;2632:12;2596:50;2665:22;;2721:3;2703:16;;;2699:26;2696:46;;;2738:1;2735;2728:12;2696:46;2761:2;2810;2795:18;;;;2782:32;;-1:-1:-1;;;2351:469:15:o;3007:183::-;3067:4;-1:-1:-1;;;;;3092:6:15;3089:30;3086:56;;;3122:18;;:::i;:::-;-1:-1:-1;3167:1:15;3163:14;3179:4;3159:25;;3007:183::o;3195:131::-;-1:-1:-1;;;;;3270:31:15;;3260:42;;3250:70;;3316:1;3313;3306:12;3331:134;3399:20;;3428:31;3399:20;3428:31;:::i;:::-;3331:134;;;:::o;3470:1042::-;3563:6;3571;3624:2;3612:9;3603:7;3599:23;3595:32;3592:52;;;3640:1;3637;3630:12;3592:52;3680:9;3667:23;-1:-1:-1;;;;;3705:6:15;3702:30;3699:50;;;3745:1;3742;3735:12;3699:50;3768:22;;3821:4;3813:13;;3809:27;-1:-1:-1;3799:55:15;;3850:1;3847;3840:12;3799:55;3886:2;3873:16;3908:4;3932:60;3948:43;3988:2;3948:43;:::i;3932:60::-;4026:15;;;4108:1;4104:10;;;;4096:19;;4092:28;;;4057:12;;;;4132:19;;;4129:39;;;4164:1;4161;4154:12;4129:39;4188:11;;;;4208:217;4224:6;4219:3;4216:15;4208:217;;;4304:3;4291:17;4321:31;4346:5;4321:31;:::i;:::-;4365:18;;4241:12;;;;4403;;;;4208:217;;;4444:5;-1:-1:-1;4468:38:15;;-1:-1:-1;4487:18:15;;;4468:38;:::i;:::-;4458:48;;;;;3470:1042;;;;;:::o;4517:456::-;4594:6;4602;4610;4663:2;4651:9;4642:7;4638:23;4634:32;4631:52;;;4679:1;4676;4669:12;4631:52;4718:9;4705:23;4737:31;4762:5;4737:31;:::i;:::-;4787:5;-1:-1:-1;4844:2:15;4829:18;;4816:32;4857:33;4816:32;4857:33;:::i;:::-;4517:456;;4909:7;;-1:-1:-1;;;4963:2:15;4948:18;;;;4935:32;;4517:456::o;4978:250::-;5063:1;5073:113;5087:6;5084:1;5081:13;5073:113;;;5163:11;;;5157:18;5144:11;;;5137:39;5109:2;5102:10;5073:113;;;-1:-1:-1;;5220:1:15;5202:16;;5195:27;4978:250::o;5233:270::-;5274:3;5312:5;5306:12;5339:6;5334:3;5327:19;5355:76;5424:6;5417:4;5412:3;5408:14;5401:4;5394:5;5390:16;5355:76;:::i;:::-;5485:2;5464:15;-1:-1:-1;;5460:29:15;5451:39;;;;5492:4;5447:50;;5233:270;-1:-1:-1;;5233:270:15:o;5508:595::-;5755:6;5748:14;5741:22;5730:9;5723:41;5814:6;5807:14;5800:22;5795:2;5784:9;5780:18;5773:50;5859:2;5854;5843:9;5839:18;5832:30;5934:1;5930;5925:3;5921:11;5917:19;5908:6;5902:13;5898:39;5893:2;5882:9;5878:18;5871:67;5704:4;5985:2;5977:6;5973:15;5967:22;6026:2;6020:3;6009:9;6005:19;5998:31;6046:51;6092:3;6081:9;6077:19;6063:12;6046:51;:::i;6108:725::-;6194:6;6202;6210;6218;6271:2;6259:9;6250:7;6246:23;6242:32;6239:52;;;6287:1;6284;6277:12;6239:52;6323:9;6310:23;6300:33;;6380:2;6369:9;6365:18;6352:32;6342:42;;6435:2;6424:9;6420:18;6407:32;-1:-1:-1;;;;;6499:2:15;6491:6;6488:14;6485:34;;;6515:1;6512;6505:12;6485:34;6553:6;6542:9;6538:22;6528:32;;6598:7;6591:4;6587:2;6583:13;6579:27;6569:55;;6620:1;6617;6610:12;6569:55;6660:2;6647:16;6686:2;6678:6;6675:14;6672:34;;;6702:1;6699;6692:12;6672:34;6747:7;6742:2;6733:6;6729:2;6725:15;6721:24;6718:37;6715:57;;;6768:1;6765;6758:12;6715:57;6108:725;;;;-1:-1:-1;;6799:2:15;6791:11;;-1:-1:-1;;;6108:725:15:o;6838:698::-;6986:6;6994;7047:2;7035:9;7026:7;7022:23;7018:32;7015:52;;;7063:1;7060;7053:12;7015:52;7103:9;7090:23;-1:-1:-1;;;;;7173:2:15;7165:6;7162:14;7159:34;;;7189:1;7186;7179:12;7159:34;7212:22;;;;7268:3;7250:16;;;7246:26;7243:46;;;7285:1;7282;7275:12;7243:46;7308:2;;-1:-1:-1;7363:2:15;7348:18;;7335:32;;7379:16;;;7376:36;;;7408:1;7405;7398:12;7376:36;-1:-1:-1;7431:24:15;;7489:2;7471:16;;;7467:25;7464:45;;;7505:1;7502;7495:12;7464:45;7528:2;7518:12;;;6838:698;;;;;:::o;8412:171::-;8487:5;8532:3;8523:6;8518:3;8514:16;8510:26;8507:46;;;8549:1;8546;8539:12;8507:46;-1:-1:-1;8571:6:15;8412:171;-1:-1:-1;8412:171:15:o;8588:385::-;8688:6;8741:2;8729:9;8720:7;8716:23;8712:32;8709:52;;;8757:1;8754;8747:12;8709:52;8797:9;8784:23;-1:-1:-1;;;;;8822:6:15;8819:30;8816:50;;;8862:1;8859;8852:12;8816:50;8885:82;8959:7;8950:6;8939:9;8935:22;8885:82;:::i;:::-;8875:92;8588:385;-1:-1:-1;;;;8588:385:15:o;8978:273::-;9054:6;9107:2;9095:9;9086:7;9082:23;9078:32;9075:52;;;9123:1;9120;9113:12;9075:52;9162:9;9149:23;9201:1;9194:5;9191:12;9181:40;;9217:1;9214;9207:12;10182:118;10268:5;10261:13;10254:21;10247:5;10244:32;10234:60;;10290:1;10287;10280:12;10305:662;10359:5;10412:3;10405:4;10397:6;10393:17;10389:27;10379:55;;10430:1;10427;10420:12;10379:55;10466:6;10453:20;10492:4;10516:60;10532:43;10572:2;10532:43;:::i;10516:60::-;10610:15;;;10696:1;10692:10;;;;10680:23;;10676:32;;;10641:12;;;;10720:15;;;10717:35;;;10748:1;10745;10738:12;10717:35;10784:2;10776:6;10772:15;10796:142;10812:6;10807:3;10804:15;10796:142;;;10878:17;;10866:30;;10916:12;;;;10829;;10796:142;;;-1:-1:-1;10956:5:15;10305:662;-1:-1:-1;;;;;;10305:662:15:o;10972:1209::-;11087:6;11095;11148:2;11136:9;11127:7;11123:23;11119:32;11116:52;;;11164:1;11161;11154:12;11116:52;11204:9;11191:23;-1:-1:-1;;;;;11274:2:15;11266:6;11263:14;11260:34;;;11290:1;11287;11280:12;11260:34;11328:6;11317:9;11313:22;11303:32;;11373:7;11366:4;11362:2;11358:13;11354:27;11344:55;;11395:1;11392;11385:12;11344:55;11431:2;11418:16;11453:4;11477:60;11493:43;11533:2;11493:43;:::i;11477:60::-;11571:15;;;11653:1;11649:10;;;;11641:19;;11637:28;;;11602:12;;;;11677:19;;;11674:39;;;11709:1;11706;11699:12;11674:39;11733:11;;;;11753:214;11769:6;11764:3;11761:15;11753:214;;;11849:3;11836:17;11866:28;11888:5;11866:28;:::i;:::-;11907:18;;11786:12;;;;11945;;;;11753:214;;;11986:5;-1:-1:-1;;12029:18:15;;12016:32;;-1:-1:-1;;12060:16:15;;;12057:36;;;12089:1;12086;12079:12;12057:36;;12112:63;12167:7;12156:8;12145:9;12141:24;12112:63;:::i;12186:367::-;12249:8;12259:6;12313:3;12306:4;12298:6;12294:17;12290:27;12280:55;;12331:1;12328;12321:12;12280:55;-1:-1:-1;12354:20:15;;-1:-1:-1;;;;;12386:30:15;;12383:50;;;12429:1;12426;12419:12;12383:50;12466:4;12458:6;12454:17;12442:29;;12526:3;12519:4;12509:6;12506:1;12502:14;12494:6;12490:27;12486:38;12483:47;12480:67;;;12543:1;12540;12533:12;12480:67;12186:367;;;;;:::o;12558:1099::-;12727:6;12735;12743;12751;12759;12767;12820:2;12808:9;12799:7;12795:23;12791:32;12788:52;;;12836:1;12833;12826:12;12788:52;12876:9;12863:23;-1:-1:-1;;;;;12946:2:15;12938:6;12935:14;12932:34;;;12962:1;12959;12952:12;12932:34;13001:70;13063:7;13054:6;13043:9;13039:22;13001:70;:::i;:::-;13090:8;;-1:-1:-1;12975:96:15;-1:-1:-1;13178:2:15;13163:18;;13150:32;;-1:-1:-1;13194:16:15;;;13191:36;;;13223:1;13220;13213:12;13191:36;13262:72;13326:7;13315:8;13304:9;13300:24;13262:72;:::i;:::-;13353:8;;-1:-1:-1;13236:98:15;-1:-1:-1;13441:2:15;13426:18;;13413:32;;-1:-1:-1;13457:16:15;;;13454:36;;;13486:1;13483;13476:12;13454:36;;13525:72;13589:7;13578:8;13567:9;13563:24;13525:72;:::i;:::-;12558:1099;;;;-1:-1:-1;12558:1099:15;;-1:-1:-1;12558:1099:15;;13616:8;;12558:1099;-1:-1:-1;;;12558:1099:15:o;13662:247::-;13721:6;13774:2;13762:9;13753:7;13749:23;13745:32;13742:52;;;13790:1;13787;13780:12;13742:52;13829:9;13816:23;13848:31;13873:5;13848:31;:::i;13914:773::-;14036:6;14044;14052;14060;14113:2;14101:9;14092:7;14088:23;14084:32;14081:52;;;14129:1;14126;14119:12;14081:52;14169:9;14156:23;-1:-1:-1;;;;;14239:2:15;14231:6;14228:14;14225:34;;;14255:1;14252;14245:12;14225:34;14294:70;14356:7;14347:6;14336:9;14332:22;14294:70;:::i;:::-;14383:8;;-1:-1:-1;14268:96:15;-1:-1:-1;14471:2:15;14456:18;;14443:32;;-1:-1:-1;14487:16:15;;;14484:36;;;14516:1;14513;14506:12;14484:36;;14555:72;14619:7;14608:8;14597:9;14593:24;14555:72;:::i;:::-;13914:773;;;;-1:-1:-1;14646:8:15;-1:-1:-1;;;;13914:773:15:o;14692:529::-;14769:6;14777;14785;14838:2;14826:9;14817:7;14813:23;14809:32;14806:52;;;14854:1;14851;14844:12;14806:52;14893:9;14880:23;14912:31;14937:5;14912:31;:::i;:::-;14962:5;-1:-1:-1;15019:2:15;15004:18;;14991:32;15032:33;14991:32;15032:33;:::i;:::-;15084:7;-1:-1:-1;15143:2:15;15128:18;;15115:32;15156:33;15115:32;15156:33;:::i;:::-;15208:7;15198:17;;;14692:529;;;;;:::o;15226:583::-;15335:6;15343;15351;15404:2;15392:9;15383:7;15379:23;15375:32;15372:52;;;15420:1;15417;15410:12;15372:52;15459:9;15446:23;15478:28;15500:5;15478:28;:::i;:::-;15525:5;-1:-1:-1;15581:2:15;15566:18;;15553:32;-1:-1:-1;;;;;15597:30:15;;15594:50;;;15640:1;15637;15630:12;15594:50;15679:70;15741:7;15732:6;15721:9;15717:22;15679:70;:::i;:::-;15226:583;;15768:8;;-1:-1:-1;15653:96:15;;-1:-1:-1;;;;15226:583:15:o;15814:203::-;-1:-1:-1;;;;;15978:32:15;;;;15960:51;;15948:2;15933:18;;15814:203::o;16358:708::-;16446:6;16454;16507:2;16495:9;16486:7;16482:23;16478:32;16475:52;;;16523:1;16520;16513:12;16475:52;16552:9;16546:16;16536:26;;16606:2;16595:9;16591:18;16585:25;-1:-1:-1;;;;;16625:6:15;16622:30;16619:50;;;16665:1;16662;16655:12;16619:50;16688:22;;16741:4;16733:13;;16729:27;-1:-1:-1;16719:55:15;;16770:1;16767;16760:12;16719:55;16799:2;16793:9;16824:48;16840:31;16868:2;16840:31;:::i;16824:48::-;16895:2;16888:5;16881:17;16935:7;16930:2;16925;16921;16917:11;16913:20;16910:33;16907:53;;;16956:1;16953;16946:12;16907:53;16969:67;17033:2;17028;17021:5;17017:14;17012:2;17008;17004:11;16969:67;:::i;:::-;17055:5;17045:15;;;;;16358:708;;;;;:::o;17071:320::-;17158:6;17166;17219:2;17207:9;17198:7;17194:23;17190:32;17187:52;;;17235:1;17232;17225:12;17187:52;17267:9;17261:16;17286:31;17311:5;17286:31;:::i;:::-;17381:2;17366:18;;;;17360:25;17336:5;;17360:25;;-1:-1:-1;;;17071:320:15:o;17396:127::-;17457:10;17452:3;17448:20;17445:1;17438:31;17488:4;17485:1;17478:15;17512:4;17509:1;17502:15;17528:184;17598:6;17651:2;17639:9;17630:7;17626:23;17622:32;17619:52;;;17667:1;17664;17657:12;17619:52;-1:-1:-1;17690:16:15;;17528:184;-1:-1:-1;17528:184:15:o;17717:127::-;17778:10;17773:3;17769:20;17766:1;17759:31;17809:4;17806:1;17799:15;17833:4;17830:1;17823:15;17849:135;17888:3;17909:17;;;17906:43;;17929:18;;:::i;:::-;-1:-1:-1;17976:1:15;17965:13;;17849:135::o;17989:380::-;18068:1;18064:12;;;;18111;;;18132:61;;18186:4;18178:6;18174:17;18164:27;;18132:61;18239:2;18231:6;18228:14;18208:18;18205:38;18202:161;;18285:10;18280:3;18276:20;18273:1;18266:31;18320:4;18317:1;18310:15;18348:4;18345:1;18338:15;18374:128;18441:9;;;18462:11;;;18459:37;;;18476:18;;:::i;18507:127::-;18568:10;18563:3;18559:20;18556:1;18549:31;18599:4;18596:1;18589:15;18623:4;18620:1;18613:15;18639:355;18841:2;18823:21;;;18880:2;18860:18;;;18853:30;18919:33;18914:2;18899:18;;18892:61;18985:2;18970:18;;18639:355::o;18999:521::-;19076:4;19082:6;19142:11;19129:25;19236:2;19232:7;19221:8;19205:14;19201:29;19197:43;19177:18;19173:68;19163:96;;19255:1;19252;19245:12;19163:96;19282:33;;19334:20;;;-1:-1:-1;;;;;;19366:30:15;;19363:50;;;19409:1;19406;19399:12;19363:50;19442:4;19430:17;;-1:-1:-1;19473:14:15;19469:27;;;19459:38;;19456:58;;;19510:1;19507;19500:12;19525:347;19727:2;19709:21;;;19766:2;19746:18;;;19739:30;-1:-1:-1;;;19800:2:15;19785:18;;19778:53;19863:2;19848:18;;19525:347::o;19877:355::-;20079:2;20061:21;;;20118:2;20098:18;;;20091:30;20157:33;20152:2;20137:18;;20130:61;20223:2;20208:18;;19877:355::o;20580:271::-;20763:6;20755;20750:3;20737:33;20719:3;20789:16;;20814:13;;;20789:16;20580:271;-1:-1:-1;20580:271:15:o;20856:219::-;21005:2;20994:9;20987:21;20968:4;21025:44;21065:2;21054:9;21050:18;21042:6;21025:44;:::i;22217:336::-;22419:2;22401:21;;;22458:2;22438:18;;;22431:30;-1:-1:-1;;;22492:2:15;22477:18;;22470:42;22544:2;22529:18;;22217:336::o;22683:544::-;22784:2;22779:3;22776:11;22773:448;;;22820:1;22845:5;22841:2;22834:17;22890:4;22886:2;22876:19;22960:2;22948:10;22944:19;22941:1;22937:27;22931:4;22927:38;22996:4;22984:10;22981:20;22978:47;;;-1:-1:-1;23019:4:15;22978:47;23074:2;23069:3;23065:12;23062:1;23058:20;23052:4;23048:31;23038:41;;23129:82;23147:2;23140:5;23137:13;23129:82;;;23192:17;;;23173:1;23162:13;23129:82;;23403:1348;23527:3;23521:10;-1:-1:-1;;;;;23546:6:15;23543:30;23540:56;;;23576:18;;:::i;:::-;23605:96;23694:6;23654:38;23686:4;23680:11;23654:38;:::i;:::-;23648:4;23605:96;:::i;:::-;23756:4;;23820:2;23809:14;;23837:1;23832:662;;;;24538:1;24555:6;24552:89;;;-1:-1:-1;24607:19:15;;;24601:26;24552:89;-1:-1:-1;;23360:1:15;23356:11;;;23352:24;23348:29;23338:40;23384:1;23380:11;;;23335:57;24654:81;;23802:943;;23832:662;22630:1;22623:14;;;22667:4;22654:18;;-1:-1:-1;;23868:20:15;;;23985:236;23999:7;23996:1;23993:14;23985:236;;;24088:19;;;24082:26;24067:42;;24180:27;;;;24148:1;24136:14;;;;24015:19;;23985:236;;;23989:3;24249:6;24240:7;24237:19;24234:201;;;24310:19;;;24304:26;-1:-1:-1;;24393:1:15;24389:14;;;24405:3;24385:24;24381:37;24377:42;24362:58;24347:74;;24234:201;-1:-1:-1;;;;;24481:1:15;24465:14;;;24461:22;24448:36;;-1:-1:-1;23403:1348:15:o;24756:522::-;24856:6;24851:3;24844:19;24826:3;24882:4;24911:2;24906:3;24902:12;24895:19;;24937:5;24960:1;24970:283;24984:6;24981:1;24978:13;24970:283;;;25061:6;25048:20;25081:33;25106:7;25081:33;:::i;:::-;-1:-1:-1;;;;;25139:33:15;25127:46;;25193:12;;;;25228:15;;;;25169:1;24999:9;24970:283;;;-1:-1:-1;25269:3:15;;24756:522;-1:-1:-1;;;;;24756:522:15:o;25283:266::-;25371:6;25366:3;25359:19;25423:6;25416:5;25409:4;25404:3;25400:14;25387:43;-1:-1:-1;25475:1:15;25450:16;;;25468:4;25446:27;;;25439:38;;;;25531:2;25510:15;;;-1:-1:-1;;25506:29:15;25497:39;;;25493:50;;25283:266::o;25554:500::-;25612:5;25619:6;25679:3;25666:17;25765:2;25761:7;25750:8;25734:14;25730:29;25726:43;25706:18;25702:68;25692:96;;25784:1;25781;25774:12;25692:96;25812:33;;25916:4;25903:18;;;-1:-1:-1;25864:21:15;;-1:-1:-1;;;;;;25933:30:15;;25930:50;;;25976:1;25973;25966:12;25930:50;26023:6;26007:14;26003:27;25996:5;25992:39;25989:59;;;26044:1;26041;26034:12;26059:1467;26444:2;26426:21;;;26463:18;;26456:34;;;-1:-1:-1;;;;;;26502:31:15;;26499:51;;;26546:1;26543;26536:12;26499:51;26580:6;26577:1;26573:14;26638:6;26630;26624:3;26613:9;26609:19;26596:49;26679:6;26668:9;26664:22;26654:32;;26705:4;26769:3;26757:9;26753:2;26749:18;26745:28;26740:2;26729:9;26725:18;26718:56;26797:67;26859:3;26855:2;26851:12;26843:6;26835;26797:67;:::i;:::-;26900:22;;;26895:2;26880:18;;26873:50;26958:22;;;26783:81;-1:-1:-1;26996:15:15;;;27054:1;27050:14;;;27038:27;;27034:36;;27093:6;27117:1;27127:370;27141:6;27138:1;27135:13;27127:370;;;27206:19;;;-1:-1:-1;;27202:33:15;27190:46;;27285;27324:6;27316;27285:46;:::i;:::-;27354:63;27410:6;27395:13;27380;27354:63;:::i;:::-;27475:12;;;;27344:73;-1:-1:-1;;;27440:15:15;;;;27163:1;27156:9;27127:370;;;-1:-1:-1;27514:6:15;;26059:1467;-1:-1:-1;;;;;;;;;;;;26059:1467:15:o;27939:288::-;28128:2;28117:9;28110:21;28091:4;28148:73;28217:2;28206:9;28202:18;28194:6;28186;28148:73;:::i;28232:841::-;28493:2;28482:9;28475:21;28456:4;28519:73;28588:2;28577:9;28573:18;28565:6;28557;28519:73;:::i;:::-;28649:22;;;28611:2;28629:18;;;28622:50;;;;28721:13;;28743:22;;;28819:15;;;;28781;;;28852:1;28862:185;28876:6;28873:1;28870:13;28862:185;;;28951:13;;28944:21;28937:29;28925:42;;29022:15;;;;28987:12;;;;28898:1;28891:9;28862:185;;;-1:-1:-1;29064:3:15;;28232:841;-1:-1:-1;;;;;;;;28232:841:15:o;29432:617::-;29757:3;29752;29748:13;29743:3;29736:26;29816;29812:31;29803:6;29799:2;29795:15;29791:53;29787:1;29782:3;29778:11;29771:74;29875:6;29870:2;29865:3;29861:12;29854:28;29718:3;29911:6;29905:13;29927:75;29995:6;29990:2;29985:3;29981:12;29974:4;29966:6;29962:17;29927:75;:::i;:::-;30022:16;;;;30040:2;30018:25;;29432:617;-1:-1:-1;;;;29432:617:15:o;30400:287::-;30529:3;30567:6;30561:13;30583:66;30642:6;30637:3;30630:4;30622:6;30618:17;30583:66;:::i;:::-;30665:16;;;;;30400:287;-1:-1:-1;;30400:287:15:o;30692:245::-;30759:6;30812:2;30800:9;30791:7;30787:23;30783:32;30780:52;;;30828:1;30825;30818:12;30780:52;30860:9;30854:16;30879:28;30901:5;30879:28;:::i;31348:330::-;31550:2;31532:21;;;31589:1;31569:18;;;31562:29;-1:-1:-1;;;31622:2:15;31607:18;;31600:37;31669:2;31654:18;;31348:330::o;31683:545::-;31776:4;31782:6;31842:11;31829:25;31936:2;31932:7;31921:8;31905:14;31901:29;31897:43;31877:18;31873:68;31863:96;;31955:1;31952;31945:12;31863:96;31982:33;;32034:20;;;-1:-1:-1;;;;;;32066:30:15;;32063:50;;;32109:1;32106;32099:12;32063:50;32142:4;32130:17;;-1:-1:-1;32193:1:15;32189:14;;;32173;32169:35;32159:46;;32156:66;;;32218:1;32215;32208:12;32233:729;32403:4;32451:2;32440:9;32436:18;32481:6;32470:9;32463:25;32507:2;32545;32540;32529:9;32525:18;32518:30;32568:6;32603;32597:13;32634:6;32626;32619:22;32672:2;32661:9;32657:18;32650:25;;32710:2;32702:6;32698:15;32684:29;;32731:1;32741:195;32755:6;32752:1;32749:13;32741:195;;;32820:13;;-1:-1:-1;;;;;32816:39:15;32804:52;;32911:15;;;;32876:12;;;;32852:1;32770:9;32741:195;;;-1:-1:-1;32953:3:15;;32233:729;-1:-1:-1;;;;;;;32233:729:15:o;32967:881::-;33062:6;33093:2;33136;33124:9;33115:7;33111:23;33107:32;33104:52;;;33152:1;33149;33142:12;33104:52;33185:9;33179:16;-1:-1:-1;;;;;33210:6:15;33207:30;33204:50;;;33250:1;33247;33240:12;33204:50;33273:22;;33326:4;33318:13;;33314:27;-1:-1:-1;33304:55:15;;33355:1;33352;33345:12;33304:55;33384:2;33378:9;33407:60;33423:43;33463:2;33423:43;:::i;33407:60::-;33501:15;;;33583:1;33579:10;;;;33571:19;;33567:28;;;33532:12;;;;33607:19;;;33604:39;;;33639:1;33636;33629:12;33604:39;33663:11;;;;33683:135;33699:6;33694:3;33691:15;33683:135;;;33765:10;;33753:23;;33716:12;;;;33796;;;;33683:135;;33853:343;34055:2;34037:21;;;34094:2;34074:18;;;34067:30;-1:-1:-1;;;34128:2:15;34113:18;;34106:49;34187:2;34172:18;;33853:343::o;36128:595::-;36333:2;36322:9;36315:21;36296:4;36371:6;36358:20;36387:31;36412:5;36387:31;:::i;:::-;-1:-1:-1;;;;;36454:31:15;36449:2;36434:18;;;36427:59;;;;36529:55;;36568:15;;36572:6;36529:55;:::i;:::-;36622:4;36615;36604:9;36600:20;36593:34;36644:73;36713:2;36702:9;36698:18;36684:12;36670;36644:73;:::i;:::-;36636:81;36128:595;-1:-1:-1;;;;;36128:595:15:o;37618:347::-;37820:2;37802:21;;;37859:2;37839:18;;;37832:30;-1:-1:-1;;;37893:2:15;37878:18;;37871:53;37956:2;37941:18;;37618:347::o;38315:341::-;38517:2;38499:21;;;38556:2;38536:18;;;38529:30;-1:-1:-1;;;38590:2:15;38575:18;;38568:47;38647:2;38632:18;;38315:341::o;38661:125::-;38726:9;;;38747:10;;;38744:36;;;38760:18;;:::i;39141:799::-;39522:3;39560:6;39554:13;39576:66;39635:6;39630:3;39623:4;39615:6;39611:17;39576:66;:::i;:::-;-1:-1:-1;;;39664:16:15;;;39689:23;;;39737:13;;39759:78;39737:13;39824:1;39813:13;;39806:4;39794:17;;39759:78;:::i;:::-;-1:-1:-1;;;39900:1:15;39856:20;;;;39892:10;;;39885:23;39932:1;39924:10;;39141:799;-1:-1:-1;;;;39141:799:15:o;39945:::-;40326:3;40364:6;40358:13;40380:66;40439:6;40434:3;40427:4;40419:6;40415:17;40380:66;:::i;:::-;-1:-1:-1;;;40468:16:15;;;40493:23;;;40541:13;;40563:78;40541:13;40628:1;40617:13;;40610:4;40598:17;;40563:78;:::i;40749:801::-;41130:3;41168:6;41162:13;41184:66;41243:6;41238:3;41231:4;41223:6;41219:17;41184:66;:::i;:::-;-1:-1:-1;;;41272:16:15;;;41297:25;;;41347:13;;41369:78;41347:13;41434:1;41423:13;;41416:4;41404:17;;41369:78;:::i;:::-;-1:-1:-1;;;41510:1:15;41466:20;;;;41502:10;;;41495:23;41542:1;41534:10;;40749:801;-1:-1:-1;;;;40749:801:15:o;41914:434::-;42147:6;42136:9;42129:25;42190:6;42185:2;42174:9;42170:18;42163:34;42233:6;42228:2;42217:9;42213:18;42206:34;42276:3;42271:2;42260:9;42256:18;42249:31;42110:4;42297:45;42337:3;42326:9;42322:19;42314:6;42297:45;:::i;42353:442::-;-1:-1:-1;;;;;42560:32:15;;42542:51;;42530:2;42515:18;;42623:1;42612:13;;42602:144;;42668:10;42663:3;42659:20;42656:1;42649:31;42703:4;42700:1;42693:15;42731:4;42728:1;42721:15;42602:144;42782:6;42777:2;42766:9;42762:18;42755:34;42353:442;;;;;:::o;43487:177::-;43566:13;;-1:-1:-1;;;;;43608:31:15;;43598:42;;43588:70;;43654:1;43651;43644:12;43669:450;43756:6;43764;43772;43825:2;43813:9;43804:7;43800:23;43796:32;43793:52;;;43841:1;43838;43831:12;43793:52;43864:40;43894:9;43864:40;:::i;:::-;43854:50;;43923:49;43968:2;43957:9;43953:18;43923:49;:::i;:::-;43913:59;;44015:2;44004:9;44000:18;43994:25;44059:10;44052:5;44048:22;44041:5;44038:33;44028:61;;44085:1;44082;44075:12;44448:458;44679:6;44668:9;44661:25;44722:6;44717:2;44706:9;44702:18;44695:34;44794:1;44790;44785:3;44781:11;44777:19;44769:6;44765:32;44760:2;44749:9;44745:18;44738:60;44834:3;44829:2;44818:9;44814:18;44807:31;44642:4;44855:45;44895:3;44884:9;44880:19;44872:6;44855:45;:::i;45621:251::-;45691:6;45744:2;45732:9;45723:7;45719:23;45715:32;45712:52;;;45760:1;45757;45750:12;45712:52;45792:9;45786:16;45811:31;45836:5;45811:31;:::i;45877:278::-;45946:6;45999:2;45987:9;45978:7;45974:23;45970:32;45967:52;;;46015:1;46012;46005:12;45967:52;46047:9;46041:16;46097:8;46090:5;46086:20;46079:5;46076:31;46066:59;;46121:1;46118;46111:12;46553:331;46755:2;46737:21;;;46794:1;46774:18;;;46767:29;-1:-1:-1;;;46827:2:15;46812:18;;46805:38;46875:2;46860:18;;46553:331::o;47168:182::-;-1:-1:-1;;;;;47275:10:15;;;47287;;;47271:27;;47310:11;;;47307:37;;;47324:18;;:::i;:::-;47307:37;47168:182;;;;:::o;47355:288::-;47530:6;47519:9;47512:25;47573:2;47568;47557:9;47553:18;47546:30;47493:4;47593:44;47633:2;47622:9;47618:18;47610:6;47593:44;:::i;47648:568::-;-1:-1:-1;;;;;47937:15:15;;;47919:34;;47996:14;;47989:22;47984:2;47969:18;;47962:50;48043:2;48028:18;;48021:34;;;48091:15;;48086:2;48071:18;;48064:43;47899:3;48138;48123:19;;48116:32;;;47862:4;;48165:45;;48190:19;;48182:6;48165:45;:::i;48221:243::-;48298:6;48306;48359:2;48347:9;48338:7;48334:23;48330:32;48327:52;;;48375:1;48372;48365:12;48327:52;-1:-1:-1;;48398:16:15;;48454:2;48439:18;;;48433:25;48398:16;;48433:25;;-1:-1:-1;48221:243:15:o;48469:136::-;48504:3;-1:-1:-1;;;48525:22:15;;48522:48;;48550:18;;:::i;:::-;-1:-1:-1;48590:1:15;48586:13;;48469:136::o;48610:185::-;-1:-1:-1;;;;;48731:10:15;;;48719;;;48715:27;;48754:12;;;48751:38;;;48769:18;;:::i;48800:127::-;48861:10;48856:3;48852:20;48849:1;48842:31;48892:4;48889:1;48882:15;48916:4;48913:1;48906:15;48932:112;48964:1;48990;48980:35;;48995:18;;:::i;:::-;-1:-1:-1;49029:9:15;;48932:112::o;50730:168::-;50803:9;;;50834;;50851:15;;;50845:22;;50831:37;50821:71;;50872:18;;:::i;52367:120::-;52407:1;52433;52423:35;;52438:18;;:::i;:::-;-1:-1:-1;52472:9:15;;52367:120::o

Swarm Source

ipfs://af26bc8f138765be2c257e6b14ca2516659cabbd553254e68c065dd1379b20a3

Block Transaction Gas Used Reward
view all blocks sequenced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
POL31.78%$0.0333771,537,123.933$51,303.97
POL19.99%$0.0159192,027,436.1247$32,275.75
POL8.91%$114,388.5287$14,388.53
POL5.04%$15.05541.1145$8,143.77
POL1.59%$0.18758113,681.4009$2,566.38
POL0.46%$0.999992748.4059$748.4
POL0.25%$0.999993400.2833$400.28
POL0.06%$1,573.220.0587$92.39
POL0.04%$2.0535.2687$72.47
POL0.04%$0.146562403.0077$59.07
POL0.03%$0.269241204.9483$55.18
POL0.03%$0.0108244,674.0614$50.59
POL0.03%$84,0530.00049252$41.4
POL0.02%$0.0048577,564.0991$36.74
POL0.02%$0.99999335.3252$35.32
POL0.02%$0.187745165.4492$31.06
POL0.02%$12.922.1415$27.67
POL0.01%$0.057069357.7328$20.42
POL0.01%$0.0045714,358.4144$19.92
POL0.01%<$0.0000013,392,979,817.7462$18.32
POL0.01%$0.097724184.2625$18.01
POL0.01%$136.820.1186$16.23
POL<0.01%$5.172.2055$11.4
POL<0.01%$4.242.3128$9.81
POL<0.01%$0.0000042,342,010.1195$9.63
POL<0.01%$0.26262935.8952$9.43
POL<0.01%$4.811.9123$9.2
POL<0.01%$12.520.7107$8.9
POL<0.01%$0.0071271,219.1563$8.69
POL<0.01%$0.0024972,919.4497$7.29
POL<0.01%$0.0036421,836.0755$6.69
POL<0.01%$0.004641,434.1058$6.65
POL<0.01%$0.0000022,974,760.7187$6.37
POL<0.01%$0.576269.8946$5.7
POL<0.01%<$0.00000145,607,504.1562$5.66
POL<0.01%$0.000012456,444.6827$5.54
POL<0.01%<$0.000001588,943,770.0287$5.42
POL<0.01%$0.21241524.0379$5.11
POL<0.01%$0.021865231.8336$5.07
POL<0.01%$0.12541840.3423$5.06
POL<0.01%$3,356.390.0013432$4.51
POL<0.01%$0.001413,174.398$4.48
POL<0.01%$0.026503158.3341$4.2
POL<0.01%$0.00005869,747.0466$4.07
POL<0.01%$0.7037435.6948$4.01
POL<0.01%$0.00133,029.3007$3.94
POL<0.01%$155.10.0243$3.76
POL<0.01%$0.31042211.9528$3.71
POL<0.01%$0.0001720,556.646$3.5
POL<0.01%$1,340.610.00245521$3.29
POL<0.01%$0.0007344,370.2391$3.21
POL<0.01%$0.9562033.3523$3.21
POL<0.01%$0.14401620.8429$3
POL<0.01%$0.0021321,371.8378$2.93
POL<0.01%$0.018977147.512$2.8
POL<0.01%$0.008144343.4935$2.8
POL<0.01%$0.009922277.7651$2.76
POL<0.01%$0.00004757,136.7567$2.71
POL<0.01%$0.004254623.2776$2.65
POL<0.01%$0.3455017.5138$2.6
POL<0.01%$0.012126208.2236$2.52
POL<0.01%$0.7610773.2999$2.51
POL<0.01%$0.002495975.6803$2.43
POL<0.01%$0.4585985.1857$2.38
POL<0.01%$2.450.9576$2.35
POL<0.01%$0.000013178,114.7377$2.33
POL<0.01%$0.0005014,629.0066$2.32
POL<0.01%$0.004609495.93$2.29
POL<0.01%$0.00009224,092.6159$2.23
POL<0.01%$0.010443211.8626$2.21
POL<0.01%$0.0002937,160.5898$2.09
POL<0.01%$0.00013315,483.4189$2.06
POL<0.01%$0.000012167,556.5469$2.03
POL<0.01%$0.2470738.0622$1.99
POL<0.01%$0.0010171,937.0555$1.97
POL<0.01%$0.001909955.8866$1.82
POL<0.01%<$0.0000013,554,920,052.0034$1.78
POL<0.01%<$0.0000013,590,701.637$1.77
POL<0.01%$0.6015492.8476$1.71
POL<0.01%$0.0011121,529.4772$1.7
POL<0.01%$0.002111779.7244$1.65
POL<0.01%$0.1875528.6727$1.63
POL<0.01%$3.620.434$1.57
POL<0.01%$0.006369242.9299$1.55
POL<0.01%$0.02079571.4737$1.49
POL<0.01%$0.0010381,364.423$1.42
POL<0.01%$0.007436181.8$1.35
POL<0.01%$0.07081419.0422$1.35
POL<0.01%$0.0002415,563.2933$1.34
POL<0.01%$0.0342136.9185$1.26
POL<0.01%$0.2166745.8215$1.26
POL<0.01%$0.000002596,360.5162$1.24
POL<0.01%$0.003251382.7906$1.24
POL<0.01%$0.005487224.1301$1.23
POL<0.01%$0.00132918.4472$1.21
POL<0.01%$0.0007821,536.3703$1.2
POL<0.01%$0.0005372,228.3892$1.2
POL<0.01%$18.770.0628$1.18
POL<0.01%$0.5204182.1738$1.13
POL<0.01%$0.006816165.5223$1.13
POL<0.01%$217.730.00509189$1.11
POL<0.01%$0.001766623.3706$1.1
POL<0.01%$0.01463174.661$1.09
POL<0.01%$0.01643765.7437$1.08
POL<0.01%$0.03515930.2584$1.06
POL<0.01%$0.9312821.1062$1.03
POL<0.01%$0.9062191.0953$0.9925
POL<0.01%$84,415.950.00001174$0.991
POL<0.01%$0.001079879.04$0.9482
POL<0.01%$0.003295276.7176$0.9119
POL<0.01%$4,536.230.0001885$0.855
POL<0.01%$0.2547583.2731$0.8338
POL<0.01%$137.340.00606689$0.8332
POL<0.01%$0.0005351,550.2591$0.8295
POL<0.01%$0.0002922,816.3685$0.8227
POL<0.01%$0.000003289,374.1037$0.8109
POL<0.01%$0.0003542,246.1796$0.7951
POL<0.01%$0.1967323.8971$0.7666
POL<0.01%$0.0001813,968.7571$0.7195
POL<0.01%$39.370.0181$0.7116
POL<0.01%$0.01020363.06$0.6433
POL<0.01%$0.001614382.6018$0.6175
POL<0.01%$0.0804157.6154$0.6123
POL<0.01%$0.0001943,060$0.5927
POL<0.01%$0.04151914.2592$0.592
POL<0.01%$0.02067228.305$0.5851
POL<0.01%$1.160.4605$0.5341
POL<0.01%$0.0843996.2631$0.5286
POL<0.01%$0.1027374.9071$0.5041
POL<0.01%$0.5772720.8701$0.5022
POL<0.01%$19.320.0241$0.4647
POL<0.01%$0.003681124.364$0.4577
POL<0.01%$0.9989580.4333$0.4328
POL<0.01%$0.002228186.3661$0.4152
POL<0.01%$31,721.020.00001297$0.4114
POL<0.01%$24.860.0158$0.3931
POL<0.01%$0.002152176.8765$0.3806
POL<0.01%$0.0001362,711.7678$0.3685
POL<0.01%$0.00429885.4094$0.367
POL<0.01%$0.00580156.9009$0.33
POL<0.01%$0.02740511.25$0.3083
POL<0.01%<$0.00000160,000,000$0.306
POL<0.01%$1.050.2884$0.3033
POL<0.01%$0.00420270.5009$0.2962
POL<0.01%$0.313810.9384$0.2944
POL<0.01%$1.380.2129$0.2938
POL<0.01%<$0.00000176,598,741.7732$0.291
POL<0.01%$0.01513619.011$0.2877
POL<0.01%$0.0467135.79$0.2704
POL<0.01%$0.2539851.0616$0.2696
POL<0.01%$0.000765325.8765$0.2491
POL<0.01%$0.00218108.5865$0.2367
POL<0.01%$0.000728319.6318$0.2326
POL<0.01%$0.01702213.4818$0.2294
POL<0.01%$0.00266684.3869$0.2249
POL<0.01%$0.00590530.9958$0.183
POL<0.01%$0.00233977.3362$0.1809
POL<0.01%<$0.00000164,423,678.7135$0.1803
POL<0.01%$0.01105615.7112$0.1736
POL<0.01%$0.1200961.4125$0.1696
POL<0.01%$0.00444137.8156$0.1679
POL<0.01%$0.00001214,277.1443$0.1673
POL<0.01%$0.2754790.5933$0.1634
POL<0.01%$0.000906168.8757$0.153
POL<0.01%$0.00342943.1355$0.1479
POL<0.01%$0.0634532.2709$0.144
POL<0.01%$0.1162431.2227$0.1421
POL<0.01%$0.00141999.8516$0.1417
POL<0.01%$0.00178577.7197$0.1387
POL<0.01%$0.00018747.2364$0.1345
POL<0.01%$0.0325793.996$0.1301
POL<0.01%$0.0562362.2326$0.1255
POL<0.01%$0.9999110.1253$0.1253
POL<0.01%$0.00199261.8109$0.1231
POL<0.01%$0.01198910.1997$0.1222
POL<0.01%$0.630410.1924$0.1212
POL<0.01%$0.000753155.6267$0.1172
POL<0.01%$14.780.00757738$0.1119
POL<0.01%<$0.00000125,233,095.3825$0.111
POL<0.01%$0.00101108.146$0.1092
POL<0.01%$0.7574610.1407$0.1065
POL<0.01%$0.00141274.8589$0.1057
POL<0.01%$0.1698760.6006$0.102
POL<0.01%$0.0176985.6564$0.1001
ARB7.70%$1,571.417.9074$12,425.79
ARB5.43%$0.9999978,761.1677$8,761.14
ARB2.76%$0.29694515,009.2882$4,456.93
ARB1.02%$1,568.611.0455$1,639.93
ARB0.21%$1339.8778$339.88
ARB0.01%$0.000031638,618.6305$20.06
ARB<0.01%$3.533.6116$12.75
ARB<0.01%$0.00000118,982,601.956$12.21
ARB<0.01%$0.000085138,952.522$11.76
ARB<0.01%$0.26597932.6424$8.68
ARB<0.01%$0.60125614.1029$8.48
ARB<0.01%$83,9810.00008965$7.53
ARB<0.01%$0.08032481.4311$6.54
ARB<0.01%$0.019472335.6832$6.54
ARB<0.01%$16.1449$6.14
ARB<0.01%$0.12501246.6938$5.84
ARB<0.01%$0.5762259.8555$5.68
ARB<0.01%$2.452.2537$5.52
ARB<0.01%$0.004391,179.1321$5.18
ARB<0.01%$0.026844191.3452$5.14
ARB<0.01%$0.13878634.7745$4.83
ARB<0.01%$0.0045711,009.2058$4.61
ARB<0.01%$5.160.8929$4.61
ARB<0.01%$0.04745889.8965$4.27
ARB<0.01%$0.000009393,506.457$3.73
ARB<0.01%$3.051.009$3.08
ARB<0.01%$12.910.2364$3.05
ARB<0.01%$0.0538351.6911$2.78
ARB<0.01%$0.5637764.34$2.45
ARB<0.01%$1,643.520.00142853$2.35
ARB<0.01%$84,6920.00002665$2.26
ARB<0.01%$0.7313372.961$2.17
ARB<0.01%$0.00011318,927.414$2.14
ARB<0.01%$0.9999711.9183$1.92
ARB<0.01%$1.651.0978$1.81
ARB<0.01%$1.381.1984$1.65
ARB<0.01%$83,9370.00001949$1.64
ARB<0.01%$0.000007212,892.1964$1.55
ARB<0.01%$0.4670593.2415$1.51
ARB<0.01%$0.07894218.6469$1.47
ARB<0.01%$2.640.5496$1.45
ARB<0.01%$84,0360.00001612$1.35
ARB<0.01%$0.02055257.7446$1.19
ARB<0.01%$0.002021555.1622$1.12
ARB<0.01%$3.530.3104$1.1
ARB<0.01%$0.4312932.257$0.9734
ARB<0.01%$4.040.2317$0.9358
ARB<0.01%$1,570.840.00050115$0.7872
ARB<0.01%<$0.00000125,388,912.1971$0.7388
ARB<0.01%$1.920.3784$0.7266
ARB<0.01%$137.260.00481791$0.6613
ARB<0.01%$10.5929$0.5929
ARB<0.01%$0.01851631.8779$0.5902
ARB<0.01%<$0.0000015,608,435,574.7905$0.5608
ARB<0.01%$0.8319240.6654$0.5535
ARB<0.01%$0.0004191,127.7062$0.4723
ARB<0.01%$0.0682826.9043$0.4714
ARB<0.01%$0.01078541.3171$0.4456
ARB<0.01%$0.000001851,848.4097$0.4408
ARB<0.01%$0.1875662.2416$0.4204
ARB<0.01%$0.00986140.274$0.3971
ARB<0.01%$0.6374320.615$0.392
ARB<0.01%$0.003211117.323$0.3766
ARB<0.01%$0.0724545.0341$0.3647
ARB<0.01%$0.00002414,118.5113$0.3413
ARB<0.01%$0.001767186.9097$0.3302
ARB<0.01%$0.025611.7857$0.3017
ARB<0.01%$0.000702403.7482$0.2832
ARB<0.01%$1.820.1345$0.2447
ARB<0.01%$0.00000456,838.3259$0.2336
ARB<0.01%$0.00777428.7207$0.2232
ARB<0.01%$0.000417466.8607$0.1947
ARB<0.01%$0.001433122.6054$0.1757
ARB<0.01%$0.0219027.4108$0.1623
ARB<0.01%$379.60.00040102$0.1522
ARB<0.01%$14.150.00984186$0.1392
ARB<0.01%$6.390.021$0.1343
ARB<0.01%$0.00498126.8793$0.1338
ARB<0.01%<$0.000001651,507,906.0837$0.1303
ARB<0.01%$0.0302334.1307$0.1248
ARB<0.01%$0.000529234.8096$0.1241
ARB<0.01%$0.0000691,603.0908$0.1104
ARB<0.01%$0.1863640.5818$0.1084
ARB<0.01%$0.1671770.6218$0.1039
ARB<0.01%$0.0132657.7088$0.1022
ARB<0.01%$0.1595430.6285$0.1002
BASE3.15%$15,089.755$5,089.76
BASE3.01%$1,568.533.1008$4,863.62
BASE1.71%$0.019047145,046.4228$2,762.75
BASE0.20%$0.550609580.9791$319.89
BASE0.08%$0.221588575.2261$127.46
BASE0.08%$0.0087214,591.2955$127.23
BASE0.06%$0.000353255,966.4284$90.47
BASE0.05%$0.0249413,358.9742$83.78
BASE0.05%$0.99675376.1446$75.9
BASE0.05%$0.00365620,002.4972$73.14
BASE0.04%$0.00082272,625.7709$59.7
BASE0.04%$83,9370.00068578$57.56
BASE0.03%$0.0086395,791.7623$50.04
BASE0.03%$0.0065977,175.4414$47.34
BASE0.03%$0.0000291,639,989.8742$47.15
BASE0.03%$0.397744102.9223$40.94
BASE0.02%$0.00049478,291.8907$38.69
BASE0.02%$0.00113733,895.893$38.54
BASE0.02%$0.039615957.0864$37.92
BASE0.02%$133.577$33.58
BASE0.02%$0.00245313,603.1805$33.37
BASE0.02%$0.000178174,741$31.16
BASE0.02%$0.035096832.107$29.2
BASE0.02%$0.033801853.8773$28.86
BASE0.02%$0.89681230.7078$27.54
BASE0.02%$0.004166,580.9305$27.38
BASE0.02%$0.187147144.7298$27.09
BASE0.02%$0.0007237,217.9403$26.78
BASE0.02%$0.232851114.2014$26.59
BASE0.02%$0.0026369,870.2508$26.02
BASE0.02%$0.0103172,518.9249$25.99
BASE0.02%$1,571.410.016$25.09
BASE0.02%$0.000065379,656.6393$24.65
BASE0.01%$0.74271630.3524$22.54
BASE0.01%$0.04477498.2453$22.31
BASE0.01%$0.000174122,040.3707$21.24
BASE0.01%$0.081369228.2054$18.57
BASE0.01%<$0.0000011,151,243,179.0628$17.73
BASE0.01%$0.57592929.4656$16.97
BASE0.01%$0.0000029,858,803.4811$16.76
BASE0.01%$0.00036944,975.0008$16.58
BASE<0.01%$0.00022468,620.6695$15.38
BASE<0.01%$0.0024476,068.789$14.85
BASE<0.01%$2.186.5191$14.21
BASE<0.01%$0.034925400.4643$13.99
BASE<0.01%$0.0027315,118.9656$13.98
BASE<0.01%$0.24978354.7589$13.68
BASE<0.01%$0.0098641,296.2198$12.79
BASE<0.01%$0.032139390.8424$12.56
BASE<0.01%$0.00014187,273.9124$12.31
BASE<0.01%$0.000026462,983.7602$11.96
BASE<0.01%$0.0033723,464.4163$11.68
BASE<0.01%$0.4439925.9735$11.53
BASE<0.01%$0.032896347.5005$11.43
BASE<0.01%$0.0074291,535.2198$11.41
BASE<0.01%$0.0036073,027.0987$10.92
BASE<0.01%$0.00046922,729.4765$10.66
BASE<0.01%$0.0011998,841.0308$10.6
BASE<0.01%$0.0001662,108.518$9.95
BASE<0.01%$0.00032130,763.9504$9.88
BASE<0.01%$0.0000051,903,883.699$9.84
BASE<0.01%$0.009903945.6688$9.36
BASE<0.01%$0.0016175,722.8372$9.25
BASE<0.01%$0.088639102.6096$9.1
BASE<0.01%$0.0000042,003,580.3411$8.9
BASE<0.01%$36.850.2325$8.57
BASE<0.01%$0.00011773,030.5727$8.51
BASE<0.01%$0.00010183,593.8866$8.47
BASE<0.01%$0.000057143,587.3486$8.25
BASE<0.01%$0.00001832,823.1688$8.14
BASE<0.01%$0.014089555.7213$7.83
BASE<0.01%$0.16063747.7802$7.68
BASE<0.01%<$0.0000015,417,557,029.1894$7.58
BASE<0.01%$0.0013275,681.1663$7.54
BASE<0.01%$0.0013385,582.3431$7.47
BASE<0.01%$0.00007891,223.5812$7.14
BASE<0.01%$0.0000032,159,346.3069$6.95
BASE<0.01%$0.00024927,592.2768$6.87
BASE<0.01%<$0.00000129,269,102.5602$6.71
BASE<0.01%<$0.0000014,323,006,764.2335$6.48
BASE<0.01%$0.00038316,336.0241$6.25
BASE<0.01%$0.000013434,716.7441$5.86
BASE<0.01%$0.0000015,152,419.2574$5.82
BASE<0.01%$0.005951971.0488$5.78
BASE<0.01%$0.00039514,622.7567$5.77
BASE<0.01%$0.0007058,172.4504$5.76
BASE<0.01%$0.007425773.2002$5.74
BASE<0.01%$0.000017345,210.4937$5.72
BASE<0.01%$0.003971,411.2394$5.6
BASE<0.01%$0.017795307.9527$5.48
BASE<0.01%$0.0035041,561.0247$5.47
BASE<0.01%$0.00001511,069.1232$5.28
BASE<0.01%$0.0000051,070,450.7873$5.23
BASE<0.01%$0.000052100,538.579$5.2
BASE<0.01%$0.000026194,370.4645$5.09
BASE<0.01%$0.9994294.9803$4.98
BASE<0.01%$0.0020722,330.8719$4.83
BASE<0.01%$0.05079794.8967$4.82
BASE<0.01%$0.07245460.7383$4.4
BASE<0.01%$0.021886199.5706$4.37
BASE<0.01%$0.4259110.2265$4.36
BASE<0.01%$0.00035312,317.6252$4.35
BASE<0.01%$0.9981164.1994$4.19
BASE<0.01%<$0.000001255,017,399.6978$3.88
BASE<0.01%$0.00003997,957.6648$3.84
BASE<0.01%$0.09179841.65$3.82
BASE<0.01%$0.034819107.343$3.74
BASE<0.01%$0.000006625,107.3823$3.61
BASE<0.01%$0.0006155,814.6042$3.57
BASE<0.01%$0.014707242.8311$3.57
BASE<0.01%$0.00003892,886.7489$3.57
BASE<0.01%$5.060.7055$3.57
BASE<0.01%$0.0007754,499.563$3.49
BASE<0.01%$0.005981558.3855$3.34
BASE<0.01%$0.00015320,716.096$3.17
BASE<0.01%<$0.00000152,900,703.8396$3.16
BASE<0.01%<$0.0000013,942,986,634.4134$3.15
BASE<0.01%$0.020575148.1126$3.05
BASE<0.01%<$0.0000017,019,960.2673$3.04
BASE<0.01%$0.00028510,391.1308$2.96
BASE<0.01%$0.000009323,932.8718$2.9
BASE<0.01%$0.23702912.0745$2.86
BASE<0.01%$0.05038655.1575$2.78
BASE<0.01%$0.00021213,109.7328$2.78
BASE<0.01%$0.010668257.407$2.75
BASE<0.01%$0.1784315.1803$2.71
BASE<0.01%$0.006932381.1084$2.64
BASE<0.01%$0.0007793,385.1543$2.64
BASE<0.01%$0.03957465.7867$2.6
BASE<0.01%$0.12979420.0193$2.6
BASE<0.01%$0.0012991,930.7365$2.51
BASE<0.01%$0.0010192,421.289$2.47
BASE<0.01%$0.0005154,778.5148$2.46
BASE<0.01%$0.002605939.8761$2.45
BASE<0.01%$0.0004815,045.3468$2.43
BASE<0.01%$0.0000021,190,359.5803$2.4
BASE<0.01%$0.000021103,826.8203$2.15
BASE<0.01%$0.000992,163.5562$2.14
BASE<0.01%$0.0000451,864.9307$2.1
BASE<0.01%$0.000018113,095.6936$2.06
BASE<0.01%$0.04630644.3269$2.05
BASE<0.01%$0.00014613,980.0511$2.04
BASE<0.01%$0.01561125.9201$1.97
BASE<0.01%<$0.0000014,930,009.1443$1.95
BASE<0.01%$1,643.520.0011788$1.94
BASE<0.01%$0.00004245,035.7331$1.91
BASE<0.01%$0.0005113,266.7502$1.67
BASE<0.01%$0.02031480.3958$1.63
BASE<0.01%$0.00008319,527.9861$1.63
BASE<0.01%$0.0010981,463.9055$1.61
BASE<0.01%$0.007342211.7973$1.55
BASE<0.01%$0.00001884,468.8124$1.53
BASE<0.01%$0.00005229,428.8661$1.52
BASE<0.01%$0.004677324.9231$1.52
BASE<0.01%$0.004384335.2797$1.47
BASE<0.01%<$0.000001759,331,534.9711$1.44
BASE<0.01%$0.0001469,875.786$1.44
BASE<0.01%$0.01817679.005$1.44
BASE<0.01%$0.000009160,875.2699$1.41
BASE<0.01%$0.000294,692.3864$1.36
BASE<0.01%$0.00002455,600.699$1.33
BASE<0.01%$2.450.5397$1.32
BASE<0.01%$0.08253515.9814$1.32
BASE<0.01%$0.0155984.0238$1.31
BASE<0.01%$0.001885682.504$1.29
BASE<0.01%$0.002279551.3514$1.26
BASE<0.01%$0.0001537,715.6189$1.18
BASE<0.01%$0.0002255,253.2015$1.18
BASE<0.01%$0.001171,008.1564$1.18
BASE<0.01%<$0.00000131,837,869.7244$1.13
BASE<0.01%$0.07389814.3655$1.06
BASE<0.01%$0.009416109.0784$1.03
BASE<0.01%$0.1891195.239$0.9907
BASE<0.01%$0.01508265.274$0.9844
BASE<0.01%$0.0005141,888.721$0.9701
BASE<0.01%$0.00002440,644.6903$0.9612
BASE<0.01%$0.00001565,109.7865$0.9466
BASE<0.01%$0.000127,724.2204$0.9238
BASE<0.01%$0.00178516.8157$0.9197
BASE<0.01%$0.000008118,983.896$0.909
BASE<0.01%$0.0000959,323.6121$0.8814
BASE<0.01%$0.001284683.2262$0.8771
BASE<0.01%$0.000127,152.9199$0.8607
BASE<0.01%$0.9999650.8578$0.8577
BASE<0.01%$0.2637833.1393$0.828
BASE<0.01%$0.000005150,662.1692$0.818
BASE<0.01%<$0.0000011,615,091,559.9791$0.8075
BASE<0.01%$0.000001546,893.316$0.8039
BASE<0.01%$0.00002138,232.4893$0.7909
BASE<0.01%$0.03664521.0466$0.7712
BASE<0.01%$0.000007109,190.178$0.7566
BASE<0.01%$1.350.5515$0.7444
BASE<0.01%$0.002773260.6676$0.7228
BASE<0.01%$0.001156600.2388$0.6936
BASE<0.01%$0.00001161,620.2007$0.6753
BASE<0.01%$0.00804882.3485$0.6627
BASE<0.01%$0.006403100.9954$0.6466
BASE<0.01%$0.001528413.4982$0.6318
BASE<0.01%$0.0002372,660.6276$0.63
BASE<0.01%$0.0004831,277.3688$0.6173
BASE<0.01%$0.00005311,520.594$0.6048
BASE<0.01%$0.00000870,001.4635$0.5901
BASE<0.01%$0.001546380.5413$0.5881
BASE<0.01%$142.210.00411678$0.5854
BASE<0.01%$0.0001583,613.5259$0.5706
BASE<0.01%$0.0001115,074.5412$0.5621
BASE<0.01%$0.00397136.4356$0.5416
BASE<0.01%$0.0003091,723.5823$0.5331
BASE<0.01%$0.3082241.6944$0.5222
BASE<0.01%$0.000636817.1515$0.52
BASE<0.01%$0.01304939.1499$0.5108
BASE<0.01%$0.001009498.0291$0.5026
BASE<0.01%$0.00002816,670.7873$0.4697
BASE<0.01%$0.9999140.4672$0.4671
BASE<0.01%$0.0002791,666.1311$0.4652
BASE<0.01%$0.00003214,307.1862$0.4632
BASE<0.01%$0.000004124,059.3699$0.4524
BASE<0.01%$0.02340118.871$0.4415
BASE<0.01%$0.0001962,182.3199$0.4276
BASE<0.01%$0.00042997.0018$0.4183
BASE<0.01%$0.00003411,668.1525$0.397
BASE<0.01%$0.5698610.6834$0.3894
BASE<0.01%$0.0003671,032.931$0.3786
BASE<0.01%$0.0000616,201.725$0.3776
BASE<0.01%$0.0000655,785.9206$0.3756
BASE<0.01%$0.00543168.8796$0.374
BASE<0.01%$1.010.3706$0.3731
BASE<0.01%$0.00001426,297.203$0.3715
BASE<0.01%$0.00002217,038.7299$0.3707
BASE<0.01%$0.00002514,746.7322$0.3612
BASE<0.01%$0.002478141.2456$0.35
BASE<0.01%$0.00001131,017.1588$0.3483
BASE<0.01%$0.00344898.8026$0.3406
BASE<0.01%$2.910.1157$0.3366
BASE<0.01%$0.0000496,895.3865$0.335
BASE<0.01%$0.002537130.122$0.3301
BASE<0.01%$1,727.360.00018079$0.3122
BASE<0.01%$0.000437680.15$0.2972
BASE<0.01%$0.01781216.654$0.2966
BASE<0.01%$0.2541221.1559$0.2937
BASE<0.01%$0.01618618.054$0.2922
BASE<0.01%$0.000928300$0.2783
BASE<0.01%$0.1716411.6139$0.277
BASE<0.01%$0.0000733,798.1365$0.2758
BASE<0.01%$0.00759134.5177$0.262
BASE<0.01%$0.000454490.148$0.2225
BASE<0.01%$0.00001219,095.2551$0.2199
BASE<0.01%$0.000001248,792.4336$0.2187
BASE<0.01%$0.00540540.427$0.2185
BASE<0.01%$0.9658710.2227$0.2151
BASE<0.01%$0.001507142.5664$0.2148
BASE<0.01%$2.430.0825$0.2004
BASE<0.01%<$0.0000012,467,624.7935$0.1954
BASE<0.01%$0.00737626.3835$0.1946
BASE<0.01%$0.00001116,496.6336$0.1781
BASE<0.01%$0.000257683.1668$0.1752
BASE<0.01%$0.00000724,215.9268$0.1729
BASE<0.01%$0.000473343.5277$0.1624
BASE<0.01%$0.0164579.731$0.1601
BASE<0.01%$0.0001551,021.7839$0.1583
BASE<0.01%<$0.0000012,334,249.601$0.1568
BASE<0.01%$0.0000722,154.8357$0.1549
BASE<0.01%<$0.0000014,062,446.4458$0.1547
BASE<0.01%$0.00702821.87$0.1537
BASE<0.01%$0.0000811,894.0428$0.1524
BASE<0.01%$0.00000433,786.2071$0.1503
BASE<0.01%<$0.0000013,180,991.2482$0.1463
BASE<0.01%$0.0000245,917.9209$0.1405
BASE<0.01%$0.00000915,196.0146$0.1368
BASE<0.01%$0.00000622,656.0034$0.1336
BASE<0.01%$0.0001061,234.0888$0.1313
BASE<0.01%$0.0156968.1846$0.1284
BASE<0.01%<$0.0000011,750,040.6646$0.1235
BASE<0.01%$0.00131293.5412$0.1227
BASE<0.01%$0.2702790.4134$0.1117
BASE<0.01%$0.015976.932$0.1107
BASE<0.01%$0.089161.1864$0.1057
BASE<0.01%$0.0000244,366.4632$0.1026
BLAST0.93%$1,568.570.9608$1,507.08
BLAST0.79%$0.002985428,669.7499$1,279.78
BLAST0.54%$0.999117872.9599$872.19
BLAST<0.01%$0.008203614.34$5.04
BLAST<0.01%$0.00032512,008.4736$3.9
BLAST<0.01%<$0.0000011,452,660,170.6721$2.47
BLAST<0.01%$0.000012144,204.513$1.79
BLAST<0.01%$0.0010721,627.8372$1.75
BLAST<0.01%$0.00005722,724.3997$1.29
BLAST<0.01%<$0.00000110,993,440,570.391$1.1
BLAST<0.01%$0.0003021,419.4119$0.428
BLAST<0.01%$0.00430368.0513$0.2928
BLAST<0.01%$0.0001341,490.4663$0.1999
BLAST<0.01%$1,571.410.00012639$0.1986
BLAST<0.01%<$0.0000016,044,928.5329$0.1958
BLAST<0.01%$0.000743135.7399$0.1008
AVAX1.04%$0.9999471,678.055$1,677.97
AVAX0.27%$19.2522.3046$429.36
AVAX0.10%$0.999966169.1195$169.11
AVAX0.08%$0.999947135.3687$135.36
AVAX0.04%$0.00594710,559.4764$62.79
AVAX0.02%$0.00000312,166,162.0732$39.91
AVAX0.01%$0.0094342,042.1517$19.27
AVAX0.01%$0.0018189,804.4028$17.83
AVAX0.01%$0.24273.3093$17.74
AVAX<0.01%$0.076177147.042$11.2
AVAX<0.01%$0.024622305.0274$7.51
AVAX<0.01%$0.00000111,908,839.2356$7.03
AVAX<0.01%<$0.000001635,867,147.1602$4.07
AVAX<0.01%$0.007891382.4024$3.02
AVAX<0.01%$0.1268515.634$1.98
AVAX<0.01%$12.90.1423$1.84
AVAX<0.01%$0.0000628,530.7794$1.71
AVAX<0.01%$0.1669626.673$1.11
AVAX<0.01%$155.080.00672696$1.04
AVAX<0.01%$23.150.0406$0.9393
AVAX<0.01%$0.00804295.37$0.7669
AVAX<0.01%$0.000737994.4961$0.7326
AVAX<0.01%$0.02421830$0.7265
AVAX<0.01%$0.9999660.7199$0.7198
AVAX<0.01%<$0.00000186,037,938.6272$0.585
AVAX<0.01%$0.00829259.7046$0.495
AVAX<0.01%$0.001288314.7119$0.4053
AVAX<0.01%$14.860.0197$0.2922
AVAX<0.01%$0.0000763,383.4$0.2571
AVAX<0.01%$1,340.250.00018687$0.2504
AVAX<0.01%$19.260.0119$0.2285
AVAX<0.01%$0.000239753.8702$0.1802
AVAX<0.01%$0.1002521.4354$0.1438
SCROLL0.16%$1,569.250.1652$259.23
SCROLL0.10%$1161.5284$161.53
SCROLL0.08%$0.999947122.3717$122.37
SCROLL0.01%$0.23870369.5593$16.6
SCROLL<0.01%$1,889.510.00176922$3.34
SCROLL<0.01%$84,019.80.00002657$2.23
SCROLL<0.01%$10.1825$0.1825
SCROLL<0.01%$0.0170998.6097$0.1472
LINEA0.15%$1,569.250.1588$249.24
LINEA0.02%$0.99999230.5784$30.58
LINEA0.02%$0.99999330.0116$30.01
LINEA<0.01%$0.994769.4662$9.42
LINEA<0.01%$1,644.150.00457732$7.53
LINEA<0.01%$13.8343$3.83
LINEA<0.01%$0.0013071,372.0141$1.79
LINEA<0.01%$1,571.620.00095119$1.49
LINEA<0.01%$0.00008118,378.0215$1.48
LINEA<0.01%$0.01346877.9795$1.05
LINEA<0.01%$84,0530.00001098$0.9229
LINEA<0.01%$1,640.570.00053286$0.8741
LINEA<0.01%$0.00777347.3847$0.3683
LINEA<0.01%$0.0001761,847.8779$0.3245
LINEA<0.01%$0.02043513.8594$0.2832
LINEA<0.01%$1,885.40.00007351$0.1386
OPBNB0.08%$589.490.2117$124.8
OPBNB0.05%$186.2267$86.31
BSC0.03%$0.99999454.5379$54.54
BSC<0.01%$589.440.0205$12.07
WORLD0.03%$1,569.560.0318$49.91
WORLD<0.01%$0.74167312.8972$9.57
WORLD<0.01%$16.2623$6.26
SONIC0.02%$0.45661684.5991$38.63
SONIC<0.01%$0.9999880.8536$0.8535
SONIC<0.01%$0.007701105.1962$0.8101
SONIC<0.01%$0.0751014.9329$0.3704
SONIC<0.01%$0.9999940.1615$0.1615
SONIC<0.01%$0.46620.3154$0.147
SONIC<0.01%$1,571.410.00007463$0.1172
SONIC<0.01%$0.1541320.75$0.1155
SONIC<0.01%$21.560.00504581$0.1087
SONIC<0.01%$0.4573960.2244$0.1026
MANTLE<0.01%$18.6324$8.63
MANTLE<0.01%$0.6551889.8704$6.47
MANTLE<0.01%$1,667.410.00228138$3.8
MANTLE<0.01%$0.9998533.1398$3.14
MANTLE<0.01%$1,568.880.00095398$1.5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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