ETH Price: $3,449.14 (-0.16%)
Gas: 6 Gwei

Token

Crypto Lyst (LYST)
 

Overview

Max Total Supply

3,386,701,892,051.472232639797285783 LYST

Holders

223 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
158,119,627.543414617321996178 LYST

Value
$0.00
0x47F75fD9463723f9af8bBc0194430d9e303833E7
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Crypto Lyst is a utility token for a new community-managed crypto charting site. We provide superior tools to both development teams and investors, creating a safer and more engaging space for researchers and emphasizing community growth.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LYST

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
/// @dev : P.C.(I)
/* LYST is a utility token for a new type of community-managed crypto listing site. We provide
superior tools to both development teams and investors. Creating a safer and more engaging

space for research and community development. We invite you to earn crypto, engage with
projects, invest with surety and decentralize crypto project listings.
Website: CryptoLyst.com
Telegram: https://t.me/LystToken
Twitter: @LystToken
LinkTree: https://linktr.ee/LystToken */

pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}


interface IUniswapERC20 {
    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;
}

interface IUniswapFactory {
    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 IUniswapRouter01 {
    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 factory() external pure returns (address);
    function WETH() external pure returns (address);
    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 IUniswapRouter02 is IUniswapRouter01 {
    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;
}


 
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    
    constructor () {
        address msgSender = msg.sender;
        _owner = 0xA1a1C6D8349D383BfF173255D7bA9Df1ba3aB800;
        emit OwnershipTransferred(address(0), msgSender);
    }

    
    function owner() public view returns (address) {
        return _owner;
    }

    
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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


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


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
library EnumerableSet {
    
    
    
    
    
    
    
    

    struct Set {
           bytes32[] _values;

              mapping (bytes32 => uint256) _indexes;
    }

    
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
                          set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    
    function _remove(Set storage set, bytes32 value) private returns (bool) {
           uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { 
                            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

                     bytes32 lastvalue = set._values[lastIndex];

                   set._values[toDeleteIndex] = lastvalue;
                   set._indexes[lastvalue] = valueIndex; 

                   set._values.pop();

                   delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    
    
    
    
    
    
    
    
    
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    

    struct Bytes32Set {
        Set _inner;
    }

    
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    
    
    
    
    
    
    
    
    
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    

    struct AddressSet {
        Set _inner;
    }

    
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    
    
    
    
    
    
    
    
    
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    

    struct UintSet {
        Set _inner;
    }

    
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    
    
    
    
    
    
    
    
    
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}







contract LYST is IERC20, Ownable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (address => uint256) public _balances;
    mapping (address => mapping (address => uint256)) public _allowances;
    mapping (address => uint256) public _sellLock;


    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromSellLock;

    
    string public constant _name = 'Crypto Lyst';
    string public constant _symbol = 'LYST';
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply= 3500 * 10**9 * 10**_decimals;

    uint256 swapLimit = 3500 * 10**6 * 10**_decimals; 
    bool isSwapPegged = true;

    
    uint16 public  BuyLimitDivider=100; // 1%
    
    uint8 public   BalanceLimitDivider=50; // 2%
    
    uint16 public  SellLimitDivider=100; // 1%
    
    uint16 public  MaxSellLockTime= 10 seconds;
    
    mapping (address => bool) isTeam;
    
    
    address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;
    address public devAddress;
    
    uint256 public _circulatingSupply =InitialSupply;
    uint256 public  balanceLimit = _circulatingSupply;
    uint256 public  sellLimit = _circulatingSupply;
    uint256 public  buyLimit = _circulatingSupply;

    
    uint8 public _buyTax;
    uint8 public _sellTax;
    uint8 public _transferTax;
    uint8 public _liquidityTax;
    uint8 public _marketingTax;
    uint8 public _burnTax;
    uint8 public _devTax;

    bool isTokenSwapManual = false;
    bool public antisniper = true;

    address public _UniswapPairAddress;
    IUniswapRouter02 public  _UniswapRouter;

    
    modifier onlyTeam() {
        require(_isTeam(msg.sender), "Caller not in Team");
        _;
    }

    modifier onlyDev() {
        require(devAddress==msg.sender, "Caller not dev");
        _;
    }  
    
    function _isTeam(address addr) private view returns (bool){
        return addr==owner()||isTeam[addr];
    }


    
    
    
    constructor () {
        uint256 deployerBalance=_circulatingSupply*9/10;
        devAddress = 0xCbeb3C6aEC7040e4949F22234573bd06B31DE83b;
        _balances[msg.sender] = deployerBalance;
        emit Transfer(address(0), msg.sender, deployerBalance);
        uint256 injectBalance=_circulatingSupply-deployerBalance;
        _balances[address(this)]=injectBalance;
        emit Transfer(address(0), address(this),injectBalance);
        _UniswapRouter = IUniswapRouter02(UniswapRouter);

        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory()).createPair(address(this), _UniswapRouter.WETH());

        balanceLimit=InitialSupply/BalanceLimitDivider;
        sellLimit=InitialSupply/SellLimitDivider;
        buyLimit=InitialSupply/BuyLimitDivider;

        isTeam[0xA1a1C6D8349D383BfF173255D7bA9Df1ba3aB800] = true;

        sellLockTime=2 seconds;

        _buyTax=14;
        _sellTax=14;
        _transferTax=14;
        _liquidityTax=40;
        _marketingTax=40;
        _burnTax=10;
        _devTax=10;
        _excluded.add(msg.sender);
        _excluded.add(0xA1a1C6D8349D383BfF173255D7bA9Df1ba3aB800);
        _excludedFromSellLock.add(0xA1a1C6D8349D383BfF173255D7bA9Df1ba3aB800);
        _excludedFromSellLock.add(UniswapRouter);
        _excludedFromSellLock.add(_UniswapPairAddress);
        _excludedFromSellLock.add(address(this));
    } 

    
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");

        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient) || isTeam[sender] || isTeam[recipient]);

        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        bool isLiquidityTransfer = ((sender == _UniswapPairAddress && recipient == UniswapRouter)
        || (recipient == _UniswapPairAddress && sender == UniswapRouter));


        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{
            if (!tradingEnabled) {
                if (sender != owner() && recipient != owner()) {
                    if (antisniper) {
                        emit Transfer(sender,recipient,0);
                        return;
                    }
                    else {
                        require(tradingEnabled,"trading not yet enabled");
                    }
                }
            }
                
            bool isBuy=sender==_UniswapPairAddress|| sender == UniswapRouter;
            bool isSell=recipient==_UniswapPairAddress|| recipient == UniswapRouter;
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);


        }
    }
    
    
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");


        swapLimit = sellLimit/2;

        uint8 tax;
        if(isSell){
            if(!_excludedFromSellLock.contains(sender)){
                           require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Seller in sellLock");
                           _sellLock[sender]=block.timestamp+sellLockTime;
            }
            
            require(amount<=sellLimit,"Dump protection");
            tax=_sellTax;

        } else if(isBuy){
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
            require(amount<=buyLimit, "whale protection");
            tax=_buyTax;

        } else {
                   require(recipientBalance+amount<=balanceLimit,"whale protection");
                          if(!_excludedFromSellLock.contains(sender))
                require(_sellLock[sender]<=block.timestamp||sellLockDisabled,"Sender in Lock");
            tax=_transferTax;

        }
                 if((sender!=_UniswapPairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier))
            _swapContractToken(amount);
           uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax+_burnTax+_devTax);
           uint256 taxedAmount=amount-(contractToken);

           _removeToken(sender,amount);

           _balances[address(this)] += contractToken;

           _addToken(recipient, taxedAmount);

        emit Transfer(sender,recipient,taxedAmount);



    }
    
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
           _removeToken(sender,amount);
           _addToken(recipient, amount);

        emit Transfer(sender,recipient,amount);

    }
    
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }
    
    
    function _addToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]+amount;
        _balances[addr]=newAmount;

    }


    
    function _removeToken(address addr, uint256 amount) private {
           uint256 newAmount=_balances[addr]-amount;
        _balances[addr]=newAmount;
    }

    
    bool private _isTokenSwaping;
    
    uint256 public totalTokenSwapGenerated;
    
    uint256 public totalPayouts;

    
    uint8 public marketingShare=70;
    uint8 public burnShare=15;
    uint8 public devShare=15;
    
    uint256 public marketingBalance;
    uint256 public burnBalance;
    uint256 public devBalance;

    
    

    
    function _distributeFeesETH(uint256 ETHamount) private {
        uint256 marketingSplit = (ETHamount * marketingShare)/100;
        uint256 devSplit = (ETHamount * devShare)/100;

        marketingBalance+=marketingSplit;
        devBalance+=devSplit;

    }


    

    
    uint256 public totalLPETH;
    
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    
    
    function _swapContractToken(uint256 totalMax) private lockTheSwap{
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_marketingTax;
        uint256 tokenToSwap=swapLimit;
        if(tokenToSwap > totalMax) {
            if(isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
           if(contractBalance<tokenToSwap||totalTax==0){
            return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 tokenForMarketing= (tokenToSwap*_marketingTax)/totalTax;
        uint256 tokenFordev= (tokenToSwap*_devTax)/totalTax;
        uint256 tokenForburn= (tokenToSwap*_burnTax)/totalTax;
        burnBalance+=tokenForburn;
        destroy(tokenForburn);

        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;

        uint256 swapToken=liqETHToken+tokenForMarketing+tokenFordev;
        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        _addLiquidity(liqToken, liqETH);
        uint256 generatedETH=(address(this).balance - initialETHBalance);
        _distributeFeesETH(generatedETH);
    }
    
    function _swapTokenForETH(uint256 amount) private {
        _approve(address(this), address(_UniswapRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _UniswapRouter.WETH();

        _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        totalLPETH+=ETHamount;
        _approve(address(this), address(_UniswapRouter), tokenamount);
        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    /// @notice Utilities

    function destroy(uint256 amount) private {
        require(_balances[address(this)] >= amount);
        _balances[address(this)] -= amount;
        _circulatingSupply -= amount;
        emit Transfer(address(this), Dead, amount);
    }    

    function Control_getLimits() public view returns(uint256 balance, uint256 sell){
        return(balanceLimit/10**_decimals, sellLimit/10**_decimals);
    }

    function Control_getTaxes() public view returns(uint256 devTax, uint256 burnTax,uint256 liquidityTax,uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        return (_devTax, _burnTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax);
    }
    
    function Control_getAddressSellLockTimeInSeconds(address AddressToCheck) public view returns (uint256){
        uint256 lockTime=_sellLock[AddressToCheck];
        if(lockTime<=block.timestamp)
        {
            return 0;
        }
        return lockTime-block.timestamp;
    }
    function Control_getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }

    bool public sellLockDisabled;
    uint256 public sellLockTime;
    bool public manualConversion;


    function Control_SetPeggedSwap(bool isPegged) public onlyTeam {
        isSwapPegged = isPegged;
    }

    function Control_SetMaxSwap(uint256 max) public onlyTeam {
        swapLimit = max;
    }


    /// @notice ACL Functions

    function Access_SetTeam(address addy, bool booly) public onlyTeam {
        isTeam[addy] = booly;
    }

    function Access_ExcludeAccountFromFees(address account) public onlyTeam {
        _excluded.add(account);
    }
    function Access_IncludeAccountToFees(address account) public onlyTeam {
        _excluded.remove(account);
    }
    
    function Access_ExcludeAccountFromSellLock(address account) public onlyTeam {
        _excludedFromSellLock.add(account);
    }
    function Access_IncludeAccountToSellLock(address account) public onlyTeam {
        _excludedFromSellLock.remove(account);
    }

    function Team_WithdrawMarketingETH() public onlyTeam{
        uint256 amount=marketingBalance;
        marketingBalance=0;
        address sender = 0xD489CEF6C37cC23b50Cdfd13493969FCE005c753;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }


    function Team_WithdrawdevETH() public onlyDev{
        uint256 amount=devBalance;
        devBalance=0;
        address sender = msg.sender;
        (bool sent,) =sender.call{value: (amount)}("");
        require(sent,"withdraw failed");
    }

    
    function Control_SwitchManualETHConversion(bool manual) public onlyTeam{
        manualConversion=manual;
    }
    
    function Control_DisableSellLock(bool disabled) public onlyTeam{
        sellLockDisabled=disabled;
    }
    
    function UTILIY_SetSellLockTime(uint256 sellLockSeconds)public onlyTeam{
        sellLockTime=sellLockSeconds;
    }

    
    function Control_SetTaxes(uint8 devTaxes, uint8 burnTaxes, uint8 liquidityTaxes, uint8 marketingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public onlyTeam{
        require(buyTax <= 15, "Taxes are too high");
        require(sellTax <= 15, "Taxes are too high");
        require(transferTax <= 15, "Taxes are too high");
        uint8 totalTax=devTaxes + burnTaxes +liquidityTaxes+marketingTaxes;
        require(totalTax==100, "burn+liq+marketing needs to equal 100%");
        _devTax = devTaxes;
        _burnTax = burnTaxes;
        _liquidityTax=liquidityTaxes;
        _marketingTax=marketingTaxes;

        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    
    function Control_ChangeMarketingShare(uint8 newShare) public onlyTeam{
        marketingShare=newShare;
    }
    
    function Control_ChangeburnShare(uint8 newShare) public onlyTeam{
        burnShare=newShare;
    }

    function Control_ChangedevShare(uint8 newShare) public onlyTeam{
        devShare=newShare;
    }

    function Control_ManualGenerateTokenSwapBalance(uint256 _qty) public onlyTeam{
        _swapContractToken(_qty * 10**9);
    }

    
    function Control_UpdateLimits(uint256 newBuyLimit ,uint256 newBalanceLimit, uint256 newSellLimit) public onlyTeam{
        newBuyLimit = newBuyLimit *10**_decimals;
        newBalanceLimit=newBalanceLimit*10**_decimals;
        newSellLimit=newSellLimit*10**_decimals;
        require(newSellLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBalanceLimit >= InitialSupply/200, "Blocked by antirug functions");
        require(newBuyLimit >= InitialSupply/200, "Blocked by antirug functions");
        buyLimit = newBuyLimit;
        balanceLimit = newBalanceLimit;
        sellLimit = newSellLimit;
    }

    
    
    

    bool public tradingEnabled;
    address private _liquidityTokenAddress;

    
    function Settings_EnableTrading() public onlyTeam{
        tradingEnabled = true;
    }

    
    function Settings_LiquidityTokenAddress(address liquidityTokenAddress) public onlyTeam{
        _liquidityTokenAddress=liquidityTokenAddress;
    }
    

    function Control_setContractTokenSwapManual(bool manual) public onlyTeam {
        isTokenSwapManual = manual;
    }


    receive() external payable {}
    fallback() external payable {}
    

    function getOwner() external view override returns (address) {
        return owner();
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

    function symbol() external pure override returns (string memory) {
        return _symbol;
    }

    function decimals() external pure override returns (uint8) {
        return _decimals;
    }

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

    

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_ExcludeAccountFromSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Access_IncludeAccountToSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"Access_SetTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeMarketingShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangeburnShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newShare","type":"uint8"}],"name":"Control_ChangedevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"Control_DisableSellLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"Control_ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"Control_SetMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"Control_SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"Control_SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLimit","type":"uint256"},{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"Control_UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AddressToCheck","type":"address"}],"name":"Control_getAddressSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Control_getTaxes","outputs":[{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"Control_setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Settings_EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"Settings_LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Team_WithdrawdevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"UTILIY_SetSellLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellLock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"antisniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","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":"totalTokenSwapGenerated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a620006eb565b620000229063d09dc300620007aa565b600855600980546001600160401b031916660a0064320064011790556200004c6012600a620006eb565b6200005e9065032ee841b800620007aa565b600c819055600d819055600e819055600f556010805461ffff60381b19166801000000000000000017905560148054620f0f4662ffffff19909116179055348015620000a957600080fd5b50600080546001600160a01b03191673a1a1c6d8349d383bff173255d7ba9df1ba3ab800178155604051339182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000600a600c546009620001129190620007aa565b6200011e919062000681565b600b80546001600160a01b03191673cbeb3c6aec7040e4949f22234573bd06b31de83b1790553360008181526001602052604080822084905551929350909160008051602062003990833981519152906200017c9085815260200190565b60405180910390a3600081600c54620001969190620007cc565b306000818152600160205260408082208490555192935090916000805160206200399083398151915290620001ce9085815260200190565b60405180910390a3601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200023657600080fd5b505afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000271919062000651565b6001600160a01b031663c9c6539630601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002cf57600080fd5b505afa158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000651565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200035357600080fd5b505af115801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e919062000651565b601080546001600160a01b0392909216690100000000000000000002600160481b600160e81b031990921691909117905560095460ff630100000090910416620003db6012600a620006eb565b620003ed9065032ee841b800620007aa565b620003f9919062000681565b600d55600954640100000000900461ffff16620004196012600a620006eb565b6200042b9065032ee841b800620007aa565b62000437919062000681565b600e55600954610100900461ffff16620004546012600a620006eb565b620004669065032ee841b800620007aa565b62000472919062000681565b600f5573a1a1c6d8349d383bff173255d7ba9df1ba3ab800600052600a60209081527f55fa78ebba1e73397a806177f7395817ad23214c5ac34fd68eabb219d0e842e4805460ff191660011790556002601a5560108054660a0a28280e0e0e66ffffffffffffff19909116179055620004f990600490339062001b05620005df821b17901c565b506200052973a1a1c6d8349d383bff173255d7ba9df1ba3ab8006004620005df60201b62001b051790919060201c565b506200055973a1a1c6d8349d383bff173255d7ba9df1ba3ab8006006620005df60201b62001b051790919060201c565b5062000589737a250d5630b4cf539739df2c5dacb4c659f2488d6006620005df60201b62001b051790919060201c565b50620005ba601060099054906101000a90046001600160a01b03166006620005df60201b62001b051790919060201c565b50620005d6306006620005df60201b62001b051790919060201c565b505050620007fc565b6000620005f6836001600160a01b038416620005ff565b90505b92915050565b60008181526001830160205260408120546200064857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005f9565b506000620005f9565b60006020828403121562000663578081fd5b81516001600160a01b03811681146200067a578182fd5b9392505050565b6000826200069d57634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115620006e3578160001904821115620006c757620006c7620007e6565b80851615620006d557918102915b93841c9390800290620006a7565b509250929050565b6000620005f660ff8416836000826200070757506001620005f9565b816200071657506000620005f9565b81600181146200072f57600281146200073a576200075a565b6001915050620005f9565b60ff8411156200074e576200074e620007e6565b50506001821b620005f9565b5060208310610133831016604e8410600b84101617156200077f575081810a620005f9565b6200078b8383620006a2565b8060001904821115620007a257620007a2620007e6565b029392505050565b6000816000190483118215151615620007c757620007c7620007e6565b500290565b600082821015620007e157620007e1620007e6565b500390565b634e487b7160e01b600052601160045260246000fd5b613184806200080c6000396000f3fe6080604052600436106104525760003560e01c8063715018a61161023d578063b35513f711610138578063d7edb930116100bb578063f1c43f5f11610082578063f1c43f5f14610df1578063f2fde38b14610e06578063f8766f2014610e26578063f88b0e4614610e46578063faf11fe914610e5c578063fb27298714610ed257005b8063d7edb93014610d36578063d924499714610d56578063dd62ed3e14610d76578063e5a1ffe114610dbc578063e798c01214610ddc57005b8063c7639d80116100ff578063c7639d8014610c78578063ca9ec19914610ca0578063cd9a1b6314610cbf578063d255fd7414610cd5578063d28d885214610cff57005b8063b35513f714610be1578063b411e99614610c02578063b51ec13e14610c22578063bc68fad914610c42578063c59718ca14610c5857005b806395d89b41116101c0578063a9059cbb11610187578063a9059cbb14610b31578063a9aab6b914610b51578063aed04fae14610b71578063b09f126614610b91578063b2e8a7d214610bc157005b806395d89b4114610a8e57806398b1f16414610abb5780639d65536914610adb578063a253c06e14610afb578063a457c2d714610b1157005b8063887c60fb11610204578063887c60fb14610a10578063893d20e814610a2f5780638a98245814610a4d5780638da5cb5b14610a2f578063954ea66514610a6e57005b8063715018a614610995578063762bb282146109aa57806376a767ae146109c057806382c4767b146109e057806386d0ada8146109f657005b8063382e329a1161034d5780634cc40028116102d05780635c0494bb116102975780635c0494bb146108d25780636789f2dc146108f25780636a911f4f146109125780636ebcf6071461093257806370a082311461095f57005b80634cc400281461084f5780634f91e48c1461087057806354d6b96e14610886578063589210d9146108a657806358e55365146108bc57005b80634089b170116103145780634089b170146107ca57806342a11095146107e057806348e907b7146107fa5780634953554d146108105780634ada218b1461083057005b8063382e329a1461073e578063395093511461075f5780633ad10ef61461077f5780633b343ac01461079f5780633cc39b7a146107b457005b806318160ddd116103d55780632d8828631161039c5780632d882863146106b1578063311a8697146106d2578063313ce567146106f357806332424aa3146107075780633478154b1461071c57005b806318160ddd146106085780631eb25d131461061d5780631f8b845e1461063257806323b872dd146106525780632a24e0641461067257005b8063095ea7b311610419578063095ea7b31461054e5780630ce0636c1461057e5780630fd99e161461059e578063156b2c5d146105d357806317391e49146105e857005b8063024c2ddd1461045b57806305bf0a54146104a657806306fdde03146104d757806307a25f3c1461051457806309218ee71461053457005b3661045957005b005b34801561046757600080fd5b50610493610476366004612c06565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156104b257600080fd5b506014546104c590610100900460ff1681565b60405160ff909116815260200161049d565b3480156104e357600080fd5b5060408051808201909152600b81526a10dc9e5c1d1bc8131e5cdd60aa1b60208201525b60405161049d9190612e06565b34801561052057600080fd5b5061045961052f366004612bce565b610eff565b34801561054057600080fd5b506014546104c59060ff1681565b34801561055a57600080fd5b5061056e610569366004612cb2565b610f57565b604051901515815260200161049d565b34801561058a57600080fd5b50610459610599366004612cdd565b610f6e565b3480156105aa57600080fd5b506009546105c090600160201b900461ffff1681565b60405161ffff909116815260200161049d565b3480156105df57600080fd5b50610459610fa6565b3480156105f457600080fd5b506010546104c59062010000900460ff1681565b34801561061457600080fd5b50600c54610493565b34801561062957600080fd5b50610493611091565b34801561063e57600080fd5b506009546105c090610100900461ffff1681565b34801561065e57600080fd5b5061056e61066d366004612c3e565b6110b0565b34801561067e57600080fd5b5060105461069990600160481b90046001600160a01b031681565b6040516001600160a01b03909116815260200161049d565b3480156106bd57600080fd5b506010546104c590600160201b900460ff1681565b3480156106de57600080fd5b506009546104c5906301000000900460ff1681565b3480156106ff57600080fd5b5060126104c5565b34801561071357600080fd5b506104c5601281565b34801561072857600080fd5b506009546105c090600160301b900461ffff1681565b34801561074a57600080fd5b506010546104c5906301000000900460ff1681565b34801561076b57600080fd5b5061056e61077a366004612cb2565b611147565b34801561078b57600080fd5b50600b54610699906001600160a01b031681565b3480156107ab57600080fd5b5061045961117e565b3480156107c057600080fd5b5061049360185481565b3480156107d657600080fd5b5061049360135481565b3480156107ec57600080fd5b506010546104c59060ff1681565b34801561080657600080fd5b5061049360125481565b34801561081c57600080fd5b5061045961082b366004612cdd565b6111d1565b34801561083c57600080fd5b50601b5461056e90610100900460ff1681565b34801561085b57600080fd5b506010546104c590600160281b900460ff1681565b34801561087c57600080fd5b50610493600e5481565b34801561089257600080fd5b506104596108a1366004612bce565b61121c565b3480156108b257600080fd5b50610493600f5481565b3480156108c857600080fd5b5061049360155481565b3480156108de57600080fd5b506104936108ed366004612bce565b611250565b3480156108fe57600080fd5b5061045961090d366004612d0f565b61128a565b34801561091e57600080fd5b5061045961092d366004612d67565b6113da565b34801561093e57600080fd5b5061049361094d366004612bce565b60016020526000908152604090205481565b34801561096b57600080fd5b5061049361097a366004612bce565b6001600160a01b031660009081526001602052604090205490565b3480156109a157600080fd5b50610459611415565b3480156109b657600080fd5b50610493600d5481565b3480156109cc57600080fd5b506104596109db366004612d81565b6114c8565b3480156109ec57600080fd5b5061069961dead81565b348015610a0257600080fd5b50601b5461056e9060ff1681565b348015610a1c57600080fd5b5060195461056e90610100900460ff1681565b348015610a3b57600080fd5b506000546001600160a01b0316610699565b348015610a5957600080fd5b5060105461056e90600160401b900460ff1681565b348015610a7a57600080fd5b50601154610699906001600160a01b031681565b348015610a9a57600080fd5b50604080518082019091526004815263131654d560e21b6020820152610507565b348015610ac757600080fd5b50610459610ad6366004612bce565b611673565b348015610ae757600080fd5b50610459610af6366004612d67565b6116a3565b348015610b0757600080fd5b50610493600c5481565b348015610b1d57600080fd5b5061056e610b2c366004612cb2565b6116e4565b348015610b3d57600080fd5b5061056e610b4c366004612cb2565b611760565b348015610b5d57600080fd5b50610459610b6c366004612cf7565b61176d565b348015610b7d57600080fd5b506014546104c59062010000900460ff1681565b348015610b9d57600080fd5b5061050760405180604001604052806004815260200163131654d560e21b81525081565b348015610bcd57600080fd5b50610459610bdc366004612cdd565b611797565b348015610bed57600080fd5b506010546104c590600160301b900460ff1681565b348015610c0e57600080fd5b50610459610c1d366004612cdd565b6117d6565b348015610c2e57600080fd5b50610459610c3d366004612cf7565b61180e565b348015610c4e57600080fd5b5061049360165481565b348015610c6457600080fd5b50610459610c73366004612bce565b611838565b348015610c8457600080fd5b50610699737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610cac57600080fd5b506010546104c590610100900460ff1681565b348015610ccb57600080fd5b5061049360175481565b348015610ce157600080fd5b50610cea611868565b6040805192835260208301919091520161049d565b348015610d0b57600080fd5b506105076040518060400160405280600b81526020016a10dc9e5c1d1bc8131e5cdd60aa1b81525081565b348015610d4257600080fd5b50610459610d51366004612cf7565b6118a5565b348015610d6257600080fd5b50610459610d71366004612bce565b6118e3565b348015610d8257600080fd5b50610493610d91366004612c06565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610dc857600080fd5b50610459610dd7366004612d67565b611913565b348015610de857600080fd5b50610459611956565b348015610dfd57600080fd5b50601a54610493565b348015610e1257600080fd5b50610459610e21366004612bce565b61198c565b348015610e3257600080fd5b50610459610e41366004612c7e565b611ab5565b348015610e5257600080fd5b50610493601a5481565b348015610e6857600080fd5b506010546040805160ff600160301b840481168252600160281b84048116602083015263010000008404811692820192909252600160201b83048216606082015281831660808201526101008304821660a0820152620100009092041660c082015260e00161049d565b348015610ede57600080fd5b50610493610eed366004612bce565b60036020526000908152604090205481565b610f0833611b1a565b610f2d5760405162461bcd60e51b8152600401610f2490612e85565b60405180910390fd5b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610f64338484611b51565b5060015b92915050565b610f7733611b1a565b610f935760405162461bcd60e51b8152600401610f2490612e85565b6009805460ff1916911515919091179055565b600b546001600160a01b03163314610ff15760405162461bcd60e51b815260206004820152600e60248201526d21b0b63632b9103737ba103232bb60911b6044820152606401610f24565b6017805460009182905560405190913391829084905b60006040518083038185875af1925050503d8060008114611044576040519150601f19603f3d011682016040523d82523d6000602084013e611049565b606091505b505090508061108c5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610f24565b505050565b61109d6012600a613022565b6110ad9065032ee841b8006130cd565b81565b60006110bd848484611c44565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156111285760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610f24565b61113c853361113786856130ec565b611b51565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610f64918590611137908690612f82565b61118733611b1a565b6111a35760405162461bcd60e51b8152600401610f2490612e85565b60158054600091829055604051909173d489cef6c37cc23b50cdfd13493969fce005c7539182908490611007565b6111da33611b1a565b6111f65760405162461bcd60e51b8152600401610f2490612e85565b601080549115156701000000000000000267ff0000000000000019909216919091179055565b61122533611b1a565b6112415760405162461bcd60e51b8152600401610f2490612e85565b61124c600682611b05565b5050565b6001600160a01b0381166000908152600360205260408120544281116112795750600092915050565b61128342826130ec565b9392505050565b61129333611b1a565b6112af5760405162461bcd60e51b8152600401610f2490612e85565b6112bb6012600a613022565b6112c590846130cd565b92506112d36012600a613022565b6112dd90836130cd565b91506112eb6012600a613022565b6112f590826130cd565b905060c86113056012600a613022565b6113159065032ee841b8006130cd565b61131f9190612fbf565b81101561133e5760405162461bcd60e51b8152600401610f2490612edb565b60c861134c6012600a613022565b61135c9065032ee841b8006130cd565b6113669190612fbf565b8210156113855760405162461bcd60e51b8152600401610f2490612edb565b60c86113936012600a613022565b6113a39065032ee841b8006130cd565b6113ad9190612fbf565b8310156113cc5760405162461bcd60e51b8152600401610f2490612edb565b600f92909255600d55600e55565b6113e333611b1a565b6113ff5760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff191660ff92909216919091179055565b336114286000546001600160a01b031690565b6001600160a01b03161461147e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f24565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114d133611b1a565b6114ed5760405162461bcd60e51b8152600401610f2490612e85565b600f8360ff1611156115115760405162461bcd60e51b8152600401610f2490612e59565b600f8260ff1611156115355760405162461bcd60e51b8152600401610f2490612e59565b600f8160ff1611156115595760405162461bcd60e51b8152600401610f2490612e59565b60008486611567898b612f9a565b6115719190612f9a565b61157b9190612f9a565b90508060ff166064146115df5760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610f24565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff000000199a8616600160281b0265ff0000000000199c8716600160301b029c909c1666ffff000000000019909416939093179a909a179890981617959095179390931691909216179390931792909216179055565b61167c33611b1a565b6116985760405162461bcd60e51b8152600401610f2490612e85565b61124c600482611fa1565b6116ac33611b1a565b6116c85760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff9092166101000261ff0019909216919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156117475760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610f24565b611756338561113786856130ec565b5060019392505050565b6000610f64338484611c44565b61177633611b1a565b6117925760405162461bcd60e51b8152600401610f2490612e85565b601a55565b6117a033611b1a565b6117bc5760405162461bcd60e51b8152600401610f2490612e85565b601980549115156101000261ff0019909216919091179055565b6117df33611b1a565b6117fb5760405162461bcd60e51b8152600401610f2490612e85565b601b805460ff1916911515919091179055565b61181733611b1a565b6118335760405162461bcd60e51b8152600401610f2490612e85565b600855565b61184133611b1a565b61185d5760405162461bcd60e51b8152600401610f2490612e85565b61124c600482611b05565b6000806118776012600a613022565b600d546118849190612fbf565b6118906012600a613022565b600e5461189d9190612fbf565b915091509091565b6118ae33611b1a565b6118ca5760405162461bcd60e51b8152600401610f2490612e85565b6118e06118db82633b9aca006130cd565b611fb6565b50565b6118ec33611b1a565b6119085760405162461bcd60e51b8152600401610f2490612e85565b61124c600682611fa1565b61191c33611b1a565b6119385760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff909216620100000262ff000019909216919091179055565b61195f33611b1a565b61197b5760405162461bcd60e51b8152600401610f2490612e85565b601b805461ff001916610100179055565b3361199f6000546001600160a01b031690565b6001600160a01b0316146119f55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f24565b6001600160a01b038116611a5a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f24565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611abe33611b1a565b611ada5760405162461bcd60e51b8152600401610f2490612e85565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611283836001600160a01b0384166121b2565b600080546001600160a01b0383811691161480610f685750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611b9b5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610f24565b6001600160a01b038216611be35760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610f24565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c8f5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610f24565b6001600160a01b038216611cd85760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610f24565b6000611ce5600485612201565b80611cf65750611cf6600484612201565b80611d1957506001600160a01b0384166000908152600a602052604090205460ff165b80611d3c57506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611d5f57506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160481b90920416148015611da557506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611deb57506010546001600160a01b03868116600160481b90920416148015611deb57506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611df65750805b80611dfe5750825b15611e1357611e0e868686612223565b611f99565b601b54610100900460ff16611f00576000546001600160a01b03878116911614801590611e4e57506000546001600160a01b03868116911614155b15611f0057601054600160401b900460ff1615611ea957846001600160a01b0316866001600160a01b031660008051602061312f8339815191526000604051611e9991815260200190565b60405180910390a3505050505050565b601b54610100900460ff16611f005760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610f24565b6010546000906001600160a01b03888116600160481b909204161480611f4257506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160481b909204161480611f8757506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611f9688888885856122dc565b50505b505050505050565b6000611283836001600160a01b03841661269e565b6019805460ff191660019081179091553060009081526020919091526040812054601054909190611ffb90600160201b810460ff908116916301000000900416612f9a565b60ff169050600060085490508381111561201d5760095460ff161561201d5750825b8083108061202d575061ffff8216155b1561203a575050506121a5565b60105460009061ffff84169061205a906301000000900460ff16846130cd565b6120649190612fbf565b60105490915060009061ffff85169061208790600160201b900460ff16856130cd565b6120919190612fbf565b60105490915060009061ffff8616906120b490600160301b900460ff16866130cd565b6120be9190612fbf565b60105490915060009061ffff8716906120e190600160281b900460ff16876130cd565b6120eb9190612fbf565b905080601660008282546120ff9190612f82565b9091555061210e9050816127b5565b600061211b600286612fbf565b9050600061212982876130ec565b90506000846121388784612f82565b6121429190612f82565b90504761214e82612838565b600061215a82476130ec565b905060008361216986846130cd565b6121739190612fbf565b905061217f86826129b4565b600061218b84476130ec565b905061219681612a8b565b50505050505050505050505050505b506019805460ff19169055565b60008181526001830160205260408120546121f957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f68565b506000610f68565b6001600160a01b03811660009081526001830160205260408120541515611283565b6001600160a01b038316600090815260016020526040902054818110156122875760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f24565b6122918483612b0b565b61229b8383612b50565b826001600160a01b0316846001600160a01b031660008051602061312f833981519152846040516122ce91815260200190565b60405180910390a350505050565b6001600160a01b038085166000908152600160205260408082205492881682529020548481101561234a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f24565b6002600e546123599190612fbf565b6008556000831561245e5761236f600689612201565b612409576001600160a01b038816600090815260036020526040902054421015806123a15750601954610100900460ff165b6123e25760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610f24565b601a546123ef9042612f82565b6001600160a01b0389166000908152600360205260409020555b600e5486111561244d5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610f24565b50601054610100900460ff16612570565b84156124bd57600d546124718785612f82565b111561248f5760405162461bcd60e51b8152600401610f2490612eb1565b600f548611156124b15760405162461bcd60e51b8152600401610f2490612eb1565b5060105460ff16612570565b600d546124ca8785612f82565b11156124e85760405162461bcd60e51b8152600401610f2490612eb1565b6124f3600689612201565b612562576001600160a01b038816600090815260036020526040902054421015806125255750601954610100900460ff165b6125625760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610f24565b5060105462010000900460ff165b6010546001600160a01b03898116600160481b90920416148015906125985750601b5460ff16155b80156125a7575060195460ff16155b156125b5576125b586611fb6565b60105460009061260e908890849060ff600160301b8204811691600160281b81048216916125f59163010000008104821691600160201b90910416612f9a565b6125ff9190612f9a565b6126099190612f9a565b612b74565b9050600061261c82896130ec565b90506126288a89612b0b565b3060009081526001602052604081208054849290612647908490612f82565b9091555061265790508982612b50565b886001600160a01b03168a6001600160a01b031660008051602061312f8339815191528360405161268a91815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127ab5760006126c26001836130ec565b85549091506000906126d6906001906130ec565b905060008660000182815481106126fd57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061272e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526001890190915260409020849055865487908061276f57634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f68565b6000915050610f68565b306000908152600160205260409020548111156127d157600080fd5b30600090815260016020526040812080548392906127f09084906130ec565b9250508190555080600c600082825461280991906130ec565b909155505060405181815261dead90309060008051602061312f8339815191529060200160405180910390a350565b6011546128509030906001600160a01b031683611b51565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128e757600080fd5b505afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190612bea565b8160018151811061294057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac94790612986908590600090869030904290600401612f12565b600060405180830381600087803b1580156129a057600080fd5b505af1158015611f99573d6000803e3d6000fd5b80601860008282546129c69190612f82565b90915550506011546129e39030906001600160a01b031684611b51565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a4b57600080fd5b505af1158015612a5f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a849190612d3a565b5050505050565b601454600090606490612aa19060ff16846130cd565b612aab9190612fbf565b601454909150600090606490612aca9062010000900460ff16856130cd565b612ad49190612fbf565b90508160156000828254612ae89190612f82565b925050819055508060176000828254612b019190612f82565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612b2f9083906130ec565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612b2f908390612f82565b60006127108260ff168460ff1686612b8c91906130cd565b612b9691906130cd565b612ba09190612fbf565b949350505050565b80358015158114612bb857600080fd5b919050565b803560ff81168114612bb857600080fd5b600060208284031215612bdf578081fd5b813561128381613119565b600060208284031215612bfb578081fd5b815161128381613119565b60008060408385031215612c18578081fd5b8235612c2381613119565b91506020830135612c3381613119565b809150509250929050565b600080600060608486031215612c52578081fd5b8335612c5d81613119565b92506020840135612c6d81613119565b929592945050506040919091013590565b60008060408385031215612c90578182fd5b8235612c9b81613119565b9150612ca960208401612ba8565b90509250929050565b60008060408385031215612cc4578182fd5b8235612ccf81613119565b946020939093013593505050565b600060208284031215612cee578081fd5b61128382612ba8565b600060208284031215612d08578081fd5b5035919050565b600080600060608486031215612d23578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d4e578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d78578081fd5b61128382612bbd565b600080600080600080600060e0888a031215612d9b578283fd5b612da488612bbd565b9650612db260208901612bbd565b9550612dc060408901612bbd565b9450612dce60608901612bbd565b9350612ddc60808901612bbd565b9250612dea60a08901612bbd565b9150612df860c08901612bbd565b905092959891949750929550565b6000602080835283518082850152825b81811015612e3257858101830151858201604001528201612e16565b81811115612e435783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f615784516001600160a01b031683529383019391830191600101612f3c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f9557612f95613103565b500190565b600060ff821660ff84168060ff03821115612fb757612fb7613103565b019392505050565b600082612fda57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561301a57816000190482111561300057613000613103565b8085161561300d57918102915b93841c9390800290612fe4565b509250929050565b600061128360ff84168360008261303b57506001610f68565b8161304857506000610f68565b816001811461305e576002811461306857613084565b6001915050610f68565b60ff84111561307957613079613103565b50506001821b610f68565b5060208310610133831016604e8410600b84101617156130a7575081810a610f68565b6130b18383612fdf565b80600019048211156130c5576130c5613103565b029392505050565b60008160001904831182151516156130e7576130e7613103565b500290565b6000828210156130fe576130fe613103565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146118e057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207742c2b4616d734909cad749db20f95819a86eb3d1e4bffa51b32735917856d664736f6c63430008040033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106104525760003560e01c8063715018a61161023d578063b35513f711610138578063d7edb930116100bb578063f1c43f5f11610082578063f1c43f5f14610df1578063f2fde38b14610e06578063f8766f2014610e26578063f88b0e4614610e46578063faf11fe914610e5c578063fb27298714610ed257005b8063d7edb93014610d36578063d924499714610d56578063dd62ed3e14610d76578063e5a1ffe114610dbc578063e798c01214610ddc57005b8063c7639d80116100ff578063c7639d8014610c78578063ca9ec19914610ca0578063cd9a1b6314610cbf578063d255fd7414610cd5578063d28d885214610cff57005b8063b35513f714610be1578063b411e99614610c02578063b51ec13e14610c22578063bc68fad914610c42578063c59718ca14610c5857005b806395d89b41116101c0578063a9059cbb11610187578063a9059cbb14610b31578063a9aab6b914610b51578063aed04fae14610b71578063b09f126614610b91578063b2e8a7d214610bc157005b806395d89b4114610a8e57806398b1f16414610abb5780639d65536914610adb578063a253c06e14610afb578063a457c2d714610b1157005b8063887c60fb11610204578063887c60fb14610a10578063893d20e814610a2f5780638a98245814610a4d5780638da5cb5b14610a2f578063954ea66514610a6e57005b8063715018a614610995578063762bb282146109aa57806376a767ae146109c057806382c4767b146109e057806386d0ada8146109f657005b8063382e329a1161034d5780634cc40028116102d05780635c0494bb116102975780635c0494bb146108d25780636789f2dc146108f25780636a911f4f146109125780636ebcf6071461093257806370a082311461095f57005b80634cc400281461084f5780634f91e48c1461087057806354d6b96e14610886578063589210d9146108a657806358e55365146108bc57005b80634089b170116103145780634089b170146107ca57806342a11095146107e057806348e907b7146107fa5780634953554d146108105780634ada218b1461083057005b8063382e329a1461073e578063395093511461075f5780633ad10ef61461077f5780633b343ac01461079f5780633cc39b7a146107b457005b806318160ddd116103d55780632d8828631161039c5780632d882863146106b1578063311a8697146106d2578063313ce567146106f357806332424aa3146107075780633478154b1461071c57005b806318160ddd146106085780631eb25d131461061d5780631f8b845e1461063257806323b872dd146106525780632a24e0641461067257005b8063095ea7b311610419578063095ea7b31461054e5780630ce0636c1461057e5780630fd99e161461059e578063156b2c5d146105d357806317391e49146105e857005b8063024c2ddd1461045b57806305bf0a54146104a657806306fdde03146104d757806307a25f3c1461051457806309218ee71461053457005b3661045957005b005b34801561046757600080fd5b50610493610476366004612c06565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156104b257600080fd5b506014546104c590610100900460ff1681565b60405160ff909116815260200161049d565b3480156104e357600080fd5b5060408051808201909152600b81526a10dc9e5c1d1bc8131e5cdd60aa1b60208201525b60405161049d9190612e06565b34801561052057600080fd5b5061045961052f366004612bce565b610eff565b34801561054057600080fd5b506014546104c59060ff1681565b34801561055a57600080fd5b5061056e610569366004612cb2565b610f57565b604051901515815260200161049d565b34801561058a57600080fd5b50610459610599366004612cdd565b610f6e565b3480156105aa57600080fd5b506009546105c090600160201b900461ffff1681565b60405161ffff909116815260200161049d565b3480156105df57600080fd5b50610459610fa6565b3480156105f457600080fd5b506010546104c59062010000900460ff1681565b34801561061457600080fd5b50600c54610493565b34801561062957600080fd5b50610493611091565b34801561063e57600080fd5b506009546105c090610100900461ffff1681565b34801561065e57600080fd5b5061056e61066d366004612c3e565b6110b0565b34801561067e57600080fd5b5060105461069990600160481b90046001600160a01b031681565b6040516001600160a01b03909116815260200161049d565b3480156106bd57600080fd5b506010546104c590600160201b900460ff1681565b3480156106de57600080fd5b506009546104c5906301000000900460ff1681565b3480156106ff57600080fd5b5060126104c5565b34801561071357600080fd5b506104c5601281565b34801561072857600080fd5b506009546105c090600160301b900461ffff1681565b34801561074a57600080fd5b506010546104c5906301000000900460ff1681565b34801561076b57600080fd5b5061056e61077a366004612cb2565b611147565b34801561078b57600080fd5b50600b54610699906001600160a01b031681565b3480156107ab57600080fd5b5061045961117e565b3480156107c057600080fd5b5061049360185481565b3480156107d657600080fd5b5061049360135481565b3480156107ec57600080fd5b506010546104c59060ff1681565b34801561080657600080fd5b5061049360125481565b34801561081c57600080fd5b5061045961082b366004612cdd565b6111d1565b34801561083c57600080fd5b50601b5461056e90610100900460ff1681565b34801561085b57600080fd5b506010546104c590600160281b900460ff1681565b34801561087c57600080fd5b50610493600e5481565b34801561089257600080fd5b506104596108a1366004612bce565b61121c565b3480156108b257600080fd5b50610493600f5481565b3480156108c857600080fd5b5061049360155481565b3480156108de57600080fd5b506104936108ed366004612bce565b611250565b3480156108fe57600080fd5b5061045961090d366004612d0f565b61128a565b34801561091e57600080fd5b5061045961092d366004612d67565b6113da565b34801561093e57600080fd5b5061049361094d366004612bce565b60016020526000908152604090205481565b34801561096b57600080fd5b5061049361097a366004612bce565b6001600160a01b031660009081526001602052604090205490565b3480156109a157600080fd5b50610459611415565b3480156109b657600080fd5b50610493600d5481565b3480156109cc57600080fd5b506104596109db366004612d81565b6114c8565b3480156109ec57600080fd5b5061069961dead81565b348015610a0257600080fd5b50601b5461056e9060ff1681565b348015610a1c57600080fd5b5060195461056e90610100900460ff1681565b348015610a3b57600080fd5b506000546001600160a01b0316610699565b348015610a5957600080fd5b5060105461056e90600160401b900460ff1681565b348015610a7a57600080fd5b50601154610699906001600160a01b031681565b348015610a9a57600080fd5b50604080518082019091526004815263131654d560e21b6020820152610507565b348015610ac757600080fd5b50610459610ad6366004612bce565b611673565b348015610ae757600080fd5b50610459610af6366004612d67565b6116a3565b348015610b0757600080fd5b50610493600c5481565b348015610b1d57600080fd5b5061056e610b2c366004612cb2565b6116e4565b348015610b3d57600080fd5b5061056e610b4c366004612cb2565b611760565b348015610b5d57600080fd5b50610459610b6c366004612cf7565b61176d565b348015610b7d57600080fd5b506014546104c59062010000900460ff1681565b348015610b9d57600080fd5b5061050760405180604001604052806004815260200163131654d560e21b81525081565b348015610bcd57600080fd5b50610459610bdc366004612cdd565b611797565b348015610bed57600080fd5b506010546104c590600160301b900460ff1681565b348015610c0e57600080fd5b50610459610c1d366004612cdd565b6117d6565b348015610c2e57600080fd5b50610459610c3d366004612cf7565b61180e565b348015610c4e57600080fd5b5061049360165481565b348015610c6457600080fd5b50610459610c73366004612bce565b611838565b348015610c8457600080fd5b50610699737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610cac57600080fd5b506010546104c590610100900460ff1681565b348015610ccb57600080fd5b5061049360175481565b348015610ce157600080fd5b50610cea611868565b6040805192835260208301919091520161049d565b348015610d0b57600080fd5b506105076040518060400160405280600b81526020016a10dc9e5c1d1bc8131e5cdd60aa1b81525081565b348015610d4257600080fd5b50610459610d51366004612cf7565b6118a5565b348015610d6257600080fd5b50610459610d71366004612bce565b6118e3565b348015610d8257600080fd5b50610493610d91366004612c06565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610dc857600080fd5b50610459610dd7366004612d67565b611913565b348015610de857600080fd5b50610459611956565b348015610dfd57600080fd5b50601a54610493565b348015610e1257600080fd5b50610459610e21366004612bce565b61198c565b348015610e3257600080fd5b50610459610e41366004612c7e565b611ab5565b348015610e5257600080fd5b50610493601a5481565b348015610e6857600080fd5b506010546040805160ff600160301b840481168252600160281b84048116602083015263010000008404811692820192909252600160201b83048216606082015281831660808201526101008304821660a0820152620100009092041660c082015260e00161049d565b348015610ede57600080fd5b50610493610eed366004612bce565b60036020526000908152604090205481565b610f0833611b1a565b610f2d5760405162461bcd60e51b8152600401610f2490612e85565b60405180910390fd5b601b80546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000610f64338484611b51565b5060015b92915050565b610f7733611b1a565b610f935760405162461bcd60e51b8152600401610f2490612e85565b6009805460ff1916911515919091179055565b600b546001600160a01b03163314610ff15760405162461bcd60e51b815260206004820152600e60248201526d21b0b63632b9103737ba103232bb60911b6044820152606401610f24565b6017805460009182905560405190913391829084905b60006040518083038185875af1925050503d8060008114611044576040519150601f19603f3d011682016040523d82523d6000602084013e611049565b606091505b505090508061108c5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610f24565b505050565b61109d6012600a613022565b6110ad9065032ee841b8006130cd565b81565b60006110bd848484611c44565b6001600160a01b0384166000908152600260209081526040808320338452909152902054828110156111285760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610f24565b61113c853361113786856130ec565b611b51565b506001949350505050565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610f64918590611137908690612f82565b61118733611b1a565b6111a35760405162461bcd60e51b8152600401610f2490612e85565b60158054600091829055604051909173d489cef6c37cc23b50cdfd13493969fce005c7539182908490611007565b6111da33611b1a565b6111f65760405162461bcd60e51b8152600401610f2490612e85565b601080549115156701000000000000000267ff0000000000000019909216919091179055565b61122533611b1a565b6112415760405162461bcd60e51b8152600401610f2490612e85565b61124c600682611b05565b5050565b6001600160a01b0381166000908152600360205260408120544281116112795750600092915050565b61128342826130ec565b9392505050565b61129333611b1a565b6112af5760405162461bcd60e51b8152600401610f2490612e85565b6112bb6012600a613022565b6112c590846130cd565b92506112d36012600a613022565b6112dd90836130cd565b91506112eb6012600a613022565b6112f590826130cd565b905060c86113056012600a613022565b6113159065032ee841b8006130cd565b61131f9190612fbf565b81101561133e5760405162461bcd60e51b8152600401610f2490612edb565b60c861134c6012600a613022565b61135c9065032ee841b8006130cd565b6113669190612fbf565b8210156113855760405162461bcd60e51b8152600401610f2490612edb565b60c86113936012600a613022565b6113a39065032ee841b8006130cd565b6113ad9190612fbf565b8310156113cc5760405162461bcd60e51b8152600401610f2490612edb565b600f92909255600d55600e55565b6113e333611b1a565b6113ff5760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff191660ff92909216919091179055565b336114286000546001600160a01b031690565b6001600160a01b03161461147e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f24565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6114d133611b1a565b6114ed5760405162461bcd60e51b8152600401610f2490612e85565b600f8360ff1611156115115760405162461bcd60e51b8152600401610f2490612e59565b600f8260ff1611156115355760405162461bcd60e51b8152600401610f2490612e59565b600f8160ff1611156115595760405162461bcd60e51b8152600401610f2490612e59565b60008486611567898b612f9a565b6115719190612f9a565b61157b9190612f9a565b90508060ff166064146115df5760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610f24565b506010805460ff928316620100000262ff0000199484166101000261ffff19978516600160201b0264ff00000000199986166301000000029990991664ffff000000199a8616600160281b0265ff0000000000199c8716600160301b029c909c1666ffff000000000019909416939093179a909a179890981617959095179390931691909216179390931792909216179055565b61167c33611b1a565b6116985760405162461bcd60e51b8152600401610f2490612e85565b61124c600482611fa1565b6116ac33611b1a565b6116c85760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff9092166101000261ff0019909216919091179055565b3360009081526002602090815260408083206001600160a01b0386168452909152812054828110156117475760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610f24565b611756338561113786856130ec565b5060019392505050565b6000610f64338484611c44565b61177633611b1a565b6117925760405162461bcd60e51b8152600401610f2490612e85565b601a55565b6117a033611b1a565b6117bc5760405162461bcd60e51b8152600401610f2490612e85565b601980549115156101000261ff0019909216919091179055565b6117df33611b1a565b6117fb5760405162461bcd60e51b8152600401610f2490612e85565b601b805460ff1916911515919091179055565b61181733611b1a565b6118335760405162461bcd60e51b8152600401610f2490612e85565b600855565b61184133611b1a565b61185d5760405162461bcd60e51b8152600401610f2490612e85565b61124c600482611b05565b6000806118776012600a613022565b600d546118849190612fbf565b6118906012600a613022565b600e5461189d9190612fbf565b915091509091565b6118ae33611b1a565b6118ca5760405162461bcd60e51b8152600401610f2490612e85565b6118e06118db82633b9aca006130cd565b611fb6565b50565b6118ec33611b1a565b6119085760405162461bcd60e51b8152600401610f2490612e85565b61124c600682611fa1565b61191c33611b1a565b6119385760405162461bcd60e51b8152600401610f2490612e85565b6014805460ff909216620100000262ff000019909216919091179055565b61195f33611b1a565b61197b5760405162461bcd60e51b8152600401610f2490612e85565b601b805461ff001916610100179055565b3361199f6000546001600160a01b031690565b6001600160a01b0316146119f55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f24565b6001600160a01b038116611a5a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f24565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611abe33611b1a565b611ada5760405162461bcd60e51b8152600401610f2490612e85565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000611283836001600160a01b0384166121b2565b600080546001600160a01b0383811691161480610f685750506001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b038316611b9b5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610f24565b6001600160a01b038216611be35760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610f24565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611c8f5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610f24565b6001600160a01b038216611cd85760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610f24565b6000611ce5600485612201565b80611cf65750611cf6600484612201565b80611d1957506001600160a01b0384166000908152600a602052604090205460ff165b80611d3c57506001600160a01b0383166000908152600a602052604090205460ff165b905060006001600160a01b038516301480611d5f57506001600160a01b03841630145b6010549091506000906001600160a01b03878116600160481b90920416148015611da557506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b80611deb57506010546001600160a01b03868116600160481b90920416148015611deb57506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b90508180611df65750805b80611dfe5750825b15611e1357611e0e868686612223565b611f99565b601b54610100900460ff16611f00576000546001600160a01b03878116911614801590611e4e57506000546001600160a01b03868116911614155b15611f0057601054600160401b900460ff1615611ea957846001600160a01b0316866001600160a01b031660008051602061312f8339815191526000604051611e9991815260200190565b60405180910390a3505050505050565b601b54610100900460ff16611f005760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610f24565b6010546000906001600160a01b03888116600160481b909204161480611f4257506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b6010549091506000906001600160a01b03888116600160481b909204161480611f8757506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611f9688888885856122dc565b50505b505050505050565b6000611283836001600160a01b03841661269e565b6019805460ff191660019081179091553060009081526020919091526040812054601054909190611ffb90600160201b810460ff908116916301000000900416612f9a565b60ff169050600060085490508381111561201d5760095460ff161561201d5750825b8083108061202d575061ffff8216155b1561203a575050506121a5565b60105460009061ffff84169061205a906301000000900460ff16846130cd565b6120649190612fbf565b60105490915060009061ffff85169061208790600160201b900460ff16856130cd565b6120919190612fbf565b60105490915060009061ffff8616906120b490600160301b900460ff16866130cd565b6120be9190612fbf565b60105490915060009061ffff8716906120e190600160281b900460ff16876130cd565b6120eb9190612fbf565b905080601660008282546120ff9190612f82565b9091555061210e9050816127b5565b600061211b600286612fbf565b9050600061212982876130ec565b90506000846121388784612f82565b6121429190612f82565b90504761214e82612838565b600061215a82476130ec565b905060008361216986846130cd565b6121739190612fbf565b905061217f86826129b4565b600061218b84476130ec565b905061219681612a8b565b50505050505050505050505050505b506019805460ff19169055565b60008181526001830160205260408120546121f957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f68565b506000610f68565b6001600160a01b03811660009081526001830160205260408120541515611283565b6001600160a01b038316600090815260016020526040902054818110156122875760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f24565b6122918483612b0b565b61229b8383612b50565b826001600160a01b0316846001600160a01b031660008051602061312f833981519152846040516122ce91815260200190565b60405180910390a350505050565b6001600160a01b038085166000908152600160205260408082205492881682529020548481101561234a5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610f24565b6002600e546123599190612fbf565b6008556000831561245e5761236f600689612201565b612409576001600160a01b038816600090815260036020526040902054421015806123a15750601954610100900460ff165b6123e25760405162461bcd60e51b815260206004820152601260248201527153656c6c657220696e2073656c6c4c6f636b60701b6044820152606401610f24565b601a546123ef9042612f82565b6001600160a01b0389166000908152600360205260409020555b600e5486111561244d5760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610f24565b50601054610100900460ff16612570565b84156124bd57600d546124718785612f82565b111561248f5760405162461bcd60e51b8152600401610f2490612eb1565b600f548611156124b15760405162461bcd60e51b8152600401610f2490612eb1565b5060105460ff16612570565b600d546124ca8785612f82565b11156124e85760405162461bcd60e51b8152600401610f2490612eb1565b6124f3600689612201565b612562576001600160a01b038816600090815260036020526040902054421015806125255750601954610100900460ff165b6125625760405162461bcd60e51b815260206004820152600e60248201526d53656e64657220696e204c6f636b60901b6044820152606401610f24565b5060105462010000900460ff165b6010546001600160a01b03898116600160481b90920416148015906125985750601b5460ff16155b80156125a7575060195460ff16155b156125b5576125b586611fb6565b60105460009061260e908890849060ff600160301b8204811691600160281b81048216916125f59163010000008104821691600160201b90910416612f9a565b6125ff9190612f9a565b6126099190612f9a565b612b74565b9050600061261c82896130ec565b90506126288a89612b0b565b3060009081526001602052604081208054849290612647908490612f82565b9091555061265790508982612b50565b886001600160a01b03168a6001600160a01b031660008051602061312f8339815191528360405161268a91815260200190565b60405180910390a350505050505050505050565b600081815260018301602052604081205480156127ab5760006126c26001836130ec565b85549091506000906126d6906001906130ec565b905060008660000182815481106126fd57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061272e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558281526001890190915260409020849055865487908061276f57634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f68565b6000915050610f68565b306000908152600160205260409020548111156127d157600080fd5b30600090815260016020526040812080548392906127f09084906130ec565b9250508190555080600c600082825461280991906130ec565b909155505060405181815261dead90309060008051602061312f8339815191529060200160405180910390a350565b6011546128509030906001600160a01b031683611b51565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128e757600080fd5b505afa1580156128fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291f9190612bea565b8160018151811061294057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260115460405163791ac94760e01b815291169063791ac94790612986908590600090869030904290600401612f12565b600060405180830381600087803b1580156129a057600080fd5b505af1158015611f99573d6000803e3d6000fd5b80601860008282546129c69190612f82565b90915550506011546129e39030906001600160a01b031684611b51565b60115460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015612a4b57600080fd5b505af1158015612a5f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a849190612d3a565b5050505050565b601454600090606490612aa19060ff16846130cd565b612aab9190612fbf565b601454909150600090606490612aca9062010000900460ff16856130cd565b612ad49190612fbf565b90508160156000828254612ae89190612f82565b925050819055508060176000828254612b019190612f82565b9091555050505050565b6001600160a01b038216600090815260016020526040812054612b2f9083906130ec565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b038216600090815260016020526040812054612b2f908390612f82565b60006127108260ff168460ff1686612b8c91906130cd565b612b9691906130cd565b612ba09190612fbf565b949350505050565b80358015158114612bb857600080fd5b919050565b803560ff81168114612bb857600080fd5b600060208284031215612bdf578081fd5b813561128381613119565b600060208284031215612bfb578081fd5b815161128381613119565b60008060408385031215612c18578081fd5b8235612c2381613119565b91506020830135612c3381613119565b809150509250929050565b600080600060608486031215612c52578081fd5b8335612c5d81613119565b92506020840135612c6d81613119565b929592945050506040919091013590565b60008060408385031215612c90578182fd5b8235612c9b81613119565b9150612ca960208401612ba8565b90509250929050565b60008060408385031215612cc4578182fd5b8235612ccf81613119565b946020939093013593505050565b600060208284031215612cee578081fd5b61128382612ba8565b600060208284031215612d08578081fd5b5035919050565b600080600060608486031215612d23578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612d4e578283fd5b8351925060208401519150604084015190509250925092565b600060208284031215612d78578081fd5b61128382612bbd565b600080600080600080600060e0888a031215612d9b578283fd5b612da488612bbd565b9650612db260208901612bbd565b9550612dc060408901612bbd565b9450612dce60608901612bbd565b9350612ddc60808901612bbd565b9250612dea60a08901612bbd565b9150612df860c08901612bbd565b905092959891949750929550565b6000602080835283518082850152825b81811015612e3257858101830151858201604001528201612e16565b81811115612e435783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601290820152710a8c2f0cae640c2e4ca40e8dede40d0d2ced60731b604082015260600190565b60208082526012908201527143616c6c6572206e6f7420696e205465616d60701b604082015260600190565b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b6020808252601c908201527f426c6f636b656420627920616e74697275672066756e6374696f6e7300000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612f615784516001600160a01b031683529383019391830191600101612f3c565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612f9557612f95613103565b500190565b600060ff821660ff84168060ff03821115612fb757612fb7613103565b019392505050565b600082612fda57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561301a57816000190482111561300057613000613103565b8085161561300d57918102915b93841c9390800290612fe4565b509250929050565b600061128360ff84168360008261303b57506001610f68565b8161304857506000610f68565b816001811461305e576002811461306857613084565b6001915050610f68565b60ff84111561307957613079613103565b50506001821b610f68565b5060208310610133831016604e8410600b84101617156130a7575081810a610f68565b6130b18383612fdf565b80600019048211156130c5576130c5613103565b029392505050565b60008160001904831182151516156130e7576130e7613103565b500290565b6000828210156130fe576130fe613103565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146118e057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207742c2b4616d734909cad749db20f95819a86eb3d1e4bffa51b32735917856d664736f6c63430008040033

Deployed Bytecode Sourcemap

16870:18824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17052:68;;;;;;;;;;-1:-1:-1;17052:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5870:25:1;;;5858:2;5843:18;17052:68:0;;;;;;;;24776:25;;;;;;;;;;-1:-1:-1;24776:25:0;;;;;;;;;;;;;;15983:4:1;15971:17;;;15953:36;;15941:2;15926:18;24776:25:0;15908:87:1;33367:94:0;;;;;;;;;;-1:-1:-1;33448:5:0;;;;;;;;;;;;-1:-1:-1;;;33448:5:0;;;;33367:94;;;;;;;:::i;32895:149::-;;;;;;;;;;-1:-1:-1;32895:149:0;;;;;:::i;:::-;;:::i;24739:30::-;;;;;;;;;;-1:-1:-1;24739:30:0;;;;;;;;34252:161;;;;;;;;;;-1:-1:-1;34252:161:0;;;;;:::i;:::-;;:::i;:::-;;;5457:14:1;;5450:22;5432:41;;5420:2;5405:18;34252:161:0;5387:92:1;28995:104:0;;;;;;;;;;-1:-1:-1;28995:104:0;;;;;:::i;:::-;;:::i;17721:35::-;;;;;;;;;;-1:-1:-1;17721:35:0;;;;-1:-1:-1;;;17721:35:0;;;;;;;;;13757:6:1;13745:19;;;13727:38;;13715:2;13700:18;17721:35:0;13682:89:1;30182:249:0;;;;;;;;;;;;;:::i;18365:25::-;;;;;;;;;;-1:-1:-1;18365:25:0;;;;;;;;;;;33677:108;;;;;;;;;;-1:-1:-1;33759:18:0;;33677:108;;17441:67;;;;;;;;;;;;;:::i;17612:34::-;;;;;;;;;;-1:-1:-1;17612:34:0;;;;;;;;;;;34726:392;;;;;;;;;;-1:-1:-1;34726:392:0;;;;;:::i;:::-;;:::i;18595:34::-;;;;;;;;;;-1:-1:-1;18595:34:0;;;;-1:-1:-1;;;18595:34:0;;-1:-1:-1;;;;;18595:34:0;;;;;;-1:-1:-1;;;;;4636:32:1;;;4618:51;;4606:2;4591:18;18595:34:0;4573:102:1;18430:26:0;;;;;;;;;;-1:-1:-1;18430:26:0;;;;-1:-1:-1;;;18430:26:0;;;;;;17665:37;;;;;;;;;;-1:-1:-1;17665:37:0;;;;;;;;;;;33575:94;;;;;;;;;;-1:-1:-1;17432:2:0;33575:94;;17398:36;;;;;;;;;;;;17432:2;17398:36;;17775:42;;;;;;;;;;-1:-1:-1;17775:42:0;;;;-1:-1:-1;;;17775:42:0;;;;;;18397:26;;;;;;;;;;-1:-1:-1;18397:26:0;;;;;;;;;;;35134:205;;;;;;;;;;-1:-1:-1;35134:205:0;;;;;:::i;:::-;;:::i;18048:25::-;;;;;;;;;;-1:-1:-1;18048:25:0;;;;-1:-1:-1;;;;;18048:25:0;;;29872:300;;;;;;;;;;;;;:::i;25259:25::-;;;;;;;;;;;;;;;;24697:27;;;;;;;;;;;;;;;;18310:20;;;;;;;;;;-1:-1:-1;18310:20:0;;;;;;;;24646:38;;;;;;;;;;;;;;;;33058:118;;;;;;;;;;-1:-1:-1;33058:118:0;;;;;:::i;:::-;;:::i;32706:26::-;;;;;;;;;;-1:-1:-1;32706:26:0;;;;;;;;;;;18463:21;;;;;;;;;;-1:-1:-1;18463:21:0;;;;-1:-1:-1;;;18463:21:0;;;;;;18197:46;;;;;;;;;;;;;;;;29599:129;;;;;;;;;;-1:-1:-1;29599:129:0;;;;;:::i;:::-;;:::i;18250:45::-;;;;;;;;;;;;;;;;24845:31;;;;;;;;;;;;;;;;28474:289;;;;;;;;;;-1:-1:-1;28474:289:0;;;;;:::i;:::-;;:::i;32034:644::-;;;;;;;;;;-1:-1:-1;32034:644:0;;;;;:::i;:::-;;:::i;31553:111::-;;;;;;;;;;-1:-1:-1;31553:111:0;;;;;:::i;:::-;;:::i;17000:45::-;;;;;;;;;;-1:-1:-1;17000:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;33793:121;;;;;;;;;;-1:-1:-1;33793:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;33888:18:0;33861:7;33888:18;;;:9;:18;;;;;;;33793:121;8654:140;;;;;;;;;;;;;:::i;18141:49::-;;;;;;;;;;;;;;;;30821:720;;;;;;;;;;-1:-1:-1;30821:720:0;;;;;:::i;:::-;;:::i;17968:73::-;;;;;;;;;;;;17999:42;17968:73;;28956:28;;;;;;;;;;-1:-1:-1;28956:28:0;;;;;;;;28887;;;;;;;;;;-1:-1:-1;28887:28:0;;;;;;;;;;;33265:94;;;;;;;;;;-1:-1:-1;33317:7:0;8494:6;-1:-1:-1;;;;;8494:6:0;33265:94;;18557:29;;;;;;;;;;-1:-1:-1;18557:29:0;;;;-1:-1:-1;;;18557:29:0;;;;;;18636:39;;;;;;;;;;-1:-1:-1;18636:39:0;;;;-1:-1:-1;;;;;18636:39:0;;;33469:98;;;;;;;;;;-1:-1:-1;33552:7:0;;;;;;;;;;;;-1:-1:-1;;;33552:7:0;;;;33469:98;;29473:114;;;;;;;;;;-1:-1:-1;29473:114:0;;;;;:::i;:::-;;:::i;31676:101::-;;;;;;;;;;-1:-1:-1;31676:101:0;;;;;:::i;:::-;;:::i;18086:48::-;;;;;;;;;;;;;;;;35347:342;;;;;;;;;;-1:-1:-1;35347:342:0;;;;;:::i;:::-;;:::i;33922:167::-;;;;;;;;;;-1:-1:-1;33922:167:0;;;;;:::i;:::-;;:::i;30689:118::-;;;;;;;;;;-1:-1:-1;30689:118:0;;;;;:::i;:::-;;:::i;24808:24::-;;;;;;;;;;-1:-1:-1;24808:24:0;;;;;;;;;;;17352:39;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17352:39:0;;;;;30570:107;;;;;;;;;;-1:-1:-1;30570:107:0;;;;;:::i;:::-;;:::i;18491:20::-;;;;;;;;;;-1:-1:-1;18491:20:0;;;;-1:-1:-1;;;18491:20:0;;;;;;30445:113;;;;;;;;;;-1:-1:-1;30445:113:0;;;;;:::i;:::-;;:::i;29107:91::-;;;;;;;;;;-1:-1:-1;29107:91:0;;;;;:::i;:::-;;:::i;24883:26::-;;;;;;;;;;;;;;;;29354:113;;;;;;;;;;-1:-1:-1;29354:113:0;;;;;:::i;:::-;;:::i;17881:80::-;;;;;;;;;;;;17919:42;17881:80;;18337:21;;;;;;;;;;-1:-1:-1;18337:21:0;;;;;;;;;;;24916:25;;;;;;;;;;;;;;;;28018:157;;;;;;;;;;;;;:::i;:::-;;;;15120:25:1;;;15176:2;15161:18;;15154:34;;;;15093:18;28018:157:0;15075:119:1;17301:44:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17301:44:0;;;;;31892:128;;;;;;;;;;-1:-1:-1;31892:128:0;;;;;:::i;:::-;;:::i;29734:130::-;;;;;;;;;;-1:-1:-1;29734:130:0;;;;;:::i;:::-;;:::i;34097:147::-;;;;;;;;;;-1:-1:-1;34097:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;34208:19:0;;;34181:7;34208:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;34097:147;31785:99;;;;;;;;;;-1:-1:-1;31785:99:0;;;;;:::i;:::-;;:::i;32792:89::-;;;;;;;;;;;;;:::i;28769:110::-;;;;;;;;;;-1:-1:-1;28859:12:0;;28769:110;;8808:236;;;;;;;;;;-1:-1:-1;8808:236:0;;;;;:::i;:::-;;:::i;29241:105::-;;;;;;;;;;-1:-1:-1;29241:105:0;;;;;:::i;:::-;;:::i;28922:27::-;;;;;;;;;;;;;;;;28183:279;;;;;;;;;;-1:-1:-1;28378:7:0;;28183:279;;;28378:7;-1:-1:-1;;;28378:7:0;;;;15514:25:1;;-1:-1:-1;;;28387:8:0;;;;15570:2:1;15555:18;;15548:34;28396:13:0;;;;;15598:18:1;;;15591:34;;;;-1:-1:-1;;;28410:13:0;;;;15656:2:1;15641:18;;15634:34;28424:7:0;;;15699:3:1;15684:19;;15677:35;28378:7:0;28432:8;;;;15743:3:1;15728:19;;15721:35;28441:12:0;;;;;15787:3:1;15772:19;;15765:35;15501:3;15486:19;28183:279:0;15468:338:1;17127:45:0;;;;;;;;;;-1:-1:-1;17127:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;32895:149;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;;;;;;;;;32992:22:::1;:44:::0;;-1:-1:-1;;;;;32992:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;32992:44:0;;::::1;::::0;;;::::1;::::0;;32895:149::o;34252:161::-;34329:4;34346:37;34355:10;34367:7;34376:6;34346:8;:37::i;:::-;-1:-1:-1;34401:4:0;34252:161;;;;;:::o;28995:104::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29068:12:::1;:23:::0;;-1:-1:-1;;29068:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28995:104::o;30182:249::-;18837:10;;-1:-1:-1;;;;;18837:10:0;18849;18837:22;18829:49;;;;-1:-1:-1;;;18829:49:0;;9210:2:1;18829:49:0;;;9192:21:1;9249:2;9229:18;;;9222:30;-1:-1:-1;;;9268:18:1;;;9261:44;9322:18;;18829:49:0;9182:164:1;18829:49:0;30253:10:::1;::::0;;30238:14:::1;30274:12:::0;;;;30349:32:::1;::::0;30253:10;;30314::::1;::::0;;;30253;;30349:32:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30335:46;;;30400:4;30392:31;;;::::0;-1:-1:-1;;;30392:31:0;;12753:2:1;30392:31:0::1;::::0;::::1;12735:21:1::0;12792:2;12772:18;;;12765:30;-1:-1:-1;;;12811:18:1;;;12804:45;12866:18;;30392:31:0::1;12725:165:1::0;30392:31:0::1;18889:1;;;30182:249::o:0;17441:67::-;17495:13;17432:2;17495;:13;:::i;:::-;17480:28;;:12;:28;:::i;:::-;17441:67;:::o;34726:392::-;34826:4;34843:36;34853:6;34861:9;34872:6;34843:9;:36::i;:::-;-1:-1:-1;;;;;34919:19:0;;34892:24;34919:19;;;:11;:19;;;;;;;;34939:10;34919:31;;;;;;;;34969:26;;;;34961:59;;;;-1:-1:-1;;;34961:59:0;;8514:2:1;34961:59:0;;;8496:21:1;8553:2;8533:18;;;8526:30;-1:-1:-1;;;8572:18:1;;;8565:50;8632:18;;34961:59:0;8486:170:1;34961:59:0;35033:55;35042:6;35050:10;35062:25;35081:6;35062:16;:25;:::i;:::-;35033:8;:55::i;:::-;-1:-1:-1;35106:4:0;;34726:392;-1:-1:-1;;;;34726:392:0:o;35134:205::-;35242:10;35216:4;35263:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;35263:32:0;;;;;;;;;;35216:4;;35233:76;;35254:7;;35263:45;;35298:10;;35263:45;:::i;29872:300::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29950:16:::1;::::0;;29935:14:::1;29977:18:::0;;;;30090:32:::1;::::0;29950:16;;30023:42:::1;::::0;;;29950:16;;30090:32:::1;4453:14:1::0;33058:118:0;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;33142:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33142:26:0;;::::1;::::0;;;::::1;::::0;;33058:118::o;29599:129::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29686:34:::1;:21;29712:7:::0;29686:25:::1;:34::i;:::-;;29599:129:::0;:::o;28474:289::-;-1:-1:-1;;;;;28604:25:0;;28568:7;28604:25;;;:9;:25;;;;;;28653:15;28643:25;;28640:74;;-1:-1:-1;28701:1:0;;28474:289;-1:-1:-1;;28474:289:0:o;28640:74::-;28731:24;28740:15;28731:8;:24;:::i;:::-;28724:31;28474:289;-1:-1:-1;;;28474:289:0:o;32034:644::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;32185:13:::1;17432:2;32185;:13;:::i;:::-;32172:26;::::0;:11;:26:::1;:::i;:::-;32158:40:::0;-1:-1:-1;32241:13:0::1;17432:2;32241;:13;:::i;:::-;32225:29;::::0;:15;:29:::1;:::i;:::-;32209:45:::0;-1:-1:-1;32291:13:0::1;17432:2;32291;:13;:::i;:::-;32278:26;::::0;:12;:26:::1;:::i;:::-;32265:39:::0;-1:-1:-1;32353:3:0::1;17495:13;17432:2;17495;:13;:::i;:::-;17480:28;::::0;:12:::1;:28;:::i;:::-;32339:17;;;;:::i;:::-;32323:12;:33;;32315:74;;;;-1:-1:-1::0;;;32315:74:0::1;;;;;;;:::i;:::-;32441:3;17495:13;17432:2;17495;:13;:::i;:::-;17480:28;::::0;:12:::1;:28;:::i;:::-;32427:17;;;;:::i;:::-;32408:15;:36;;32400:77;;;;-1:-1:-1::0;;;32400:77:0::1;;;;;;;:::i;:::-;32525:3;17495:13;17432:2;17495;:13;:::i;:::-;17480:28;::::0;:12:::1;:28;:::i;:::-;32511:17;;;;:::i;:::-;32496:11;:32;;32488:73;;;;-1:-1:-1::0;;;32488:73:0::1;;;;;;;:::i;:::-;32572:8;:22:::0;;;;32605:12:::1;:30:::0;32646:9:::1;:24:::0;32034:644::o;31553:111::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;31633:14:::1;:23:::0;;-1:-1:-1;;31633:23:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;31553:111::o;8654:140::-;8573:10;8562:7;8467;8494:6;-1:-1:-1;;;;;8494:6:0;;8429:79;8562:7;-1:-1:-1;;;;;8562:21:0;;8554:66;;;;-1:-1:-1;;;8554:66:0;;10648:2:1;8554:66:0;;;10630:21:1;;;10667:18;;;10660:30;10726:34;10706:18;;;10699:62;10778:18;;8554:66:0;10620:182:1;8554:66:0;8753:1:::1;8737:6:::0;;8716:40:::1;::::0;-1:-1:-1;;;;;8737:6:0;;::::1;::::0;8716:40:::1;::::0;8753:1;;8716:40:::1;8784:1;8767:19:::0;;-1:-1:-1;;;;;;8767:19:0::1;::::0;;8654:140::o;30821:720::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;31015:2:::1;31005:6;:12;;;;30997:43;;;;-1:-1:-1::0;;;30997:43:0::1;;;;;;;:::i;:::-;31070:2;31059:7;:13;;;;31051:44;;;;-1:-1:-1::0;;;31051:44:0::1;;;;;;;:::i;:::-;31129:2;31114:11;:17;;;;31106:48;;;;-1:-1:-1::0;;;31106:48:0::1;;;;;;;:::i;:::-;31165:14;31217::::0;31202;31180:20:::1;31191:9:::0;31180:8;:20:::1;:::i;:::-;:36;;;;:::i;:::-;:51;;;;:::i;:::-;31165:66;;31250:8;:13;;31260:3;31250:13;31242:64;;;::::0;-1:-1:-1;;;31242:64:0;;9897:2:1;31242:64:0::1;::::0;::::1;9879:21:1::0;9936:2;9916:18;;;9909:30;9975:34;9955:18;;;9948:62;-1:-1:-1;;;10026:18:1;;;10019:36;10072:19;;31242:64:0::1;9869:228:1::0;31242:64:0::1;-1:-1:-1::0;31317:7:0::1;:18:::0;;::::1;31509:24:::0;;::::1;::::0;::::1;-1:-1:-1::0;;31482:16:0;;::::1;31317:18;31482:16;-1:-1:-1::0;;31416:28:0;;::::1;-1:-1:-1::0;;;31416:28:0::1;-1:-1:-1::0;;31377:28:0;;::::1;::::0;::::1;31416::::0;;;;-1:-1:-1;;31346:20:0;;::::1;-1:-1:-1::0;;;31346:20:0::1;-1:-1:-1::0;;31317:18:0;;::::1;-1:-1:-1::0;;;31317:18:0::1;31346:20:::0;;;;-1:-1:-1;;31346:20:0;;;;;;;;;;::::1;31416:28:::0;;;;;;;;::::1;31482:16:::0;;;;31457:14;;;::::1;31482:16:::0;;;;::::1;31509:24:::0;;;::::1;;::::0;;30821:720::o;29473:114::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29554:25:::1;:9;29571:7:::0;29554:16:::1;:25::i;31676:101::-:0;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;31751:9:::1;:18:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;31751:18:0;;::::1;::::0;;;::::1;::::0;;31676:101::o;35347:342::-;35490:10;35434:4;35478:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;35478:32:0;;;;;;;;;;35529:35;;;;35521:60;;;;-1:-1:-1;;;35521:60:0;;13097:2:1;35521:60:0;;;13079:21:1;13136:2;13116:18;;;13109:30;-1:-1:-1;;;13155:18:1;;;13148:42;13207:18;;35521:60:0;13069:162:1;35521:60:0;35594:65;35603:10;35615:7;35624:34;35643:15;35624:16;:34;:::i;35594:65::-;-1:-1:-1;35677:4:0;;35347:342;-1:-1:-1;;;35347:342:0:o;33922:167::-;34002:4;34019:40;34029:10;34041:9;34052:6;34019:9;:40::i;30689:118::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;30771:12:::1;:28:::0;30689:118::o;30570:107::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;30644:16:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;30644:25:0;;::::1;::::0;;;::::1;::::0;;30570:107::o;30445:113::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;30527:16:::1;:23:::0;;-1:-1:-1;;30527:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30445:113::o;29107:91::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29175:9:::1;:15:::0;29107:91::o;29354:113::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29437:22:::1;:9;29451:7:::0;29437:13:::1;:22::i;28018:157::-:0;28067:15;;28128:13;17432:2;28128;:13;:::i;:::-;28115:12;;:26;;;;:::i;:::-;28153:13;17432:2;28153;:13;:::i;:::-;28143:9;;:23;;;;:::i;:::-;28108:59;;;;28018:157;;:::o;31892:128::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;31980:32:::1;31999:12;:4:::0;32006:5:::1;31999:12;:::i;:::-;31980:18;:32::i;:::-;31892:128:::0;:::o;29734:130::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;29819:37:::1;:21;29848:7:::0;29819:28:::1;:37::i;31785:99::-:0;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;31859:8:::1;:17:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;31859:17:0;;::::1;::::0;;;::::1;::::0;;31785:99::o;32792:89::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;32852:14:::1;:21:::0;;-1:-1:-1;;32852:21:0::1;;;::::0;;32792:89::o;8808:236::-;8573:10;8562:7;8467;8494:6;-1:-1:-1;;;;;8494:6:0;;8429:79;8562:7;-1:-1:-1;;;;;8562:21:0;;8554:66;;;;-1:-1:-1;;;8554:66:0;;10648:2:1;8554:66:0;;;10630:21:1;;;10667:18;;;10660:30;10726:34;10706:18;;;10699:62;10778:18;;8554:66:0;10620:182:1;8554:66:0;-1:-1:-1;;;;;8889:22:0;::::1;8881:73;;;::::0;-1:-1:-1;;;8881:73:0;;7416:2:1;8881:73:0::1;::::0;::::1;7398:21:1::0;7455:2;7435:18;;;7428:30;7494:34;7474:18;;;7467:62;-1:-1:-1;;;7545:18:1;;;7538:36;7591:19;;8881:73:0::1;7388:228:1::0;8881:73:0::1;8991:6;::::0;;8970:38:::1;::::0;-1:-1:-1;;;;;8970:38:0;;::::1;::::0;8991:6;::::1;::::0;8970:38:::1;::::0;::::1;9019:6;:17:::0;;-1:-1:-1;;;;;;9019:17:0::1;-1:-1:-1::0;;;;;9019:17:0;;;::::1;::::0;;;::::1;::::0;;8808:236::o;29241:105::-;18729:19;18737:10;18729:7;:19::i;:::-;18721:50;;;;-1:-1:-1;;;18721:50:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29318:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;29318:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29241:105::o;15152:152::-;15222:4;15246:50;15251:3;-1:-1:-1;;;;;15271:23:0;;15246:4;:50::i;18912:111::-;18965:4;8494:6;;-1:-1:-1;;;;;18988:13:0;;;8494:6;;18988:13;;:27;;-1:-1:-1;;;;;;;19003:12:0;;;;;:6;:12;;;;;;;;;18912:111::o;34419:299::-;-1:-1:-1;;;;;34512:19:0;;34504:49;;;;-1:-1:-1;;;34504:49:0;;7823:2:1;34504:49:0;;;7805:21:1;7862:2;7842:18;;;7835:30;-1:-1:-1;;;7881:18:1;;;7874:47;7938:18;;34504:49:0;7795:167:1;34504:49:0;-1:-1:-1;;;;;34572:21:0;;34564:49;;;;-1:-1:-1;;;34564:49:0;;10304:2:1;34564:49:0;;;10286:21:1;10343:2;10323:18;;;10316:30;-1:-1:-1;;;10362:18:1;;;10355:45;10417:18;;34564:49:0;10276:165:1;34564:49:0;-1:-1:-1;;;;;34626:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34678:32;;5870:25:1;;;34678:32:0;;5843:18:1;34678:32:0;;;;;;;34419:299;;;:::o;20468:1447::-;-1:-1:-1;;;;;20564:20:0;;20556:51;;;;-1:-1:-1;;;20556:51:0;;6716:2:1;20556:51:0;;;6698:21:1;6755:2;6735:18;;;6728:30;-1:-1:-1;;;6774:18:1;;;6767:48;6832:18;;20556:51:0;6688:168:1;20556:51:0;-1:-1:-1;;;;;20626:23:0;;20618:52;;;;-1:-1:-1;;;20618:52:0;;8169:2:1;20618:52:0;;;8151:21:1;8208:2;8188:18;;;8181:30;-1:-1:-1;;;8227:18:1;;;8220:46;8283:18;;20618:52:0;8141:166:1;20618:52:0;20683:15;20702:26;:9;20721:6;20702:18;:26::i;:::-;:59;;;-1:-1:-1;20732:29:0;:9;20751;20732:18;:29::i;:::-;20702:77;;;-1:-1:-1;;;;;;20765:14:0;;;;;;:6;:14;;;;;;;;20702:77;:98;;;-1:-1:-1;;;;;;20783:17:0;;;;;;:6;:17;;;;;;;;20702:98;20683:118;-1:-1:-1;20814:23:0;-1:-1:-1;;;;;20839:21:0;;20855:4;20839:21;;:49;;-1:-1:-1;;;;;;20864:24:0;;20883:4;20864:24;20839:49;20941:19;;20814:75;;-1:-1:-1;20902:24:0;;-1:-1:-1;;;;;20931:29:0;;;-1:-1:-1;;;20941:19:0;;;;20931:29;:59;;;;-1:-1:-1;;;;;;20964:26:0;;17919:42;20964:26;20931:59;20930:135;;;-1:-1:-1;21018:19:0;;-1:-1:-1;;;;;21005:32:0;;;-1:-1:-1;;;21018:19:0;;;;21005:32;:59;;;;-1:-1:-1;;;;;;21041:23:0;;17919:42;21041:23;21005:59;20902:164;;21084:18;:41;;;;21106:19;21084:41;:55;;;;21129:10;21084:55;21081:827;;;21155:43;21172:6;21180:9;21191:6;21155:16;:43::i;:::-;21081:827;;;21244:14;;;;;;;21239:404;;8467:7;8494:6;-1:-1:-1;;;;;21283:17:0;;;8494:6;;21283:17;;;;:41;;-1:-1:-1;8467:7:0;8494:6;-1:-1:-1;;;;;21304:20:0;;;8494:6;;21304:20;;21283:41;21279:349;;;21353:10;;-1:-1:-1;;;21353:10:0;;;;21349:260;;;21413:9;-1:-1:-1;;;;;21397:28:0;21406:6;-1:-1:-1;;;;;21397:28:0;-1:-1:-1;;;;;;;;;;;21423:1:0;21397:28;;;;5870:25:1;;5858:2;5843:18;;5825:76;21397:28:0;;;;;;;;21452:7;;;20468:1447;;;:::o;21349:260::-;21544:14;;;;;;;21536:49;;;;-1:-1:-1;;;21536:49:0;;11009:2:1;21536:49:0;;;10991:21:1;11048:2;11028:18;;;11021:30;11087:25;11067:18;;;11060:53;11130:18;;21536:49:0;10981:173:1;21536:49:0;21694:19;;21675:10;;-1:-1:-1;;;;;21686:27:0;;;-1:-1:-1;;;21694:19:0;;;;21686:27;;:53;;-1:-1:-1;;;;;;21716:23:0;;17919:42;21716:23;21686:53;21777:19;;21675:64;;-1:-1:-1;21754:11:0;;-1:-1:-1;;;;;21766:30:0;;;-1:-1:-1;;;21777:19:0;;;;21766:30;;:59;;-1:-1:-1;;;;;;21799:26:0;;17919:42;21799:26;21766:59;21754:71;;21840:52;21855:6;21862:9;21872:6;21879:5;21885:6;21840:14;:52::i;:::-;21081:827;;;20468:1447;;;;;;:::o;15318:158::-;15391:4;15415:53;15423:3;-1:-1:-1;;;;;15443:23:0;;15415:7;:53::i;25496:1357::-;25376:27;:34;;-1:-1:-1;;25376:34:0;25406:4;25376:34;;;;;;25614:4:::1;25376:27:::0;25596:24;;;::::1;::::0;;;;;;;;25661:13:::1;::::0;25596:24;;25376:27;25647::::1;::::0;-1:-1:-1;;;25661:13:0;::::1;25376:34:::0;25661:13;;::::1;::::0;25647;;::::1;;:27;:::i;:::-;25631:43;;;;25685:19;25705:9;;25685:29;;25742:8;25728:11;:22;25725:127;;;25770:12;::::0;::::1;;25767:74;;;-1:-1:-1::0;25817:8:0;25767:74:::1;25884:11;25868:15;:27;:40;;;-1:-1:-1::0;25897:11:0::1;::::0;::::1;::::0;25868:40:::1;25865:77;;;25924:7;;;;;25865:77;25991:13;::::0;25952:25:::1;::::0;25978:36:::1;::::0;::::1;::::0;25979:25:::1;::::0;25991:13;;::::1;;;25979:11:::0;:25:::1;:::i;:::-;25978:36;;;;:::i;:::-;26065:13;::::0;25952:62;;-1:-1:-1;26025:25:0::1;::::0;26052:36:::1;::::0;::::1;::::0;26053:25:::1;::::0;-1:-1:-1;;;26065:13:0;::::1;;;26053:11:::0;:25:::1;:::i;:::-;26052:36;;;;:::i;:::-;26133:7;::::0;26025:63;;-1:-1:-1;26099:19:0::1;::::0;26120:30:::1;::::0;::::1;::::0;26121:19:::1;::::0;-1:-1:-1;;;26133:7:0;::::1;;;26121:11:::0;:19:::1;:::i;:::-;26120:30;;;;:::i;:::-;26196:8;::::0;26099:51;;-1:-1:-1;26161:20:0::1;::::0;26183:31:::1;::::0;::::1;::::0;26184:20:::1;::::0;-1:-1:-1;;;26196:8:0;::::1;;;26184:11:::0;:20:::1;:::i;:::-;26183:31;;;;:::i;:::-;26161:53;;26238:12;26225:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;26261:21:0::1;::::0;-1:-1:-1;26269:12:0;26261:7:::1;:21::i;:::-;26295:16;26312:19;26330:1;26312:17:::0;:19:::1;:::i;:::-;26295:36:::0;-1:-1:-1;26342:19:0::1;26362:26;26295:36:::0;26362:17;:26:::1;:::i;:::-;26342:46:::0;-1:-1:-1;26401:17:0::1;26449:11:::0;26419:29:::1;26431:17:::0;26342:46;26419:29:::1;:::i;:::-;:41;;;;:::i;:::-;26401:59:::0;-1:-1:-1;26499:21:0::1;26531:27;26401:59:::0;26531:16:::1;:27::i;:::-;26569:14;26585:41;26609:17:::0;26585:21:::1;:41;:::i;:::-;26569:58:::0;-1:-1:-1;26638:14:0::1;26676:9:::0;26656:18:::1;26663:11:::0;26569:58;26656:18:::1;:::i;:::-;26655:30;;;;:::i;:::-;26638:47;;26696:31;26710:8;26720:6;26696:13;:31::i;:::-;26738:20;26760:41;26784:17:::0;26760:21:::1;:41;:::i;:::-;26738:64;;26813:32;26832:12;26813:18;:32::i;:::-;25421:1;;;;;;;;;;;;;;;-1:-1:-1::0;25433:27:0;:35;;-1:-1:-1;;25433:35:0;;;25496:1357::o;12740:305::-;12803:4;13829:19;;;:12;;;:19;;;;;;12820:218;;-1:-1:-1;12863:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12937:18;;12915:19;;;:12;;;:19;;;;;;:40;;;;12970:11;;12820:218;-1:-1:-1;13021:5:0;13014:12;;15490:167;-1:-1:-1;;;;;15624:23:0;;15570:4;13829:19;;;:12;;;:19;;;;;;:24;;15594:55;13732:129;23723:351;-1:-1:-1;;;;;23842:17:0;;23818:21;23842:17;;;:9;:17;;;;;;23878:23;;;;23870:60;;;;-1:-1:-1;;;23870:60:0;;7063:2:1;23870:60:0;;;7045:21:1;7102:2;7082:18;;;7075:30;-1:-1:-1;;;7121:18:1;;;7114:54;7185:18;;23870:60:0;7035:174:1;23870:60:0;23944:27;23957:6;23964;23944:12;:27::i;:::-;23985:28;23995:9;24006:6;23985:9;:28::i;:::-;24047:9;-1:-1:-1;;;;;24031:33:0;24040:6;-1:-1:-1;;;;;24031:33:0;-1:-1:-1;;;;;;;;;;;24057:6:0;24031:33;;;;5870:25:1;;5858:2;5843:18;;5825:76;24031:33:0;;;;;;;;23723:351;;;;:::o;21933:1778::-;-1:-1:-1;;;;;22076:20:0;;;22049:24;22076:20;;;:9;:20;;;;;;;22131:17;;;;;;;;22167:23;;;;22159:60;;;;-1:-1:-1;;;22159:60:0;;7063:2:1;22159:60:0;;;7045:21:1;7102:2;7082:18;;;7075:30;-1:-1:-1;;;7121:18:1;;;7114:54;7185:18;;22159:60:0;7035:174:1;22159:60:0;22256:1;22246:9;;:11;;;;:::i;:::-;22234:9;:23;22270:9;22290:893;;;;22319:38;:21;22350:6;22319:30;:38::i;:::-;22315:247;;-1:-1:-1;;;;;22396:17:0;;;;;;:9;:17;;;;;;22415:15;-1:-1:-1;22396:34:0;;:52;;-1:-1:-1;22432:16:0;;;;;;;22396:52;22388:82;;;;-1:-1:-1;;;22388:82:0;;13438:2:1;22388:82:0;;;13420:21:1;13477:2;13457:18;;;13450:30;-1:-1:-1;;;13496:18:1;;;13489:48;13554:18;;22388:82:0;13410:168:1;22388:82:0;22534:12;;22518:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;22500:17:0;;;;;;:9;:17;;;;;:46;22315:247;22606:9;;22598:6;:17;;22590:44;;;;-1:-1:-1;;;22590:44:0;;9553:2:1;22590:44:0;;;9535:21:1;9592:2;9572:18;;;9565:30;-1:-1:-1;;;9611:18:1;;;9604:45;9666:18;;22590:44:0;9525:165:1;22590:44:0;-1:-1:-1;22653:8:0;;;;;;;22290:893;;;22684:5;22681:502;;;22745:12;;22720:23;22737:6;22720:16;:23;:::i;:::-;:37;;22712:65;;;;-1:-1:-1;;;22712:65:0;;;;;;;:::i;:::-;22808:8;;22800:6;:16;;22792:45;;;;-1:-1:-1;;;22792:45:0;;;;;;;:::i;:::-;-1:-1:-1;22856:7:0;;;;22681:502;;;22938:12;;22913:23;22930:6;22913:16;:23;:::i;:::-;:37;;22905:65;;;;-1:-1:-1;;;22905:65:0;;;;;;;:::i;:::-;23003:38;:21;23034:6;23003:30;:38::i;:::-;22999:139;;-1:-1:-1;;;;;23068:17:0;;;;;;:9;:17;;;;;;23087:15;-1:-1:-1;23068:34:0;;:52;;-1:-1:-1;23104:16:0;;;;;;;23068:52;23060:78;;;;-1:-1:-1;;;23060:78:0;;12053:2:1;23060:78:0;;;12035:21:1;12092:2;12072:18;;;12065:30;-1:-1:-1;;;12111:18:1;;;12104:44;12165:18;;23060:78:0;12025:164:1;23060:78:0;-1:-1:-1;23157:12:0;;;;;;;22681:502;23214:19;;-1:-1:-1;;;;;23206:27:0;;;-1:-1:-1;;;23214:19:0;;;;23206:27;;;;23205:50;;-1:-1:-1;23238:16:0;;;;23237:17;23205:50;:82;;;;-1:-1:-1;23259:27:0;;;;23258:28;23205:82;23202:126;;;23302:26;23321:6;23302:18;:26::i;:::-;23428:7;;23342:21;;23364:72;;23378:6;;23386:3;;23428:7;-1:-1:-1;;;23428:7:0;;;;;-1:-1:-1;;;23419:8:0;;;;;23391:27;;23405:13;;;;;;-1:-1:-1;;;23391:13:0;;;;:27;:::i;:::-;:36;;;;:::i;:::-;:44;;;;:::i;:::-;23364:13;:72::i;:::-;23342:94;-1:-1:-1;23450:19:0;23470:22;23342:94;23470:6;:22;:::i;:::-;23450:42;;23508:27;23521:6;23528;23508:12;:27::i;:::-;23569:4;23551:24;;;;:9;:24;;;;;:41;;23579:13;;23551:24;:41;;23579:13;;23551:41;:::i;:::-;;;;-1:-1:-1;23608:33:0;;-1:-1:-1;23618:9:0;23629:11;23608:9;:33::i;:::-;23675:9;-1:-1:-1;;;;;23659:38:0;23668:6;-1:-1:-1;;;;;23659:38:0;-1:-1:-1;;;;;;;;;;;23685:11:0;23659:38;;;;5870:25:1;;5858:2;5843:18;;5825:76;23659:38:0;;;;;;;;21933:1778;;;;;;;;;;:::o;13059:659::-;13125:4;13166:19;;;:12;;;:19;;;;;;13202:15;;13198:513;;13251:21;13275:14;13288:1;13275:10;:14;:::i;:::-;13324:18;;13251:38;;-1:-1:-1;13304:17:0;;13324:22;;13345:1;;13324:22;:::i;:::-;13304:42;;13372:17;13392:3;:11;;13404:9;13392:22;;;;;;-1:-1:-1;;;13392:22:0;;;;;;;;;;;;;;;;;13372:42;;13467:9;13438:3;:11;;13450:13;13438:26;;;;;;-1:-1:-1;;;13438:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;13498:23;;;:12;;;:23;;;;;;:36;;;13559:17;;13498:3;;13559:17;;;-1:-1:-1;;;13559:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;13607:3;:12;;:19;13620:5;13607:19;;;;;;;;;;;13600:26;;;13650:4;13643:11;;;;;;;;13198:513;13694:5;13687:12;;;;;27766:240;27844:4;27826:24;;;;:9;:24;;;;;;:34;-1:-1:-1;27826:34:0;27818:43;;;;;;27890:4;27872:24;;;;:9;:24;;;;;:34;;27900:6;;27872:24;:34;;27900:6;;27872:34;:::i;:::-;;;;;;;;27939:6;27917:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;27961:37:0;;5870:25:1;;;17999:42:0;;27978:4;;-1:-1:-1;;;;;;;;;;;27961:37:0;5858:2:1;5843:18;27961:37:0;;;;;;;27766:240;:::o;26865:455::-;26958:14;;26926:56;;26943:4;;-1:-1:-1;;;;;26958:14:0;26975:6;26926:8;:56::i;:::-;27017:16;;;27031:1;27017:16;;;;;;;;26993:21;;27017:16;;;;;;;;;;-1:-1:-1;27017:16:0;26993:40;;27062:4;27044;27049:1;27044:7;;;;;;-1:-1:-1;;;27044:7:0;;;;;;;;;-1:-1:-1;;;;;27044:23:0;;;:7;;;;;;;;;;:23;;;;27088:14;;:21;;;-1:-1:-1;;;27088:21:0;;;;:14;;;;;:19;;:21;;;;;27044:7;;27088:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27078:4;27083:1;27078:7;;;;;;-1:-1:-1;;;27078:7:0;;;;;;;;;-1:-1:-1;;;;;27078:31:0;;;:7;;;;;;;;;:31;27122:14;;:190;;-1:-1:-1;;;27122:190:0;;:14;;;:65;;:190;;27202:6;;27122:14;;27239:4;;27266;;27286:15;;27122:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27332:397;27426:9;27414:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;27478:14:0;;27446:61;;27463:4;;-1:-1:-1;;;;;27478:14:0;27495:11;27446:8;:61::i;:::-;27518:14;;:203;;-1:-1:-1;;;27518:203:0;;27589:4;27518:203;;;5021:34:1;;;5071:18;;;5064:34;;;27518:14:0;5114:18:1;;;5107:34;;;5157:18;;;5150:34;5200:19;;;5193:44;27695:15:0;5253:19:1;;;5246:35;-1:-1:-1;;;;;27518:14:0;;;;:30;;27556:9;;4955:19:1;;27518:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27332:397;;:::o;24970:265::-;25074:14;;25036:22;;25090:3;;25062:26;;25074:14;;25062:9;:26;:::i;:::-;25061:32;;;;:::i;:::-;25136:8;;25036:57;;-1:-1:-1;25104:16:0;;25146:3;;25124:20;;25136:8;;;;;25124:9;:20;:::i;:::-;25123:26;;;;:::i;:::-;25104:45;;25180:14;25162:16;;:32;;;;;;;:::i;:::-;;;;;;;;25217:8;25205:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;24970:265:0:o;24433:158::-;-1:-1:-1;;;;;24525:15:0;;24507:17;24525:15;;;:9;:15;;;;;;:22;;24541:6;;24525:22;:::i;:::-;-1:-1:-1;;;;;24558:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;24433:158:0:o;24260:157::-;-1:-1:-1;;;;;24349:15:0;;24331:17;24349:15;;;:9;:15;;;;;;:22;;24365:6;;24349:22;:::i;24086:156::-;24176:7;24229:5;24215:10;24204:21;;24211:3;24204:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;24203:31;;;;:::i;:::-;24196:38;24086:156;-1:-1:-1;;;;24086:156:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:156::-;245:20;;305:4;294:16;;284:27;;274:2;;325:1;322;315:12;340:257;399:6;452:2;440:9;431:7;427:23;423:32;420:2;;;473:6;465;458:22;420:2;517:9;504:23;536:31;561:5;536:31;:::i;602:261::-;672:6;725:2;713:9;704:7;700:23;696:32;693:2;;;746:6;738;731:22;693:2;783:9;777:16;802:31;827:5;802:31;:::i;868:398::-;936:6;944;997:2;985:9;976:7;972:23;968:32;965:2;;;1018:6;1010;1003:22;965:2;1062:9;1049:23;1081:31;1106:5;1081:31;:::i;:::-;1131:5;-1:-1:-1;1188:2:1;1173:18;;1160:32;1201:33;1160:32;1201:33;:::i;:::-;1253:7;1243:17;;;955:311;;;;;:::o;1271:466::-;1348:6;1356;1364;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1438:6;1430;1423:22;1385:2;1482:9;1469:23;1501:31;1526:5;1501:31;:::i;:::-;1551:5;-1:-1:-1;1608:2:1;1593:18;;1580:32;1621:33;1580:32;1621:33;:::i;:::-;1375:362;;1673:7;;-1:-1:-1;;;1727:2:1;1712:18;;;;1699:32;;1375:362::o;1742:325::-;1807:6;1815;1868:2;1856:9;1847:7;1843:23;1839:32;1836:2;;;1889:6;1881;1874:22;1836:2;1933:9;1920:23;1952:31;1977:5;1952:31;:::i;:::-;2002:5;-1:-1:-1;2026:35:1;2057:2;2042:18;;2026:35;:::i;:::-;2016:45;;1826:241;;;;;:::o;2072:325::-;2140:6;2148;2201:2;2189:9;2180:7;2176:23;2172:32;2169:2;;;2222:6;2214;2207:22;2169:2;2266:9;2253:23;2285:31;2310:5;2285:31;:::i;:::-;2335:5;2387:2;2372:18;;;;2359:32;;-1:-1:-1;;;2159:238:1:o;2402:190::-;2458:6;2511:2;2499:9;2490:7;2486:23;2482:32;2479:2;;;2532:6;2524;2517:22;2479:2;2560:26;2576:9;2560:26;:::i;2597:190::-;2656:6;2709:2;2697:9;2688:7;2684:23;2680:32;2677:2;;;2730:6;2722;2715:22;2677:2;-1:-1:-1;2758:23:1;;2667:120;-1:-1:-1;2667:120:1:o;2792:326::-;2869:6;2877;2885;2938:2;2926:9;2917:7;2913:23;2909:32;2906:2;;;2959:6;2951;2944:22;2906:2;-1:-1:-1;;2987:23:1;;;3057:2;3042:18;;3029:32;;-1:-1:-1;3108:2:1;3093:18;;;3080:32;;2896:222;-1:-1:-1;2896:222:1:o;3123:316::-;3211:6;3219;3227;3280:2;3268:9;3259:7;3255:23;3251:32;3248:2;;;3301:6;3293;3286:22;3248:2;3335:9;3329:16;3319:26;;3385:2;3374:9;3370:18;3364:25;3354:35;;3429:2;3418:9;3414:18;3408:25;3398:35;;3238:201;;;;;:::o;3444:192::-;3501:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:2;;;3575:6;3567;3560:22;3522:2;3603:27;3620:9;3603:27;:::i;3641:616::-;3740:6;3748;3756;3764;3772;3780;3788;3841:3;3829:9;3820:7;3816:23;3812:33;3809:2;;;3863:6;3855;3848:22;3809:2;3891:27;3908:9;3891:27;:::i;:::-;3881:37;;3937:36;3969:2;3958:9;3954:18;3937:36;:::i;:::-;3927:46;;3992:36;4024:2;4013:9;4009:18;3992:36;:::i;:::-;3982:46;;4047:36;4079:2;4068:9;4064:18;4047:36;:::i;:::-;4037:46;;4102:37;4134:3;4123:9;4119:19;4102:37;:::i;:::-;4092:47;;4158:37;4190:3;4179:9;4175:19;4158:37;:::i;:::-;4148:47;;4214:37;4246:3;4235:9;4231:19;4214:37;:::i;:::-;4204:47;;3799:458;;;;;;;;;;:::o;5906:603::-;6018:4;6047:2;6076;6065:9;6058:21;6108:6;6102:13;6151:6;6146:2;6135:9;6131:18;6124:34;6176:4;6189:140;6203:6;6200:1;6197:13;6189:140;;;6298:14;;;6294:23;;6288:30;6264:17;;;6283:2;6260:26;6253:66;6218:10;;6189:140;;;6347:6;6344:1;6341:13;6338:2;;;6417:4;6412:2;6403:6;6392:9;6388:22;6384:31;6377:45;6338:2;-1:-1:-1;6493:2:1;6472:15;-1:-1:-1;;6468:29:1;6453:45;;;;6500:2;6449:54;;6027:482;-1:-1:-1;;;6027:482:1:o;8661:342::-;8863:2;8845:21;;;8902:2;8882:18;;;8875:30;-1:-1:-1;;;8936:2:1;8921:18;;8914:48;8994:2;8979:18;;8835:168::o;11159:342::-;11361:2;11343:21;;;11400:2;11380:18;;;11373:30;-1:-1:-1;;;11434:2:1;11419:18;;11412:48;11492:2;11477:18;;11333:168::o;11506:340::-;11708:2;11690:21;;;11747:2;11727:18;;;11720:30;-1:-1:-1;;;11781:2:1;11766:18;;11759:46;11837:2;11822:18;;11680:166::o;12194:352::-;12396:2;12378:21;;;12435:2;12415:18;;;12408:30;12474;12469:2;12454:18;;12447:58;12537:2;12522:18;;12368:178::o;13958:983::-;14220:4;14268:3;14257:9;14253:19;14299:6;14288:9;14281:25;14325:2;14363:6;14358:2;14347:9;14343:18;14336:34;14406:3;14401:2;14390:9;14386:18;14379:31;14430:6;14465;14459:13;14496:6;14488;14481:22;14534:3;14523:9;14519:19;14512:26;;14573:2;14565:6;14561:15;14547:29;;14594:4;14607:195;14621:6;14618:1;14615:13;14607:195;;;14686:13;;-1:-1:-1;;;;;14682:39:1;14670:52;;14777:15;;;;14742:12;;;;14718:1;14636:9;14607:195;;;-1:-1:-1;;;;;;;14858:32:1;;;;14853:2;14838:18;;14831:60;-1:-1:-1;;;14922:3:1;14907:19;14900:35;14819:3;14229:712;-1:-1:-1;;;14229:712:1:o;16000:128::-;16040:3;16071:1;16067:6;16064:1;16061:13;16058:2;;;16077:18;;:::i;:::-;-1:-1:-1;16113:9:1;;16048:80::o;16133:204::-;16171:3;16207:4;16204:1;16200:12;16239:4;16236:1;16232:12;16274:3;16268:4;16264:14;16259:3;16256:23;16253:2;;;16282:18;;:::i;:::-;16318:13;;16179:158;-1:-1:-1;;;16179:158:1:o;16342:217::-;16382:1;16408;16398:2;;-1:-1:-1;;;16433:31:1;;16487:4;16484:1;16477:15;16515:4;16440:1;16505:15;16398:2;-1:-1:-1;16544:9:1;;16388:171::o;16564:422::-;16653:1;16696:5;16653:1;16710:270;16731:7;16721:8;16718:21;16710:270;;;16790:4;16786:1;16782:6;16778:17;16772:4;16769:27;16766:2;;;16799:18;;:::i;:::-;16849:7;16839:8;16835:22;16832:2;;;16869:16;;;;16832:2;16948:22;;;;16908:15;;;;16710:270;;;16714:3;16628:358;;;;;:::o;16991:140::-;17049:5;17078:47;17119:4;17109:8;17105:19;17099:4;17185:5;17215:8;17205:2;;-1:-1:-1;17256:1:1;17270:5;;17205:2;17304:4;17294:2;;-1:-1:-1;17341:1:1;17355:5;;17294:2;17386:4;17404:1;17399:59;;;;17472:1;17467:130;;;;17379:218;;17399:59;17429:1;17420:10;;17443:5;;;17467:130;17504:3;17494:8;17491:17;17488:2;;;17511:18;;:::i;:::-;-1:-1:-1;;17567:1:1;17553:16;;17582:5;;17379:218;;17681:2;17671:8;17668:16;17662:3;17656:4;17653:13;17649:36;17643:2;17633:8;17630:16;17625:2;17619:4;17616:12;17612:35;17609:77;17606:2;;;-1:-1:-1;17718:19:1;;;17750:5;;17606:2;17797:34;17822:8;17816:4;17797:34;:::i;:::-;17867:6;17863:1;17859:6;17855:19;17846:7;17843:32;17840:2;;;17878:18;;:::i;:::-;17916:20;;17195:747;-1:-1:-1;;;17195:747:1:o;17947:168::-;17987:7;18053:1;18049;18045:6;18041:14;18038:1;18035:21;18030:1;18023:9;18016:17;18012:45;18009:2;;;18060:18;;:::i;:::-;-1:-1:-1;18100:9:1;;17999:116::o;18120:125::-;18160:4;18188:1;18185;18182:8;18179:2;;;18193:18;;:::i;:::-;-1:-1:-1;18230:9:1;;18169:76::o;18250:127::-;18311:10;18306:3;18302:20;18299:1;18292:31;18342:4;18339:1;18332:15;18366:4;18363:1;18356:15;18382:131;-1:-1:-1;;;;;18457:31:1;;18447:42;;18437:2;;18503:1;18500;18493:12

Swarm Source

ipfs://7742c2b4616d734909cad749db20f95819a86eb3d1e4bffa51b32735917856d6
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.