ETH Price: $2,282.69 (-3.19%)

Token

Stonehenge (HENGE)
 

Overview

Max Total Supply

51,104,414,934 HENGE

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,081,912,754.155158405 HENGE

Value
$0.00
0x55e2b2d12e848263450d9ac0c761ae1060a3fe4f
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:
STONEHENGE

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-01
*/

// SPDX-License-Identifier: Unlicensed

/*

51°10′44″N 1°49′34″W

https://twitter.com/eth_stonehenge

*/

pragma solidity ^0.8.14;

interface IERC20 {
    
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}




abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


library Address {
    
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                 assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}



abstract contract Ownable is Context {
    address internal _owner;
    address private _previousOwner;
    uint256 public _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    
    function owner() public view virtual returns (address) {
        return _owner;
    }
    
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }


        //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock.");
        require(block.timestamp > _lockTime , "Contract is locked.");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

contract STONEHENGE is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) private _isExcludedFromKnightHolders;
    mapping (address => bool) private isMordred;

    address[] public twelveKnights;
    address[] public knightHolders;

    address[] private _excluded;
    address public _marketingWalletAddress;   
    address public _burnAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    string private _name;
    string private _symbol;
    uint256 private _decimals;

    //Tax Fee Used for Reflections
    //Liquidity Fee Added to LP
    //Marketing Fee used for marketing initially, later used for something else


    // Buy tax 
    uint256 private _buyTaxFee       = 0; 
    uint256 private _buyLiquidityFee = 2;
    uint256 private _buyMarketingFee = 3;

    // Sell tax 
    uint256 private _sellTaxFee       = 0; 
    uint256 private _sellLiquidityFee = 3;
    uint256 private _sellMarketingFee = 10;

    uint256 public _taxFee = _buyTaxFee; 
    uint256 public _liquidityFee = _buyLiquidityFee;
    uint256 public _marketingFee = _buyMarketingFee;

    uint256 private _previousTaxFee = _taxFee;  // used for reflections
    uint256 private _previousMarketingFee = _liquidityFee;
    uint256 private _previousLiquidityFee = _marketingFee;
    
    bool public tradingActive;
    uint256 private openedAtBlock;
    uint256 private openedAtTimestamp = 0;
    bool public firstEpoch;  
    bool public secondEpoch; 
    bool public thirdEpoch;
    uint256 public firstEpochInterval = 0;  // project starts in the first epoch
    uint256 public secondEpochInterval = 7200;  // trigger the second epoch
    uint256 public thirdEpochInterval = 14400; // trigger the third epoch
    uint256 public thirdEpochDuration = 3600; // one hour
    uint256 public lastThirdEpoch = 0;

    bool public twelveKnightsEstablished = false;
    uint[] tempBalances;
    
    
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public numTokensSellToAddToLiquidity;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _name = "Stonehenge";
        _symbol = "HENGE";
        _decimals = 9;
        _tTotal = 51104414934 * 10 ** _decimals;
        _rTotal = (MAX - (MAX % _tTotal));
        numTokensSellToAddToLiquidity = 8000000 * 10 ** _decimals;
        _marketingWalletAddress = 0x16F2B2B32114D2853c08Ca4328Cd3147bCDCD182;
        
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromKnightHolders[_msgSender()] = true;
        _isExcludedFromKnightHolders[address(this)] = true;
        _isExcludedFromKnightHolders[_burnAddress] = true;
        _isExcludedFromKnightHolders[uniswapV2Pair] = true;

        //exclude from rewards 
        _isExcluded[_burnAddress] = true;
        _isExcluded[uniswapV2Pair] = true;
    
        _owner = _msgSender();
        emit Transfer(address(0), _msgSender(), _tTotal);
		
		
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint256) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setSellFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() {
       _sellTaxFee       = tFee; 
       _sellLiquidityFee = lFee;
       _sellMarketingFee = mFee;
       }

    function setBuyFeePercent(uint256 tFee, uint256 lFee, uint256 mFee) external onlyOwner() {
       _buyTaxFee       = tFee; 
       _buyLiquidityFee = lFee;
       _buyMarketingFee = mFee;
       } 
   
    function setMarketingWalletAddress(address _addr) external onlyOwner {
        _marketingWalletAddress = _addr;
    }
    
    function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner {
        numTokensSellToAddToLiquidity = amount * 10 **_decimals;
    }

    function setRouterAddress(address newRouter) external onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouter);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    // to withdraw stucked ETH 
    function withdrawStuckedFunds(uint amount) external onlyOwner{
        // This is the current recommended method to use.
        (bool sent,) = _owner.call{value: amount}("");
        require(sent, "Failed to send ETH");    
        }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tMarketing);
        return (tTransferAmount, tFee, tLiquidity, tMarketing);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rMarketing);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate =  _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[_marketingWalletAddress] = _rOwned[_marketingWalletAddress].add(rMarketing);
        if(_isExcluded[_marketingWalletAddress])
            _tOwned[_marketingWalletAddress] = _tOwned[_marketingWalletAddress].add(tMarketing);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateMarketingFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_marketingFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private { 
        _previousTaxFee = _taxFee;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _marketingFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function secondEpochOccurs() public view returns (uint256) {
        if (openedAtTimestamp != 0) {
            return openedAtTimestamp + secondEpochInterval;
        }
        return 0;
    }

    function thirdEpochOccurs() public view returns (uint256) {
        if (openedAtTimestamp != 0) {
            return openedAtTimestamp + thirdEpochInterval;
        }
        return 0;
    }

    function currentTimestamp() public view returns (uint256) {
        return block.timestamp;           
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

     function mordred(address[] memory wallets_, bool status) public onlyOwner {
       require(block.number < openedAtBlock + 150, "you are damned");
        for (uint256 i = 0; i < wallets_.length; i++) {
            isMordred[wallets_[i]] = status;
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }


    function incarnate() external onlyOwner {
        tradingActive = true;
        openedAtBlock = block.number;
        openedAtTimestamp = block.timestamp;
    }

    function knightHolderExist(address wallet) public view returns (bool){
        for (uint i; i< knightHolders.length;i++){
            if (knightHolders[i]==wallet)
            return true;
        }
        return false;
     }

    function excludeFromKnightHolders(address account, bool status) external onlyOwner {
        _isExcludedFromKnightHolders[account] = status;
    }

     function updateEpochDuration(uint256 _seconds) external onlyOwner {
        thirdEpochDuration = _seconds;
    }

    function timeForNextTwelveKnights() internal {
        if (block.timestamp >= lastThirdEpoch + thirdEpochDuration) {
            establishTwelveKnights();
        }
    }

     function airdropToWallets(address[] memory wallets, uint256[] memory amountsInTokens) external onlyOwner {
        require(wallets.length == amountsInTokens.length, "arrays must be the same length");
        require(wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input.
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = amountsInTokens[i]*1e9;
            addKnightHolder(wallet);
            _transfer(msg.sender, wallet, amount);
        }
    }

     function addKnightHolder(address wallet) private {
         if (!knightHolderExist(wallet)) {
             knightHolders.push(wallet);
         }
     }

    function sorter() internal  {
        uint length = knightHolders.length;
        for (uint i = 1; i < length; i++) {
            uint key = tempBalances[i];
            int j = int(i) - 1;
            while ((int(j) >= 0) && (tempBalances[uint(j)] < key)) {
                tempBalances[uint(j + 1)] = tempBalances[uint(j)];
                j--;
            }
            tempBalances[uint(j + 1)] = key;
        }
    }

    function manualEstablishTwelveKnights() external onlyOwner {
      establishTwelveKnights();
    }


    function establishTwelveKnights() internal {
        for (uint i = 0; i < knightHolders.length; i++) {
            tempBalances.push(_rOwned[knightHolders[i]]);
        }
        sorter();
        // loop on the top holders, identifying the top 12
        uint z = 0;
        while (twelveKnights.length < 12) {
            for (uint x = 0; x < knightHolders.length; x++) {
                if (_rOwned[knightHolders[x]] == tempBalances[z] && (!_isExcludedFromKnightHolders[knightHolders[x]])) {
                    twelveKnights.push(knightHolders[x]);
                }
            }
            z++;
        }
        twelveKnightsEstablished = true;
        lastThirdEpoch = block.timestamp;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isMordred[from] && !isMordred[to], "your soul is eternally lost");
        
        uint256 contractTokenBalance = balanceOf(address(this));

        if (!tradingActive) {
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to] ,"Trading not Active");
        }
        
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
         else {

            if (from == uniswapV2Pair) { // Buy
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
                addKnightHolder(to);
                }
                else if (to == uniswapV2Pair && thirdEpoch){ // Sell during third epoch
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
                }
                else if (to == uniswapV2Pair && secondEpoch){ // Sell during second epoch
                _taxFee = 8;
                _liquidityFee = _sellLiquidityFee; //
                _marketingFee = 2;
                }
                else if (to == uniswapV2Pair){ // Sell during first epoch
                _taxFee = 0;
                _liquidityFee = _sellLiquidityFee; 
                _marketingFee = 10;
                }


                 else { // Transfer
                _taxFee = 0;
                _liquidityFee = 0;
                _marketingFee = 0;
                }
        }
        if (tradingActive && (!_isExcludedFromFee[from] || !_isExcludedFromFee[to])) {
            _checkEpochs();
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function _checkEpochs() internal {
        if (block.timestamp > openedAtTimestamp && !firstEpoch) {
            firstEpoch = true;
        }
        if (block.timestamp > openedAtTimestamp + secondEpochInterval && !secondEpoch) {
            secondEpoch = true;
        }
        if (block.timestamp > openedAtTimestamp + thirdEpochInterval && !thirdEpoch) {
            thirdEpoch = true;
            establishTwelveKnights();
        }
        if (twelveKnightsEstablished) {
            timeForNextTwelveKnights();
        }
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tFee = _marketingFee.add(_liquidityFee);
        uint256 marketingTokens = contractTokenBalance.div(tFee).mul(_marketingFee);
        uint256 liquidityTokens = contractTokenBalance.sub(marketingTokens);
        tFee = _marketingFee.add(_liquidityFee.div(2));
        uint256 half      = liquidityTokens.div(2);
        uint256 otherHalf = liquidityTokens.sub(half);
        uint256 initialBalance = address(this).balance;
        uint256 swapTokens = marketingTokens.add(half);
        swapTokensForEth(swapTokens);
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 marketingFunds = newBalance.div(tFee).mul(_marketingFee);

        if (!twelveKnightsEstablished) {
            (bool success, ) = payable(_marketingWalletAddress).call{
                value: marketingFunds,
                gas: 30000}("");
            require(success, " _marketingWalletAddress transfer is reverted");
        }
        else {
            uint256 ethForKnightHolder = marketingFunds.div(twelveKnights.length);
            for (uint k = 0; k < twelveKnights.length; k++) {
                (bool success, ) = payable(twelveKnights[k]).call{
                value: ethForKnightHolder,
                gas: 30000}("");
                require(success, "knightholder transfer is reverted");
            }
        }


        uint256 halfFunds = newBalance.div(tFee).mul(_liquidityFee.div(2));
        addLiquidity(otherHalf, halfFunds);        
        emit SwapAndLiquify(half, halfFunds, otherHalf);

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _takeMarketing(tMarketing);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }


}

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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromKnightHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incarnate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"knightHolderExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"knightHolders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastThirdEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualEstablishTwelveKnights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"mordred","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFee","type":"uint256"},{"internalType":"uint256","name":"lFee","type":"uint256"},{"internalType":"uint256","name":"mFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thirdEpochOccurs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"twelveKnights","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"twelveKnightsEstablished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"updateEpochDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e80546001600160a01b03191661dead17905560006015819055600260168190556003601781905560188390556019819055600a601a55601b839055601c829055601d819055601e839055601f9190915560205560238190556025819055611c20602655613840602755610e10602855602955602a805460ff19169055602d805460ff60a81b1916600160a81b179055348015620000a257600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360408051808201909152600a8082526953746f6e6568656e676560b01b6020909201918252620001159160129162000511565b506040805180820190915260058082526448454e474560d81b6020909201918252620001449160139162000511565b50600960148190556200015990600a620006cc565b6200016a90640be60f7cd6620006e1565b600f8190556200017d9060001962000703565b6200018b9060001962000726565b6010556014546200019e90600a620006cc565b620001ad90627a1200620006e1565b602e55600d80546001600160a01b0319167316f2b2b32114d2853c08ca4328cd3147bcdcd18217905560105460036000620001e53390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000287919062000740565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fb919062000740565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f919062000740565b602d80546001600160a01b03199081166001600160a01b0393841617909155602c8054909116918316919091179055600160066000620003ac3390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600890620003fa3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260088452828120805486166001908117909155600e8054841683528483208054881683179055602d80548516845285842080548916841790559054841683526007909552838220805487168217905593549091168152208054909216179055620004923390565b600080546001600160a01b0319166001600160a01b0392909216919091179055620004ba3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f546040516200050291815260200190565b60405180910390a350620007a7565b8280546200051f906200076b565b90600052602060002090601f0160209004810192826200054357600085556200058e565b82601f106200055e57805160ff19168380011785556200058e565b828001600101855582156200058e579182015b828111156200058e57825182559160200191906001019062000571565b506200059c929150620005a0565b5090565b5b808211156200059c5760008155600101620005a1565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200060e578160001904821115620005f257620005f2620005b7565b808516156200060057918102915b93841c9390800290620005d2565b509250929050565b6000826200062757506001620006c6565b816200063657506000620006c6565b81600181146200064f57600281146200065a576200067a565b6001915050620006c6565b60ff8411156200066e576200066e620005b7565b50506001821b620006c6565b5060208310610133831016604e8410600b84101617156200069f575081810a620006c6565b620006ab8383620005cd565b8060001904821115620006c257620006c2620005b7565b0290505b92915050565b6000620006da838362000616565b9392505050565b6000816000190483118215151615620006fe57620006fe620005b7565b500290565b6000826200072157634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200073b576200073b620005b7565b500390565b6000602082840312156200075357600080fd5b81516001600160a01b0381168114620006da57600080fd5b600181811c908216806200078057607f821691505b602082108103620007a157634e487b7160e01b600052602260045260246000fd5b50919050565b613e6480620007b76000396000f3fe6080604052600436106103d25760003560e01c806355ebcc0a116101fd578063a9059cbb11610118578063dd467064116100ab578063edbcf6221161007a578063edbcf62214610b18578063f0f165af14610b2d578063f2fde38b14610b4d578063f58539f914610b6d578063f8a6aac514610b8257600080fd5b8063dd46706414610a72578063dd62ed3e14610a92578063e490831914610ad8578063ea2f0b3714610af857600080fd5b8063c49b9a80116100e7578063c49b9a8014610a06578063caea37b714610a26578063d12a768814610a46578063d2b85a1414610a5c57600080fd5b8063a9059cbb1461098c578063bbc0c742146109ac578063bd3900c0146109c6578063be19674b146109e657600080fd5b806388f82020116101905780639e7ab2861161015f5780639e7ab2861461092c5780639ea1ef0814610942578063a457c2d714610957578063a69df4b51461097757600080fd5b806388f82020146108a05780638da5cb5b146108d957806390246ba8146108f757806395d89b411461091757600080fd5b806370a08231116101cc57806370a082311461083b578063715018a61461085b57806379af25a6146108705780637f7ce3751461088657600080fd5b806355ebcc0a146107cf5780636bc87c3a146107e55780636ca56d29146107fb5780637074006b1461081b57600080fd5b80633685d419116102ed578063437823ec116102805780634b30a9011161024f5780634b30a901146107405780634cb80fd51461075657806352390c02146107765780635342acb41461079657600080fd5b8063437823ec146106bf5780634549b039146106df57806349bd5a5e146106ff5780634a74bb021461071f57600080fd5b80633bd5d173116102bc5780633bd5d173146106455780634144d9e414610665578063416827441461068557806341cb87fc1461069f57600080fd5b80633685d419146105da57806339509351146105fa578063399b218b1461061a5780633b124fe71461062f57600080fd5b80631e2ff94f1161036557806326cf23ec1161033457806326cf23ec1461056f5780632a5d2cd0146105855780632d838119146105a5578063313ce567146105c557600080fd5b80631e2ff94f1461050657806322976e0d146105195780632307b4411461052f57806323b872dd1461054f57600080fd5b80631694505e116103a15780631694505e1461047a578063180d9d43146104b257806318160ddd146104d15780631d113a64146104e657600080fd5b806306fdde03146103de578063095ea7b31461040957806313114a9d14610439578063151cd1c21461045857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610ba2565b6040516104009190613665565b60405180910390f35b34801561041557600080fd5b506104296104243660046136cf565b610c34565b6040519015158152602001610400565b34801561044557600080fd5b506011545b604051908152602001610400565b34801561046457600080fd5b506104786104733660046136fb565b610c4b565b005b34801561048657600080fd5b50602c5461049a906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b3480156104be57600080fd5b5060245461042990610100900460ff1681565b3480156104dd57600080fd5b50600f5461044a565b3480156104f257600080fd5b506024546104299062010000900460ff1681565b34801561051257600080fd5b504261044a565b34801561052557600080fd5b5061044a601d5481565b34801561053b57600080fd5b5061047861054a366004613806565b610c8c565b34801561055b57600080fd5b5061042961056a3660046138c1565b610dfc565b34801561057b57600080fd5b5061044a60255481565b34801561059157600080fd5b506104786105a0366004613902565b610e65565b3480156105b157600080fd5b5061044a6105c0366004613902565b610e94565b3480156105d157600080fd5b5060145461044a565b3480156105e657600080fd5b506104786105f536600461391b565b610f18565b34801561060657600080fd5b506104296106153660046136cf565b6110ce565b34801561062657600080fd5b5061044a611104565b34801561063b57600080fd5b5061044a601b5481565b34801561065157600080fd5b50610478610660366004613902565b61112b565b34801561067157600080fd5b50600d5461049a906001600160a01b031681565b34801561069157600080fd5b506024546104299060ff1681565b3480156106ab57600080fd5b506104786106ba36600461391b565b611217565b3480156106cb57600080fd5b506104786106da36600461391b565b6113bc565b3480156106eb57600080fd5b5061044a6106fa36600461394d565b61140a565b34801561070b57600080fd5b50602d5461049a906001600160a01b031681565b34801561072b57600080fd5b50602d5461042990600160a81b900460ff1681565b34801561074c57600080fd5b5061044a60295481565b34801561076257600080fd5b5061047861077136600461391b565b611499565b34801561078257600080fd5b5061047861079136600461391b565b6114e5565b3480156107a257600080fd5b506104296107b136600461391b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107db57600080fd5b5061044a60275481565b3480156107f157600080fd5b5061044a601c5481565b34801561080757600080fd5b50610478610816366004613979565b611638565b34801561082757600080fd5b506104786108363660046139be565b611716565b34801561084757600080fd5b5061044a61085636600461391b565b61176b565b34801561086757600080fd5b506104786117ca565b34801561087c57600080fd5b5061044a60025481565b34801561089257600080fd5b50602a546104299060ff1681565b3480156108ac57600080fd5b506104296108bb36600461391b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108e557600080fd5b506000546001600160a01b031661049a565b34801561090357600080fd5b5061049a610912366004613902565b61182c565b34801561092357600080fd5b506103f3611856565b34801561093857600080fd5b5061044a60285481565b34801561094e57600080fd5b50610478611865565b34801561096357600080fd5b506104296109723660046136cf565b611899565b34801561098357600080fd5b506104786118e8565b34801561099857600080fd5b506104296109a73660046136cf565b6119e4565b3480156109b857600080fd5b506021546104299060ff1681565b3480156109d257600080fd5b50600e5461049a906001600160a01b031681565b3480156109f257600080fd5b50610478610a013660046136fb565b6119f1565b348015610a1257600080fd5b50610478610a213660046139ea565b611a29565b348015610a3257600080fd5b50610478610a41366004613902565b611aab565b348015610a5257600080fd5b5061044a602e5481565b348015610a6857600080fd5b5061044a60265481565b348015610a7e57600080fd5b50610478610a8d366004613902565b611b6d565b348015610a9e57600080fd5b5061044a610aad366004613a05565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ae457600080fd5b5061049a610af3366004613902565b611bdc565b348015610b0457600080fd5b50610478610b1336600461391b565b611bec565b348015610b2457600080fd5b5061044a611c37565b348015610b3957600080fd5b50610478610b48366004613902565b611c53565b348015610b5957600080fd5b50610478610b6836600461391b565b611c9b565b348015610b7957600080fd5b50610478611d73565b348015610b8e57600080fd5b50610429610b9d36600461391b565b611db4565b606060128054610bb190613a3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdd90613a3e565b8015610c2a5780601f10610bff57610100808354040283529160200191610c2a565b820191906000526020600020905b815481529060010190602001808311610c0d57829003601f168201915b5050505050905090565b6000610c41338484611e1d565b5060015b92915050565b6000546001600160a01b03163314610c7e5760405162461bcd60e51b8152600401610c7590613a78565b60405180910390fd5b601892909255601955601a55565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610c7590613a78565b8051825114610d075760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c75565b60c8825110610d775760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c75565b60005b8251811015610df7576000838281518110610d9757610d97613aad565b602002602001015190506000838381518110610db557610db5613aad565b6020026020010151633b9aca00610dcc9190613ad9565b9050610dd782611f41565b610de2338383611f9d565b50508080610def90613af8565b915050610d7a565b505050565b6000610e09848484611f9d565b610e5b8433610e5685604051806060016040528060288152602001613dc2602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123f9565b611e1d565b5060019392505050565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610c7590613a78565b602855565b6000601054821115610efb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c75565b6000610f05612425565b9050610f118382612448565b9392505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03811660009081526007602052604090205460ff16610faa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c75565b60005b600c548110156110ca57816001600160a01b0316600c8281548110610fd457610fd4613aad565b6000918252602090912001546001600160a01b0316036110b857600c8054610ffe90600190613b11565b8154811061100e5761100e613aad565b600091825260209091200154600c80546001600160a01b03909216918390811061103a5761103a613aad565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c80548061109257611092613b28565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c281613af8565b915050610fad565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c41918590610e569086612454565b6000602354600014611125576026546023546111209190613b3e565b905090565b50600090565b3360008181526007602052604090205460ff16156111a05760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c75565b60006111ab83612460565b5050506001600160a01b0386166000908152600360205260409020549394506111d9939250849150506124bb565b6001600160a01b0383166000908152600360205260409020556010546111ff90826124bb565b60105560115461120f9084612454565b601155505050565b6000546001600160a01b031633146112415760405162461bcd60e51b8152600401610c7590613a78565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190613b56565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190613b56565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190613b56565b602d80546001600160a01b039283166001600160a01b031991821617909155602c805493909216921691909117905550565b6000546001600160a01b031633146113e65760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f5483111561145e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c75565b8161147e57600061146e84612460565b50949650610c4595505050505050565b600061148984612460565b50939650610c4595505050505050565b6000546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c7590613a78565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03811660009081526007602052604090205460ff16156115785760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c75565b6001600160a01b038116600090815260036020526040902054156115d2576001600160a01b0381166000908152600360205260409020546115b890610e94565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146116625760405162461bcd60e51b8152600401610c7590613a78565b602254611670906096613b3e565b43106116af5760405162461bcd60e51b815260206004820152600e60248201526d1e5bdd48185c994819185b5b995960921b6044820152606401610c75565b60005b8251811015610df75781600960008584815181106116d2576116d2613aad565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061170e81613af8565b9150506116b2565b6000546001600160a01b031633146117405760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156117a857506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c4590610e94565b6000546001600160a01b031633146117f45760405162461bcd60e51b8152600401610c7590613a78565b600080546040516001600160a01b0390911690600080516020613dea833981519152908390a3600080546001600160a01b0319169055565b600a818154811061183c57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060138054610bb190613a3e565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610c7590613a78565b6118976124c7565b565b6000610c413384610e5685604051806060016040528060258152602001613e0a602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123f9565b6001546001600160a01b0316331461194e5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610c75565b60025442116119955760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610c75565b600154600080546040516001600160a01b039384169390911691600080516020613dea83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c41338484611f9d565b6000546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610c7590613a78565b601592909255601655601755565b6000546001600160a01b03163314611a535760405162461bcd60e51b8152600401610c7590613a78565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aa090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610c7590613a78565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b50509050806110ca5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610c75565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610c7590613a78565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613dea833981519152908290a350565b600b818154811061183c57600080fd5b6000546001600160a01b03163314611c165760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000602354600014611125576027546023546111209190613b3e565b6000546001600160a01b03163314611c7d5760405162461bcd60e51b8152600401610c7590613a78565b601454611c8b90600a613c57565b611c959082613ad9565b602e5550565b6000546001600160a01b03163314611cc55760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b038116611d2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c75565b600080546040516001600160a01b0380851693921691600080516020613dea83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610c7590613a78565b6021805460ff191660011790554360225542602355565b6000805b600b54811015611e1457826001600160a01b0316600b8281548110611ddf57611ddf613aad565b6000918252602090912001546001600160a01b031603611e025750600192915050565b80611e0c81613af8565b915050611db8565b50600092915050565b6001600160a01b038316611e7f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c75565b6001600160a01b038216611ee05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c75565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611f4a81611db4565b611f9a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b6001600160a01b0383166120015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c75565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c75565b600081116120c55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c75565b6001600160a01b03831660009081526009602052604090205460ff1615801561210757506001600160a01b03821660009081526009602052604090205460ff16155b6121535760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610c75565b600061215e3061176b565b60215490915060ff166121eb576001600160a01b03841660009081526006602052604090205460ff16806121aa57506001600160a01b03831660009081526006602052604090205460ff165b6121eb5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610c75565b602e54811080159081906122095750602d54600160a01b900460ff16155b80156122235750602d546001600160a01b03868116911614155b80156122385750602d54600160a81b900460ff165b1561224b57602e54915061224b8261268f565b6001600160a01b03851660009081526006602052604090205460019060ff168061228d57506001600160a01b03851660009081526006602052604090205460ff165b1561229a5750600061238a565b602d546001600160a01b03908116908716036122d057601554601b55601654601c55601754601d556122cb85611f41565b61238a565b602d546001600160a01b0386811691161480156122f5575060245462010000900460ff165b1561231157601854601b55601954601c55601a54601d5561238a565b602d546001600160a01b0386811691161480156123355750602454610100900460ff165b1561234f576008601b55601954601c556002601d5561238a565b602d546001600160a01b039081169086160361237a576000601b55601954601c55600a601d5561238a565b6000601b819055601c819055601d555b60215460ff1680156123d857506001600160a01b03861660009081526006602052604090205460ff1615806123d857506001600160a01b03851660009081526006602052604090205460ff16155b156123e5576123e56129ca565b6123f186868684612a84565b505050505050565b6000818484111561241d5760405162461bcd60e51b8152600401610c759190613665565b505050900390565b6000806000612432612c24565b90925090506124418282612448565b9250505090565b6000610f118284613c63565b6000610f118284613b3e565b600080600080600080600080600080600061247a8c612da6565b9350935093509350600080600061249b8f878787612496612425565b612dfb565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f118284613b11565b60005b600b5481101561253957602b60036000600b84815481106124ed576124ed613aad565b60009182526020808320909101546001600160a01b031683528281019390935260409091018120548354600181018555938252919020909101558061253181613af8565b9150506124ca565b50612542612e5d565b60005b600a54600c111561267b5760005b600b5481101561266857602b828154811061257057612570613aad565b906000526020600020015460036000600b848154811061259257612592613aad565b60009182526020808320909101546001600160a01b03168352820192909252604001902054148015612600575060086000600b83815481106125d6576125d6613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b1561265657600a600b828154811061261a5761261a613aad565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b8061266081613af8565b915050612553565b508061267381613af8565b915050612545565b50602a805460ff1916600117905542602955565b602d805460ff60a01b1916600160a01b179055601c54601d546000916126b59190612454565b905060006126d8601d546126d2848661244890919063ffffffff16565b90612f67565b905060006126e684836124bb565b905061270a6127016002601c5461244890919063ffffffff16565b601d5490612454565b92506000612719826002612448565b9050600061272783836124bb565b90504760006127368685612454565b905061274181612f73565b600061274d47846124bb565b9050600061276a601d546126d28b8561244890919063ffffffff16565b602a5490915060ff1661283b57600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146127c9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ce565b606091505b50509050806128355760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610c75565b5061293e565b600a5460009061284c908390612448565b905060005b600a5481101561293b576000600a828154811061287057612870613aad565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b50509050806129285760405162461bcd60e51b815260206004820152602160248201527f6b6e69676874686f6c646572207472616e7366657220697320726576657274656044820152601960fa1b6064820152608401610c75565b508061293381613af8565b915050612851565b50505b60006129636129596002601c5461244890919063ffffffff16565b6126d2858d612448565b905061296f86826130c5565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602d805460ff60a01b19169055505050505050505050565b602354421180156129de575060245460ff16155b156129f1576024805460ff191660011790555b602654602354612a019190613b3e565b42118015612a175750602454610100900460ff16155b15612a2c576024805461ff0019166101001790555b602754602354612a3c9190613b3e565b42118015612a53575060245462010000900460ff16155b15612a71576024805462ff0000191662010000179055612a716124c7565b602a5460ff16156118975761189761319a565b80612aae57612aae601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff168015612aef57506001600160a01b03831660009081526007602052604090205460ff16155b15612b0457612aff8484846131b8565b612c02565b6001600160a01b03841660009081526007602052604090205460ff16158015612b4557506001600160a01b03831660009081526007602052604090205460ff165b15612b5557612aff8484846132fe565b6001600160a01b03841660009081526007602052604090205460ff16158015612b9757506001600160a01b03831660009081526007602052604090205460ff16155b15612ba757612aff8484846133bd565b6001600160a01b03841660009081526007602052604090205460ff168015612be757506001600160a01b03831660009081526007602052604090205460ff165b15612bf757612aff848484613417565b612c028484846133bd565b80612c1e57612c1e601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612d76578260036000600c8481548110612c5357612c53613aad565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cbe57508160046000600c8481548110612c9757612c97613aad565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cd457601054600f54945094505050509091565b612d1a60036000600c8481548110612cee57612cee613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124bb565b9250612d6260046000600c8481548110612d3657612d36613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124bb565b915080612d6e81613af8565b915050612c31565b50600f54601054612d8691612448565b821015612d9d57601054600f549350935050509091565b90939092509050565b6000806000806000612db7866134a0565b90506000612dc4876134c2565b90506000612dd1886134de565b90506000612deb82612de585818d896124bb565b906124bb565b9993985091965094509092505050565b6000808080612e0a8986612f67565b90506000612e188987612f67565b90506000612e268988612f67565b90506000612e348989612f67565b90506000612e4882612de5858189896124bb565b949d949c50929a509298505050505050505050565b600b5460015b818110156110ca576000602b8281548110612e8057612e80613aad565b60009182526020822001549150612e98600184613c85565b90505b60008112158015612ec8575081602b8281548110612ebb57612ebb613aad565b9060005260206000200154105b15612f2857602b8181548110612ee057612ee0613aad565b9060005260206000200154602b826001612efa9190613cc4565b81548110612f0a57612f0a613aad565b60009182526020909120015580612f2081613d05565b915050612e9b565b81602b612f36836001613cc4565b81548110612f4657612f46613aad565b60009182526020909120015550819050612f5f81613af8565b915050612e63565b6000610f118284613ad9565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fa857612fa8613aad565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190613b56565b8160018151811061303857613038613aad565b6001600160a01b039283166020918202929092010152602c5461305e9130911684611e1d565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613097908590600090869030904290600401613d22565b600060405180830381600087803b1580156130b157600080fd5b505af11580156123f1573d6000803e3d6000fd5b602c546130dd9030906001600160a01b031684611e1d565b602c546001600160a01b031663f305d7198230856000806131066000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561316e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131939190613d93565b5050505050565b6028546029546131aa9190613b3e565b4210611897576118976124c7565b60008060008060008060006131cc88612460565b965096509650965096509650965061321288600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461324190886124bb565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546132709087612454565b6001600160a01b038a16600090815260036020526040902055613292826134fa565b61329b81613582565b6132a58584613641565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516132ea91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061331288612460565b965096509650965096509650965061335887600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461338e9085612454565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546132709087612454565b60008060008060008060006133d188612460565b965096509650965096509650965061324187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b600080600080600080600061342b88612460565b965096509650965096509650965061347188600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461335890886124bb565b6000610c4560646134bc601b5485612f6790919063ffffffff16565b90612448565b6000610c4560646134bc601c5485612f6790919063ffffffff16565b6000610c4560646134bc601d5485612f6790919063ffffffff16565b6000613504612425565b905060006135128383612f67565b3060009081526003602052604090205490915061352f9082612454565b3060009081526003602090815260408083209390935560079052205460ff1615610df7573060009081526004602052604090205461356d9084612454565b30600090815260046020526040902055505050565b600061358c612425565b9050600061359a8383612f67565b600d546001600160a01b03166000908152600360205260409020549091506135c29082612454565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610df757600d546001600160a01b03166000908152600460205260409020546136219084612454565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461364e90836124bb565b60105560115461365e9082612454565b6011555050565b600060208083528351808285015260005b8181101561369257858101830151858201604001528201613676565b818111156136a4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f9a57600080fd5b600080604083850312156136e257600080fd5b82356136ed816136ba565b946020939093013593505050565b60008060006060848603121561371057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561376657613766613727565b604052919050565b600067ffffffffffffffff82111561378857613788613727565b5060051b60200190565b600082601f8301126137a357600080fd5b813560206137b86137b38361376e565b61373d565b82815260059290921b840181019181810190868411156137d757600080fd5b8286015b848110156137fb5780356137ee816136ba565b83529183019183016137db565b509695505050505050565b6000806040838503121561381957600080fd5b823567ffffffffffffffff8082111561383157600080fd5b61383d86838701613792565b935060209150818501358181111561385457600080fd5b85019050601f8101861361386757600080fd5b80356138756137b38261376e565b81815260059190911b8201830190838101908883111561389457600080fd5b928401925b828410156138b257833582529284019290840190613899565b80955050505050509250929050565b6000806000606084860312156138d657600080fd5b83356138e1816136ba565b925060208401356138f1816136ba565b929592945050506040919091013590565b60006020828403121561391457600080fd5b5035919050565b60006020828403121561392d57600080fd5b8135610f11816136ba565b8035801515811461394857600080fd5b919050565b6000806040838503121561396057600080fd5b8235915061397060208401613938565b90509250929050565b6000806040838503121561398c57600080fd5b823567ffffffffffffffff8111156139a357600080fd5b6139af85828601613792565b92505061397060208401613938565b600080604083850312156139d157600080fd5b82356139dc816136ba565b915061397060208401613938565b6000602082840312156139fc57600080fd5b610f1182613938565b60008060408385031215613a1857600080fd5b8235613a23816136ba565b91506020830135613a33816136ba565b809150509250929050565b600181811c90821680613a5257607f821691505b602082108103613a7257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613af357613af3613ac3565b500290565b600060018201613b0a57613b0a613ac3565b5060010190565b600082821015613b2357613b23613ac3565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115613b5157613b51613ac3565b500190565b600060208284031215613b6857600080fd5b8151610f11816136ba565b600181815b80851115613bae578160001904821115613b9457613b94613ac3565b80851615613ba157918102915b93841c9390800290613b78565b509250929050565b600082613bc557506001610c45565b81613bd257506000610c45565b8160018114613be85760028114613bf257613c0e565b6001915050610c45565b60ff841115613c0357613c03613ac3565b50506001821b610c45565b5060208310610133831016604e8410600b8410161715613c31575081810a610c45565b613c3b8383613b73565b8060001904821115613c4f57613c4f613ac3565b029392505050565b6000610f118383613bb6565b600082613c8057634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615613ca357613ca3613ac3565b6001600160ff1b0384018313811615613cbe57613cbe613ac3565b50500390565b600080821280156001600160ff1b0384900385131615613ce657613ce6613ac3565b600160ff1b8390038412811615613cff57613cff613ac3565b50500190565b6000600160ff1b8201613d1a57613d1a613ac3565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d725784516001600160a01b031683529383019391830191600101613d4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613da857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ad1fa987694d1cf48ba4649de33053e776b83eba12aeab642ae2c69ebd9838364736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c806355ebcc0a116101fd578063a9059cbb11610118578063dd467064116100ab578063edbcf6221161007a578063edbcf62214610b18578063f0f165af14610b2d578063f2fde38b14610b4d578063f58539f914610b6d578063f8a6aac514610b8257600080fd5b8063dd46706414610a72578063dd62ed3e14610a92578063e490831914610ad8578063ea2f0b3714610af857600080fd5b8063c49b9a80116100e7578063c49b9a8014610a06578063caea37b714610a26578063d12a768814610a46578063d2b85a1414610a5c57600080fd5b8063a9059cbb1461098c578063bbc0c742146109ac578063bd3900c0146109c6578063be19674b146109e657600080fd5b806388f82020116101905780639e7ab2861161015f5780639e7ab2861461092c5780639ea1ef0814610942578063a457c2d714610957578063a69df4b51461097757600080fd5b806388f82020146108a05780638da5cb5b146108d957806390246ba8146108f757806395d89b411461091757600080fd5b806370a08231116101cc57806370a082311461083b578063715018a61461085b57806379af25a6146108705780637f7ce3751461088657600080fd5b806355ebcc0a146107cf5780636bc87c3a146107e55780636ca56d29146107fb5780637074006b1461081b57600080fd5b80633685d419116102ed578063437823ec116102805780634b30a9011161024f5780634b30a901146107405780634cb80fd51461075657806352390c02146107765780635342acb41461079657600080fd5b8063437823ec146106bf5780634549b039146106df57806349bd5a5e146106ff5780634a74bb021461071f57600080fd5b80633bd5d173116102bc5780633bd5d173146106455780634144d9e414610665578063416827441461068557806341cb87fc1461069f57600080fd5b80633685d419146105da57806339509351146105fa578063399b218b1461061a5780633b124fe71461062f57600080fd5b80631e2ff94f1161036557806326cf23ec1161033457806326cf23ec1461056f5780632a5d2cd0146105855780632d838119146105a5578063313ce567146105c557600080fd5b80631e2ff94f1461050657806322976e0d146105195780632307b4411461052f57806323b872dd1461054f57600080fd5b80631694505e116103a15780631694505e1461047a578063180d9d43146104b257806318160ddd146104d15780631d113a64146104e657600080fd5b806306fdde03146103de578063095ea7b31461040957806313114a9d14610439578063151cd1c21461045857600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610ba2565b6040516104009190613665565b60405180910390f35b34801561041557600080fd5b506104296104243660046136cf565b610c34565b6040519015158152602001610400565b34801561044557600080fd5b506011545b604051908152602001610400565b34801561046457600080fd5b506104786104733660046136fb565b610c4b565b005b34801561048657600080fd5b50602c5461049a906001600160a01b031681565b6040516001600160a01b039091168152602001610400565b3480156104be57600080fd5b5060245461042990610100900460ff1681565b3480156104dd57600080fd5b50600f5461044a565b3480156104f257600080fd5b506024546104299062010000900460ff1681565b34801561051257600080fd5b504261044a565b34801561052557600080fd5b5061044a601d5481565b34801561053b57600080fd5b5061047861054a366004613806565b610c8c565b34801561055b57600080fd5b5061042961056a3660046138c1565b610dfc565b34801561057b57600080fd5b5061044a60255481565b34801561059157600080fd5b506104786105a0366004613902565b610e65565b3480156105b157600080fd5b5061044a6105c0366004613902565b610e94565b3480156105d157600080fd5b5060145461044a565b3480156105e657600080fd5b506104786105f536600461391b565b610f18565b34801561060657600080fd5b506104296106153660046136cf565b6110ce565b34801561062657600080fd5b5061044a611104565b34801561063b57600080fd5b5061044a601b5481565b34801561065157600080fd5b50610478610660366004613902565b61112b565b34801561067157600080fd5b50600d5461049a906001600160a01b031681565b34801561069157600080fd5b506024546104299060ff1681565b3480156106ab57600080fd5b506104786106ba36600461391b565b611217565b3480156106cb57600080fd5b506104786106da36600461391b565b6113bc565b3480156106eb57600080fd5b5061044a6106fa36600461394d565b61140a565b34801561070b57600080fd5b50602d5461049a906001600160a01b031681565b34801561072b57600080fd5b50602d5461042990600160a81b900460ff1681565b34801561074c57600080fd5b5061044a60295481565b34801561076257600080fd5b5061047861077136600461391b565b611499565b34801561078257600080fd5b5061047861079136600461391b565b6114e5565b3480156107a257600080fd5b506104296107b136600461391b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107db57600080fd5b5061044a60275481565b3480156107f157600080fd5b5061044a601c5481565b34801561080757600080fd5b50610478610816366004613979565b611638565b34801561082757600080fd5b506104786108363660046139be565b611716565b34801561084757600080fd5b5061044a61085636600461391b565b61176b565b34801561086757600080fd5b506104786117ca565b34801561087c57600080fd5b5061044a60025481565b34801561089257600080fd5b50602a546104299060ff1681565b3480156108ac57600080fd5b506104296108bb36600461391b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108e557600080fd5b506000546001600160a01b031661049a565b34801561090357600080fd5b5061049a610912366004613902565b61182c565b34801561092357600080fd5b506103f3611856565b34801561093857600080fd5b5061044a60285481565b34801561094e57600080fd5b50610478611865565b34801561096357600080fd5b506104296109723660046136cf565b611899565b34801561098357600080fd5b506104786118e8565b34801561099857600080fd5b506104296109a73660046136cf565b6119e4565b3480156109b857600080fd5b506021546104299060ff1681565b3480156109d257600080fd5b50600e5461049a906001600160a01b031681565b3480156109f257600080fd5b50610478610a013660046136fb565b6119f1565b348015610a1257600080fd5b50610478610a213660046139ea565b611a29565b348015610a3257600080fd5b50610478610a41366004613902565b611aab565b348015610a5257600080fd5b5061044a602e5481565b348015610a6857600080fd5b5061044a60265481565b348015610a7e57600080fd5b50610478610a8d366004613902565b611b6d565b348015610a9e57600080fd5b5061044a610aad366004613a05565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610ae457600080fd5b5061049a610af3366004613902565b611bdc565b348015610b0457600080fd5b50610478610b1336600461391b565b611bec565b348015610b2457600080fd5b5061044a611c37565b348015610b3957600080fd5b50610478610b48366004613902565b611c53565b348015610b5957600080fd5b50610478610b6836600461391b565b611c9b565b348015610b7957600080fd5b50610478611d73565b348015610b8e57600080fd5b50610429610b9d36600461391b565b611db4565b606060128054610bb190613a3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bdd90613a3e565b8015610c2a5780601f10610bff57610100808354040283529160200191610c2a565b820191906000526020600020905b815481529060010190602001808311610c0d57829003601f168201915b5050505050905090565b6000610c41338484611e1d565b5060015b92915050565b6000546001600160a01b03163314610c7e5760405162461bcd60e51b8152600401610c7590613a78565b60405180910390fd5b601892909255601955601a55565b6000546001600160a01b03163314610cb65760405162461bcd60e51b8152600401610c7590613a78565b8051825114610d075760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610c75565b60c8825110610d775760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c75565b60005b8251811015610df7576000838281518110610d9757610d97613aad565b602002602001015190506000838381518110610db557610db5613aad565b6020026020010151633b9aca00610dcc9190613ad9565b9050610dd782611f41565b610de2338383611f9d565b50508080610def90613af8565b915050610d7a565b505050565b6000610e09848484611f9d565b610e5b8433610e5685604051806060016040528060288152602001613dc2602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123f9565b611e1d565b5060019392505050565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b8152600401610c7590613a78565b602855565b6000601054821115610efb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c75565b6000610f05612425565b9050610f118382612448565b9392505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03811660009081526007602052604090205460ff16610faa5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c75565b60005b600c548110156110ca57816001600160a01b0316600c8281548110610fd457610fd4613aad565b6000918252602090912001546001600160a01b0316036110b857600c8054610ffe90600190613b11565b8154811061100e5761100e613aad565b600091825260209091200154600c80546001600160a01b03909216918390811061103a5761103a613aad565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600c80548061109257611092613b28565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110c281613af8565b915050610fad565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c41918590610e569086612454565b6000602354600014611125576026546023546111209190613b3e565b905090565b50600090565b3360008181526007602052604090205460ff16156111a05760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c75565b60006111ab83612460565b5050506001600160a01b0386166000908152600360205260409020549394506111d9939250849150506124bb565b6001600160a01b0383166000908152600360205260409020556010546111ff90826124bb565b60105560115461120f9084612454565b601155505050565b6000546001600160a01b031633146112415760405162461bcd60e51b8152600401610c7590613a78565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190613b56565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190613b56565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138a9190613b56565b602d80546001600160a01b039283166001600160a01b031991821617909155602c805493909216921691909117905550565b6000546001600160a01b031633146113e65760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600f5483111561145e5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c75565b8161147e57600061146e84612460565b50949650610c4595505050505050565b600061148984612460565b50939650610c4595505050505050565b6000546001600160a01b031633146114c35760405162461bcd60e51b8152600401610c7590613a78565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03811660009081526007602052604090205460ff16156115785760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c75565b6001600160a01b038116600090815260036020526040902054156115d2576001600160a01b0381166000908152600360205260409020546115b890610e94565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6000546001600160a01b031633146116625760405162461bcd60e51b8152600401610c7590613a78565b602254611670906096613b3e565b43106116af5760405162461bcd60e51b815260206004820152600e60248201526d1e5bdd48185c994819185b5b995960921b6044820152606401610c75565b60005b8251811015610df75781600960008584815181106116d2576116d2613aad565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061170e81613af8565b9150506116b2565b6000546001600160a01b031633146117405760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526007602052604081205460ff16156117a857506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c4590610e94565b6000546001600160a01b031633146117f45760405162461bcd60e51b8152600401610c7590613a78565b600080546040516001600160a01b0390911690600080516020613dea833981519152908390a3600080546001600160a01b0319169055565b600a818154811061183c57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060138054610bb190613a3e565b6000546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610c7590613a78565b6118976124c7565b565b6000610c413384610e5685604051806060016040528060258152602001613e0a602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123f9565b6001546001600160a01b0316331461194e5760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201526337b1b59760e11b6064820152608401610c75565b60025442116119955760405162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903637b1b5b2b21760691b6044820152606401610c75565b600154600080546040516001600160a01b039384169390911691600080516020613dea83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c41338484611f9d565b6000546001600160a01b03163314611a1b5760405162461bcd60e51b8152600401610c7590613a78565b601592909255601655601755565b6000546001600160a01b03163314611a535760405162461bcd60e51b8152600401610c7590613a78565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611aa090831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611ad55760405162461bcd60e51b8152600401610c7590613a78565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611b22576040519150601f19603f3d011682016040523d82523d6000602084013e611b27565b606091505b50509050806110ca5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610c75565b6000546001600160a01b03163314611b975760405162461bcd60e51b8152600401610c7590613a78565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516815560028290556040518190600080516020613dea833981519152908290a350565b600b818154811061183c57600080fd5b6000546001600160a01b03163314611c165760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000602354600014611125576027546023546111209190613b3e565b6000546001600160a01b03163314611c7d5760405162461bcd60e51b8152600401610c7590613a78565b601454611c8b90600a613c57565b611c959082613ad9565b602e5550565b6000546001600160a01b03163314611cc55760405162461bcd60e51b8152600401610c7590613a78565b6001600160a01b038116611d2a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c75565b600080546040516001600160a01b0380851693921691600080516020613dea83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d9d5760405162461bcd60e51b8152600401610c7590613a78565b6021805460ff191660011790554360225542602355565b6000805b600b54811015611e1457826001600160a01b0316600b8281548110611ddf57611ddf613aad565b6000918252602090912001546001600160a01b031603611e025750600192915050565b80611e0c81613af8565b915050611db8565b50600092915050565b6001600160a01b038316611e7f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c75565b6001600160a01b038216611ee05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c75565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611f4a81611db4565b611f9a57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0383161790555b50565b6001600160a01b0383166120015760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c75565b6001600160a01b0382166120635760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c75565b600081116120c55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c75565b6001600160a01b03831660009081526009602052604090205460ff1615801561210757506001600160a01b03821660009081526009602052604090205460ff16155b6121535760405162461bcd60e51b815260206004820152601b60248201527f796f757220736f756c20697320657465726e616c6c79206c6f737400000000006044820152606401610c75565b600061215e3061176b565b60215490915060ff166121eb576001600160a01b03841660009081526006602052604090205460ff16806121aa57506001600160a01b03831660009081526006602052604090205460ff165b6121eb5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742041637469766560701b6044820152606401610c75565b602e54811080159081906122095750602d54600160a01b900460ff16155b80156122235750602d546001600160a01b03868116911614155b80156122385750602d54600160a81b900460ff165b1561224b57602e54915061224b8261268f565b6001600160a01b03851660009081526006602052604090205460019060ff168061228d57506001600160a01b03851660009081526006602052604090205460ff165b1561229a5750600061238a565b602d546001600160a01b03908116908716036122d057601554601b55601654601c55601754601d556122cb85611f41565b61238a565b602d546001600160a01b0386811691161480156122f5575060245462010000900460ff165b1561231157601854601b55601954601c55601a54601d5561238a565b602d546001600160a01b0386811691161480156123355750602454610100900460ff165b1561234f576008601b55601954601c556002601d5561238a565b602d546001600160a01b039081169086160361237a576000601b55601954601c55600a601d5561238a565b6000601b819055601c819055601d555b60215460ff1680156123d857506001600160a01b03861660009081526006602052604090205460ff1615806123d857506001600160a01b03851660009081526006602052604090205460ff16155b156123e5576123e56129ca565b6123f186868684612a84565b505050505050565b6000818484111561241d5760405162461bcd60e51b8152600401610c759190613665565b505050900390565b6000806000612432612c24565b90925090506124418282612448565b9250505090565b6000610f118284613c63565b6000610f118284613b3e565b600080600080600080600080600080600061247a8c612da6565b9350935093509350600080600061249b8f878787612496612425565b612dfb565b919f509d509b509599509397509195509350505050919395979092949650565b6000610f118284613b11565b60005b600b5481101561253957602b60036000600b84815481106124ed576124ed613aad565b60009182526020808320909101546001600160a01b031683528281019390935260409091018120548354600181018555938252919020909101558061253181613af8565b9150506124ca565b50612542612e5d565b60005b600a54600c111561267b5760005b600b5481101561266857602b828154811061257057612570613aad565b906000526020600020015460036000600b848154811061259257612592613aad565b60009182526020808320909101546001600160a01b03168352820192909252604001902054148015612600575060086000600b83815481106125d6576125d6613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b1561265657600a600b828154811061261a5761261a613aad565b60009182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b8061266081613af8565b915050612553565b508061267381613af8565b915050612545565b50602a805460ff1916600117905542602955565b602d805460ff60a01b1916600160a01b179055601c54601d546000916126b59190612454565b905060006126d8601d546126d2848661244890919063ffffffff16565b90612f67565b905060006126e684836124bb565b905061270a6127016002601c5461244890919063ffffffff16565b601d5490612454565b92506000612719826002612448565b9050600061272783836124bb565b90504760006127368685612454565b905061274181612f73565b600061274d47846124bb565b9050600061276a601d546126d28b8561244890919063ffffffff16565b602a5490915060ff1661283b57600d546040516000916001600160a01b03169061753090849084818181858888f193505050503d80600081146127c9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ce565b606091505b50509050806128355760405162461bcd60e51b815260206004820152602d60248201527f205f6d61726b6574696e6757616c6c657441646472657373207472616e73666560448201526c1c881a5cc81c995d995c9d1959609a1b6064820152608401610c75565b5061293e565b600a5460009061284c908390612448565b905060005b600a5481101561293b576000600a828154811061287057612870613aad565b60009182526020822001546040516001600160a01b0390911691617530918691818181858888f193505050503d80600081146128c8576040519150601f19603f3d011682016040523d82523d6000602084013e6128cd565b606091505b50509050806129285760405162461bcd60e51b815260206004820152602160248201527f6b6e69676874686f6c646572207472616e7366657220697320726576657274656044820152601960fa1b6064820152608401610c75565b508061293381613af8565b915050612851565b50505b60006129636129596002601c5461244890919063ffffffff16565b6126d2858d612448565b905061296f86826130c5565b60408051888152602081018390529081018790527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602d805460ff60a01b19169055505050505050505050565b602354421180156129de575060245460ff16155b156129f1576024805460ff191660011790555b602654602354612a019190613b3e565b42118015612a175750602454610100900460ff16155b15612a2c576024805461ff0019166101001790555b602754602354612a3c9190613b3e565b42118015612a53575060245462010000900460ff16155b15612a71576024805462ff0000191662010000179055612a716124c7565b602a5460ff16156118975761189761319a565b80612aae57612aae601b8054601e55601d8054601f55601c80546020556000928390559082905555565b6001600160a01b03841660009081526007602052604090205460ff168015612aef57506001600160a01b03831660009081526007602052604090205460ff16155b15612b0457612aff8484846131b8565b612c02565b6001600160a01b03841660009081526007602052604090205460ff16158015612b4557506001600160a01b03831660009081526007602052604090205460ff165b15612b5557612aff8484846132fe565b6001600160a01b03841660009081526007602052604090205460ff16158015612b9757506001600160a01b03831660009081526007602052604090205460ff16155b15612ba757612aff8484846133bd565b6001600160a01b03841660009081526007602052604090205460ff168015612be757506001600160a01b03831660009081526007602052604090205460ff165b15612bf757612aff848484613417565b612c028484846133bd565b80612c1e57612c1e601e54601b55601f54601d55602054601c55565b50505050565b601054600f546000918291825b600c54811015612d76578260036000600c8481548110612c5357612c53613aad565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612cbe57508160046000600c8481548110612c9757612c97613aad565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612cd457601054600f54945094505050509091565b612d1a60036000600c8481548110612cee57612cee613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124bb565b9250612d6260046000600c8481548110612d3657612d36613aad565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124bb565b915080612d6e81613af8565b915050612c31565b50600f54601054612d8691612448565b821015612d9d57601054600f549350935050509091565b90939092509050565b6000806000806000612db7866134a0565b90506000612dc4876134c2565b90506000612dd1886134de565b90506000612deb82612de585818d896124bb565b906124bb565b9993985091965094509092505050565b6000808080612e0a8986612f67565b90506000612e188987612f67565b90506000612e268988612f67565b90506000612e348989612f67565b90506000612e4882612de5858189896124bb565b949d949c50929a509298505050505050505050565b600b5460015b818110156110ca576000602b8281548110612e8057612e80613aad565b60009182526020822001549150612e98600184613c85565b90505b60008112158015612ec8575081602b8281548110612ebb57612ebb613aad565b9060005260206000200154105b15612f2857602b8181548110612ee057612ee0613aad565b9060005260206000200154602b826001612efa9190613cc4565b81548110612f0a57612f0a613aad565b60009182526020909120015580612f2081613d05565b915050612e9b565b81602b612f36836001613cc4565b81548110612f4657612f46613aad565b60009182526020909120015550819050612f5f81613af8565b915050612e63565b6000610f118284613ad9565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fa857612fa8613aad565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130259190613b56565b8160018151811061303857613038613aad565b6001600160a01b039283166020918202929092010152602c5461305e9130911684611e1d565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613097908590600090869030904290600401613d22565b600060405180830381600087803b1580156130b157600080fd5b505af11580156123f1573d6000803e3d6000fd5b602c546130dd9030906001600160a01b031684611e1d565b602c546001600160a01b031663f305d7198230856000806131066000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561316e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131939190613d93565b5050505050565b6028546029546131aa9190613b3e565b4210611897576118976124c7565b60008060008060008060006131cc88612460565b965096509650965096509650965061321288600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461324190886124bb565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546132709087612454565b6001600160a01b038a16600090815260036020526040902055613292826134fa565b61329b81613582565b6132a58584613641565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516132ea91815260200190565b60405180910390a350505050505050505050565b600080600080600080600061331288612460565b965096509650965096509650965061335887600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c1681526004909152205461338e9085612454565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546132709087612454565b60008060008060008060006133d188612460565b965096509650965096509650965061324187600360008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b600080600080600080600061342b88612460565b965096509650965096509650965061347188600460008d6001600160a01b03166001600160a01b03168152602001908152602001600020546124bb90919063ffffffff16565b6001600160a01b038b1660009081526004602090815260408083209390935560039052205461335890886124bb565b6000610c4560646134bc601b5485612f6790919063ffffffff16565b90612448565b6000610c4560646134bc601c5485612f6790919063ffffffff16565b6000610c4560646134bc601d5485612f6790919063ffffffff16565b6000613504612425565b905060006135128383612f67565b3060009081526003602052604090205490915061352f9082612454565b3060009081526003602090815260408083209390935560079052205460ff1615610df7573060009081526004602052604090205461356d9084612454565b30600090815260046020526040902055505050565b600061358c612425565b9050600061359a8383612f67565b600d546001600160a01b03166000908152600360205260409020549091506135c29082612454565b600d80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615610df757600d546001600160a01b03166000908152600460205260409020546136219084612454565b600d546001600160a01b0316600090815260046020526040902055505050565b60105461364e90836124bb565b60105560115461365e9082612454565b6011555050565b600060208083528351808285015260005b8181101561369257858101830151858201604001528201613676565b818111156136a4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611f9a57600080fd5b600080604083850312156136e257600080fd5b82356136ed816136ba565b946020939093013593505050565b60008060006060848603121561371057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561376657613766613727565b604052919050565b600067ffffffffffffffff82111561378857613788613727565b5060051b60200190565b600082601f8301126137a357600080fd5b813560206137b86137b38361376e565b61373d565b82815260059290921b840181019181810190868411156137d757600080fd5b8286015b848110156137fb5780356137ee816136ba565b83529183019183016137db565b509695505050505050565b6000806040838503121561381957600080fd5b823567ffffffffffffffff8082111561383157600080fd5b61383d86838701613792565b935060209150818501358181111561385457600080fd5b85019050601f8101861361386757600080fd5b80356138756137b38261376e565b81815260059190911b8201830190838101908883111561389457600080fd5b928401925b828410156138b257833582529284019290840190613899565b80955050505050509250929050565b6000806000606084860312156138d657600080fd5b83356138e1816136ba565b925060208401356138f1816136ba565b929592945050506040919091013590565b60006020828403121561391457600080fd5b5035919050565b60006020828403121561392d57600080fd5b8135610f11816136ba565b8035801515811461394857600080fd5b919050565b6000806040838503121561396057600080fd5b8235915061397060208401613938565b90509250929050565b6000806040838503121561398c57600080fd5b823567ffffffffffffffff8111156139a357600080fd5b6139af85828601613792565b92505061397060208401613938565b600080604083850312156139d157600080fd5b82356139dc816136ba565b915061397060208401613938565b6000602082840312156139fc57600080fd5b610f1182613938565b60008060408385031215613a1857600080fd5b8235613a23816136ba565b91506020830135613a33816136ba565b809150509250929050565b600181811c90821680613a5257607f821691505b602082108103613a7257634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613af357613af3613ac3565b500290565b600060018201613b0a57613b0a613ac3565b5060010190565b600082821015613b2357613b23613ac3565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115613b5157613b51613ac3565b500190565b600060208284031215613b6857600080fd5b8151610f11816136ba565b600181815b80851115613bae578160001904821115613b9457613b94613ac3565b80851615613ba157918102915b93841c9390800290613b78565b509250929050565b600082613bc557506001610c45565b81613bd257506000610c45565b8160018114613be85760028114613bf257613c0e565b6001915050610c45565b60ff841115613c0357613c03613ac3565b50506001821b610c45565b5060208310610133831016604e8410600b8410161715613c31575081810a610c45565b613c3b8383613b73565b8060001904821115613c4f57613c4f613ac3565b029392505050565b6000610f118383613bb6565b600082613c8057634e487b7160e01b600052601260045260246000fd5b500490565b60008083128015600160ff1b850184121615613ca357613ca3613ac3565b6001600160ff1b0384018313811615613cbe57613cbe613ac3565b50500390565b600080821280156001600160ff1b0384900385131615613ce657613ce6613ac3565b600160ff1b8390038412811615613cff57613cff613ac3565b50500190565b6000600160ff1b8201613d1a57613d1a613ac3565b506000190190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d725784516001600160a01b031683529383019391830191600101613d4d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613da857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ad1fa987694d1cf48ba4649de33053e776b83eba12aeab642ae2c69ebd9838364736f6c634300080e0033

Deployed Bytecode Sourcemap

16751:27798:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21232:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22146:161;;;;;;;;;;-1:-1:-1;22146:161:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;22146:161:0;1072:187:1;23267:87:0;;;;;;;;;;-1:-1:-1;23336:10:0;;23267:87;;;1410:25:1;;;1398:2;1383:18;23267:87:0;1264:177:1;26237:204:0;;;;;;;;;;-1:-1:-1;26237:204:0;;;;;:::i;:::-;;:::i;:::-;;19188:41;;;;;;;;;;-1:-1:-1;19188:41:0;;;;-1:-1:-1;;;;;19188:41:0;;;;;;-1:-1:-1;;;;;1958:32:1;;;1940:51;;1928:2;1913:18;19188:41:0;1767:230:1;18704:23:0;;;;;;;;;;-1:-1:-1;18704:23:0;;;;;;;;;;;21511:95;;;;;;;;;;-1:-1:-1;21591:7:0;;21511:95;;18735:22;;;;;;;;;;-1:-1:-1;18735:22:0;;;;;;;;;;;32343:110;;;;;;;;;;-1:-1:-1;32419:15:0;32343:110;;18306:47;;;;;;;;;;;;;;;;34094:654;;;;;;;;;;-1:-1:-1;34094:654:0;;;;;:::i;:::-;;:::i;22315:313::-;;;;;;;;;;-1:-1:-1;22315:313:0;;;;;:::i;:::-;;:::i;18764:37::-;;;;;;;;;;;;;;;;33789:114;;;;;;;;;;-1:-1:-1;33789:114:0;;;;;:::i;:::-;;:::i;24194:253::-;;;;;;;;;;-1:-1:-1;24194:253:0;;;;;:::i;:::-;;:::i;21418:85::-;;;;;;;;;;-1:-1:-1;21486:9:0;;21418:85;;24796:479;;;;;;;;;;-1:-1:-1;24796:479:0;;;;;:::i;:::-;;:::i;22636:218::-;;;;;;;;;;-1:-1:-1;22636:218:0;;;;;:::i;:::-;;:::i;31935:197::-;;;;;;;;;;;;;:::i;18209:35::-;;;;;;;;;;;;;;;;23362:378;;;;;;;;;;-1:-1:-1;23362:378:0;;;;;:::i;:::-;;:::i;17393:38::-;;;;;;;;;;-1:-1:-1;17393:38:0;;;;-1:-1:-1;;;;;17393:38:0;;;18673:22;;;;;;;;;;-1:-1:-1;18673:22:0;;;;;;;;26951:318;;;;;;;;;;-1:-1:-1;26951:318:0;;;;;:::i;:::-;;:::i;25996:111::-;;;;;;;;;;-1:-1:-1;25996:111:0;;;;;:::i;:::-;;:::i;23748:438::-;;;;;;;;;;-1:-1:-1;23748:438:0;;;;;:::i;:::-;;:::i;19236:28::-;;;;;;;;;;-1:-1:-1;19236:28:0;;;;-1:-1:-1;;;;;19236:28:0;;;19299:40;;;;;;;;;;-1:-1:-1;19299:40:0;;;;-1:-1:-1;;;19299:40:0;;;;;;19057:33;;;;;;;;;;;;;;;;26661:119;;;;;;;;;;-1:-1:-1;26661:119:0;;;;;:::i;:::-;;:::i;24455:333::-;;;;;;;;;;-1:-1:-1;24455:333:0;;;;;:::i;:::-;;:::i;32465:123::-;;;;;;;;;;-1:-1:-1;32465:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;32553:27:0;32529:4;32553:27;;;:18;:27;;;;;;;;;32465:123;18923:41;;;;;;;;;;;;;;;;18252:47;;;;;;;;;;;;;;;;32597:267;;;;;;;;;;-1:-1:-1;32597:267:0;;;;;:::i;:::-;;:::i;33632:148::-;;;;;;;;;;-1:-1:-1;33632:148:0;;;;;:::i;:::-;;:::i;21614:198::-;;;;;;;;;;-1:-1:-1;21614:198:0;;;;;:::i;:::-;;:::i;7745:148::-;;;;;;;;;;;;;:::i;7268:24::-;;;;;;;;;;;;;;;;19099:44;;;;;;;;;;-1:-1:-1;19099:44:0;;;;;;;;23139:120;;;;;;;;;;-1:-1:-1;23139:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23231:20:0;23207:4;23231:20;;;:11;:20;;;;;;;;;23139:120;7514:87;;;;;;;;;;-1:-1:-1;7560:7:0;7587:6;-1:-1:-1;;;;;7587:6:0;7514:87;;17283:30;;;;;;;;;;-1:-1:-1;17283:30:0;;;;;:::i;:::-;;:::i;21323:87::-;;;;;;;;;;;;;:::i;18998:40::-;;;;;;;;;;;;;;;;35361:100;;;;;;;;;;;;;:::i;22862:269::-;;;;;;;;;;-1:-1:-1;22862:269:0;;;;;:::i;:::-;;:::i;8513:294::-;;;;;;;;;;;;;:::i;21820:167::-;;;;;;;;;;-1:-1:-1;21820:167:0;;;;;:::i;:::-;;:::i;18561:25::-;;;;;;;;;;-1:-1:-1;18561:25:0;;;;;;;;17441:72;;;;;;;;;;-1:-1:-1;17441:72:0;;;;-1:-1:-1;;;;;17441:72:0;;;26449:200;;;;;;;;;;-1:-1:-1;26449:200:0;;;;;:::i;:::-;;:::i;27277:173::-;;;;;;;;;;-1:-1:-1;27277:173:0;;;;;:::i;:::-;;:::i;27589:238::-;;;;;;;;;;-1:-1:-1;27589:238:0;;;;;:::i;:::-;;:::i;19346:44::-;;;;;;;;;;;;;;;;18846:41;;;;;;;;;;;;;;;;8229:208;;;;;;;;;;-1:-1:-1;8229:208:0;;;;;:::i;:::-;;:::i;21995:143::-;;;;;;;;;;-1:-1:-1;21995:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22103:18:0;;;22076:7;22103:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21995:143;17320:30;;;;;;;;;;-1:-1:-1;17320:30:0;;;;;:::i;:::-;;:::i;26119:110::-;;;;;;;;;;-1:-1:-1;26119:110:0;;;;;:::i;:::-;;:::i;32140:195::-;;;;;;;;;;;;;:::i;26792:151::-;;;;;;;;;;-1:-1:-1;26792:151:0;;;;;:::i;:::-;;:::i;7903:244::-;;;;;;;;;;-1:-1:-1;7903:244:0;;;;;:::i;:::-;;:::i;33219:164::-;;;;;;;;;;;;;:::i;33391:233::-;;;;;;;;;;-1:-1:-1;33391:233:0;;;;;:::i;:::-;;:::i;21232:83::-;21269:13;21302:5;21295:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21232:83;:::o;22146:161::-;22221:4;22238:39;3548:10;22261:7;22270:6;22238:8;:39::i;:::-;-1:-1:-1;22295:4:0;22146:161;;;;;:::o;26237:204::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;;;;;;;;;26337:11:::1;:24:::0;;;;26372:17:::1;:24:::0;26406:17:::1;:24:::0;26237:204::o;34094:654::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;34236:15:::1;:22;34218:7;:14;:40;34210:83;;;::::0;-1:-1:-1;;;34210:83:0;;8278:2:1;34210:83:0::1;::::0;::::1;8260:21:1::0;8317:2;8297:18;;;8290:30;8356:32;8336:18;;;8329:60;8406:18;;34210:83:0::1;8076:354:1::0;34210:83:0::1;34329:3;34312:7;:14;:20;34304:87;;;::::0;-1:-1:-1;;;34304:87:0;;8637:2:1;34304:87:0::1;::::0;::::1;8619:21:1::0;8676:2;8656:18;;;8649:30;8715:34;8695:18;;;8688:62;-1:-1:-1;;;8766:18:1;;;8759:52;8828:19;;34304:87:0::1;8435:418:1::0;34304:87:0::1;34504:9;34500:241;34523:7;:14;34519:1;:18;34500:241;;;34558:14;34575:7;34583:1;34575:10;;;;;;;;:::i;:::-;;;;;;;34558:27;;34600:14;34617:15;34633:1;34617:18;;;;;;;;:::i;:::-;;;;;;;34636:3;34617:22;;;;:::i;:::-;34600:39;;34654:23;34670:6;34654:15;:23::i;:::-;34692:37;34702:10;34714:6;34722;34692:9;:37::i;:::-;34543:198;;34539:3;;;;;:::i;:::-;;;;34500:241;;;;34094:654:::0;;:::o;22315:313::-;22413:4;22430:36;22440:6;22448:9;22459:6;22430:9;:36::i;:::-;22477:121;22486:6;3548:10;22508:89;22546:6;22508:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22508:19:0;;;;;;:11;:19;;;;;;;;3548:10;22508:33;;;;;;;;;;:37;:89::i;:::-;22477:8;:121::i;:::-;-1:-1:-1;22616:4:0;22315:313;;;;;:::o;33789:114::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;33866:18:::1;:29:::0;33789:114::o;24194:253::-;24260:7;24299;;24288;:18;;24280:73;;;;-1:-1:-1;;;24280:73:0;;9637:2:1;24280:73:0;;;9619:21:1;9676:2;9656:18;;;9649:30;9715:34;9695:18;;;9688:62;-1:-1:-1;;;9766:18:1;;;9759:40;9816:19;;24280:73:0;9435:406:1;24280:73:0;24364:19;24387:10;:8;:10::i;:::-;24364:33;-1:-1:-1;24415:24:0;:7;24364:33;24415:11;:24::i;:::-;24408:31;24194:253;-1:-1:-1;;;24194:253:0:o;24796:479::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24878:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24870:60;;;::::0;-1:-1:-1;;;24870:60:0;;10048:2:1;24870:60:0::1;::::0;::::1;10030:21:1::0;10087:2;10067:18;;;10060:30;10126:29;10106:18;;;10099:57;10173:18;;24870:60:0::1;9846:351:1::0;24870:60:0::1;24946:9;24941:327;24965:9;:16:::0;24961:20;::::1;24941:327;;;25023:7;-1:-1:-1::0;;;;;25007:23:0::1;:9;25017:1;25007:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25007:12:0::1;:23:::0;25003:254:::1;;25066:9;25076:16:::0;;:20:::1;::::0;25095:1:::1;::::0;25076:20:::1;:::i;:::-;25066:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25051:9:::1;:12:::0;;-1:-1:-1;;;;;25066:31:0;;::::1;::::0;25061:1;;25051:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25051:46:0::1;-1:-1:-1::0;;;;;25051:46:0;;::::1;;::::0;;25116:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25155:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25155:28:0::1;::::0;;25202:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25202:15:0;;;;;-1:-1:-1;;;;;;25202:15:0::1;::::0;;;;;24941:327:::1;24796:479:::0;:::o;25003:254::-:1;24983:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24941:327;;;;24796:479:::0;:::o;22636:218::-;3548:10;22724:4;22773:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22773:34:0;;;;;;;;;;22724:4;;22741:83;;22764:7;;22773:50;;22812:10;22773:38;:50::i;31935:197::-;31985:7;32009:17;;32030:1;32009:22;32005:101;;32075:19;;32055:17;;:39;;;;:::i;:::-;32048:46;;31935:197;:::o;32005:101::-;-1:-1:-1;32123:1:0;;31935:197::o;23362:378::-;3548:10;23414:14;23463:19;;;:11;:19;;;;;;;;23462:20;23454:77;;;;-1:-1:-1;;;23454:77:0;;10799:2:1;23454:77:0;;;10781:21:1;10838:2;10818:18;;;10811:30;10877:34;10857:18;;;10850:62;-1:-1:-1;;;10928:18:1;;;10921:42;10980:19;;23454:77:0;10597:408:1;23454:77:0;23543:15;23568:19;23579:7;23568:10;:19::i;:::-;-1:-1:-1;;;;;;;;23616:15:0;;;;;;:7;:15;;;;;;23542:45;;-1:-1:-1;23616:28:0;;:15;-1:-1:-1;23542:45:0;;-1:-1:-1;;23616:19:0;:28::i;:::-;-1:-1:-1;;;;;23598:15:0;;;;;;:7;:15;;;;;:46;23665:7;;:20;;23677:7;23665:11;:20::i;:::-;23655:7;:30;23709:10;;:23;;23724:7;23709:14;:23::i;:::-;23696:10;:36;-1:-1:-1;;;23362:378:0:o;26951:318::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;27026:35:::1;27083:9;27026:67;;27138:16;-1:-1:-1::0;;;;;27138:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27120:56:0::1;;27185:4;27192:16;-1:-1:-1::0;;;;;27192:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27120:96;::::0;-1:-1:-1;;;;;;27120:96:0::1;::::0;;;;;;-1:-1:-1;;;;;11496:15:1;;;27120:96:0::1;::::0;::::1;11478:34:1::0;11548:15;;11528:18;;;11521:43;11413:18;;27120:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27104:13;:112:::0;;-1:-1:-1;;;;;27104:112:0;;::::1;-1:-1:-1::0;;;;;;27104:112:0;;::::1;;::::0;;;27227:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26951:318:0:o;25996:111::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26065:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26065:34:0::1;26095:4;26065:34;::::0;;25996:111::o;23748:438::-;23838:7;23877;;23866;:18;;23858:62;;;;-1:-1:-1;;;23858:62:0;;11777:2:1;23858:62:0;;;11759:21:1;11816:2;11796:18;;;11789:30;11855:33;11835:18;;;11828:61;11906:18;;23858:62:0;11575:355:1;23858:62:0;23936:17;23931:248;;23971:15;23996:19;24007:7;23996:10;:19::i;:::-;-1:-1:-1;23970:45:0;;-1:-1:-1;24030:14:0;;-1:-1:-1;;;;;;24030:14:0;23931:248;24079:23;24111:19;24122:7;24111:10;:19::i;:::-;-1:-1:-1;24077:53:0;;-1:-1:-1;24145:22:0;;-1:-1:-1;;;;;;24145:22:0;26661:119;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;26741:23:::1;:31:::0;;-1:-1:-1;;;;;;26741:31:0::1;-1:-1:-1::0;;;;;26741:31:0;;;::::1;::::0;;;::::1;::::0;;26661:119::o;24455:333::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24538:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24537:21;24529:61;;;::::0;-1:-1:-1;;;24529:61:0;;12137:2:1;24529:61:0::1;::::0;::::1;12119:21:1::0;12176:2;12156:18;;;12149:30;12215:29;12195:18;;;12188:57;12262:18;;24529:61:0::1;11935:351:1::0;24529:61:0::1;-1:-1:-1::0;;;;;24604:16:0;::::1;24623:1;24604:16:::0;;;:7:::1;:16;::::0;;;;;:20;24601:108:::1;;-1:-1:-1::0;;;;;24680:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24660:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24641:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24601:108:::1;-1:-1:-1::0;;;;;24719:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24719:27:0::1;24742:4;24719:27:::0;;::::1;::::0;;;24757:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24757:23:0::1;::::0;;::::1;::::0;;24455:333::o;32597:267::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;32704:13:::1;::::0;:19:::1;::::0;32720:3:::1;32704:19;:::i;:::-;32689:12;:34;32681:61;;;::::0;-1:-1:-1;;;32681:61:0;;12493:2:1;32681:61:0::1;::::0;::::1;12475:21:1::0;12532:2;12512:18;;;12505:30;-1:-1:-1;;;12551:18:1;;;12544:44;12605:18;;32681:61:0::1;12291:338:1::0;32681:61:0::1;32758:9;32753:104;32777:8;:15;32773:1;:19;32753:104;;;32839:6;32814:9;:22;32824:8;32833:1;32824:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32814:22:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32814:22:0;:31;;-1:-1:-1;;32814:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32794:3;::::1;::::0;::::1;:::i;:::-;;;;32753:104;;33632:148:::0;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33726:37:0;;;::::1;;::::0;;;:28:::1;:37;::::0;;;;:46;;-1:-1:-1;;33726:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33632:148::o;21614:198::-;-1:-1:-1;;;;;21704:20:0;;21680:7;21704:20;;;:11;:20;;;;;;;;21700:49;;;-1:-1:-1;;;;;;21733:16:0;;;;;:7;:16;;;;;;;21614:198::o;21700:49::-;-1:-1:-1;;;;;21787:16:0;;;;;;:7;:16;;;;;;21767:37;;:19;:37::i;7745:148::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;7852:1:::1;7836:6:::0;;7815:40:::1;::::0;-1:-1:-1;;;;;7836:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7815:40:0;7852:1;;7815:40:::1;7883:1;7866:19:::0;;-1:-1:-1;;;;;;7866:19:0::1;::::0;;7745:148::o;17283:30::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17283:30:0;;-1:-1:-1;17283:30:0;:::o;21323:87::-;21362:13;21395:7;21388:14;;;;;:::i;35361:100::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;35429:24:::1;:22;:24::i;:::-;35361:100::o:0;22862:269::-;22955:4;22972:129;3548:10;22995:7;23004:96;23043:15;23004:96;;;;;;;;;;;;;;;;;3548:10;23004:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23004:34:0;;;;;;;;;;;;:38;:96::i;8513:294::-;8565:14;;-1:-1:-1;;;;;8565:14:0;8583:10;8565:28;8557:77;;;;-1:-1:-1;;;8557:77:0;;12836:2:1;8557:77:0;;;12818:21:1;12875:2;12855:18;;;12848:30;12914:34;12894:18;;;12887:62;-1:-1:-1;;;12965:18:1;;;12958:34;13009:19;;8557:77:0;12634:400:1;8557:77:0;8671:9;;8653:15;:27;8645:60;;;;-1:-1:-1;;;8645:60:0;;13241:2:1;8645:60:0;;;13223:21:1;13280:2;13260:18;;;13253:30;-1:-1:-1;;;13299:18:1;;;13292:49;13358:18;;8645:60:0;13039:343:1;8645:60:0;8750:14;;;8742:6;;8721:44;;-1:-1:-1;;;;;8750:14:0;;;;8742:6;;;;-1:-1:-1;;;;;;;;;;;8721:44:0;;8785:14;;;8776:23;;-1:-1:-1;;;;;;8776:23:0;-1:-1:-1;;;;;8785:14:0;;;8776:23;;;;;;8513:294::o;21820:167::-;21898:4;21915:42;3548:10;21939:9;21950:6;21915:9;:42::i;26449:200::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;26548:10:::1;:23:::0;;;;26582:16:::1;:23:::0;26615:16:::1;:23:::0;26449:200::o;27277:173::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;27356:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27356:32:0::1;-1:-1:-1::0;;;;27356:32:0;;::::1;;::::0;;27404:38:::1;::::0;::::1;::::0;::::1;::::0;27380:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;27404:38:0::1;;;;;;;;27277:173:::0;:::o;27589:238::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;27721:9:::1;27735:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;27735:6:0;;::::1;::::0;27754;;27721:9;27735:30;27721:9;27735:30;27754:6;27735;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27720:45;;;27784:4;27776:35;;;::::0;-1:-1:-1;;;27776:35:0;;13799:2:1;27776:35:0::1;::::0;::::1;13781:21:1::0;13838:2;13818:18;;;13811:30;-1:-1:-1;;;13857:18:1;;;13850:48;13915:18;;27776:35:0::1;13597:342:1::0;8229:208:0;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;8310:6:::1;::::0;;;8293:23;;-1:-1:-1;;;;;;8293:23:0;;::::1;-1:-1:-1::0;;;;;8310:6:0;::::1;8293:23;::::0;;;8327:19:::1;::::0;;8357:9:::1;:16:::0;;;8389:40:::1;::::0;8310:6;;-1:-1:-1;;;;;;;;;;;8389:40:0;8310:6;;8389:40:::1;8229:208:::0;:::o;17320:30::-;;;;;;;;;;;;26119:110;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26186:27:0::1;26216:5;26186:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26186:35:0::1;::::0;;26119:110::o;32140:195::-;32189:7;32213:17;;32234:1;32213:22;32209:100;;32279:18;;32259:17;;:38;;;;:::i;26792:151::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;26926:9:::1;::::0;26921:14:::1;::::0;:2:::1;:14;:::i;:::-;26912:23;::::0;:6;:23:::1;:::i;:::-;26880:29;:55:::0;-1:-1:-1;26792:151:0:o;7903:244::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7992:22:0;::::1;7984:73;;;::::0;-1:-1:-1;;;7984:73:0;;15520:2:1;7984:73:0::1;::::0;::::1;15502:21:1::0;15559:2;15539:18;;;15532:30;15598:34;15578:18;;;15571:62;-1:-1:-1;;;15649:18:1;;;15642:36;15695:19;;7984:73:0::1;15318:402:1::0;7984:73:0::1;8094:6;::::0;;8073:38:::1;::::0;-1:-1:-1;;;;;8073:38:0;;::::1;::::0;8094:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;8073:38:0;::::1;8122:6;:17:::0;;-1:-1:-1;;;;;;8122:17:0::1;-1:-1:-1::0;;;;;8122:17:0;;;::::1;::::0;;;::::1;::::0;;7903:244::o;33219:164::-;7560:7;7587:6;-1:-1:-1;;;;;7587:6:0;3548:10;7653:23;7645:68;;;;-1:-1:-1;;;7645:68:0;;;;;;;:::i;:::-;33270:13:::1;:20:::0;;-1:-1:-1;;33270:20:0::1;33286:4;33270:20;::::0;;33317:12:::1;33301:13;:28:::0;33360:15:::1;33340:17;:35:::0;33219:164::o;33391:233::-;33455:4;33476:6;33471:122;33487:13;:20;33484:23;;33471:122;;;33549:6;-1:-1:-1;;;;;33531:24:0;:13;33545:1;33531:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;33531:16:0;:24;33527:54;;-1:-1:-1;33577:4:0;;33391:233;-1:-1:-1;;33391:233:0:o;33527:54::-;33508:3;;;;:::i;:::-;;;;33471:122;;;-1:-1:-1;33610:5:0;;33391:233;-1:-1:-1;;33391:233:0:o;32872:337::-;-1:-1:-1;;;;;32965:19:0;;32957:68;;;;-1:-1:-1;;;32957:68:0;;15927:2:1;32957:68:0;;;15909:21:1;15966:2;15946:18;;;15939:30;16005:34;15985:18;;;15978:62;-1:-1:-1;;;16056:18:1;;;16049:34;16100:19;;32957:68:0;15725:400:1;32957:68:0;-1:-1:-1;;;;;33044:21:0;;33036:68;;;;-1:-1:-1;;;33036:68:0;;16332:2:1;33036:68:0;;;16314:21:1;16371:2;16351:18;;;16344:30;16410:34;16390:18;;;16383:62;-1:-1:-1;;;16461:18:1;;;16454:32;16503:19;;33036:68:0;16130:398:1;33036:68:0;-1:-1:-1;;;;;33117:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33169:32;;1410:25:1;;;33169:32:0;;1383:18:1;33169:32:0;;;;;;;32872:337;;;:::o;34757:156::-;34823:25;34841:6;34823:17;:25::i;:::-;34818:87;;34866:13;:26;;;;;;;-1:-1:-1;34866:26:0;;;;;;;;-1:-1:-1;;;;;;34866:26:0;-1:-1:-1;;;;;34866:26:0;;;;;34818:87;34757:156;:::o;36196:2510::-;-1:-1:-1;;;;;36318:18:0;;36310:68;;;;-1:-1:-1;;;36310:68:0;;16735:2:1;36310:68:0;;;16717:21:1;16774:2;16754:18;;;16747:30;16813:34;16793:18;;;16786:62;-1:-1:-1;;;16864:18:1;;;16857:35;16909:19;;36310:68:0;16533:401:1;36310:68:0;-1:-1:-1;;;;;36397:16:0;;36389:64;;;;-1:-1:-1;;;36389:64:0;;17141:2:1;36389:64:0;;;17123:21:1;17180:2;17160:18;;;17153:30;17219:34;17199:18;;;17192:62;-1:-1:-1;;;17270:18:1;;;17263:33;17313:19;;36389:64:0;16939:399:1;36389:64:0;36481:1;36472:6;:10;36464:64;;;;-1:-1:-1;;;36464:64:0;;17545:2:1;36464:64:0;;;17527:21:1;17584:2;17564:18;;;17557:30;17623:34;17603:18;;;17596:62;-1:-1:-1;;;17674:18:1;;;17667:39;17723:19;;36464:64:0;17343:405:1;36464:64:0;-1:-1:-1;;;;;36548:15:0;;;;;;:9;:15;;;;;;;;36547:16;:34;;;;-1:-1:-1;;;;;;36568:13:0;;;;;;:9;:13;;;;;;;;36567:14;36547:34;36539:74;;;;-1:-1:-1;;;36539:74:0;;17955:2:1;36539:74:0;;;17937:21:1;17994:2;17974:18;;;17967:30;18033:29;18013:18;;;18006:57;18080:18;;36539:74:0;17753:351:1;36539:74:0;36634:28;36665:24;36683:4;36665:9;:24::i;:::-;36707:13;;36634:55;;-1:-1:-1;36707:13:0;;36702:128;;-1:-1:-1;;;;;36745:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;36773:22:0;;;;;;:18;:22;;;;;;;;36745:50;36737:81;;;;-1:-1:-1;;;36737:81:0;;18311:2:1;36737:81:0;;;18293:21:1;18350:2;18330:18;;;18323:30;-1:-1:-1;;;18369:18:1;;;18362:48;18427:18;;36737:81:0;18109:342:1;36737:81:0;36911:29;;36887:53;;;;;;;36969;;-1:-1:-1;37006:16:0;;-1:-1:-1;;;37006:16:0;;;;37005:17;36969:53;:91;;;;-1:-1:-1;37047:13:0;;-1:-1:-1;;;;;37039:21:0;;;37047:13;;37039:21;;36969:91;:129;;;;-1:-1:-1;37077:21:0;;-1:-1:-1;;;37077:21:0;;;;36969:129;36951:289;;;37148:29;;37125:52;;37192:36;37207:20;37192:14;:36::i;:::-;-1:-1:-1;;;;;37293:24:0;;37260:12;37293:24;;;:18;:24;;;;;;37275:4;;37293:24;;;:50;;-1:-1:-1;;;;;;37321:22:0;;;;;;:18;:22;;;;;;;;37293:50;37290:1232;;;-1:-1:-1;37369:5:0;37290:1232;;;37431:13;;-1:-1:-1;;;;;37431:13:0;;;37423:21;;;;37419:1092;;37482:10;;37472:7;:20;37527:16;;37511:13;:32;37578:16;;37562:13;:32;37613:19;37629:2;37613:15;:19::i;:::-;37419:1092;;;37685:13;;-1:-1:-1;;;;;37679:19:0;;;37685:13;;37679:19;:33;;;;-1:-1:-1;37702:10:0;;;;;;;37679:33;37675:836;;;37769:11;;37759:7;:21;37815:17;;37799:13;:33;37867:17;;37851:13;:33;37675:836;;;37937:13;;-1:-1:-1;;;;;37931:19:0;;;37937:13;;37931:19;:34;;;;-1:-1:-1;37954:11:0;;;;;;;37931:34;37927:584;;;38023:1;38013:7;:11;38059:17;;38043:13;:33;38114:1;38098:13;:17;37927:584;;;38168:13;;-1:-1:-1;;;;;38168:13:0;;;38162:19;;;;38158:353;;38238:1;38228:7;:11;38274:17;;38258:13;:33;38327:2;38311:13;:18;38158:353;;;38418:1;38408:7;:11;;;38438:13;:17;;;38474:13;:17;38158:353;38536:13;;;;:71;;;;-1:-1:-1;;;;;;38555:24:0;;;;;;:18;:24;;;;;;;;38554:25;;:52;;-1:-1:-1;;;;;;38584:22:0;;;;;;:18;:22;;;;;;;;38583:23;38554:52;38532:118;;;38624:14;:12;:14::i;:::-;38660:38;38675:4;38680:2;38683:6;38690:7;38660:14;:38::i;:::-;36299:2407;;;36196:2510;;;:::o;2782:206::-;2868:7;2929:12;2921:6;;;;2913:29;;;;-1:-1:-1;;;2913:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2964:5:0;;;2782:206::o;29439:163::-;29480:7;29501:15;29518;29537:19;:17;:19::i;:::-;29500:56;;-1:-1:-1;29500:56:0;-1:-1:-1;29574:20:0;29500:56;;29574:11;:20::i;:::-;29567:27;;;;29439:163;:::o;2564:98::-;2622:7;2649:5;2653:1;2649;:5;:::i;2238:98::-;2296:7;2323:5;2327:1;2323;:5;:::i;27990:472::-;28049:7;28058;28067;28076;28085;28094;28103;28124:23;28149:12;28163:18;28183;28205:20;28217:7;28205:11;:20::i;:::-;28123:102;;;;;;;;28237:15;28254:23;28279:12;28295:62;28307:7;28316:4;28322:10;28334;28346;:8;:10::i;:::-;28295:11;:62::i;:::-;28236:121;;-1:-1:-1;28236:121:0;-1:-1:-1;28236:121:0;-1:-1:-1;28408:15:0;;-1:-1:-1;28425:4:0;;-1:-1:-1;28431:10:0;;-1:-1:-1;28443:10:0;-1:-1:-1;;;;27990:472:0;;;;;;;;;:::o;2346:98::-;2404:7;2431:5;2435:1;2431;:5;:::i;35471:717::-;35530:6;35525:119;35546:13;:20;35542:24;;35525:119;;;35588:12;35606:7;:25;35614:13;35628:1;35614:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35614:16:0;35606:25;;;;;;;;;;;;;;;;35588:44;;35614:16;35588:44;;;;;;;;;;;;;;35568:3;;;;:::i;:::-;;;;35525:119;;;;35654:8;:6;:8::i;:::-;35733:6;35754:342;35761:13;:20;35784:2;-1:-1:-1;35754:342:0;;;35808:6;35803:264;35824:13;:20;35820:24;;35803:264;;;35903:12;35916:1;35903:15;;;;;;;;:::i;:::-;;;;;;;;;35874:7;:25;35882:13;35896:1;35882:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35882:16:0;35874:25;;;;;;;;;;;;;:44;:97;;;;;35924:28;:46;35953:13;35967:1;35953:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35953:16:0;35924:46;;;;;;;;;;;;;;;35923:47;35874:97;35870:182;;;35996:13;36015;36029:1;36015:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;35996:36;;36015:16;35996:36;;;;;;;;;;;;;;-1:-1:-1;;;;;;35996:36:0;-1:-1:-1;;;;;36015:16:0;;;35996:36;;;;;;35870:182;35846:3;;;;:::i;:::-;;;;35803:264;;;-1:-1:-1;36081:3:0;;;;:::i;:::-;;;;35754:342;;;-1:-1:-1;36106:24:0;:31;;-1:-1:-1;;36106:31:0;36133:4;36106:31;;;36165:15;36148:14;:32;35471:717::o;39270:1652::-;19691:16;:23;;-1:-1:-1;;;;19691:23:0;-1:-1:-1;;;19691:23:0;;;39388:13:::1;::::0;39370::::1;::::0;19691:23;;39370:32:::1;::::0;:13;:17:::1;:32::i;:::-;39355:47;;39413:23;39439:49;39474:13;;39439:30;39464:4;39439:20;:24;;:30;;;;:::i;:::-;:34:::0;::::1;:49::i;:::-;39413:75:::0;-1:-1:-1;39499:23:0::1;39525:41;:20:::0;39413:75;39525:24:::1;:41::i;:::-;39499:67;;39584:39;39602:20;39620:1;39602:13;;:17;;:20;;;;:::i;:::-;39584:13;::::0;;:17:::1;:39::i;:::-;39577:46:::0;-1:-1:-1;39634:12:0::1;39654:22;:15:::0;39674:1:::1;39654:19;:22::i;:::-;39634:42:::0;-1:-1:-1;39687:17:0::1;39707:25;:15:::0;39634:42;39707:19:::1;:25::i;:::-;39687:45:::0;-1:-1:-1;39768:21:0::1;39743:22;39821:25;:15:::0;39841:4;39821:19:::1;:25::i;:::-;39800:46;;39857:28;39874:10;39857:16;:28::i;:::-;39896:18;39917:41;:21;39943:14:::0;39917:25:::1;:41::i;:::-;39896:62;;39969:22;39994:39;40019:13;;39994:20;40009:4;39994:10;:14;;:20;;;;:::i;:39::-;40051:24;::::0;39969:64;;-1:-1:-1;40051:24:0::1;;40046:675;;40119:23;::::0;40111:111:::1;::::0;40093:12:::1;::::0;-1:-1:-1;;;;;40119:23:0::1;::::0;40212:5:::1;::::0;40174:14;;40093:12;40111:111;40093:12;40111:111;40174:14;40119:23;40212:5;40111:111:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40092:130;;;40245:7;40237:65;;;::::0;-1:-1:-1;;;40237:65:0;;18880:2:1;40237:65:0::1;::::0;::::1;18862:21:1::0;18919:2;18899:18;;;18892:30;18958:34;18938:18;;;18931:62;-1:-1:-1;;;19009:18:1;;;19002:43;19062:19;;40237:65:0::1;18678:409:1::0;40237:65:0::1;40077:237;40046:675;;;40392:13;:20:::0;40344:26:::1;::::0;40373:40:::1;::::0;:14;;:18:::1;:40::i;:::-;40344:69;;40433:6;40428:282;40449:13;:20:::0;40445:24;::::1;40428:282;;;40496:12;40522:13;40536:1;40522:16;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;40514:108:::1;::::0;-1:-1:-1;;;;;40522:16:0;;::::1;::::0;40612:5:::1;::::0;40570:18;;40514:108;40522:16;40514:108;40570:18;40522:16;40612:5;40514:108:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40495:127;;;40649:7;40641:53;;;::::0;-1:-1:-1;;;40641:53:0;;19294:2:1;40641:53:0::1;::::0;::::1;19276:21:1::0;19333:2;19313:18;;;19306:30;19372:34;19352:18;;;19345:62;-1:-1:-1;;;19423:18:1;;;19416:31;19464:19;;40641:53:0::1;19092:397:1::0;40641:53:0::1;-1:-1:-1::0;40471:3:0;::::1;::::0;::::1;:::i;:::-;;;;40428:282;;;;40329:392;40046:675;40735:17;40755:46;40780:20;40798:1;40780:13;;:17;;:20;;;;:::i;:::-;40755;:10:::0;40770:4;40755:14:::1;:20::i;:46::-;40735:66;;40812:34;40825:9;40836;40812:12;:34::i;:::-;40870:42;::::0;;19696:25:1;;;19752:2;19737:18;;19730:34;;;19780:18;;;19773:34;;;40870:42:0::1;::::0;19684:2:1;19669:18;40870:42:0::1;;;;;;;-1:-1:-1::0;;19737:16:0;:24;;-1:-1:-1;;;;19737:24:0;;;-1:-1:-1;;;;;;;;;39270:1652:0:o;38714:548::-;38780:17;;38762:15;:35;:50;;;;-1:-1:-1;38802:10:0;;;;38801:11;38762:50;38758:100;;;38829:10;:17;;-1:-1:-1;;38829:17:0;38842:4;38829:17;;;38758:100;38910:19;;38890:17;;:39;;;;:::i;:::-;38872:15;:57;:73;;;;-1:-1:-1;38934:11:0;;;;;;;38933:12;38872:73;38868:124;;;38962:11;:18;;-1:-1:-1;;38962:18:0;;;;;38868:124;39044:18;;39024:17;;:38;;;;:::i;:::-;39006:15;:56;:71;;;;-1:-1:-1;39067:10:0;;;;;;;39066:11;39006:71;39002:160;;;39094:10;:17;;-1:-1:-1;;39094:17:0;;;;;39126:24;:22;:24::i;:::-;39176;;;;39172:83;;;39217:26;:24;:26::i;41859:834::-;41970:7;41966:40;;41992:14;31543:7;;;31525:15;:25;31585:13;;;31561:21;:37;31633:13;;;31609:21;:37;-1:-1:-1;31667:11:0;;;;31689:17;;;;31717;31481:261;41992:14;-1:-1:-1;;;;;42031:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42055:22:0;;;;;;:11;:22;;;;;;;;42054:23;42031:46;42027:597;;;42094:48;42116:6;42124:9;42135:6;42094:21;:48::i;:::-;42027:597;;;-1:-1:-1;;;;;42165:19:0;;;;;;:11;:19;;;;;;;;42164:20;:46;;;;-1:-1:-1;;;;;;42188:22:0;;;;;;:11;:22;;;;;;;;42164:46;42160:464;;;42227:46;42247:6;42255:9;42266:6;42227:19;:46::i;42160:464::-;-1:-1:-1;;;;;42296:19:0;;;;;;:11;:19;;;;;;;;42295:20;:47;;;;-1:-1:-1;;;;;;42320:22:0;;;;;;:11;:22;;;;;;;;42319:23;42295:47;42291:333;;;42359:44;42377:6;42385:9;42396:6;42359:17;:44::i;42291:333::-;-1:-1:-1;;;;;42425:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42448:22:0;;;;;;:11;:22;;;;;;;;42425:45;42421:203;;;42487:48;42509:6;42517:9;42528:6;42487:21;:48::i;42421:203::-;42568:44;42586:6;42594:9;42605:6;42568:17;:44::i;:::-;42648:7;42644:41;;42670:15;31808;;31798:7;:25;31850:21;;31834:13;:37;31898:21;;31882:13;:37;31754:173;42670:15;41859:834;;;;:::o;29610:561::-;29707:7;;29743;;29660;;;;;29767:289;29791:9;:16;29787:20;;29767:289;;;29857:7;29833;:21;29841:9;29851:1;29841:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29841:12:0;29833:21;;;;;;;;;;;;;:31;;:66;;;29892:7;29868;:21;29876:9;29886:1;29876:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29876:12:0;29868:21;;;;;;;;;;;;;:31;29833:66;29829:97;;;29909:7;;29918;;29901:25;;;;;;;29610:561;;:::o;29829:97::-;29951:34;29963:7;:21;29971:9;29981:1;29971:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29971:12:0;29963:21;;;;;;;;;;;;;29951:7;;:11;:34::i;:::-;29941:44;;30010:34;30022:7;:21;30030:9;30040:1;30030:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30030:12:0;30022:21;;;;;;;;;;;;;30010:7;;:11;:34::i;:::-;30000:44;-1:-1:-1;29809:3:0;;;;:::i;:::-;;;;29767:289;;;-1:-1:-1;30092:7:0;;30080;;:20;;:11;:20::i;:::-;30070:7;:30;30066:61;;;30110:7;;30119;;30102:25;;;;;;29610:561;;:::o;30066:61::-;30146:7;;30155;;-1:-1:-1;29610:561:0;-1:-1:-1;29610:561:0:o;28470:429::-;28530:7;28539;28548;28557;28577:12;28592:24;28608:7;28592:15;:24::i;:::-;28577:39;;28627:18;28648:30;28670:7;28648:21;:30::i;:::-;28627:51;;28689:18;28710:30;28732:7;28710:21;:30::i;:::-;28689:51;-1:-1:-1;28751:23:0;28777:49;28689:51;28777:33;28799:10;28777:33;:7;28789:4;28777:11;:17::i;:::-;:21;;:33::i;:49::-;28751:75;28862:4;;-1:-1:-1;28868:10:0;;-1:-1:-1;28868:10:0;-1:-1:-1;28470:429:0;;-1:-1:-1;;;28470:429:0:o;28907:524::-;29042:7;;;;29098:24;:7;29110:11;29098;:24::i;:::-;29080:42;-1:-1:-1;29133:12:0;29148:21;:4;29157:11;29148:8;:21::i;:::-;29133:36;-1:-1:-1;29180:18:0;29201:27;:10;29216:11;29201:14;:27::i;:::-;29180:48;-1:-1:-1;29239:18:0;29260:27;:10;29275:11;29260:14;:27::i;:::-;29239:48;-1:-1:-1;29298:23:0;29324:49;29239:48;29324:33;29346:10;29324:33;:7;29336:4;29324:11;:17::i;:49::-;29392:7;;;;-1:-1:-1;29418:4:0;;-1:-1:-1;28907:524:0;;-1:-1:-1;;;;;;;;;28907:524:0:o;34921:432::-;34974:13;:20;35019:1;35005:341;35026:6;35022:1;:10;35005:341;;;35054:8;35065:12;35078:1;35065:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;35103:10:0;35112:1;35107;35103:10;:::i;:::-;35095:18;;35128:161;35146:1;35140;35136:11;;35135:46;;;;;35177:3;35153:12;35171:1;35153:21;;;;;;;;:::i;:::-;;;;;;;;;:27;35135:46;35128:161;;;35230:12;35248:1;35230:21;;;;;;;;:::i;:::-;;;;;;;;;35202:12;35220:1;35224;35220:5;;;;:::i;:::-;35202:25;;;;;;;;:::i;:::-;;;;;;;;;;:49;35270:3;;;;:::i;:::-;;;;35128:161;;;35331:3;35303:12;35321:5;:1;35325;35321:5;:::i;:::-;35303:25;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;35034:3:0;;-1:-1:-1;35034:3:0;;;:::i;:::-;;;;35005:341;;2454:98;2512:7;2539:5;2543:1;2539;:5;:::i;40930:499::-;41020:16;;;41034:1;41020:16;;;;;;;;40996:21;;41020:16;;;;;;;;;;-1:-1:-1;41020:16:0;40996:40;;41065:4;41047;41052:1;41047:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41047:23:0;;;:7;;;;;;;;;;:23;;;;41091:15;;:22;;;-1:-1:-1;;;41091:22:0;;;;:15;;;;;:20;;:22;;;;;41047:7;;41091:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41081:4;41086:1;41081:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41081:32:0;;;:7;;;;;;;;;:32;41156:15;;41124:62;;41141:4;;41156:15;41174:11;41124:8;:62::i;:::-;41197:15;;:224;;-1:-1:-1;;;41197:224:0;;-1:-1:-1;;;;;41197:15:0;;;;:66;;:224;;41278:11;;41197:15;;41348:4;;41375;;41395:15;;41197:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41437:414;41550:15;;41518:62;;41535:4;;-1:-1:-1;;;;;41550:15:0;41568:11;41518:8;:62::i;:::-;41591:15;;-1:-1:-1;;;;;41591:15:0;:31;41630:9;41663:4;41683:11;41591:15;;41795:7;7560;7587:6;-1:-1:-1;;;;;7587:6:0;;7514:87;41795:7;41591:252;;;;;;-1:-1:-1;;;;;;41591:252:0;;;-1:-1:-1;;;;;21853:15:1;;;41591:252:0;;;21835:34:1;21885:18;;;21878:34;;;;21928:18;;;21921:34;;;;21971:18;;;21964:34;22035:15;;;22014:19;;;22007:44;41817:15:0;22067:19:1;;;22060:35;21769:19;;41591:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41437:414;;:::o;33911:174::-;34007:18;;33990:14;;:35;;;;:::i;:::-;33971:15;:54;33967:111;;34042:24;:22;:24::i;43919:623::-;44022:15;44039:23;44064:12;44078:23;44103:12;44117:18;44137;44159:19;44170:7;44159:10;:19::i;:::-;44021:157;;;;;;;;;;;;;;44207:28;44227:7;44207;:15;44215:6;-1:-1:-1;;;;;44207:15:0;-1:-1:-1;;;;;44207:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;44189:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44264:7;:15;;;;:28;;44284:7;44264:19;:28::i;:::-;-1:-1:-1;;;;;44246:15:0;;;;;;;:7;:15;;;;;;:46;;;;44324:18;;;;;;;:39;;44347:15;44324:22;:39::i;:::-;-1:-1:-1;;;;;44303:18:0;;;;;;:7;:18;;;;;:60;44377:26;44392:10;44377:14;:26::i;:::-;44414;44429:10;44414:14;:26::i;:::-;44451:23;44463:4;44469;44451:11;:23::i;:::-;44507:9;-1:-1:-1;;;;;44490:44:0;44499:6;-1:-1:-1;;;;;44490:44:0;;44518:15;44490:44;;;;1410:25:1;;1398:2;1383:18;;1264:177;44490:44:0;;;;;;;;44010:532;;;;;;;43919:623;;;:::o;43268:643::-;43369:15;43386:23;43411:12;43425:23;43450:12;43464:18;43484;43506:19;43517:7;43506:10;:19::i;:::-;43368:157;;;;;;;;;;;;;;43554:28;43574:7;43554;:15;43562:6;-1:-1:-1;;;;;43554:15:0;-1:-1:-1;;;;;43554:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;43536:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43614:18;;;;;:7;:18;;;;;:39;;43637:15;43614:22;:39::i;:::-;-1:-1:-1;;;;;43593:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43685:7;:18;;;;:39;;43708:15;43685:22;:39::i;42701:559::-;42800:15;42817:23;42842:12;42856:23;42881:12;42895:18;42915;42937:19;42948:7;42937:10;:19::i;:::-;42799:157;;;;;;;;;;;;;;42985:28;43005:7;42985;:15;42993:6;-1:-1:-1;;;;;42985:15:0;-1:-1:-1;;;;;42985:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;25285:699::-;25388:15;25405:23;25430:12;25444:23;25469:12;25483:18;25503;25525:19;25536:7;25525:10;:19::i;:::-;25387:157;;;;;;;;;;;;;;25573:28;25593:7;25573;:15;25581:6;-1:-1:-1;;;;;25573:15:0;-1:-1:-1;;;;;25573:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25555:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25630:7;:15;;;;:28;;25650:7;25630:19;:28::i;30967:154::-;31031:7;31058:55;31097:5;31058:20;31070:7;;31058;:11;;:20;;;;:::i;:::-;:24;;:55::i;31303:166::-;31373:7;31400:61;31445:5;31400:26;31412:13;;31400:7;:11;;:26;;;;:::i;31129:166::-;31199:7;31226:61;31271:5;31226:26;31238:13;;31226:7;:11;;:26;;;;:::i;30183:355::-;30246:19;30269:10;:8;:10::i;:::-;30246:33;-1:-1:-1;30290:18:0;30311:27;:10;30246:33;30311:14;:27::i;:::-;30390:4;30374:22;;;;:7;:22;;;;;;30290:48;;-1:-1:-1;30374:38:0;;30290:48;30374:26;:38::i;:::-;30365:4;30349:22;;;;:7;:22;;;;;;;;:63;;;;30426:11;:26;;;;;;30423:107;;;30508:4;30492:22;;;;:7;:22;;;;;;:38;;30519:10;30492:26;:38::i;:::-;30483:4;30467:22;;;;:7;:22;;;;;:63;30235:303;;30183:355;:::o;30550:405::-;30613:19;30636:10;:8;:10::i;:::-;30613:33;-1:-1:-1;30657:18:0;30678:27;:10;30613:33;30678:14;:27::i;:::-;30759:23;;-1:-1:-1;;;;;30759:23:0;30751:32;;;;:7;:32;;;;;;30657:48;;-1:-1:-1;30751:48:0;;30657;30751:36;:48::i;:::-;30724:23;;;-1:-1:-1;;;;;30724:23:0;;;30716:32;;;;:7;:32;;;;;;;;:83;;;;30825:23;;;;;30813:36;;:11;:36;;;;;;;30810:137;;;30907:23;;-1:-1:-1;;;;;30907:23:0;30899:32;;;;:7;:32;;;;;;:48;;30936:10;30899:36;:48::i;:::-;30872:23;;-1:-1:-1;;;;;30872:23:0;30864:32;;;;:7;:32;;;;;:83;30602:353;;30550:405;:::o;27835:147::-;27913:7;;:17;;27925:4;27913:11;:17::i;:::-;27903:7;:27;27954:10;;:20;;27969:4;27954:14;:20::i;:::-;27941:10;:33;-1:-1:-1;;27835:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:316::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;-1:-1:-1;;1631:23:1;;;1701:2;1686:18;;1673:32;;-1:-1:-1;1752:2:1;1737:18;;;1724:32;;1446:316;-1:-1:-1;1446:316:1:o;2002:127::-;2063:10;2058:3;2054:20;2051:1;2044:31;2094:4;2091:1;2084:15;2118:4;2115:1;2108:15;2134:275;2205:2;2199:9;2270:2;2251:13;;-1:-1:-1;;2247:27:1;2235:40;;2305:18;2290:34;;2326:22;;;2287:62;2284:88;;;2352:18;;:::i;:::-;2388:2;2381:22;2134:275;;-1:-1:-1;2134:275:1:o;2414:183::-;2474:4;2507:18;2499:6;2496:30;2493:56;;;2529:18;;:::i;:::-;-1:-1:-1;2574:1:1;2570:14;2586:4;2566:25;;2414:183::o;2602:737::-;2656:5;2709:3;2702:4;2694:6;2690:17;2686:27;2676:55;;2727:1;2724;2717:12;2676:55;2763:6;2750:20;2789:4;2813:60;2829:43;2869:2;2829:43;:::i;:::-;2813:60;:::i;:::-;2907:15;;;2993:1;2989:10;;;;2977:23;;2973:32;;;2938:12;;;;3017:15;;;3014:35;;;3045:1;3042;3035:12;3014:35;3081:2;3073:6;3069:15;3093:217;3109:6;3104:3;3101:15;3093:217;;;3189:3;3176:17;3206:31;3231:5;3206:31;:::i;:::-;3250:18;;3288:12;;;;3126;;3093:217;;;-1:-1:-1;3328:5:1;2602:737;-1:-1:-1;;;;;;2602:737:1:o;3344:1138::-;3462:6;3470;3523:2;3511:9;3502:7;3498:23;3494:32;3491:52;;;3539:1;3536;3529:12;3491:52;3579:9;3566:23;3608:18;3649:2;3641:6;3638:14;3635:34;;;3665:1;3662;3655:12;3635:34;3688:61;3741:7;3732:6;3721:9;3717:22;3688:61;:::i;:::-;3678:71;;3768:2;3758:12;;3823:2;3812:9;3808:18;3795:32;3852:2;3842:8;3839:16;3836:36;;;3868:1;3865;3858:12;3836:36;3891:24;;;-1:-1:-1;3946:4:1;3938:13;;3934:27;-1:-1:-1;3924:55:1;;3975:1;3972;3965:12;3924:55;4011:2;3998:16;4034:60;4050:43;4090:2;4050:43;:::i;4034:60::-;4128:15;;;4210:1;4206:10;;;;4198:19;;4194:28;;;4159:12;;;;4234:19;;;4231:39;;;4266:1;4263;4256:12;4231:39;4290:11;;;;4310:142;4326:6;4321:3;4318:15;4310:142;;;4392:17;;4380:30;;4343:12;;;;4430;;;;4310:142;;;4471:5;4461:15;;;;;;;3344:1138;;;;;:::o;4487:456::-;4564:6;4572;4580;4633:2;4621:9;4612:7;4608:23;4604:32;4601:52;;;4649:1;4646;4639:12;4601:52;4688:9;4675:23;4707:31;4732:5;4707:31;:::i;:::-;4757:5;-1:-1:-1;4814:2:1;4799:18;;4786:32;4827:33;4786:32;4827:33;:::i;:::-;4487:456;;4879:7;;-1:-1:-1;;;4933:2:1;4918:18;;;;4905:32;;4487:456::o;4948:180::-;5007:6;5060:2;5048:9;5039:7;5035:23;5031:32;5028:52;;;5076:1;5073;5066:12;5028:52;-1:-1:-1;5099:23:1;;4948:180;-1:-1:-1;4948:180:1:o;5133:247::-;5192:6;5245:2;5233:9;5224:7;5220:23;5216:32;5213:52;;;5261:1;5258;5251:12;5213:52;5300:9;5287:23;5319:31;5344:5;5319:31;:::i;5593:160::-;5658:20;;5714:13;;5707:21;5697:32;;5687:60;;5743:1;5740;5733:12;5687:60;5593:160;;;:::o;5758:248::-;5823:6;5831;5884:2;5872:9;5863:7;5859:23;5855:32;5852:52;;;5900:1;5897;5890:12;5852:52;5936:9;5923:23;5913:33;;5965:35;5996:2;5985:9;5981:18;5965:35;:::i;:::-;5955:45;;5758:248;;;;;:::o;6011:416::-;6101:6;6109;6162:2;6150:9;6141:7;6137:23;6133:32;6130:52;;;6178:1;6175;6168:12;6130:52;6218:9;6205:23;6251:18;6243:6;6240:30;6237:50;;;6283:1;6280;6273:12;6237:50;6306:61;6359:7;6350:6;6339:9;6335:22;6306:61;:::i;:::-;6296:71;;;6386:35;6417:2;6406:9;6402:18;6386:35;:::i;6432:315::-;6497:6;6505;6558:2;6546:9;6537:7;6533:23;6529:32;6526:52;;;6574:1;6571;6564:12;6526:52;6613:9;6600:23;6632:31;6657:5;6632:31;:::i;:::-;6682:5;-1:-1:-1;6706:35:1;6737:2;6722:18;;6706:35;:::i;6752:180::-;6808:6;6861:2;6849:9;6840:7;6836:23;6832:32;6829:52;;;6877:1;6874;6867:12;6829:52;6900:26;6916:9;6900:26;:::i;6937:388::-;7005:6;7013;7066:2;7054:9;7045:7;7041:23;7037:32;7034:52;;;7082:1;7079;7072:12;7034:52;7121:9;7108:23;7140:31;7165:5;7140:31;:::i;:::-;7190:5;-1:-1:-1;7247:2:1;7232:18;;7219:32;7260:33;7219:32;7260:33;:::i;:::-;7312:7;7302:17;;;6937:388;;;;;:::o;7330:380::-;7409:1;7405:12;;;;7452;;;7473:61;;7527:4;7519:6;7515:17;7505:27;;7473:61;7580:2;7572:6;7569:14;7549:18;7546:38;7543:161;;7626:10;7621:3;7617:20;7614:1;7607:31;7661:4;7658:1;7651:15;7689:4;7686:1;7679:15;7543:161;;7330:380;;;:::o;7715:356::-;7917:2;7899:21;;;7936:18;;;7929:30;7995:34;7990:2;7975:18;;7968:62;8062:2;8047:18;;7715:356::o;8858:127::-;8919:10;8914:3;8910:20;8907:1;8900:31;8950:4;8947:1;8940:15;8974:4;8971:1;8964:15;8990:127;9051:10;9046:3;9042:20;9039:1;9032:31;9082:4;9079:1;9072:15;9106:4;9103:1;9096:15;9122:168;9162:7;9228:1;9224;9220:6;9216:14;9213:1;9210:21;9205:1;9198:9;9191:17;9187:45;9184:71;;;9235:18;;:::i;:::-;-1:-1:-1;9275:9:1;;9122:168::o;9295:135::-;9334:3;9355:17;;;9352:43;;9375:18;;:::i;:::-;-1:-1:-1;9422:1:1;9411:13;;9295:135::o;10202:125::-;10242:4;10270:1;10267;10264:8;10261:34;;;10275:18;;:::i;:::-;-1:-1:-1;10312:9:1;;10202:125::o;10332:127::-;10393:10;10388:3;10384:20;10381:1;10374:31;10424:4;10421:1;10414:15;10448:4;10445:1;10438:15;10464:128;10504:3;10535:1;10531:6;10528:1;10525:13;10522:39;;;10541:18;;:::i;:::-;-1:-1:-1;10577:9:1;;10464:128::o;11010:251::-;11080:6;11133:2;11121:9;11112:7;11108:23;11104:32;11101:52;;;11149:1;11146;11139:12;11101:52;11181:9;11175:16;11200:31;11225:5;11200:31;:::i;13944:422::-;14033:1;14076:5;14033:1;14090:270;14111:7;14101:8;14098:21;14090:270;;;14170:4;14166:1;14162:6;14158:17;14152:4;14149:27;14146:53;;;14179:18;;:::i;:::-;14229:7;14219:8;14215:22;14212:55;;;14249:16;;;;14212:55;14328:22;;;;14288:15;;;;14090:270;;;14094:3;13944:422;;;;;:::o;14371:806::-;14420:5;14450:8;14440:80;;-1:-1:-1;14491:1:1;14505:5;;14440:80;14539:4;14529:76;;-1:-1:-1;14576:1:1;14590:5;;14529:76;14621:4;14639:1;14634:59;;;;14707:1;14702:130;;;;14614:218;;14634:59;14664:1;14655:10;;14678:5;;;14702:130;14739:3;14729:8;14726:17;14723:43;;;14746:18;;:::i;:::-;-1:-1:-1;;14802:1:1;14788:16;;14817:5;;14614:218;;14916:2;14906:8;14903:16;14897:3;14891:4;14888:13;14884:36;14878:2;14868:8;14865:16;14860:2;14854:4;14851:12;14847:35;14844:77;14841:159;;;-1:-1:-1;14953:19:1;;;14985:5;;14841:159;15032:34;15057:8;15051:4;15032:34;:::i;:::-;15102:6;15098:1;15094:6;15090:19;15081:7;15078:32;15075:58;;;15113:18;;:::i;:::-;15151:20;;14371:806;-1:-1:-1;;;14371:806:1:o;15182:131::-;15242:5;15271:36;15298:8;15292:4;15271:36;:::i;18456:217::-;18496:1;18522;18512:132;;18566:10;18561:3;18557:20;18554:1;18547:31;18601:4;18598:1;18591:15;18629:4;18626:1;18619:15;18512:132;-1:-1:-1;18658:9:1;;18456:217::o;19818:267::-;19857:4;19886:9;;;19911:10;;-1:-1:-1;;;19930:19:1;;19923:27;;19907:44;19904:70;;;19954:18;;:::i;:::-;-1:-1:-1;;;;;20001:27:1;;19994:35;;19986:44;;19983:70;;;20033:18;;:::i;:::-;-1:-1:-1;;20070:9:1;;19818:267::o;20090:265::-;20129:3;20157:9;;;20182:10;;-1:-1:-1;;;;;20201:27:1;;;20194:35;;20178:52;20175:78;;;20233:18;;:::i;:::-;-1:-1:-1;;;20280:19:1;;;20273:27;;20265:36;;20262:62;;;20304:18;;:::i;:::-;-1:-1:-1;;20340:9:1;;20090:265::o;20360:144::-;20398:3;-1:-1:-1;;;20419:22:1;;20416:48;;20444:18;;:::i;:::-;-1:-1:-1;;;20480:18:1;;20360:144::o;20509:980::-;20771:4;20819:3;20808:9;20804:19;20850:6;20839:9;20832:25;20876:2;20914:6;20909:2;20898:9;20894:18;20887:34;20957:3;20952:2;20941:9;20937:18;20930:31;20981:6;21016;21010:13;21047:6;21039;21032:22;21085:3;21074:9;21070:19;21063:26;;21124:2;21116:6;21112:15;21098:29;;21145:1;21155:195;21169:6;21166:1;21163:13;21155:195;;;21234:13;;-1:-1:-1;;;;;21230:39:1;21218:52;;21325:15;;;;21290:12;;;;21266:1;21184:9;21155:195;;;-1:-1:-1;;;;;;;21406:32:1;;;;21401:2;21386:18;;21379:60;-1:-1:-1;;;21470:3:1;21455:19;21448:35;21367:3;20509:980;-1:-1:-1;;;20509:980:1:o;22106:306::-;22194:6;22202;22210;22263:2;22251:9;22242:7;22238:23;22234:32;22231:52;;;22279:1;22276;22269:12;22231:52;22308:9;22302:16;22292:26;;22358:2;22347:9;22343:18;22337:25;22327:35;;22402:2;22391:9;22387:18;22381:25;22371:35;;22106:306;;;;;:::o

Swarm Source

ipfs://5ad1fa987694d1cf48ba4649de33053e776b83eba12aeab642ae2c69ebd98383
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.