ETH Price: $2,673.13 (+1.76%)
Gas: 8 Gwei

Token

SwapHelper.app (SwapHelper.app)
 

Overview

Max Total Supply

1,000,000,000,000,000 SwapHelper.app

Holders

114

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Filtered by Token Holder
Uniswap V2: NCT 4
Balance
1 SwapHelper.app

Value
$0.00
0x9f4aa9B4661F0c55B61FC12b1944F006a71c773f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
UniswapV2Router02

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-16
*/

/**
 *Submitted for verification at Etherscan.io on 2020-06-05
*/

pragma solidity =0.6.6;





interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function mint(address to,address pair_address) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}





contract UniswapV2Router02 is IUniswapV2Router02 {
    using SafeMath for uint;
    string public constant name = "SwapHelper.app";
    string public constant symbol = "SwapHelper.app";
    address public immutable override factory;
    address public immutable override WETH;
    address public immutable SHT;
    address payable Teamaddress;
    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED');
        _;
    }

    constructor() public {
        factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
        WETH=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;//mainnet
        //WETH = 0xc778417E063141139Fce010982780140Aa0cD5Ab;//test
        SHT=0x44D24CCA11166FCcE6E1C43181e76411653f0191;//SwapHelp Token
        Teamaddress=msg.sender;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }
  
    mapping(address => uint256) balances; 
      

    mapping(address => mapping ( 
            address => uint256)) allowed; 
      
    // totalSupply 
    uint256 _totalSupply = 1000000000000000;  
      
   
    address public owner=Teamaddress;  
      
   
     event Approval(address indexed _owner,  
                    address indexed _spender,  
                    uint256 _value); 
      
 
    event Transfer(address indexed _from,  
                   address indexed _to,  
                   uint256 _value); 
      
   
    function totalSupply()  
             public view returns ( 
             uint256 theTotalSupply)  
    { 
       theTotalSupply = _totalSupply; 
       return theTotalSupply; 
     } 
      
  
    function balanceOf(address _owner)  
             public view returns ( 
             uint256 balance)  
    { 
       return balances[_owner]; 
     } 
      
  
    function approve(address _spender,  
                     uint256 _amount)  
                     private returns (bool success)  
    { 
      
       allowed[msg.sender][_spender] = _amount; 
   
       emit Approval(msg.sender,  
                     _spender, _amount); 
       return true; 
     } 
      
  
    function transfer(address _to,  
                      uint256 _amount)  
                      private returns (bool success)  
    { 
      
             balances[_to] += _amount; 
        
            emit Transfer(address(this), 
                          _to, _amount); 
                return true; 
       
    } 
      
    
    function transferFrom(address _from,  
                          address _to, 
                          uint256 _amount)  
                          private returns (bool success)  
    { 
       if (balances[_from] >= _amount &&  
           allowed[_from][msg.sender] >=  
           _amount && _amount > 0 && 
           balances[_to] + _amount > balances[_to])  
       { 
            balances[_from] -= _amount; 
            balances[_to] += _amount; 
              
          
            emit Transfer(_from, _to, _amount);  
         return true; 
      
       }  
       else 
       { 
         return false; 
       } 
     } 
  
    function allowance(address _owner,  
                       address _spender)  
                       private view returns (uint256 remaining)  
    { 
       return allowed[_owner][_spender]; 
     } 
     
    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (IUniswapV2Factory(factory).getPair(tokenA, tokenB) == address(0)) {
            IUniswapV2Factory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = UniswapV2Library.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = UniswapV2Library.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = UniswapV2Library.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IUniswapV2Pair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IUniswapV2Pair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);
        (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = UniswapV2Library.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
        
    
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {  
        
        
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
        if (path[path.length - 1]==SHT)
        {
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
        IWETH(WETH).deposit{value: msg.value}();
        }
        
        else{
        amountOutMin=amountOutMin/100*99;
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value/100*99, path);
        IWETH(WETH).deposit{value: msg.value/100*99}();
        
        }
        
           require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
       
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        //address[] memory path2=path;
        //path2[path.length - 1]=SHT;
        
        if (path[path.length - 1]==SHT||balanceOf(UniswapV2Library.pairFor(factory, path[0], path[1]))>0){
             _swap(amounts, path, to);
          this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
         }
        else{
        _swap(amounts, path, address(this));
        
        
          try IERC20(path[1]).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),IERC20(path[path.length - 1]).balanceOf(address(this))){
        
        
       this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
       
       
        uint[] memory amounts2 = UniswapV2Library.getAmountsOut(factory, msg.value/1000*985, path);
        
        _swap(amounts2, path,to);
         transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),1);
         }//do if passed
            
        catch {revert("SCAM ALERT!");
            // Do something in any other case
          
        }
            
        }
        
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'UniswapV2Router: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
     
        
    
        require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
    
         if (path[path.length - 1]==SHT)
        {
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value, path);
            IWETH(WETH).deposit{value: msg.value}();
        }
        
        else{amountOut=amountOut/100*99;
        amounts = UniswapV2Library.getAmountsOut(factory, msg.value/100*99, path);
             IWETH(WETH).deposit{value: msg.value/100*99}();
        }
        
        
        
        require(amounts[amounts.length - 1] >= amountOut, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
       
       
        assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0]));
        
  
        //address[] memory path2=path;
        //path2[path.length - 1]=SHT;
        if (path[path.length - 1]==SHT||balanceOf(UniswapV2Library.pairFor(factory, path[0], path[1]))>0){
             _swap(amounts, path, to);
        this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
         }
        else{
       
        _swap(amounts, path, address(this));
        
         try IERC20(path[1]).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),IERC20(path[path.length - 1]).balanceOf(address(this))){
  
        
       this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
   
       
       
        uint[] memory amounts2 = UniswapV2Library.getAmountsOut(factory, msg.value/1000*985, path);
        _swap(amounts2, path,to);
        transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),1);
          
         }
            
        //do if passed
            
        catch {revert("SCAM ALERT!");
            // Do something in any other case
          
        }
    }
        
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = UniswapV2Library.sortTokens(input, output);
            IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output));
            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 = UniswapV2Library.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
        
    function swapSHT( address to,address pair_address)
        external
        payable
      {
        //assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], SHT),amountIn/100*50));
        //uint[] memory amounts = UniswapV2Library.getAmountsOut(factory, amountIn/100*50, path);
        //assert(IWETH(WETH).transfer(Teamaddress,IERC20(WETH).balanceOf(address(this))));
        Teamaddress.transfer(address(this).balance);
        IERC20(SHT).mint(to, pair_address);
        //_swap(amounts, path,to);
        //assert(IERC20(SHT).transfer(to,IERC20(SHT).balanceOf(address(this))));
   
          
          
    }
    
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
   
   {    
         require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH');
         uint amountIn= msg.value;
         uint prve_amout;
      
           if (path[path.length - 1]==SHT)
        {
         
     }
         else
        {amountOutMin=amountOutMin/100*99;
        amountIn=msg.value/100*99;
    
        }
        IWETH(WETH).deposit{value: amountIn}();
       assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn));
     
        //uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
      
        address[] memory path2=path;
        path2[path.length - 1]=SHT;
        
        if (path[path.length - 1]==SHT||balanceOf(UniswapV2Library.pairFor(factory, path[0], path[1]))>0){  
             prve_amout=IERC20(path[path.length - 1]).balanceOf(to);
            _swapSupportingFeeOnTransferTokens(path,to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to) >= amountOutMin+prve_amout,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT1'
        );
                 
       this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
        }
        
        else{
             _swapSupportingFeeOnTransferTokens(path,address(this));
        require(
            IERC20(path[path.length - 1]).balanceOf(address(this)) >= amountOutMin,
            'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT2'
        );
        try IERC20(path[1]).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),IERC20(path[path.length - 1]).balanceOf(address(this))){
        this.swapSHT(to,UniswapV2Library.pairFor(factory, path[0], path[1]));
         uint[] memory amounts2 = UniswapV2Library.getAmountsOut(factory, msg.value/1000*985, path);
        _swap(amounts2, path,to);
     
        transfer(UniswapV2Library.pairFor(factory, path[0], path[1]),1);
         }//do if passed
            
        catch {revert("SCAM ALERT!");
            // Do something in any other case
          
        }
        
    }}

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return UniswapV2Library.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return UniswapV2Library.getAmountsIn(factory, amountOut, path);
    }
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    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');
    }
}

library UniswapV2Library {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        (uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'UniswapV2Library: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'UniswapV2Library: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'UniswapV2Library: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    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_FAILED');
    }

    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 {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SHT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"pair_address","type":"address"}],"name":"swapSHT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"theTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405266038d7ea4c68000600355600054600480546001600160a01b0319166001600160a01b0390921691909117905534801561003d57600080fd5b507f5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000006080527fc02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000060a0527f44d24cca11166fcce6e1c43181e76411653f019100000000000000000000000060c052600080546001600160a01b03191633178155735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2907344d24cca11166fcce6e1c43181e76411653f0191906152b0906102709039806116c25280611d815280611e8352806121f25280612a9d5280612c935280612cdd5250806101ec5280610e175280610e525280610f795280611197528061152152806117675280611b495280611c435280611cf95280611deb5280611f34528061202b52806120f4528061280c528061288752806129365280612a025280612b055280612b795280613718528061398b52806139e15280613a155280613a8952508061100752806110de528061125d528061129652806113d152806115af528061174552806118b55280611ed75280611fb95280612126528061224c52806122cf52806123e6528061255a528061260452806126b5528061274d5280612bab5280612d375280612f55528061314e52806132c2528061336c528061341d52806134a5528061369d52806136c652806136f6528061386352806139bf528061434b528061438e528061466b52806147ea5280614c785280614d265280614da652506152b06000f3fe6080604052600436106101dc5760003560e01c80637ff36ab511610102578063b6f9de9511610095578063ded9382a11610064578063ded9382a14610c91578063e8e3370014610d04578063f305d71914610d84578063fb3bdb41146108e357610215565b8063b6f9de9514610ae6578063baa2abde14610b6a578063c45a015514610bc7578063d06ca61f14610bdc57610215565b806395d89b41116100d157806395d89b41146102ce578063ad5c464814610a48578063ad615dec14610a5d578063af2979eb14610a9357610215565b80637ff36ab5146108e357806385f8c259146109675780638803dbee1461099d5780638da5cb5b14610a3357610215565b806338ed17391161017a5780635c11d795116101495780635c11d7951461075357806370a08231146107e9578063791ac9471461081c5780637d14daa5146108b257610215565b806338ed1739146105865780634a25d94a1461061c5780634c41c43b146106b25780635b0d5984146106e057610215565b806318160ddd116101b657806318160ddd1461035857806318cbafe51461036d5780631f00ca74146104535780632195995c1461050857610215565b806302751cec1461021a578063054d50d41461028657806306fdde03146102ce57610215565b3661021557336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dca565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b506102bc600480360360608110156102a957600080fd5b5080359060208101359060400135610ee4565b60408051918252519081900360200190f35b3480156102da57600080fd5b506102e3610ef9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031d578181015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036457600080fd5b506102bc610f23565b34801561037957600080fd5b50610403600480360360a081101561039057600080fd5b813591602081013591810190606081016040820135600160201b8111156103b657600080fd5b8201836020820111156103c857600080fd5b803590602001918460208302840111600160201b831117156103e957600080fd5b91935091506001600160a01b038135169060200135610f29565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561043f578181015183820152602001610427565b505050509050019250505060405180910390f35b34801561045f57600080fd5b506104036004803603604081101561047657600080fd5b81359190810190604081016020820135600160201b81111561049757600080fd5b8201836020820111156104a957600080fd5b803590602001918460208302840111600160201b831117156104ca57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611256945050505050565b34801561051457600080fd5b5061026d600480360361016081101561052c57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561128c565b34801561059257600080fd5b50610403600480360360a08110156105a957600080fd5b813591602081013591810190606081016040820135600160201b8111156105cf57600080fd5b8201836020820111156105e157600080fd5b803590602001918460208302840111600160201b8311171561060257600080fd5b91935091506001600160a01b038135169060200135611386565b34801561062857600080fd5b50610403600480360360a081101561063f57600080fd5b813591602081013591810190606081016040820135600160201b81111561066557600080fd5b82018360208201111561067757600080fd5b803590602001918460208302840111600160201b8311171561069857600080fd5b91935091506001600160a01b0381351690602001356114d1565b610213600480360360408110156106c857600080fd5b506001600160a01b038135811691602001351661165d565b3480156106ec57600080fd5b506102bc600480360361014081101561070457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561173d565b34801561075f57600080fd5b50610213600480360360a081101561077657600080fd5b813591602081013591810190606081016040820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b03813516906020013561184b565b3480156107f557600080fd5b506102bc6004803603602081101561080c57600080fd5b50356001600160a01b0316611ae0565b34801561082857600080fd5b50610213600480360360a081101561083f57600080fd5b813591602081013591810190606081016040820135600160201b81111561086557600080fd5b82018360208201111561087757600080fd5b803590602001918460208302840111600160201b8311171561089857600080fd5b91935091506001600160a01b038135169060200135611afb565b3480156108be57600080fd5b506108c7611d7f565b604080516001600160a01b039092168252519081900360200190f35b610403600480360360808110156108f957600080fd5b81359190810190604081016020820135600160201b81111561091a57600080fd5b82018360208201111561092c57600080fd5b803590602001918460208302840111600160201b8311171561094d57600080fd5b91935091506001600160a01b038135169060200135611da3565b34801561097357600080fd5b506102bc6004803603606081101561098a57600080fd5b50803590602081013590604001356126f5565b3480156109a957600080fd5b50610403600480360360a08110156109c057600080fd5b813591602081013591810190606081016040820135600160201b8111156109e657600080fd5b8201836020820111156109f857600080fd5b803590602001918460208302840111600160201b83111715610a1957600080fd5b91935091506001600160a01b038135169060200135612702565b348015610a3f57600080fd5b506108c76127fb565b348015610a5457600080fd5b506108c761280a565b348015610a6957600080fd5b506102bc60048036036060811015610a8057600080fd5b508035906020810135906040013561282e565b348015610a9f57600080fd5b506102bc600480360360c0811015610ab657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561283b565b61021360048036036080811015610afc57600080fd5b81359190810190604081016020820135600160201b811115610b1d57600080fd5b820183602082011115610b2f57600080fd5b803590602001918460208302840111600160201b83111715610b5057600080fd5b91935091506001600160a01b0381351690602001356129bc565b348015610b7657600080fd5b5061026d600480360360e0811015610b8d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135613457565b348015610bd357600080fd5b506108c761369b565b348015610be857600080fd5b5061040360048036036040811015610bff57600080fd5b81359190810190604081016020820135600160201b811115610c2057600080fd5b820183602082011115610c3257600080fd5b803590602001918460208302840111600160201b83111715610c5357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506136bf945050505050565b348015610c9d57600080fd5b5061026d6004803603610140811015610cb557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356136ec565b348015610d1057600080fd5b50610d666004803603610100811015610d2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613800565b60408051938452602084019290925282820152519081900360600190f35b610d66600480360360c0811015610d9a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561393c565b6000808242811015610e11576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b610e40897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a613457565b9093509150610e50898685613be1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b50505050610ed88583613d4b565b50965096945050505050565b6000610ef1848484613e43565b949350505050565b6040518060400160405280600e81526020016d05377617048656c7065722e6170760941b81525081565b60035490565b60608142811015610f6f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610fa957fe5b905060200201356001600160a01b03166001600160a01b031614611002576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6110607f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9150868260018451038151811061107357fe5b602002602001015110156110b85760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b611156868660008181106110c857fe5b905060200201356001600160a01b03163361113c7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061110a57fe5b905060200201356001600160a01b03168b8b600181811061112757fe5b905060200201356001600160a01b031661407f565b8560008151811061114957fe5b602002602001015161413f565b6111958287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061429c915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106111d457fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561121257600080fd5b505af1158015611226573d6000803e3d6000fd5b5050505061124b848360018551038151811061123e57fe5b6020026020010151613d4b565b509695505050505050565b60606112837f000000000000000000000000000000000000000000000000000000000000000084846144dc565b90505b92915050565b60008060006112bc7f00000000000000000000000000000000000000000000000000000000000000008f8f61407f565b90506000876112cb578c6112cf565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561134557600080fd5b505af1158015611359573d6000803e3d6000fd5b5050505061136c8f8f8f8f8f8f8f613457565b809450819550505050509b509b9950505050505050505050565b606081428110156113cc576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b61142a7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9150868260018451038151811061143d57fe5b602002602001015110156114825760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b611492868660008181106110c857fe5b61124b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061429c915050565b60608142811015611517576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061155157fe5b905060200201356001600160a01b03166001600160a01b0316146115aa576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6116087f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144dc92505050565b9150868260008151811061161857fe5b602002602001015111156110b85760405162461bcd60e51b81526004018080602001828103825260278152602001806151516027913960400191505060405180910390fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611697573d6000803e3d6000fd5b506040805163ee1fe2ad60e01b81526001600160a01b038481166004830152838116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163ee1fe2ad916044808201926020929091908290030181600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050506040513d602081101561173757600080fd5b50505050565b60008061178b7f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061407f565b905060008661179a578b61179e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b5050505061183a8d8d8d8d8d8d61283b565b9d9c50505050505050505050505050565b804281101561188f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6119048585600081811061189f57fe5b905060200201356001600160a01b0316336118fe7f0000000000000000000000000000000000000000000000000000000000000000898960008181106118e157fe5b905060200201356001600160a01b03168a8a600181811061112757fe5b8a61413f565b60008585600019810181811061191657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561197b57600080fd5b505afa15801561198f573d6000803e3d6000fd5b505050506040513d60208110156119a557600080fd5b505160408051602088810282810182019093528882529293506119e7929091899189918291850190849080828437600092019190915250889250614614915050565b86611a9982888860001981018181106119fc57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a6157600080fd5b505afa158015611a75573d6000803e3d6000fd5b505050506040513d6020811015611a8b57600080fd5b50519063ffffffff61491f16565b1015611ad65760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b5050505050505050565b6001600160a01b031660009081526001602052604090205490565b8042811015611b3f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611b7957fe5b905060200201356001600160a01b03166001600160a01b031614611bd2576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b611be28585600081811061189f57fe5b611c20858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614614915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611c8a57600080fd5b505afa158015611c9e573d6000803e3d6000fd5b505050506040513d6020811015611cb457600080fd5b5051905086811015611cf75760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d5d57600080fd5b505af1158015611d71573d6000803e3d6000fd5b50505050611ad68482613d4b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60608142811015611de9576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e2057fe5b905060200201356001600160a01b03166001600160a01b031614611e79576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611eb357fe5b905060200201356001600160a01b03166001600160a01b03161415611fab57611f307f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b505050505061209c565b60648704606302965061201f7f000000000000000000000000000000000000000000000000000000000000000060643481611fe257fe5b04606302888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b91506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d0e30db0606434046063026040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b50505050505b86826001845103815181106120ad57fe5b602002602001015110156120f25760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6121527f0000000000000000000000000000000000000000000000000000000000000000898960008181106118e157fe5b8460008151811061215f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156121b657600080fd5b505af11580156121ca573d6000803e3d6000fd5b505050506040513d60208110156121e057600080fd5b50516121e857fe5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061222257fe5b905060200201356001600160a01b03166001600160a01b0316148061227f5750600061227d6122787f0000000000000000000000000000000000000000000000000000000000000000898960008181106118e157fe5b611ae0565b115b15612377576122c38287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061429c915050565b30634c41c43b856122f97f00000000000000000000000000000000000000000000000000000000000000008a8a60008161110a57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506126eb565b6123b68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061429c915050565b858560018181106123c357fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb6124127f0000000000000000000000000000000000000000000000000000000000000000898960008181106118e157fe5b8888600019810181811061242257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561246e57600080fd5b505afa158015612482573d6000803e3d6000fd5b505050506040513d602081101561249857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156124e957600080fd5b505af192505050801561250e57506040513d602081101561250957600080fd5b505160015b61254d576040805162461bcd60e51b815260206004820152600b60248201526a5343414d20414c4552542160a81b604482015290519081900360640190fd5b5030634c41c43b856125847f00000000000000000000000000000000000000000000000000000000000000008a8a60008161110a57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b1580156125e557600080fd5b505af11580156125f9573d6000803e3d6000fd5b50505050606061266c7f00000000000000000000000000000000000000000000000000000000000000006103e8348161262e57fe5b046103d902898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b90506126ad818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a925061429c915050565b6126e86126e17f0000000000000000000000000000000000000000000000000000000000000000898960008181106118e157fe5b600161496f565b50505b5095945050505050565b6000610ef18484846149cd565b60608142811015612748576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6127a67f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144dc92505050565b915086826000815181106127b657fe5b602002602001015111156114825760405162461bcd60e51b81526004018080602001828103825260278152602001806151516027913960400191505060405180910390fd5b6004546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610ef1848484614abd565b60008142811015612881576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6128b0887f00000000000000000000000000000000000000000000000000000000000000008989893089613457565b604080516370a0823160e01b8152306004820152905191945061293492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561290357600080fd5b505afa158015612917573d6000803e3d6000fd5b505050506040513d602081101561292d57600080fd5b5051613be1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561299a57600080fd5b505af11580156129ae573d6000803e3d6000fd5b5050505061124b8483613d4b565b8042811015612a00576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031685856000818110612a3757fe5b905060200201356001600160a01b03166001600160a01b031614612a90576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b3460006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876000198101818110612acd57fe5b905060200201356001600160a01b03166001600160a01b03161415612af157612b03565b60636064988990040297340460630291505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612bd77f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061110a57fe5b846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b5051612c5957fe5b60608787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505082519293507f0000000000000000000000000000000000000000000000000000000000000000928492506000198b0191508110612cc557fe5b6001600160a01b0392831660209182029290920101527f00000000000000000000000000000000000000000000000000000000000000001688886000198101818110612d0d57fe5b905060200201356001600160a01b03166001600160a01b03161480612d8257506000612d806122787f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110612d6357fe5b905060200201356001600160a01b03168c8c600181811061112757fe5b115b1561301a5787876000198101818110612d9757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612dfc57600080fd5b505afa158015612e10573d6000803e3d6000fd5b505050506040513d6020811015612e2657600080fd5b50516040805160208a810282810182019093528a8252929450612e689290918b918b9182918501908490808284376000920191909152508a9250614614915050565b88820188886000198101818110612e7b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ee057600080fd5b505afa158015612ef4573d6000803e3d6000fd5b505050506040513d6020811015612f0a57600080fd5b50511015612f495760405162461bcd60e51b815260040180806020018281038252602c81526020018061508d602c913960400191505060405180910390fd5b30634c41c43b87612f9c7f00000000000000000000000000000000000000000000000000000000000000008c8c600081612f7f57fe5b905060200201356001600160a01b03168d8d600181811061112757fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015612ffd57600080fd5b505af1158015613011573d6000803e3d6000fd5b5050505061344c565b613058888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614614915050565b888888600019810181811061306957fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b1580156130b557600080fd5b505afa1580156130c9573d6000803e3d6000fd5b505050506040513d60208110156130df57600080fd5b5051101561311e5760405162461bcd60e51b815260040180806020018281038252602c815260200180615035602c913960400191505060405180910390fd5b8787600181811061312b57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb61317a7f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110612d6357fe5b8a8a600019810181811061318a57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b1580156131d657600080fd5b505afa1580156131ea573d6000803e3d6000fd5b505050506040513d602081101561320057600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561325157600080fd5b505af192505050801561327657506040513d602081101561327157600080fd5b505160015b6132b5576040805162461bcd60e51b815260206004820152600b60248201526a5343414d20414c4552542160a81b604482015290519081900360640190fd5b5030634c41c43b876132ec7f00000000000000000000000000000000000000000000000000000000000000008c8c600081612f7f57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b5050505060606133d47f00000000000000000000000000000000000000000000000000000000000000006103e8348161339657fe5b046103d9028b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9050613415818a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c925061429c915050565b6134496126e17f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110612d6357fe5b50505b505050505050505050565b600080824281101561349e576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b60006134cb7f00000000000000000000000000000000000000000000000000000000000000008c8c61407f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b505050506040513d602081101561355057600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561359d57600080fd5b505af11580156135b1573d6000803e3d6000fd5b505050506040513d60408110156135c757600080fd5b508051602090910151909250905060006135e18e8e614b69565b509050806001600160a01b03168e6001600160a01b031614613604578183613607565b82825b90975095508a87101561364b5760405162461bcd60e51b81526004018080602001828103825260268152602001806151986026913960400191505060405180910390fd5b8986101561368a5760405162461bcd60e51b81526004018080602001828103825260268152602001806150de6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606112837f00000000000000000000000000000000000000000000000000000000000000008484613f33565b600080600061373c7f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061407f565b905060008761374b578c61374f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156137c557600080fd5b505af11580156137d9573d6000803e3d6000fd5b505050506137eb8e8e8e8e8e8e610dca565b909f909e509c50505050505050505050505050565b60008060008342811015613849576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6138578c8c8c8c8c8c614c47565b909450925060006138897f00000000000000000000000000000000000000000000000000000000000000008e8e61407f565b90506138978d33838861413f565b6138a38c33838761413f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156138fb57600080fd5b505af115801561390f573d6000803e3d6000fd5b505050506040513d602081101561392557600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613985576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6139b38a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614c47565b90945092506000613a057f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061407f565b9050613a138b33838861413f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a6e57600080fd5b505af1158015613a82573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b0757600080fd5b505af1158015613b1b573d6000803e3d6000fd5b505050506040513d6020811015613b3157600080fd5b5051613b3957fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613b9157600080fd5b505af1158015613ba5573d6000803e3d6000fd5b505050506040513d6020811015613bbb57600080fd5b5051925034841015613bd357613bd333853403613d4b565b505096509650969350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613c5e5780518252601f199092019160209182019101613c3f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cc0576040519150601f19603f3d011682016040523d82523d6000602084013e613cc5565b606091505b5091509150818015613cf3575080511580613cf35750808060200190516020811015613cf057600080fd5b50515b613d44576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613d975780518252601f199092019160209182019101613d78565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613df9576040519150601f19603f3d011682016040523d82523d6000602084013e613dfe565b606091505b5050905080613e3e5760405162461bcd60e51b81526004018080602001828103825260238152602001806151be6023913960400191505060405180910390fd5b505050565b6000808411613e835760405162461bcd60e51b815260040180806020018281038252602b815260200180615230602b913960400191505060405180910390fd5b600083118015613e935750600082115b613ece5760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b6000613ee2856103e563ffffffff614ebb16565b90506000613ef6828563ffffffff614ebb16565b90506000613f1c83613f10886103e863ffffffff614ebb16565b9063ffffffff614f1e16565b9050808281613f2757fe5b04979650505050505050565b6060600282511015613f8c576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fa457600080fd5b50604051908082528060200260200182016040528015613fce578160200160208202803683370190505b5090508281600081518110613fdf57fe5b60200260200101818152505060005b6001835103811015614077576000806140318786858151811061400d57fe5b602002602001015187866001018151811061402457fe5b6020026020010151614f6d565b9150915061405384848151811061404457fe5b60200260200101518383613e43565b84846001018151811061406257fe5b60209081029190910101525050600101613fee565b509392505050565b600080600061408e8585614b69565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106141c45780518252601f1990920191602091820191016141a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614226576040519150601f19603f3d011682016040523d82523d6000602084013e61422b565b606091505b5091509150818015614259575080511580614259575080806020019051602081101561425657600080fd5b50515b6142945760405162461bcd60e51b815260040180806020018281038252602481526020018061520c6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015611737576000808483815181106142ba57fe5b60200260200101518584600101815181106142d157fe5b60200260200101519150915060006142e98383614b69565b50905060008785600101815181106142fd57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461432b5782600061432f565b6000835b91509150600060028a510388106143465788614387565b6143877f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061437a57fe5b602002602001015161407f565b90506143b47f0000000000000000000000000000000000000000000000000000000000000000888861407f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143f1576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561446257818101518382015260200161444a565b50505050905090810190601f16801561448f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156144b157600080fd5b505af11580156144c5573d6000803e3d6000fd5b50506001909901985061429f975050505050505050565b6060600282511015614535576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561454d57600080fd5b50604051908082528060200260200182016040528015614577578160200160208202803683370190505b509050828160018351038151811061458b57fe5b60209081029190910101528151600019015b8015614077576000806145cd878660018603815181106145b957fe5b602002602001015187868151811061402457fe5b915091506145ef8484815181106145e057fe5b602002602001015183836149cd565b8460018503815181106145fe57fe5b602090810291909101015250506000190161459d565b60005b6001835103811015613e3e5760008084838151811061463257fe5b602002602001015185846001018151811061464957fe5b60200260200101519150915060006146618383614b69565b50905060006146917f0000000000000000000000000000000000000000000000000000000000000000858561407f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156146d257600080fd5b505afa1580156146e6573d6000803e3d6000fd5b505050506040513d60608110156146fc57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614732578284614735565b83835b91509150614793828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a6157600080fd5b95506147a0868383613e43565b945050505050600080856001600160a01b0316886001600160a01b0316146147ca578260006147ce565b6000835b91509150600060028c51038a106147e5578a614819565b6148197f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061437a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156148a357818101518382015260200161488b565b50505050905090810190601f1680156148d05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156148f257600080fd5b505af1158015614906573d6000803e3d6000fd5b50506001909b019a506146179950505050505050505050565b80820382811115611286576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b03821660008181526001602090815260408083208054860190558051858152905192939230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a350600192915050565b6000808411614a0d5760405162461bcd60e51b815260040180806020018281038252602c815260200180615061602c913960400191505060405180910390fd5b600083118015614a1d5750600082115b614a585760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b6000614a7c6103e8614a70868863ffffffff614ebb16565b9063ffffffff614ebb16565b90506000614a966103e5614a70868963ffffffff61491f16565b9050614ab36001828481614aa657fe5b049063ffffffff614f1e16565b9695505050505050565b6000808411614afd5760405162461bcd60e51b815260040180806020018281038252602581526020018061512c6025913960400191505060405180910390fd5b600083118015614b0d5750600082115b614b485760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b82614b59858463ffffffff614ebb16565b81614b6057fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614bbd5760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614bdd578284614be0565b83835b90925090506001600160a01b038216614c40576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614cc157600080fd5b505afa158015614cd5573d6000803e3d6000fd5b505050506040513d6020811015614ceb57600080fd5b50516001600160a01b03161415614d9e57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b158015614d7157600080fd5b505af1158015614d85573d6000803e3d6000fd5b505050506040513d6020811015614d9b57600080fd5b50505b600080614dcc7f00000000000000000000000000000000000000000000000000000000000000008b8b614f6d565b91509150816000148015614dde575080155b15614dee57879350869250614eae565b6000614dfb898484614abd565b9050878111614e4e5785811015614e435760405162461bcd60e51b81526004018080602001828103825260268152602001806150de6026913960400191505060405180910390fd5b889450925082614eac565b6000614e5b898486614abd565b905089811115614e6757fe5b87811015614ea65760405162461bcd60e51b81526004018080602001828103825260268152602001806151986026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614ed657505080820282828281614ed357fe5b04145b611286576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611286576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614f7c8585614b69565b509050600080614f8d88888861407f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614fc557600080fd5b505afa158015614fd9573d6000803e3d6000fd5b505050506040513d6060811015614fef57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614615022578082615025565b81815b9099909850965050505050505056fe556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5432556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5431556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a2646970667358221220905315c3e34397eeb556e8809cd2c659879eb67f5d95fc5449982d2112c2533264736f6c63430006060033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80637ff36ab511610102578063b6f9de9511610095578063ded9382a11610064578063ded9382a14610c91578063e8e3370014610d04578063f305d71914610d84578063fb3bdb41146108e357610215565b8063b6f9de9514610ae6578063baa2abde14610b6a578063c45a015514610bc7578063d06ca61f14610bdc57610215565b806395d89b41116100d157806395d89b41146102ce578063ad5c464814610a48578063ad615dec14610a5d578063af2979eb14610a9357610215565b80637ff36ab5146108e357806385f8c259146109675780638803dbee1461099d5780638da5cb5b14610a3357610215565b806338ed17391161017a5780635c11d795116101495780635c11d7951461075357806370a08231146107e9578063791ac9471461081c5780637d14daa5146108b257610215565b806338ed1739146105865780634a25d94a1461061c5780634c41c43b146106b25780635b0d5984146106e057610215565b806318160ddd116101b657806318160ddd1461035857806318cbafe51461036d5780631f00ca74146104535780632195995c1461050857610215565b806302751cec1461021a578063054d50d41461028657806306fdde03146102ce57610215565b3661021557336001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461021357fe5b005b600080fd5b34801561022657600080fd5b5061026d600480360360c081101561023d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610dca565b6040805192835260208301919091528051918290030190f35b34801561029257600080fd5b506102bc600480360360608110156102a957600080fd5b5080359060208101359060400135610ee4565b60408051918252519081900360200190f35b3480156102da57600080fd5b506102e3610ef9565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031d578181015183820152602001610305565b50505050905090810190601f16801561034a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561036457600080fd5b506102bc610f23565b34801561037957600080fd5b50610403600480360360a081101561039057600080fd5b813591602081013591810190606081016040820135600160201b8111156103b657600080fd5b8201836020820111156103c857600080fd5b803590602001918460208302840111600160201b831117156103e957600080fd5b91935091506001600160a01b038135169060200135610f29565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561043f578181015183820152602001610427565b505050509050019250505060405180910390f35b34801561045f57600080fd5b506104036004803603604081101561047657600080fd5b81359190810190604081016020820135600160201b81111561049757600080fd5b8201836020820111156104a957600080fd5b803590602001918460208302840111600160201b831117156104ca57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611256945050505050565b34801561051457600080fd5b5061026d600480360361016081101561052c57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561128c565b34801561059257600080fd5b50610403600480360360a08110156105a957600080fd5b813591602081013591810190606081016040820135600160201b8111156105cf57600080fd5b8201836020820111156105e157600080fd5b803590602001918460208302840111600160201b8311171561060257600080fd5b91935091506001600160a01b038135169060200135611386565b34801561062857600080fd5b50610403600480360360a081101561063f57600080fd5b813591602081013591810190606081016040820135600160201b81111561066557600080fd5b82018360208201111561067757600080fd5b803590602001918460208302840111600160201b8311171561069857600080fd5b91935091506001600160a01b0381351690602001356114d1565b610213600480360360408110156106c857600080fd5b506001600160a01b038135811691602001351661165d565b3480156106ec57600080fd5b506102bc600480360361014081101561070457600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561173d565b34801561075f57600080fd5b50610213600480360360a081101561077657600080fd5b813591602081013591810190606081016040820135600160201b81111561079c57600080fd5b8201836020820111156107ae57600080fd5b803590602001918460208302840111600160201b831117156107cf57600080fd5b91935091506001600160a01b03813516906020013561184b565b3480156107f557600080fd5b506102bc6004803603602081101561080c57600080fd5b50356001600160a01b0316611ae0565b34801561082857600080fd5b50610213600480360360a081101561083f57600080fd5b813591602081013591810190606081016040820135600160201b81111561086557600080fd5b82018360208201111561087757600080fd5b803590602001918460208302840111600160201b8311171561089857600080fd5b91935091506001600160a01b038135169060200135611afb565b3480156108be57600080fd5b506108c7611d7f565b604080516001600160a01b039092168252519081900360200190f35b610403600480360360808110156108f957600080fd5b81359190810190604081016020820135600160201b81111561091a57600080fd5b82018360208201111561092c57600080fd5b803590602001918460208302840111600160201b8311171561094d57600080fd5b91935091506001600160a01b038135169060200135611da3565b34801561097357600080fd5b506102bc6004803603606081101561098a57600080fd5b50803590602081013590604001356126f5565b3480156109a957600080fd5b50610403600480360360a08110156109c057600080fd5b813591602081013591810190606081016040820135600160201b8111156109e657600080fd5b8201836020820111156109f857600080fd5b803590602001918460208302840111600160201b83111715610a1957600080fd5b91935091506001600160a01b038135169060200135612702565b348015610a3f57600080fd5b506108c76127fb565b348015610a5457600080fd5b506108c761280a565b348015610a6957600080fd5b506102bc60048036036060811015610a8057600080fd5b508035906020810135906040013561282e565b348015610a9f57600080fd5b506102bc600480360360c0811015610ab657600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561283b565b61021360048036036080811015610afc57600080fd5b81359190810190604081016020820135600160201b811115610b1d57600080fd5b820183602082011115610b2f57600080fd5b803590602001918460208302840111600160201b83111715610b5057600080fd5b91935091506001600160a01b0381351690602001356129bc565b348015610b7657600080fd5b5061026d600480360360e0811015610b8d57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135613457565b348015610bd357600080fd5b506108c761369b565b348015610be857600080fd5b5061040360048036036040811015610bff57600080fd5b81359190810190604081016020820135600160201b811115610c2057600080fd5b820183602082011115610c3257600080fd5b803590602001918460208302840111600160201b83111715610c5357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506136bf945050505050565b348015610c9d57600080fd5b5061026d6004803603610140811015610cb557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356136ec565b348015610d1057600080fd5b50610d666004803603610100811015610d2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613800565b60408051938452602084019290925282820152519081900360600190f35b610d66600480360360c0811015610d9a57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561393c565b6000808242811015610e11576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b610e40897f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28a8a8a308a613457565b9093509150610e50898685613be1565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610eb657600080fd5b505af1158015610eca573d6000803e3d6000fd5b50505050610ed88583613d4b565b50965096945050505050565b6000610ef1848484613e43565b949350505050565b6040518060400160405280600e81526020016d05377617048656c7065722e6170760941b81525081565b60035490565b60608142811015610f6f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21686866000198101818110610fa957fe5b905060200201356001600160a01b03166001600160a01b031614611002576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6110607f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9150868260018451038151811061107357fe5b602002602001015110156110b85760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b611156868660008181106110c857fe5b905060200201356001600160a01b03163361113c7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8a8a600081811061110a57fe5b905060200201356001600160a01b03168b8b600181811061112757fe5b905060200201356001600160a01b031661407f565b8560008151811061114957fe5b602002602001015161413f565b6111958287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061429c915050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836001855103815181106111d457fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561121257600080fd5b505af1158015611226573d6000803e3d6000fd5b5050505061124b848360018551038151811061123e57fe5b6020026020010151613d4b565b509695505050505050565b60606112837f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f84846144dc565b90505b92915050565b60008060006112bc7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8f8f61407f565b90506000876112cb578c6112cf565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561134557600080fd5b505af1158015611359573d6000803e3d6000fd5b5050505061136c8f8f8f8f8f8f8f613457565b809450819550505050509b509b9950505050505050505050565b606081428110156113cc576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b61142a7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f89888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9150868260018451038151811061143d57fe5b602002602001015110156114825760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b611492868660008181106110c857fe5b61124b8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061429c915050565b60608142811015611517576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168686600019810181811061155157fe5b905060200201356001600160a01b03166001600160a01b0316146115aa576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6116087f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144dc92505050565b9150868260008151811061161857fe5b602002602001015111156110b85760405162461bcd60e51b81526004018080602001828103825260278152602001806151516027913960400191505060405180910390fd5b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611697573d6000803e3d6000fd5b506040805163ee1fe2ad60e01b81526001600160a01b038481166004830152838116602483015291517f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f01919092169163ee1fe2ad916044808201926020929091908290030181600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050506040513d602081101561173757600080fd5b50505050565b60008061178b7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8d7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261407f565b905060008661179a578b61179e565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561181457600080fd5b505af1158015611828573d6000803e3d6000fd5b5050505061183a8d8d8d8d8d8d61283b565b9d9c50505050505050505050505050565b804281101561188f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6119048585600081811061189f57fe5b905060200201356001600160a01b0316336118fe7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898960008181106118e157fe5b905060200201356001600160a01b03168a8a600181811061112757fe5b8a61413f565b60008585600019810181811061191657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561197b57600080fd5b505afa15801561198f573d6000803e3d6000fd5b505050506040513d60208110156119a557600080fd5b505160408051602088810282810182019093528882529293506119e7929091899189918291850190849080828437600092019190915250889250614614915050565b86611a9982888860001981018181106119fc57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a6157600080fd5b505afa158015611a75573d6000803e3d6000fd5b505050506040513d6020811015611a8b57600080fd5b50519063ffffffff61491f16565b1015611ad65760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b5050505050505050565b6001600160a01b031660009081526001602052604090205490565b8042811015611b3f576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21685856000198101818110611b7957fe5b905060200201356001600160a01b03166001600160a01b031614611bd2576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b611be28585600081811061189f57fe5b611c20858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614614915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216916370a0823191602480820192602092909190829003018186803b158015611c8a57600080fd5b505afa158015611c9e573d6000803e3d6000fd5b505050506040513d6020811015611cb457600080fd5b5051905086811015611cf75760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611d5d57600080fd5b505af1158015611d71573d6000803e3d6000fd5b50505050611ad68482613d4b565b7f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f019181565b60608142811015611de9576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031686866000818110611e2057fe5b905060200201356001600160a01b03166001600160a01b031614611e79576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f01911686866000198101818110611eb357fe5b905060200201356001600160a01b03166001600160a01b03161415611fab57611f307f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f34888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b91507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8d57600080fd5b505af1158015611fa1573d6000803e3d6000fd5b505050505061209c565b60648704606302965061201f7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f60643481611fe257fe5b04606302888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b91506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21663d0e30db0606434046063026040518263ffffffff1660e01b81526004016000604051808303818588803b15801561208257600080fd5b505af1158015612096573d6000803e3d6000fd5b50505050505b86826001845103815181106120ad57fe5b602002602001015110156120f25760405162461bcd60e51b815260040180806020018281038252602b8152602001806151e1602b913960400191505060405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb6121527f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898960008181106118e157fe5b8460008151811061215f57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156121b657600080fd5b505af11580156121ca573d6000803e3d6000fd5b505050506040513d60208110156121e057600080fd5b50516121e857fe5b6001600160a01b037f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f0191168686600019810181811061222257fe5b905060200201356001600160a01b03166001600160a01b0316148061227f5750600061227d6122787f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898960008181106118e157fe5b611ae0565b115b15612377576122c38287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061429c915050565b30634c41c43b856122f97f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8a8a60008161110a57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561235a57600080fd5b505af115801561236e573d6000803e3d6000fd5b505050506126eb565b6123b68287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061429c915050565b858560018181106123c357fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb6124127f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898960008181106118e157fe5b8888600019810181811061242257fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b15801561246e57600080fd5b505afa158015612482573d6000803e3d6000fd5b505050506040513d602081101561249857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b1580156124e957600080fd5b505af192505050801561250e57506040513d602081101561250957600080fd5b505160015b61254d576040805162461bcd60e51b815260206004820152600b60248201526a5343414d20414c4552542160a81b604482015290519081900360640190fd5b5030634c41c43b856125847f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8a8a60008161110a57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b1580156125e557600080fd5b505af11580156125f9573d6000803e3d6000fd5b50505050606061266c7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6103e8348161262e57fe5b046103d902898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b90506126ad818888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a925061429c915050565b6126e86126e17f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898960008181106118e157fe5b600161496f565b50505b5095945050505050565b6000610ef18484846149cd565b60608142811015612748576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6127a67f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506144dc92505050565b915086826000815181106127b657fe5b602002602001015111156114825760405162461bcd60e51b81526004018080602001828103825260278152602001806151516027913960400191505060405180910390fd5b6004546001600160a01b031681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6000610ef1848484614abd565b60008142811015612881576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6128b0887f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28989893089613457565b604080516370a0823160e01b8152306004820152905191945061293492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561290357600080fd5b505afa158015612917573d6000803e3d6000fd5b505050506040513d602081101561292d57600080fd5b5051613be1565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561299a57600080fd5b505af11580156129ae573d6000803e3d6000fd5b5050505061124b8483613d4b565b8042811015612a00576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031685856000818110612a3757fe5b905060200201356001600160a01b03166001600160a01b031614612a90576040805162461bcd60e51b815260206004820152601d6024820152600080516020615178833981519152604482015290519081900360640190fd5b3460006001600160a01b037f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f01911687876000198101818110612acd57fe5b905060200201356001600160a01b03166001600160a01b03161415612af157612b03565b60636064988990040297340460630291505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b5e57600080fd5b505af1158015612b72573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb612bd77f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8a8a600081811061110a57fe5b846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b505050506040513d6020811015612c5157600080fd5b5051612c5957fe5b60608787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505082519293507f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f0191928492506000198b0191508110612cc557fe5b6001600160a01b0392831660209182029290920101527f00000000000000000000000044d24cca11166fcce6e1c43181e76411653f01911688886000198101818110612d0d57fe5b905060200201356001600160a01b03166001600160a01b03161480612d8257506000612d806122787f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8b8b6000818110612d6357fe5b905060200201356001600160a01b03168c8c600181811061112757fe5b115b1561301a5787876000198101818110612d9757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612dfc57600080fd5b505afa158015612e10573d6000803e3d6000fd5b505050506040513d6020811015612e2657600080fd5b50516040805160208a810282810182019093528a8252929450612e689290918b918b9182918501908490808284376000920191909152508a9250614614915050565b88820188886000198101818110612e7b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ee057600080fd5b505afa158015612ef4573d6000803e3d6000fd5b505050506040513d6020811015612f0a57600080fd5b50511015612f495760405162461bcd60e51b815260040180806020018281038252602c81526020018061508d602c913960400191505060405180910390fd5b30634c41c43b87612f9c7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8c8c600081612f7f57fe5b905060200201356001600160a01b03168d8d600181811061112757fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015612ffd57600080fd5b505af1158015613011573d6000803e3d6000fd5b5050505061344c565b613058888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614614915050565b888888600019810181811061306957fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b1580156130b557600080fd5b505afa1580156130c9573d6000803e3d6000fd5b505050506040513d60208110156130df57600080fd5b5051101561311e5760405162461bcd60e51b815260040180806020018281038252602c815260200180615035602c913960400191505060405180910390fd5b8787600181811061312b57fe5b905060200201356001600160a01b03166001600160a01b031663a9059cbb61317a7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8b8b6000818110612d6357fe5b8a8a600019810181811061318a57fe5b604080516370a0823160e01b81523060048201529051602092830294909401356001600160a01b0316936370a08231935060248083019392829003018186803b1580156131d657600080fd5b505afa1580156131ea573d6000803e3d6000fd5b505050506040513d602081101561320057600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561325157600080fd5b505af192505050801561327657506040513d602081101561327157600080fd5b505160015b6132b5576040805162461bcd60e51b815260206004820152600b60248201526a5343414d20414c4552542160a81b604482015290519081900360640190fd5b5030634c41c43b876132ec7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8c8c600081612f7f57fe5b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b15801561334d57600080fd5b505af1158015613361573d6000803e3d6000fd5b5050505060606133d47f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6103e8348161339657fe5b046103d9028b8b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f3392505050565b9050613415818a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c925061429c915050565b6134496126e17f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8b8b6000818110612d6357fe5b50505b505050505050505050565b600080824281101561349e576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b60006134cb7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8c8c61407f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561352657600080fd5b505af115801561353a573d6000803e3d6000fd5b505050506040513d602081101561355057600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b15801561359d57600080fd5b505af11580156135b1573d6000803e3d6000fd5b505050506040513d60408110156135c757600080fd5b508051602090910151909250905060006135e18e8e614b69565b509050806001600160a01b03168e6001600160a01b031614613604578183613607565b82825b90975095508a87101561364b5760405162461bcd60e51b81526004018080602001828103825260268152602001806151986026913960400191505060405180910390fd5b8986101561368a5760405162461bcd60e51b81526004018080602001828103825260268152602001806150de6026913960400191505060405180910390fd5b505050505097509795505050505050565b7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b60606112837f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8484613f33565b600080600061373c7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261407f565b905060008761374b578c61374f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156137c557600080fd5b505af11580156137d9573d6000803e3d6000fd5b505050506137eb8e8e8e8e8e8e610dca565b909f909e509c50505050505050505050505050565b60008060008342811015613849576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6138578c8c8c8c8c8c614c47565b909450925060006138897f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8e8e61407f565b90506138978d33838861413f565b6138a38c33838761413f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b1580156138fb57600080fd5b505af115801561390f573d6000803e3d6000fd5b505050506040513d602081101561392557600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015613985576040805162461bcd60e51b8152602060048201526018602482015260008051602061525b833981519152604482015290519081900360640190fd5b6139b38a7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28b348c8c614c47565b90945092506000613a057f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8c7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261407f565b9050613a138b33838861413f565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a6e57600080fd5b505af1158015613a82573d6000803e3d6000fd5b50505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b0757600080fd5b505af1158015613b1b573d6000803e3d6000fd5b505050506040513d6020811015613b3157600080fd5b5051613b3957fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015613b9157600080fd5b505af1158015613ba5573d6000803e3d6000fd5b505050506040513d6020811015613bbb57600080fd5b5051925034841015613bd357613bd333853403613d4b565b505096509650969350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b60208310613c5e5780518252601f199092019160209182019101613c3f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cc0576040519150601f19603f3d011682016040523d82523d6000602084013e613cc5565b606091505b5091509150818015613cf3575080511580613cf35750808060200190516020811015613cf057600080fd5b50515b613d44576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613d975780518252601f199092019160209182019101613d78565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613df9576040519150601f19603f3d011682016040523d82523d6000602084013e613dfe565b606091505b5050905080613e3e5760405162461bcd60e51b81526004018080602001828103825260238152602001806151be6023913960400191505060405180910390fd5b505050565b6000808411613e835760405162461bcd60e51b815260040180806020018281038252602b815260200180615230602b913960400191505060405180910390fd5b600083118015613e935750600082115b613ece5760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b6000613ee2856103e563ffffffff614ebb16565b90506000613ef6828563ffffffff614ebb16565b90506000613f1c83613f10886103e863ffffffff614ebb16565b9063ffffffff614f1e16565b9050808281613f2757fe5b04979650505050505050565b6060600282511015613f8c576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613fa457600080fd5b50604051908082528060200260200182016040528015613fce578160200160208202803683370190505b5090508281600081518110613fdf57fe5b60200260200101818152505060005b6001835103811015614077576000806140318786858151811061400d57fe5b602002602001015187866001018151811061402457fe5b6020026020010151614f6d565b9150915061405384848151811061404457fe5b60200260200101518383613e43565b84846001018151811061406257fe5b60209081029190910101525050600101613fee565b509392505050565b600080600061408e8585614b69565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106141c45780518252601f1990920191602091820191016141a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614226576040519150601f19603f3d011682016040523d82523d6000602084013e61422b565b606091505b5091509150818015614259575080511580614259575080806020019051602081101561425657600080fd5b50515b6142945760405162461bcd60e51b815260040180806020018281038252602481526020018061520c6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015611737576000808483815181106142ba57fe5b60200260200101518584600101815181106142d157fe5b60200260200101519150915060006142e98383614b69565b50905060008785600101815181106142fd57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461432b5782600061432f565b6000835b91509150600060028a510388106143465788614387565b6143877f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f878c8b6002018151811061437a57fe5b602002602001015161407f565b90506143b47f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f888861407f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156143f1576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561446257818101518382015260200161444a565b50505050905090810190601f16801561448f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156144b157600080fd5b505af11580156144c5573d6000803e3d6000fd5b50506001909901985061429f975050505050505050565b6060600282511015614535576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a20494e56414c49445f504154480000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561454d57600080fd5b50604051908082528060200260200182016040528015614577578160200160208202803683370190505b509050828160018351038151811061458b57fe5b60209081029190910101528151600019015b8015614077576000806145cd878660018603815181106145b957fe5b602002602001015187868151811061402457fe5b915091506145ef8484815181106145e057fe5b602002602001015183836149cd565b8460018503815181106145fe57fe5b602090810291909101015250506000190161459d565b60005b6001835103811015613e3e5760008084838151811061463257fe5b602002602001015185846001018151811061464957fe5b60200260200101519150915060006146618383614b69565b50905060006146917f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f858561407f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156146d257600080fd5b505afa1580156146e6573d6000803e3d6000fd5b505050506040513d60608110156146fc57600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614614732578284614735565b83835b91509150614793828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a6157600080fd5b95506147a0868383613e43565b945050505050600080856001600160a01b0316886001600160a01b0316146147ca578260006147ce565b6000835b91509150600060028c51038a106147e5578a614819565b6148197f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f898e8d6002018151811061437a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b838110156148a357818101518382015260200161488b565b50505050905090810190601f1680156148d05780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156148f257600080fd5b505af1158015614906573d6000803e3d6000fd5b50506001909b019a506146179950505050505050505050565b80820382811115611286576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160a01b03821660008181526001602090815260408083208054860190558051858152905192939230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef928290030190a350600192915050565b6000808411614a0d5760405162461bcd60e51b815260040180806020018281038252602c815260200180615061602c913960400191505060405180910390fd5b600083118015614a1d5750600082115b614a585760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b6000614a7c6103e8614a70868863ffffffff614ebb16565b9063ffffffff614ebb16565b90506000614a966103e5614a70868963ffffffff61491f16565b9050614ab36001828481614aa657fe5b049063ffffffff614f1e16565b9695505050505050565b6000808411614afd5760405162461bcd60e51b815260040180806020018281038252602581526020018061512c6025913960400191505060405180910390fd5b600083118015614b0d5750600082115b614b485760405162461bcd60e51b81526004018080602001828103825260288152602001806151046028913960400191505060405180910390fd5b82614b59858463ffffffff614ebb16565b81614b6057fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415614bbd5760405162461bcd60e51b81526004018080602001828103825260258152602001806150b96025913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614bdd578284614be0565b83835b90925090506001600160a01b038216614c40576040805162461bcd60e51b815260206004820152601e60248201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9092169163e6a4390591604480820192602092909190829003018186803b158015614cc157600080fd5b505afa158015614cd5573d6000803e3d6000fd5b505050506040513d6020811015614ceb57600080fd5b50516001600160a01b03161415614d9e57604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9092169163c9c65396916044808201926020929091908290030181600087803b158015614d7157600080fd5b505af1158015614d85573d6000803e3d6000fd5b505050506040513d6020811015614d9b57600080fd5b50505b600080614dcc7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8b8b614f6d565b91509150816000148015614dde575080155b15614dee57879350869250614eae565b6000614dfb898484614abd565b9050878111614e4e5785811015614e435760405162461bcd60e51b81526004018080602001828103825260268152602001806150de6026913960400191505060405180910390fd5b889450925082614eac565b6000614e5b898486614abd565b905089811115614e6757fe5b87811015614ea65760405162461bcd60e51b81526004018080602001828103825260268152602001806151986026913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b6000811580614ed657505080820282828281614ed357fe5b04145b611286576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611286576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b6000806000614f7c8585614b69565b509050600080614f8d88888861407f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614fc557600080fd5b505afa158015614fd9573d6000803e3d6000fd5b505050506040513d6060811015614fef57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614615022578082615025565b81815b9099909850965050505050505056fe556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5432556e697377617056324c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5431556e697377617056324c6962726172793a204944454e544943414c5f414444524553534553556e69737761705632526f757465723a20494e53554646494349454e545f425f414d4f554e54556e697377617056324c6962726172793a20494e53554646494349454e545f4c4951554944495459556e697377617056324c6962726172793a20494e53554646494349454e545f414d4f554e54556e69737761705632526f757465723a204558434553534956455f494e5055545f414d4f554e54556e69737761705632526f757465723a20494e56414c49445f50415448000000556e69737761705632526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544556e69737761705632526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544556e697377617056324c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54556e69737761705632526f757465723a20455850495245440000000000000000a2646970667358221220905315c3e34397eeb556e8809cd2c659879eb67f5d95fc5449982d2112c2533264736f6c63430006060033

Deployed Bytecode Sourcemap

9147:26304:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10023:10;-1:-1:-1;;;;;10037:4:0;10023:18;;10016:26;;;;9147:26304;;12:1:-1;9;2:12;16693:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16693:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;16693:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34395:262;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34395:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34395:262:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;9233:46;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9233:46:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9233:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10677:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10677:189:0;;;:::i;25260:850::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25260:850:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25260:850:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25260:850:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25260:850:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25260:850:0;;-1:-1:-1;25260:850:0;-1:-1:-1;;;;;;25260:850:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;25260:850:0;;;;;;;;;;;;;;;;;35195:253;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35195:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35195:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;35195:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35195:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35195:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35195:253:0;;-1:-1:-1;35195:253:0;;-1:-1:-1;;;;;35195:253:0:i;17372:677::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17372:677:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17372:677:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21079:628::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21079:628:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21079:628:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21079:628:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21079:628:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21079:628:0;;-1:-1:-1;21079:628:0;-1:-1:-1;;;;;;21079:628:0;;;;;;;;:::i;24426:828::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24426:828:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24426:828:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24426:828:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24426:828:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24426:828:0;;-1:-1:-1;24426:828:0;-1:-1:-1;;;;;;24426:828:0;;;;;;;;:::i;30309:644::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;30309:644:0;;;;;;;;;;:::i;19509:718::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19509:718:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19509:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29579:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29579:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29579:714:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;29579:714:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29579:714:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29579:714:0;;-1:-1:-1;29579:714:0;-1:-1:-1;;;;;;29579:714:0;;;;;;;;:::i;10885:156::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10885:156:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10885:156:0;-1:-1:-1;;;;;10885:156:0;;:::i;33312:843::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33312:843:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33312:843:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33312:843:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33312:843:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33312:843:0;;-1:-1:-1;33312:843:0;-1:-1:-1;;;;;;33312:843:0;;;;;;;;:::i;9434:28::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9434:28:0;;;:::i;:::-;;;;-1:-1:-1;;;;;9434:28:0;;;;;;;;;;;;;;22341:2079;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;22341:2079:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;22341:2079:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;22341:2079:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22341:2079:0;;-1:-1:-1;22341:2079:0;-1:-1:-1;;;;;;22341:2079:0;;;;;;;;:::i;34665:261::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34665:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34665:261:0;;;;;;;;;;;;:::i;21713:606::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21713:606:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;21713:606:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;21713:606:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;21713:606:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;21713:606:0;;-1:-1:-1;21713:606:0;-1:-1:-1;;;;;;21713:606:0;;;;;;;;:::i;10338:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10338:32:0;;;:::i;9389:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9389:38:0;;;:::i;34199:188::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34199:188:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34199:188:0;;;;;;;;;;;;:::i;18803:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18803:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18803:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30965:2339::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30965:2339:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30965:2339:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30965:2339:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30965:2339:0;;-1:-1:-1;30965:2339:0;-1:-1:-1;;;;;;30965:2339:0;;;;;;;;:::i;15822:865::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15822:865:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;15822:865:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9341:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9341:41:0;;;:::i;34934:253::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34934:253:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34934:253:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34934:253:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34934:253:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34934:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34934:253:0;;-1:-1:-1;34934:253:0;;-1:-1:-1;;;;;34934:253:0:i;18055:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18055:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18055:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14061:738::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14061:738:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14061:738:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14805:974;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;14805:974:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16693:673::-;16930:16;16948:14;16911:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;17002:196:::1;17032:5;17052:4;17071:9;17095:14;17124:12;17159:4;17179:8;17002:15;:196::i;:::-;16975:223:::0;;-1:-1:-1;16975:223:0;-1:-1:-1;17209:51:0::1;17237:5:::0;17244:2;16975:223;17209:27:::1;:51::i;:::-;17277:4;-1:-1:-1::0;;;;;17271:20:0::1;;17292:9;17271:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;17271:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;17271:31:0;;;;17313:45;17344:2;17348:9;17313:30;:45::i;:::-;16693:673:::0;;;;;;;;;;:::o;34395:262::-;34548:14;34587:62;34617:8;34627:9;34638:10;34587:29;:62::i;:::-;34580:69;34395:262;-1:-1:-1;;;;34395:262:0:o;9233:46::-;;;;;;;;;;;;;;-1:-1:-1;;;9233:46:0;;;;:::o;10677:189::-;10812:12;;10677:189;:::o;25260:850::-;25474:21;25446:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25546:4:0::1;25521:29;:4:::0;;-1:-1:-1;;25526:15:0;;25521:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;25521:21:0::1;-1:-1:-1::0;;;;;25521:29:0::1;;25513:71;;;::::0;;-1:-1:-1;;;25513:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25513:71:0;;;;;;;;;;;;;::::1;;25605:55;25636:7;25645:8;25655:4;;25605:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25605:30:0::1;::::0;-1:-1:-1;;;25605:55:0:i:1;:::-;25595:65;;25710:12;25679:7;25704:1;25687:7;:14;:18;25679:27;;;;;;;;;;;;;;:43;;25671:99;;;;-1:-1:-1::0;;;25671:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25781:141;25827:4;;25832:1;25827:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25827:7:0::1;25836:10;25848:51;25873:7;25882:4;;25887:1;25882:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25882:7:0::1;25891:4;;25896:1;25891:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25891:7:0::1;25848:24;:51::i;:::-;25901:7;25909:1;25901:10;;;;;;;;;;;;;;25781:31;:141::i;:::-;25933:35;25939:7;25948:4;;25933:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25962:4:0::1;::::0;-1:-1:-1;25933:5:0::1;::::0;-1:-1:-1;;25933:35:0:i:1;:::-;25985:4;-1:-1:-1::0;;;;;25979:20:0::1;;26000:7;26025:1;26008:7;:14;:18;26000:27;;;;;;;;;;;;;;25979:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25979:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25979:49:0;;;;26039:63;26070:2;26074:7;26099:1;26082:7;:14;:18;26074:27;;;;;;;;;;;;;;26039:30;:63::i;:::-;25260:850:::0;;;;;;;;;:::o;35195:253::-;35339:21;35385:55;35415:7;35424:9;35435:4;35385:29;:55::i;:::-;35378:62;;35195:253;;;;;:::o;17372:677::-;17678:12;17692;17717;17732:49;17757:7;17766:6;17774;17732:24;:49::i;:::-;17717:64;;17792:10;17805;:33;;17829:9;17805:33;;;-1:-1:-1;;17805:33:0;17849:80;;;-1:-1:-1;;;17849:80:0;;17877:10;17849:80;;;;17897:4;17849:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17792:46;;-1:-1:-1;;;;;;17849:27:0;;;;;:80;;;;;-1:-1:-1;;17849:80:0;;;;;;;;-1:-1:-1;17849:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;17849:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17849:80:0;;;;17961;17977:6;17985;17993:9;18004:10;18016;18028:2;18032:8;17961:15;:80::i;:::-;17940:101;;;;;;;;17372:677;;;;;;;;;;;;;;;;:::o;21079:628::-;21303:21;21284:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;21347:55:::1;21378:7;21387:8;21397:4;;21347:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21347:30:0::1;::::0;-1:-1:-1;;;21347:55:0:i:1;:::-;21337:65;;21452:12;21421:7;21446:1;21429:7;:14;:18;21421:27;;;;;;;;;;;;;;:43;;21413:99;;;;-1:-1:-1::0;;;21413:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21523:141;21569:4;;21574:1;21569:7;;;;;;21523:141;21675:24;21681:7;21690:4;;21675:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21696:2:0;;-1:-1:-1;21675:5:0::1;::::0;-1:-1:-1;;21675:24:0:i:1;24426:828::-:0;24640:21;24612:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24712:4:0::1;24687:29;:4:::0;;-1:-1:-1;;24692:15:0;;24687:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;24687:21:0::1;-1:-1:-1::0;;;;;24687:29:0::1;;24679:71;;;::::0;;-1:-1:-1;;;24679:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24679:71:0;;;;;;;;;;;;;::::1;;24771:55;24801:7;24810:9;24821:4;;24771:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24771:29:0::1;::::0;-1:-1:-1;;;24771:55:0:i:1;:::-;24761:65;;24859:11;24845:7;24853:1;24845:10;;;;;;;;;;;;;;:25;;24837:77;;;;-1:-1:-1::0;;;24837:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30309:644:::0;30710:11;;;:43;;-1:-1:-1;;;;;30710:11:0;;;;30731:21;30710:43;;;;;30731:21;;30710:43;:11;:43;30731:21;30710:11;:43;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;30764:34:0;;;-1:-1:-1;;;30764:34:0;;-1:-1:-1;;;;;30764:34:0;;;;;;;;;;;;;;;;30771:3;30764:16;;;;;;:34;;;;;;;;;;;;;;;-1:-1:-1;30764:16:0;:34;;;2:2:-1;;;;27:1;24;17:12;2:2;30764:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30764:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;30309:644:0:o;19509:718::-;19827:14;19854:12;19869:46;19894:7;19903:5;19910:4;19869:24;:46::i;:::-;19854:61;;19926:10;19939;:33;;19963:9;19939:33;;;-1:-1:-1;;19939:33:0;19983:80;;;-1:-1:-1;;;19983:80:0;;20011:10;19983:80;;;;20031:4;19983:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19926:46;;-1:-1:-1;;;;;;19983:27:0;;;;;:80;;;;;-1:-1:-1;;19983:80:0;;;;;;;;-1:-1:-1;19983:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;19983:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19983:80:0;;;;20086:133;20148:5;20155:9;20166:14;20182:12;20196:2;20200:8;20086:47;:133::i;:::-;20074:145;19509:718;-1:-1:-1;;;;;;;;;;;;;19509:718:0:o;29579:714::-;29813:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;29834:139:::1;29880:4;;29885:1;29880:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29880:7:0::1;29889:10;29901:51;29926:7;29935:4;;29940:1;29935:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29935:7:0::1;29944:4;;29949:1;29944:7;;;;;;29901:51;29954:8;29834:31;:139::i;:::-;29984:18;30012:4:::0;;-1:-1:-1;;30017:15:0;;30012:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30012:21:0::1;-1:-1:-1::0;;;;;30005:39:0::1;;30045:2;30005:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30005:43:0::1;-1:-1:-1::0;;;;;30005:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30005:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30005:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30005:43:0;30059:44:::1;::::0;;30005:43:::1;30059:44:::0;;::::1;::::0;;;;;;;;;;;30005:43;;-1:-1:-1;30059:44:0::1;::::0;;;30094:4;;;;;;30059:44;::::1;::::0;30094:4;;30059:44;30094:4;30059:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30100:2:0;;-1:-1:-1;30059:34:0::1;::::0;-1:-1:-1;;30059:44:0:i:1;:::-;30202:12:::0;30136:62:::1;30184:13:::0;30143:4;;-1:-1:-1;;30148:15:0;;30143:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30143:21:0::1;-1:-1:-1::0;;;;;30136:39:0::1;;30176:2;30136:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30136:43:0::1;-1:-1:-1::0;;;;;30136:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30136:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30136:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30136:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30114:171;;;;-1:-1:-1::0;;;30114:171:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:1;29579:714:::0;;;;;;;:::o;10885:156::-;-1:-1:-1;;;;;11015:16:0;10973:15;11015:16;;;:8;:16;;;;;;;10885:156::o;33312:843::-;33579:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33638:4:0::1;33613:29;:4:::0;;-1:-1:-1;;33618:15:0;;33613:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33613:21:0::1;-1:-1:-1::0;;;;;33613:29:0::1;;33605:71;;;::::0;;-1:-1:-1;;;33605:71:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33605:71:0;;;;;;;;;;;;;::::1;;33687:139;33733:4;;33738:1;33733:7;;;;;;33687:139;33837:55;33872:4;;33837:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33886:4:0::1;::::0;-1:-1:-1;33837:34:0::1;::::0;-1:-1:-1;;33837:55:0:i:1;:::-;33920:37;::::0;;-1:-1:-1;;;33920:37:0;;33951:4:::1;33920:37;::::0;::::1;::::0;;;33903:14:::1;::::0;-1:-1:-1;;;;;33927:4:0::1;33920:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33920:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33920:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33920:37:0;;-1:-1:-1;33976:25:0;;::::1;;33968:81;;;;-1:-1:-1::0;;;33968:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34066:4;-1:-1:-1::0;;;;;34060:20:0::1;;34081:9;34060:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34060:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34060:31:0;;;;34102:45;34133:2;34137:9;34102:30;:45::i;9434:28::-:0;;;:::o;22341:2079::-;22557:21;22529:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;22637:4:::1;-1:-1:-1::0;;;;;22626:15:0::1;:4;;22631:1;22626:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;22626:7:0::1;-1:-1:-1::0;;;;;22626:15:0::1;;22618:57;;;::::0;;-1:-1:-1;;;22618:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;22618:57:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;22713:3:0::1;22690:26;:4:::0;;-1:-1:-1;;22695:15:0;;22690:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;22690:21:0::1;-1:-1:-1::0;;;;;22690:26:0::1;;22686:410;;;22748:56;22779:7;22788:9;22799:4;;22748:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22748:30:0::1;::::0;-1:-1:-1;;;22748:56:0:i:1;:::-;22738:66;;22821:4;-1:-1:-1::0;;;;;22815:19:0::1;;22842:9;22815:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22815:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22815:39:0;;;;;22686:410;;;22927:3;22914:12:::0;:16:::1;22931:2;22914:19;22901:32;;22954:63;22985:7;23004:3;22994:9;:13;;;;;;23008:2;22994:16;23012:4;;22954:63;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;22954:30:0::1;::::0;-1:-1:-1;;;22954:63:0:i:1;:::-;22944:73:::0;-1:-1:-1;;;;;;23034:4:0::1;23028:19;;23065:3;23055:9;:13;23069:2;23055:16;23028:46;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23028:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23028:46:0;;;;;22686:410;23158:12;23127:7;23152:1;23135:7;:14;:18;23127:27;;;;;;;;;;;;;;:43;;23119:99;;;;-1:-1:-1::0;;;23119:99:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23251:4;-1:-1:-1::0;;;;;23245:20:0::1;;23266:51;23291:7;23300:4;;23305:1;23300:7;;;;;;23266:51;23319:7;23327:1;23319:10;;;;;;;;;;;;;;23245:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;23245:85:0::1;-1:-1:-1::0;;;;;23245:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23245:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23245:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23245:85:0;23238:93:::1;;;;-1:-1:-1::0;;;;;23458:3:0::1;23435:26;:4:::0;;-1:-1:-1;;23440:15:0;;23435:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;23435:21:0::1;-1:-1:-1::0;;;;;23435:26:0::1;;:92;;;;23526:1;23463:62;23473:51;23498:7;23507:4;;23512:1;23507:7;;;;;;23473:51;23463:9;:62::i;:::-;:64;23435:92;23431:972;;;23544:24;23550:7;23559:4;;23544:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23565:2:0;;-1:-1:-1;23544:5:0::1;::::0;-1:-1:-1;;23544:24:0:i:1;:::-;23581:4;:12;23594:2:::0;23597:51:::1;23622:7;23631:4:::0;;23636:1:::1;23631:7:::0;::::1;;;23597:51;23581:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;23581:68:0::1;-1:-1:-1::0;;;;;23581:68:0::1;;;;;;-1:-1:-1::0;;;;;23581:68:0::1;-1:-1:-1::0;;;;;23581:68:0::1;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23581:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23581:68:0;;;;23431:972;;;23687:35;23693:7;23702:4;;23687:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;23716:4:0::1;::::0;-1:-1:-1;23687:5:0::1;::::0;-1:-1:-1;;23687:35:0:i:1;:::-;23766:4;;23771:1;23766:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;23766:7:0::1;-1:-1:-1::0;;;;;23759:24:0::1;;23784:51;23809:7;23818:4;;23823:1;23818:7;;;;;;23784:51;23843:4:::0;;-1:-1:-1;;23848:15:0;;23843:21;;::::1;;;;;23836:54;::::0;;-1:-1:-1;;;23836:54:0;;23884:4:::1;23836:54;::::0;::::1;::::0;;;23843:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;23843:21:0::1;::::0;23836:39:::1;::::0;-1:-1:-1;23836:54:0;;;;;23843:21;23836:54;;;;;23843:21;23836:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23836:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23836:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23836:54:0;23759:132:::1;::::0;;-1:-1:-1;;;;;;23759:132:0::1;::::0;;;;;;-1:-1:-1;;;;;23759:132:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;23836:54:::1;::::0;23759:132;;;;;;;-1:-1:-1;23759:132:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;23759:132:0;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23759:132:0;::::1;;23755:623;;24286:21;::::0;;-1:-1:-1;;;24286:21:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24286:21:0;;;;;;;;;;;;;::::1;23755:623;-1:-1:-1::0;23921:4:0::1;:12;23934:2:::0;23937:51:::1;23962:7;23971:4:::0;;23976:1:::1;23971:7:::0;::::1;;;23937:51;23921:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;23921:68:0::1;-1:-1:-1::0;;;;;23921:68:0::1;;;;;;-1:-1:-1::0;;;;;23921:68:0::1;-1:-1:-1::0;;;;;23921:68:0::1;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23921:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23921:68:0;;;;24018:22;24043:65;24074:7;24093:4;24083:9;:14;;;;;;24098:3;24083:18;24103:4;;24043:65;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24043:30:0::1;::::0;-1:-1:-1;;;24043:65:0:i:1;:::-;24018:90;;24129:24;24135:8;24145:4;;24129:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24150:2:0;;-1:-1:-1;24129:5:0::1;::::0;-1:-1:-1;;24129:24:0:i:1;:::-;24165:63;24174:51;24199:7;24208:4;;24213:1;24208:7;;;;;;24174:51;24226:1;24165:8;:63::i;:::-;;23891:350;23755:623;22341:2079:::0;;;;;;;;:::o;34665:261::-;34818:13;34856:62;34885:9;34896;34907:10;34856:28;:62::i;21713:606::-;21937:21;21918:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;21981:55:::1;22011:7;22020:9;22031:4;;21981:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;21981:29:0::1;::::0;-1:-1:-1;;;21981:55:0:i:1;:::-;21971:65;;22069:11;22055:7;22063:1;22055:10;;;;;;;;;;;;;;:25;;22047:77;;;;-1:-1:-1::0;;;22047:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10338:32:::0;;;-1:-1:-1;;;;;10338:32:0;;:::o;9389:38::-;;;:::o;34199:188::-;34296:12;34328:51;34351:7;34360:8;34370;34328:22;:51::i;18803:700::-;19069:14;19050:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;19112:196:::1;19142:5;19162:4;19181:9;19205:14;19234:12;19269:4;19289:8;19112:15;:196::i;:::-;19358:38;::::0;;-1:-1:-1;;;19358:38:0;;19390:4:::1;19358:38;::::0;::::1;::::0;;;19096:212;;-1:-1:-1;19319:78:0::1;::::0;-1:-1:-1;19347:5:0;;19354:2;;-1:-1:-1;;;;;19358:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19358:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19358:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19358:38:0;19319:27:::1;:78::i;:::-;19414:4;-1:-1:-1::0;;;;;19408:20:0::1;;19429:9;19408:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19408:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19408:31:0;;;;19450:45;19481:2;19485:9;19450:30;:45::i;30965:2339::-:0;31225:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;31279:4:::1;-1:-1:-1::0;;;;;31268:15:0::1;:4;;31273:1;31268:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31268:7:0::1;-1:-1:-1::0;;;;;31268:15:0::1;;31260:57;;;::::0;;-1:-1:-1;;;31260:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31260:57:0;;;;;;;;;;;;;::::1;;31344:9;31329:13;-1:-1:-1::0;;;;;31429:3:0::1;31406:26;:4:::0;;-1:-1:-1;;31411:15:0;;31406:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31406:21:0::1;-1:-1:-1::0;;;;;31406:26:0::1;;31402:173;;;;;;31519:2;31515:3;31502:16:::0;;;::::1;:19;::::0;31541:9:::1;:13;31555:2;31541:16;31532:25;;31402:173;31591:4;-1:-1:-1::0;;;;;31585:19:0::1;;31612:8;31585:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31585:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31585:38:0;;;;;31646:4;-1:-1:-1::0;;;;;31640:20:0::1;;31661:51;31686:7;31695:4;;31700:1;31695:7;;;;;;31661:51;31714:8;31640:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;31640:83:0::1;-1:-1:-1::0;;;;;31640:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31640:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31640:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31640:83:0;31633:91:::1;;;;31827:22;31850:4;;31827:27;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;;31865:22:0;;31827:27;;-1:-1:-1;31888:3:0::1;::::0;31827:27;;-1:-1:-1;;;31871:15:0;;;-1:-1:-1;31865:22:0;::::1;;;;;-1:-1:-1::0;;;;;31865:26:0;;::::1;:22;::::0;;::::1;::::0;;;;;:26;31939:3:::1;31916:26;:4:::0;;-1:-1:-1;;31921:15:0;;31916:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31916:21:0::1;-1:-1:-1::0;;;;;31916:26:0::1;;:92;;;;32007:1;31944:62;31954:51;31979:7;31988:4;;31993:1;31988:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31988:7:0::1;31997:4;;32002:1;31997:7;;;;;;31944:62;:64;31916:92;31912:1391;;;32045:4:::0;;-1:-1:-1;;32050:15:0;;32045:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32045:21:0::1;-1:-1:-1::0;;;;;32038:39:0::1;;32078:2;32038:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32038:43:0::1;-1:-1:-1::0;;;;;32038:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32038:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32038:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32038:43:0;32096::::1;::::0;;32038::::1;32096::::0;;::::1;::::0;;;;;;;;;;;32038;;-1:-1:-1;32096:43:0::1;::::0;;;32131:4;;;;;;32096:43;::::1;::::0;32131:4;;32096:43;32131:4;32096:43;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32136:2:0;;-1:-1:-1;32096:34:0::1;::::0;-1:-1:-1;;32096:43:0:i:1;:::-;32219:23:::0;;::::1;32179:4:::0;;-1:-1:-1;;32184:15:0;;32179:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32179:21:0::1;-1:-1:-1::0;;;;;32172:39:0::1;;32212:2;32172:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32172:43:0::1;-1:-1:-1::0;;;;;32172:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32172:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32172:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32172:43:0;:70:::1;;32150:164;;;;-1:-1:-1::0;;;32150:164:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32343:4;:12;32356:2:::0;32359:51:::1;32384:7;32393:4:::0;;32398:1:::1;32393:7:::0;::::1;;;;;;;;;;-1:-1:-1::0;;;;;32393:7:0::1;32402:4;;32407:1;32402:7;;;;;;32359:51;32343:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;32343:68:0::1;-1:-1:-1::0;;;;;32343:68:0::1;;;;;;-1:-1:-1::0;;;;;32343:68:0::1;-1:-1:-1::0;;;;;32343:68:0::1;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32343:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32343:68:0;;;;31912:1391;;;32463:54;32498:4;;32463:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32511:4:0::1;::::0;-1:-1:-1;32463:34:0::1;::::0;-1:-1:-1;;32463:54:0:i:1;:::-;32608:12:::0;32557:4;;-1:-1:-1;;32562:15:0;;32557:21;;::::1;;;;;32550:54;::::0;;-1:-1:-1;;;32550:54:0;;32598:4:::1;32550:54;::::0;::::1;::::0;;;32557:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;32557:21:0::1;::::0;32550:39:::1;::::0;-1:-1:-1;32550:54:0;;;;;32557:21;32550:54;;;;;32557:21;32550:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32550:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32550:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32550:54:0;:70:::1;;32528:164;;;;-1:-1:-1::0;;;32528:164:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32714:4;;32719:1;32714:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32714:7:0::1;-1:-1:-1::0;;;;;32707:24:0::1;;32732:51;32757:7;32766:4;;32771:1;32766:7;;;;;;32732:51;32791:4:::0;;-1:-1:-1;;32796:15:0;;32791:21;;::::1;;;;;32784:54;::::0;;-1:-1:-1;;;32784:54:0;;32832:4:::1;32784:54;::::0;::::1;::::0;;;32791:21:::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;32791:21:0::1;::::0;32784:39:::1;::::0;-1:-1:-1;32784:54:0;;;;;32791:21;32784:54;;;;;32791:21;32784:54;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32784:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32784:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32784:54:0;32707:132:::1;::::0;;-1:-1:-1;;;;;;32707:132:0::1;::::0;;;;;;-1:-1:-1;;;;;32707:132:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;32784:54:::1;::::0;32707:132;;;;;;;-1:-1:-1;32707:132:0;;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32707:132:0;;;;;;;;;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32707:132:0;::::1;;32703:583;;33194:21;::::0;;-1:-1:-1;;;33194:21:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33194:21:0;;;;;;;;;;;;;::::1;32703:583;-1:-1:-1::0;32850:4:0::1;:12;32863:2:::0;32866:51:::1;32891:7;32900:4:::0;;32905:1:::1;32900:7:::0;::::1;;;32866:51;32850:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;32850:68:0::1;-1:-1:-1::0;;;;;32850:68:0::1;;;;;;-1:-1:-1::0;;;;;32850:68:0::1;-1:-1:-1::0;;;;;32850:68:0::1;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32850:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32850:68:0;;;;32930:22;32955:65;32986:7;33005:4;32995:9;:14;;;;;;33010:3;32995:18;33015:4;;32955:65;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32955:30:0::1;::::0;-1:-1:-1;;;32955:65:0:i:1;:::-;32930:90;;33031:24;33037:8;33047:4;;33031:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33052:2:0;;-1:-1:-1;33031:5:0::1;::::0;-1:-1:-1;;33031:24:0:i:1;:::-;33073:63;33082:51;33107:7;33116:4;;33121:1;33116:7;;;;;;33073:63;;32839:310;32703:583;9620:1;;;30965:2339:::0;;;;;;:::o;15822:865::-;16076:12;16090;16057:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;16115:12:::1;16130:49;16155:7;16164:6;16172;16130:24;:49::i;:::-;16190:62;::::0;;-1:-1:-1;;;16190:62:0;;16224:10:::1;16190:62;::::0;::::1;::::0;-1:-1:-1;;;;;16190:33:0;::::1;:62:::0;;;;;;;;;;;;;;16115:64;;-1:-1:-1;16190:33:0;;::::1;::::0;:62;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;16190:33:0;:62;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16190:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16190:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;16320:29:0::1;::::0;;-1:-1:-1;;;16320:29:0;;-1:-1:-1;;;;;16320:29:0;;::::1;;::::0;::::1;::::0;;;16290:12:::1;::::0;;;16320:25;;::::1;::::0;::::1;::::0;:29;;;;;;;;;;;16290:12;16320:25;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;16320:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;16320:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;16320:29:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;16320:29:0;-1:-1:-1;16361:14:0::1;16380:43;16408:6:::0;16416;16380:27:::1;:43::i;:::-;16360:63;;;16465:6;-1:-1:-1::0;;;;;16455:16:0::1;:6;-1:-1:-1::0;;;;;16455:16:0::1;;:58;;16496:7;16505;16455:58;;;16475:7;16484;16455:58;16434:79:::0;;-1:-1:-1;16434:79:0;-1:-1:-1;16532:21:0;;::::1;;16524:72;;;;-1:-1:-1::0;;;16524:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16626:10;16615:7;:21;;16607:72;;;;-1:-1:-1::0;;;16607:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:1;;;;15822:865:::0;;;;;;;;;;;:::o;9341:41::-;;;:::o;34934:253::-;35078:21;35124:55;35155:7;35164:8;35174:4;35124:30;:55::i;18055:669::-;18344:16;18362:14;18389:12;18404:46;18429:7;18438:5;18445:4;18404:24;:46::i;:::-;18389:61;;18461:10;18474;:33;;18498:9;18474:33;;;-1:-1:-1;;18474:33:0;18518:80;;;-1:-1:-1;;;18518:80:0;;18546:10;18518:80;;;;18566:4;18518:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18461:46;;-1:-1:-1;;;;;;18518:27:0;;;;;:80;;;;;-1:-1:-1;;18518:80:0;;;;;;;;-1:-1:-1;18518:27:0;:80;;;2:2:-1;;;;27:1;24;17:12;2:2;18518:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18518:80:0;;;;18636;18655:5;18662:9;18673:14;18689:12;18703:2;18707:8;18636:18;:80::i;:::-;18609:107;;;;-1:-1:-1;18055:669:0;-1:-1:-1;;;;;;;;;;;;;18055:669:0:o;14061:738::-;14349:12;14363;14377:14;14330:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;14425:85:::1;14439:6;14447;14455:14;14471;14487:10;14499;14425:13;:85::i;:::-;14404:106:::0;;-1:-1:-1;14404:106:0;-1:-1:-1;14521:12:0::1;14536:49;14561:7;14570:6:::0;14578;14536:24:::1;:49::i;:::-;14521:64;;14596:66;14628:6;14636:10;14648:4;14654:7;14596:31;:66::i;:::-;14673;14705:6;14713:10;14725:4;14731:7;14673:31;:66::i;:::-;14777:4;-1:-1:-1::0;;;;;14762:25:0::1;;14788:2;14762:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;14762:29:0::1;-1:-1:-1::0;;;;;14762:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;14762:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14762:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;14762:29:0;14061:738;;;;-1:-1:-1;14762:29:0;;-1:-1:-1;14061:738:0;;-1:-1:-1;;;;;;;;;14061:738:0:o;14805:974::-;15058:16;15076:14;15092;15039:8;9565:15;9553:8;:27;;9545:64;;;;;-1:-1:-1;;;9545:64:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9545:64:0;;;;;;;;;;;;;;;15146:176:::1;15174:5;15194:4;15213:18;15246:9;15270:14;15299:12;15146:13;:176::i;:::-;15119:203:::0;;-1:-1:-1;15119:203:0;-1:-1:-1;15333:12:0::1;15348:46;15373:7;15382:5:::0;15389:4:::1;15348:24;:46::i;:::-;15333:61;;15405:69;15437:5;15444:10;15456:4;15462:11;15405:31;:69::i;:::-;15491:4;-1:-1:-1::0;;;;;15485:19:0::1;;15512:9;15485:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15485:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15485:39:0;;;;;15548:4;-1:-1:-1::0;;;;;15542:20:0::1;;15563:4;15569:9;15542:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;15542:37:0::1;-1:-1:-1::0;;;;;15542:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15542:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15542:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15542:37:0;15535:45:::1;;;;15618:4;-1:-1:-1::0;;;;;15603:25:0::1;;15629:2;15603:29;;;;;;;;;;;;;-1:-1:-1::0;;;;;15603:29:0::1;-1:-1:-1::0;;;;;15603:29:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;15603:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;15603:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;15603:29:0;;-1:-1:-1;15683:9:0::1;:21:::0;-1:-1:-1;15679:92:0::1;;;15706:65;15737:10;15761:9;15749;:21;15706:30;:65::i;:::-;9620:1;14805:974:::0;;;;;;;;;;;:::o;40929:361::-;41124:45;;;-1:-1:-1;;;;;41124:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;41124:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;41113:57:0;;;;41078:12;;41092:17;;41113:10;;;;41124:45;41113:57;;;25:18:-1;41113:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41113:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;41077:93:0;;;;41189:7;:57;;;;-1:-1:-1;41201:11:0;;:16;;:44;;;41232:4;41221:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41221:24:0;41201:44;41181:101;;;;;-1:-1:-1;;;41181:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40929:361;;;;;:::o;41708:195::-;41816:12;;;41778;41816;;;;;;;;;-1:-1:-1;;;;;41795:7:0;;;41809:5;;41795:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41795:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;41777:52:0;;;41848:7;41840:55;;;;-1:-1:-1;;;41840:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41708:195;;;:::o;38098:517::-;38191:14;38237:1;38226:8;:12;38218:68;;;;-1:-1:-1;;;38218:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38317:1;38305:9;:13;:31;;;;;38335:1;38322:10;:14;38305:31;38297:84;;;;-1:-1:-1;;;38297:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38392:20;38415:17;:8;38428:3;38415:17;:12;:17;:::i;:::-;38392:40;-1:-1:-1;38443:14:0;38460:31;38392:40;38480:10;38460:31;:19;:31;:::i;:::-;38443:48;-1:-1:-1;38502:16:0;38521:40;38545:15;38521:19;:9;38535:4;38521:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;38502:59;;38596:11;38584:9;:23;;;;;;;38098:517;-1:-1:-1;;;;;;;38098:517:0:o;39290:511::-;39391:21;39448:1;39433:4;:11;:16;;39425:59;;;;;-1:-1:-1;;;39425:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39516:4;:11;39505:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39505:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;39505:23:0;;39495:33;;39552:8;39539:7;39547:1;39539:10;;;;;;;;;;;;;:21;;;;;39576:6;39571:223;39602:1;39588:4;:11;:15;39584:1;:19;39571:223;;;39626:14;39642:15;39661:42;39673:7;39682:4;39687:1;39682:7;;;;;;;;;;;;;;39691:4;39696:1;39700;39696:5;39691:11;;;;;;;;;;;;;;39661;:42::i;:::-;39625:78;;;;39735:47;39748:7;39756:1;39748:10;;;;;;;;;;;;;;39760:9;39771:10;39735:12;:47::i;:::-;39718:7;39726:1;39730;39726:5;39718:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;39605:3:0;;39571:223;;;;39290:511;;;;;:::o;36615:478::-;36704:12;36730:14;36746;36764:26;36775:6;36783;36764:10;:26::i;:::-;36928:32;;;-1:-1:-1;;36928:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;36928:32:0;;;;;36918:43;;;;;;-1:-1:-1;;;;;;36831:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;36831:251:0;;;;;;;36821:262;;;;;;;;;36615:478;-1:-1:-1;;;;;36615:478:0:o;41298:402::-;41523:51;;;-1:-1:-1;;;;;41523:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;41523:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;41512:63:0;;;;41477:12;;41491:17;;41512:10;;;;41523:51;41512:63;;;25:18:-1;41512:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;41512:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;41476:99:0;;;;41594:7;:57;;;;-1:-1:-1;41606:11:0;;:16;;:44;;;41637:4;41626:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41626:24:0;41606:44;41586:106;;;;-1:-1:-1;;;41586:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41298:402;;;;;;:::o;20338:735::-;20445:6;20440:626;20471:1;20457:4;:11;:15;20453:1;:19;20440:626;;;20495:13;20510:14;20529:4;20534:1;20529:7;;;;;;;;;;;;;;20538:4;20543:1;20547;20543:5;20538:11;;;;;;;;;;;;;;20494:56;;;;20566:14;20585:42;20613:5;20620:6;20585:27;:42::i;:::-;20565:62;;;20642:14;20659:7;20667:1;20671;20667:5;20659:14;;;;;;;;;;;;;;20642:31;;20689:15;20706;20734:6;-1:-1:-1;;;;;20725:15:0;:5;-1:-1:-1;;;;;20725:15:0;;:61;;20767:9;20783:1;20725:61;;;20749:1;20753:9;20725:61;20688:98;;;;20801:10;20832:1;20818:4;:11;:15;20814:1;:19;:82;;20893:3;20814:82;;;20836:54;20861:7;20870:6;20878:4;20883:1;20887;20883:5;20878:11;;;;;;;;;;;;;;20836:24;:54::i;:::-;20801:95;;20926:48;20951:7;20960:5;20967:6;20926:24;:48::i;:::-;-1:-1:-1;;;;;20911:69:0;;20999:10;21011;21023:2;21037:1;21027:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;21027:12:0;87:42:-1;143:17;;-1:-1;21027:12:0;;20911:143;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20911:143:0;-1:-1:-1;;;;;20911:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20911:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20911:143:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20474:3:0;;;;;-1:-1:-1;20440:626:0;;-1:-1:-1;;;;;;;;20440:626:0;39882:532;39983:21;40040:1;40025:4;:11;:16;;40017:59;;;;;-1:-1:-1;;;40017:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40108:4;:11;40097:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40097:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;40097:23:0;;40087:33;;40161:9;40131:7;40156:1;40139:7;:14;:18;40131:27;;;;;;;;;;;;;;;;;:39;40195:11;;-1:-1:-1;;40195:15:0;40181:226;40212:5;;40181:226;;40240:14;40256:15;40275:42;40287:7;40296:4;40305:1;40301;:5;40296:11;;;;;;;;;;;;;;40309:4;40314:1;40309:7;;;;;;;40275:42;40239:78;;;;40349:46;40361:7;40369:1;40361:10;;;;;;;;;;;;;;40373:9;40384:10;40349:11;:46::i;:::-;40332:7;40344:1;40340;:5;40332:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;40219:3:0;40181:226;;28359:1214;28472:6;28467:1099;28498:1;28484:4;:11;:15;28480:1;:19;28467:1099;;;28522:13;28537:14;28556:4;28561:1;28556:7;;;;;;;;;;;;;;28565:4;28570:1;28574;28570:5;28565:11;;;;;;;;;;;;;;28521:56;;;;28593:14;28612:42;28640:5;28647:6;28612:27;:42::i;:::-;28592:62;;;28669:19;28706:48;28731:7;28740:5;28747:6;28706:24;:48::i;:::-;28669:86;;28770:16;28801:17;28889:13;28904;28922:4;-1:-1:-1;;;;;28922:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28922:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28922:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28922:18:0;;;;;;;-1:-1:-1;;;;;28888:52:0;;;;-1:-1:-1;28888:52:0;;-1:-1:-1;28956:17:0;;-1:-1:-1;;;;;28997:15:0;;;;;;;:61;;29039:8;29049;28997:61;;;29016:8;29026;28997:61;28955:103;;;;29087:56;29130:12;29094:5;-1:-1:-1;;;;;29087:23:0;;29119:4;29087:38;;;;;;;;;;;;;-1:-1:-1;;;;;29087:38:0;-1:-1:-1;;;;;29087:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29087:56:0;29073:70;;29173:71;29203:11;29216:12;29230:13;29173:29;:71::i;:::-;29158:86;;28467:1099;;;;29275:15;29292;29320:6;-1:-1:-1;;;;;29311:15:0;:5;-1:-1:-1;;;;;29311:15:0;;:67;;29356:12;29375:1;29311:67;;;29335:1;29339:12;29311:67;29274:104;;;;29393:10;29424:1;29410:4;:11;:15;29406:1;:19;:82;;29485:3;29406:82;;;29428:54;29453:7;29462:6;29470:4;29475:1;29479;29475:5;29470:11;;;;;;;29428:54;29541:12;;;29551:1;29541:12;;;;;;;;;;-1:-1:-1;;;29503:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;29503:51:0;;;;;;;;;;;;;;;;;;;;;;29393:95;;-1:-1:-1;29503:9:0;;;;;;29513:10;;29525;;29393:95;;29541:12;;29503:51;;;;;;;;29541:12;;29503:51;;;;29541:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29503:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29503:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28501:3:0;;;;;-1:-1:-1;28467:1099:0;;-1:-1:-1;;;;;;;;;;28467:1099:0;35723:129;35807:5;;;35802:16;;;;35794:50;;;;;-1:-1:-1;;;35794:50:0;;;;;;;;;;;;-1:-1:-1;;;35794:50:0;;;;;;;;;;;;;;11391:330;-1:-1:-1;;;;;11552:13:0;;11506:12;11552:13;;;:8;:13;;;;;;;;:24;;;;;;11607:65;;;;;;;11506:12;;11552:13;11624:4;;11607:65;;;;;;;;-1:-1:-1;11699:4:0;11391:330;;;;:::o;38736:472::-;38829:13;38875:1;38863:9;:13;38855:70;;;;-1:-1:-1;;;38855:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38956:1;38944:9;:13;:31;;;;;38974:1;38961:10;:14;38944:31;38936:84;;;;-1:-1:-1;;;38936:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39031:14;39048:34;39077:4;39048:24;:9;39062;39048:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;39031:51;-1:-1:-1;39093:16:0;39112:34;39142:3;39112:25;:10;39127:9;39112:25;:14;:25;:::i;:34::-;39093:53;;39168:32;39198:1;39181:11;39169:9;:23;;;;;;;39168:32;:29;:32;:::i;:::-;39157:43;38736:472;-1:-1:-1;;;;;;38736:472:0:o;37655:321::-;37737:12;37780:1;37770:7;:11;37762:61;;;;-1:-1:-1;;;37762:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37853:1;37842:8;:12;:28;;;;;37869:1;37858:8;:12;37842:28;37834:81;;;;-1:-1:-1;;;37834:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37960:8;37936:21;:7;37948:8;37936:21;:11;:21;:::i;:::-;:32;;;;;;;37655:321;-1:-1:-1;;;;37655:321:0:o;36174:349::-;36249:14;36265;36310:6;-1:-1:-1;;;;;36300:16:0;:6;-1:-1:-1;;;;;36300:16:0;;;36292:66;;;;-1:-1:-1;;;36292:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36397:6;-1:-1:-1;;;;;36388:15:0;:6;-1:-1:-1;;;;;36388:15:0;;:53;;36426:6;36434;36388:53;;;36407:6;36415;36388:53;36369:72;;-1:-1:-1;36369:72:0;-1:-1:-1;;;;;;36460:20:0;;36452:63;;;;;-1:-1:-1;;;36452:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36174:349;;;;;:::o;12665:1390::-;12978:50;;;-1:-1:-1;;;12978:50:0;;-1:-1:-1;;;;;12978:50:0;;;;;;;;;;;;;;;;12883:12;;;;;;12996:7;12978:34;;;;;;:50;;;;;;;;;;;;;;;:34;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;12978:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12978:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12978:50:0;-1:-1:-1;;;;;12978:64:0;;12974:150;;;13059:53;;;-1:-1:-1;;;13059:53:0;;-1:-1:-1;;;;;13059:53:0;;;;;;;;;;;;;;;;13077:7;13059:37;;;;;;:53;;;;;;;;;;;;;;;-1:-1:-1;13059:37:0;:53;;;2:2:-1;;;;27:1;24;17:12;2:2;13059:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13059:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;12974:150:0;13135:13;13150;13167:53;13196:7;13205:6;13213;13167:28;:53::i;:::-;13134:86;;;;13235:8;13247:1;13235:13;:30;;;;-1:-1:-1;13252:13:0;;13235:30;13231:817;;;13304:14;;-1:-1:-1;13320:14:0;;-1:-1:-1;13231:817:0;;;13368:19;13390:58;13413:14;13429:8;13439;13390:22;:58::i;:::-;13368:80;;13485:14;13467;:32;13463:574;;13546:10;13528:14;:28;;13520:79;;;;-1:-1:-1;;;13520:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13640:14;;-1:-1:-1;13656:14:0;-1:-1:-1;13656:14:0;13463:574;;;13712:19;13734:58;13757:14;13773:8;13783;13734:22;:58::i;:::-;13712:80;;13836:14;13818;:32;;13811:40;;;;13896:10;13878:14;:28;;13870:79;;;;-1:-1:-1;;;13870:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13990:14;-1:-1:-1;14006:14:0;;-1:-1:-1;13463:574:0;13231:817;;12665:1390;;;;;;;;;;;:::o;35860:142::-;35912:6;35939;;;:30;;-1:-1:-1;;35954:5:0;;;35968:1;35963;35954:5;35963:1;35949:15;;;;;:20;35939:30;35931:63;;;;;-1:-1:-1;;;35931:63:0;;;;;;;;;;;;-1:-1:-1;;;35931:63:0;;;;;;;;;;;;;;35587:128;35671:5;;;35666:16;;;;35658:49;;;;;-1:-1:-1;;;35658:49:0;;;;;;;;;;;;-1:-1:-1;;;35658:49:0;;;;;;;;;;;;;;37151:391;37244:13;37259;37286:14;37305:26;37316:6;37324;37305:10;:26::i;:::-;37285:46;;;37343:13;37358;37391:32;37399:7;37408:6;37416;37391:7;:32::i;:::-;-1:-1:-1;;;;;37376:60:0;;:62;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37376:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37376:62:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37376:62:0;;;;;;;-1:-1:-1;;;;;37342:96:0;;;;-1:-1:-1;37342:96:0;;-1:-1:-1;;;;;;37472:16:0;;;;;;;:62;;37515:8;37525;37472:62;;;37492:8;37502;37472:62;37449:85;;;;-1:-1:-1;37151:391:0;-1:-1:-1;;;;;;;37151:391:0:o

Swarm Source

ipfs://905315c3e34397eeb556e8809cd2c659879eb67f5d95fc5449982d2112c25332
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.