ETH Price: $2,286.00 (-3.42%)

Token

The Year of the Dragon (Year Dragon)
 

Overview

Max Total Supply

202,400,000 Year Dragon

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 5 Decimals)

Balance
68,645.24928 Year Dragon

Value
$0.00
0x3a162130c8c13857ee6091d67a59551adf9c9517
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Year_Dragon

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-04
*/

// SPDX-License-Identifier: MIT

//telegram: https://t.me/The_Year_of_the_Dragon_2024
//website: https://year-dragon.com

//███████████████▀▀▀██████████████████████
//███████▀▀▀████▄▄░░░░▀███████████████████
//██████▄▄░░░░░▀███▄░░░░██████████████████
//████████▀█▄▄░░░░▀██▄▄▄▄█████████████████
//████▀░░░░░▀▀█▄░░░▄█▀▀▀▀▀▀███████████████
//██▀░░░░░░░░░░▀███▀░░░░░░░░░▀▀███████████
//██░░░░░░░░░░░░░░░░░▄█▄▄░░░░░░░██████████
//██░░░░░░░░░░░░░▄▄░░░▀███░░░░░░▀█████████
//██░░░░░░░░░░░░░█▀░░░░░░░░░░░░░░░▀▀██████
//██░░░░░░░░▄█████░░░░░░▄█▀░▄▄░░░░░░░░░▀██
//██░░░░░░░███████░░░░░░███░░██░░░░░░░░░██
//██░░░░░░░████████░░░░░███▄░▀███▄░▄▄░░░██
//██░░░░░░░█████████░░░░░▀██▄░▄███████▄░██
//██░░░░░░░██████████▄░░░░░██▄░▀▀▀████████
//██░░░░░░░▀███████████▄░░░▀▀██▄░█████████
//██░░░░░░░░▀████████████▄▄░░░░▀▀▀▀███████
//██░░░░░░░░░▀██████████████▄▄▄▄▄▄████████
//██░░░░░░░░░░░▀██████████████████████████
//██░░░░░░░░░░░░░▀████████████████████████




pragma solidity 0.8.12;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 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
    ) internal 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 SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
           if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Year_Dragon is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string public _name;
    string public _symbol;
    uint8 public _decimals;
    uint256 public _totalSupply;

    address payable public marketingAddress;
    address payable public treasuryAddress;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee;
    uint256 public _buyMarketingFee;
    uint256 public _buyTreasuryFee;
    
    uint256 public _sellLiquidityFee;
    uint256 public _sellMarketingFee;
    uint256 public _sellTreasuryFee;

    uint256 public _liquidityShare;
    uint256 public _marketingShare;
    uint256 public _treasuryShare;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;
    uint256 public _totalDistributionShares;

    uint256 private _maxTxAmount;
    uint256 private _walletMax;
    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool public inSwapAndLiquify;
    bool public swapAndLiquifyEnabled;
    bool public swapAndLiquifyByLimitOnly;
    bool public checkWalletLimit;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() {

        _name = "The Year of the Dragon";
        _symbol = "Year Dragon";
        _decimals = 5
        ;
        _totalSupply = 202400000 * 10**_decimals;
        _maxTxAmount = 2024000 * 10**_decimals; 
        _walletMax = 2024000 * 10**_decimals;
        minimumTokensBeforeSwap = 500000 * 10**3; 
                
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        marketingAddress = payable(0xE70ff1B4781d5afd243a94FE7c58Aa30522466C8);
        treasuryAddress = payable(0x000000000000000000000000000000000000dEaD);

        _buyLiquidityFee = 0;
        _buyMarketingFee = 5;
        _buyTreasuryFee = 0;
    
        _sellLiquidityFee = 0;
        _sellMarketingFee = 5;
        _sellTreasuryFee = 0;

        _liquidityShare = 0;
        _marketingShare = 5;
        _treasuryShare = 0;

        _totalTaxIfBuying = 5;
        _totalTaxIfSelling = 5;
        _totalDistributionShares = 5;

        swapAndLiquifyEnabled = true;
        swapAndLiquifyByLimitOnly = false;
        checkWalletLimit = true;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[marketingAddress] = true;
        isExcludedFromFee[treasuryAddress] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTreasuryFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTreasuryFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_treasuryShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[marketingAddress] = true;
        isWalletLimitExempt[treasuryAddress] = true;
        

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[marketingAddress] = true;
        isTxLimitExempt[treasuryAddress] = true;
        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTreasuryFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTreasuryFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTreasuryFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTreasuryFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _treasuryShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_treasuryShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setmarketingAddress(address newAddress) external onlyOwner() {
        marketingAddress = payable(newAddress);
    }

    function setTreasuryAddress(address newAddress) external onlyOwner() {
        treasuryAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

   

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {        
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }      

        
            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);
           
            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_treasuryShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(treasuryAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function withdrawStuckETH(address recipient, uint256 amount) public onlyOwner {
        payable(recipient).transfer(amount);
    }

    function withdrawForeignToken(address tokenAddress, address recipient, uint256 amount) public onlyOwner {
        IERC20 foreignToken = IERC20(tokenAddress);
        foreignToken.transfer(recipient, amount);
    }
    
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","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":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","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":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwapAndLiquify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setmarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405261dead6080523480156200001757600080fd5b5062000023336200060e565b6040805180820190915260168082527f5468652059656172206f662074686520447261676f6e000000000000000000006020909201918252620000699160019162000675565b5060408051808201909152600b8082526a2cb2b0b910223930b3b7b760a91b60209092019182526200009e9160029162000675565b506003805460ff19166005908117909155620000bc90600a6200082e565b620000cc90630c1061006200083f565b600455600354620000e29060ff16600a6200082e565b620000f190621ee2406200083f565b601955600354620001079060ff16600a6200082e565b6200011690621ee2406200083f565b601a55631dcd6500601b556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa15801562000175573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019b919062000861565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020f919062000861565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000283919062000861565b601d80546001600160a01b039283166001600160a01b0319918216178255601c8054938516938216841790556004543060009081526008602090815260408083209683529590529384205560058054821673e70ff1b4781d5afd243a94fe7c58aa30522466c81781556006805490921661dead17909155600d839055600e819055600f8390556010839055601181905560128390556013839055601481905560158390556016819055601781905560185580546201000160a81b62ffffff60a81b19909116179055600190600990620003646000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560055482168152600984528281208054861660019081179091556006549092168152828120805486168317905530815291909120805490931617909155600f54600e54600d546200040693620003f29290620017df6200065e821b17901c565b6200065e60201b620017df1790919060201c565b60168190555062000431601254620003f26011546010546200065e60201b620017df1790919060201c565b6017819055506200045c601554620003f26014546013546200065e60201b620017df1790919060201c565b6018556001600a6000620004786000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601d5482168152600a9093528183208054851660019081179091553084528284208054861682179055600554821684528284208054861682179055600654909116835290822080549093168117909255600b906200050c6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600b8452828120805486166001908117909155600554831682528382208054871682179055600654831682528382208054871682179055601d549092168152600c909352908220805490931617909155600454906007906200059c3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600454604051620005ff91815260200190565b60405180910390a350620008eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200066c828462000893565b90505b92915050565b8280546200068390620008ae565b90600052602060002090601f016020900481019282620006a75760008555620006f2565b82601f10620006c257805160ff1916838001178555620006f2565b82800160010185558215620006f2579182015b82811115620006f2578251825591602001919060010190620006d5565b506200070092915062000704565b5090565b5b8082111562000700576000815560010162000705565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007725781600019048211156200075657620007566200071b565b808516156200076457918102915b93841c939080029062000736565b509250929050565b6000826200078b575060016200066f565b816200079a575060006200066f565b8160018114620007b35760028114620007be57620007de565b60019150506200066f565b60ff841115620007d257620007d26200071b565b50506001821b6200066f565b5060208310610133831016604e8410600b841016171562000803575081810a6200066f565b6200080f838362000731565b80600019048211156200082657620008266200071b565b029392505050565b60006200066c60ff8416836200077a565b60008160001904831182151516156200085c576200085c6200071b565b500290565b6000602082840312156200087457600080fd5b81516001600160a01b03811681146200088c57600080fd5b9392505050565b60008219821115620008a957620008a96200071b565b500190565b600181811c90821680620008c357607f821691505b60208210811415620008e557634e487b7160e01b600052602260045260246000fd5b50919050565b60805161276d6200090e600039600081816105850152610eb0015261276d6000f3fe6080604052600436106103bc5760003560e01c8063844d591c116101f2578063c5f956af1161010d578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610b29578063f2fde38b14610b49578063f84ba65d14610b69578063f872858a14610b8957600080fd5b8063dd62ed3e14610a8d578063ec28438a14610ad3578063ef422a1814610af3578063f0cd1dac14610b1357600080fd5b8063d28d8852116100dc578063d28d885214610a2b578063d628df9c14610a40578063da00097d14610a56578063dc44b6a014610a7757600080fd5b8063c5f956af146109a5578063c816841b146109c5578063c8607952146109e5578063c867d60b146109fb57600080fd5b8063a5d69d1f11610185578063b8fe3eb511610154578063b8fe3eb51461092f578063c2d4640e1461094f578063c49b9a801461096f578063c5d241891461098f57600080fd5b8063a5d69d1f146108ba578063a5ece941146108da578063a9059cbb146108fa578063b09f12661461091a57600080fd5b806395d89b41116101c157806395d89b411461085a578063a073d37f1461086f578063a08e671f14610884578063a457c2d71461089a57600080fd5b8063844d591c146107d657806388790a68146107f65780638b42507f1461080c5780638da5cb5b1461083c57600080fd5b8063313ce567116102e257806357a5802f116102755780636d067696116102445780636d0676961461075f57806370a0823114610775578063715018a6146107ab57806382eefb43146107c057600080fd5b806357a5802f146106f35780635881f3ef1461070957806361a23c69146107295780636605bfda1461073f57600080fd5b80633eaaf86b116102b15780633eaaf86b1461065c5780633ecad271146106725780634a74bb02146106a25780635342acb4146106c357600080fd5b8063313ce567146105dc57806332424aa314610602578063395093511461061c5780633b97084a1461063c57600080fd5b80632198cf6c1161035a5780632563ae83116103295780632563ae831461055357806327c8f835146105735780632b112e49146105a75780632d51ec93146105bc57600080fd5b80632198cf6c146104dc578063220f6696146104fc57806323b872dd1461051d57806324fcf8cf1461053d57600080fd5b8063095ea7b311610396578063095ea7b3146104355780631694505e1461046557806318160ddd1461049d5780631870517a146104bc57600080fd5b80630659ce5c146103c857806306fdde03146103ea578063087332141461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e336600461231f565b610baa565b005b3480156103f657600080fd5b506103ff610c5a565b60405161040c9190612360565b60405180910390f35b34801561042157600080fd5b506103e86104303660046123b5565b610cec565b34801561044157600080fd5b506104556104503660046123e1565b610d41565b604051901515815260200161040c565b34801561047157600080fd5b50601c54610485906001600160a01b031681565b6040516001600160a01b03909116815260200161040c565b3480156104a957600080fd5b506004545b60405190815260200161040c565b3480156104c857600080fd5b506103e86104d73660046123b5565b610d57565b3480156104e857600080fd5b506103e86104f736600461241b565b610da6565b34801561050857600080fd5b50601d5461045590600160a01b900460ff1681565b34801561052957600080fd5b5061045561053836600461231f565b610dfb565b34801561054957600080fd5b506104ae60125481565b34801561055f57600080fd5b506103e861056e366004612454565b610e66565b34801561057f57600080fd5b506104857f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b357600080fd5b506104ae610eae565b3480156105c857600080fd5b506103e86105d7366004612471565b610ef8565b3480156105e857600080fd5b5060035460ff165b60405160ff909116815260200161040c565b34801561060e57600080fd5b506003546105f09060ff1681565b34801561062857600080fd5b506104556106373660046123e1565b610f44565b34801561064857600080fd5b506103e861065736600461248e565b610f7a565b34801561066857600080fd5b506104ae60045481565b34801561067e57600080fd5b5061045561068d366004612471565b600c6020526000908152604090205460ff1681565b3480156106ae57600080fd5b50601d5461045590600160a81b900460ff1681565b3480156106cf57600080fd5b506104556106de366004612471565b60096020526000908152604090205460ff1681565b3480156106ff57600080fd5b506104ae60135481565b34801561071557600080fd5b50610485610724366004612471565b610fa9565b34801561073557600080fd5b506104ae60145481565b34801561074b57600080fd5b506103e861075a366004612471565b6112e1565b34801561076b57600080fd5b506104ae60155481565b34801561078157600080fd5b506104ae610790366004612471565b6001600160a01b031660009081526007602052604090205490565b3480156107b757600080fd5b506103e861132d565b3480156107cc57600080fd5b506104ae60175481565b3480156107e257600080fd5b506103e86107f136600461241b565b611363565b34801561080257600080fd5b506104ae60105481565b34801561081857600080fd5b50610455610827366004612471565b600b6020526000908152604090205460ff1681565b34801561084857600080fd5b506000546001600160a01b0316610485565b34801561086657600080fd5b506103ff6113b8565b34801561087b57600080fd5b50601b546104ae565b34801561089057600080fd5b506104ae60185481565b3480156108a657600080fd5b506104556108b53660046123e1565b6113c7565b3480156108c657600080fd5b506103e86108d5366004612454565b611416565b3480156108e657600080fd5b50600554610485906001600160a01b031681565b34801561090657600080fd5b506104556109153660046123e1565b61145e565b34801561092657600080fd5b506103ff61146b565b34801561093b57600080fd5b506103e861094a3660046123e1565b6114f9565b34801561095b57600080fd5b506103e861096a3660046123b5565b61155e565b34801561097b57600080fd5b506103e861098a366004612454565b6115ad565b34801561099b57600080fd5b506104ae600e5481565b3480156109b157600080fd5b50600654610485906001600160a01b031681565b3480156109d157600080fd5b50601d54610485906001600160a01b031681565b3480156109f157600080fd5b506104ae60115481565b348015610a0757600080fd5b50610455610a16366004612471565b600a6020526000908152604090205460ff1681565b348015610a3757600080fd5b506103ff61162f565b348015610a4c57600080fd5b506104ae600f5481565b348015610a6257600080fd5b50601d5461045590600160b01b900460ff1681565b348015610a8357600080fd5b506104ae600d5481565b348015610a9957600080fd5b506104ae610aa83660046124a7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610adf57600080fd5b506103e8610aee36600461248e565b61163c565b348015610aff57600080fd5b506103e8610b0e36600461241b565b61166b565b348015610b1f57600080fd5b506104ae60165481565b348015610b3557600080fd5b506103e8610b4436600461248e565b6116c0565b348015610b5557600080fd5b506103e8610b64366004612471565b6116ef565b348015610b7557600080fd5b506103e8610b8436600461241b565b61178a565b348015610b9557600080fd5b50601d5461045590600160b81b900460ff1681565b6000546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906124d5565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af1158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c53919061250a565b5050505050565b606060018054610c6990612527565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9590612527565b8015610ce25780601f10610cb757610100808354040283529160200191610ce2565b820191906000526020600020905b815481529060010190602001808311610cc557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d165760405162461bcd60e51b8152600401610bd4906124d5565b601083905560118290556012819055610d3981610d3385856117df565b906117df565b601755505050565b6000610d4e3384846117eb565b50600192915050565b6000546001600160a01b03163314610d815760405162461bcd60e51b8152600401610bd4906124d5565b600d839055600e829055600f819055610d9e81610d3385856117df565b601655505050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610e0884848461190f565b50610e5b8433610e56856040518060600160405280602881526020016126eb602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611cde565b6117eb565b5060015b9392505050565b6000546001600160a01b03163314610e905760405162461bcd60e51b8152600401610bd4906124d5565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260076020526040812054600454610ef391611d0a565b905090565b6000546001600160a01b03163314610f225760405162461bcd60e51b8152600401610bd4906124d5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610d4e918590610e5690866117df565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610bd4906124d5565b601b55565b600080546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610bd4906124d5565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b9190612562565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ac9190612562565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612562565b91506001600160a01b03821661127257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190612562565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe9190612562565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561124b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126f9190612562565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610bd4906124d5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113575760405162461bcd60e51b8152600401610bd4906124d5565b6113616000611d16565b565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b606060028054610c6990612527565b6000610d4e3384610e5685604051806060016040528060258152602001612713602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611cde565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610bd4906124d5565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b6000610e5b33848461190f565b6002805461147890612527565b80601f01602080910402602001604051908101604052809291908181526020018280546114a490612527565b80156114f15780601f106114c6576101008083540402835291602001916114f1565b820191906000526020600020905b8154815290600101906020018083116114d457829003601f168201915b505050505081565b6000546001600160a01b031633146115235760405162461bcd60e51b8152600401610bd4906124d5565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611559573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146115885760405162461bcd60e51b8152600401610bd4906124d5565b6013839055601482905560158190556115a581610d3385856117df565b601855505050565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610bd4906124d5565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061162490831515815260200190565b60405180910390a150565b6001805461147890612527565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610bd4906124d5565b601955565b6000546001600160a01b031633146116955760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116ea5760405162461bcd60e51b8152600401610bd4906124d5565b601a55565b6000546001600160a01b031633146117195760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03811661177e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b61178781611d16565b50565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610e5f8284612595565b6001600160a01b03831661184d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b0382166118ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166119755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd4565b6001600160a01b0383166119d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bd4565b601d54600160a01b900460ff16156119fb576119f4848484611d66565b9050610e5f565b6001600160a01b0384166000908152600b602052604090205460ff16158015611a3d57506001600160a01b0383166000908152600b602052604090205460ff16155b15611aa557601954821115611aa55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bd4565b30600090815260076020526040902054601b5481108015908190611ad35750601d54600160a01b900460ff16155b8015611af857506001600160a01b0386166000908152600c602052604090205460ff16155b8015611b0d5750601d54600160a81b900460ff165b15611b3357601d54600160b01b900460ff1615611b2a57601b5491505b611b3382611e4c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611b85918690611cde565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611bd257506001600160a01b03861660009081526009602052604090205460ff165b611be657611be1878787611f82565b611be8565b845b601d54909150600160b81b900460ff168015611c1d57506001600160a01b0386166000908152600a602052604090205460ff16155b15611c5357601a54611c4882610d33896001600160a01b031660009081526007602052604090205490565b1115611c5357600080fd5b6001600160a01b038616600090815260076020526040902054611c7690826117df565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cca9085815260200190565b60405180910390a360019350505050610e5f565b60008184841115611d025760405162461bcd60e51b8152600401610bd49190612360565b505050900390565b6000610e5f82846125ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611db7918490611cde565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611de690836117df565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3a9086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b179055601854601354600091611e8291600291611e7c9182908790612091565b9061209d565b90506000611e908383611d0a565b9050611e9b816120a9565b6013544790600090611ebb90611eb290600261209d565b60185490611d0a565b90506000611edd6002611e7c84611e7c6013548861209190919063ffffffff16565b90506000611efa83611e7c6015548761209190919063ffffffff16565b90506000611f1282611f0c8786611d0a565b90611d0a565b90508015611f3057600554611f30906001600160a01b031682611523565b8115611f4c57600654611f4c906001600160a01b031683611523565b600083118015611f5c5750600087115b15611f6b57611f6b878461223c565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff1615611fc657611fbf6064611e7c6016548661209190919063ffffffff16565b9050612004565b6001600160a01b0384166000908152600c602052604090205460ff1615612004576120016064611e7c6017548661209190919063ffffffff16565b90505b801561207e573060009081526007602052604090205461202490826117df565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120759085815260200190565b60405180910390a35b6120888382611d0a565b95945050505050565b6000610e5f82846125c4565b6000610e5f82846125e3565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120de576120de612605565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b9190612562565b8160018151811061216e5761216e612605565b6001600160a01b039283166020918202929092010152601c5461219491309116846117eb565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906121cd90859060009086903090429060040161265f565b600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161223092919061269b565b60405180910390a15050565b601c546122549030906001600160a01b0316846117eb565b601c546001600160a01b031663f305d71982308560008061227d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122e5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c5391906126bc565b6001600160a01b038116811461178757600080fd5b60008060006060848603121561233457600080fd5b833561233f8161230a565b9250602084013561234f8161230a565b929592945050506040919091013590565b600060208083528351808285015260005b8181101561238d57858101830151858201604001528201612371565b8181111561239f576000604083870101525b50601f01601f1916929092016040019392505050565b6000806000606084860312156123ca57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156123f457600080fd5b82356123ff8161230a565b946020939093013593505050565b801515811461178757600080fd5b6000806040838503121561242e57600080fd5b82356124398161230a565b915060208301356124498161240d565b809150509250929050565b60006020828403121561246657600080fd5b8135610e5f8161240d565b60006020828403121561248357600080fd5b8135610e5f8161230a565b6000602082840312156124a057600080fd5b5035919050565b600080604083850312156124ba57600080fd5b82356124c58161230a565b915060208301356124498161230a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561251c57600080fd5b8151610e5f8161240d565b600181811c9082168061253b57607f821691505b6020821081141561255c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561257457600080fd5b8151610e5f8161230a565b634e487b7160e01b600052601160045260246000fd5b600082198211156125a8576125a861257f565b500190565b6000828210156125bf576125bf61257f565b500390565b60008160001904831182151516156125de576125de61257f565b500290565b60008261260057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156126545781516001600160a01b03168752958201959082019060010161262f565b509495945050505050565b85815284602082015260a06040820152600061267e60a083018661261b565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006126b4604083018461261b565b949350505050565b6000806000606084860312156126d157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fcd282f776ead16a5218e82bb2e96c3347b671996151027e42ec6fe80cf1f1d64736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c8063844d591c116101f2578063c5f956af1161010d578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610b29578063f2fde38b14610b49578063f84ba65d14610b69578063f872858a14610b8957600080fd5b8063dd62ed3e14610a8d578063ec28438a14610ad3578063ef422a1814610af3578063f0cd1dac14610b1357600080fd5b8063d28d8852116100dc578063d28d885214610a2b578063d628df9c14610a40578063da00097d14610a56578063dc44b6a014610a7757600080fd5b8063c5f956af146109a5578063c816841b146109c5578063c8607952146109e5578063c867d60b146109fb57600080fd5b8063a5d69d1f11610185578063b8fe3eb511610154578063b8fe3eb51461092f578063c2d4640e1461094f578063c49b9a801461096f578063c5d241891461098f57600080fd5b8063a5d69d1f146108ba578063a5ece941146108da578063a9059cbb146108fa578063b09f12661461091a57600080fd5b806395d89b41116101c157806395d89b411461085a578063a073d37f1461086f578063a08e671f14610884578063a457c2d71461089a57600080fd5b8063844d591c146107d657806388790a68146107f65780638b42507f1461080c5780638da5cb5b1461083c57600080fd5b8063313ce567116102e257806357a5802f116102755780636d067696116102445780636d0676961461075f57806370a0823114610775578063715018a6146107ab57806382eefb43146107c057600080fd5b806357a5802f146106f35780635881f3ef1461070957806361a23c69146107295780636605bfda1461073f57600080fd5b80633eaaf86b116102b15780633eaaf86b1461065c5780633ecad271146106725780634a74bb02146106a25780635342acb4146106c357600080fd5b8063313ce567146105dc57806332424aa314610602578063395093511461061c5780633b97084a1461063c57600080fd5b80632198cf6c1161035a5780632563ae83116103295780632563ae831461055357806327c8f835146105735780632b112e49146105a75780632d51ec93146105bc57600080fd5b80632198cf6c146104dc578063220f6696146104fc57806323b872dd1461051d57806324fcf8cf1461053d57600080fd5b8063095ea7b311610396578063095ea7b3146104355780631694505e1461046557806318160ddd1461049d5780631870517a146104bc57600080fd5b80630659ce5c146103c857806306fdde03146103ea578063087332141461041557600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103e86103e336600461231f565b610baa565b005b3480156103f657600080fd5b506103ff610c5a565b60405161040c9190612360565b60405180910390f35b34801561042157600080fd5b506103e86104303660046123b5565b610cec565b34801561044157600080fd5b506104556104503660046123e1565b610d41565b604051901515815260200161040c565b34801561047157600080fd5b50601c54610485906001600160a01b031681565b6040516001600160a01b03909116815260200161040c565b3480156104a957600080fd5b506004545b60405190815260200161040c565b3480156104c857600080fd5b506103e86104d73660046123b5565b610d57565b3480156104e857600080fd5b506103e86104f736600461241b565b610da6565b34801561050857600080fd5b50601d5461045590600160a01b900460ff1681565b34801561052957600080fd5b5061045561053836600461231f565b610dfb565b34801561054957600080fd5b506104ae60125481565b34801561055f57600080fd5b506103e861056e366004612454565b610e66565b34801561057f57600080fd5b506104857f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105b357600080fd5b506104ae610eae565b3480156105c857600080fd5b506103e86105d7366004612471565b610ef8565b3480156105e857600080fd5b5060035460ff165b60405160ff909116815260200161040c565b34801561060e57600080fd5b506003546105f09060ff1681565b34801561062857600080fd5b506104556106373660046123e1565b610f44565b34801561064857600080fd5b506103e861065736600461248e565b610f7a565b34801561066857600080fd5b506104ae60045481565b34801561067e57600080fd5b5061045561068d366004612471565b600c6020526000908152604090205460ff1681565b3480156106ae57600080fd5b50601d5461045590600160a81b900460ff1681565b3480156106cf57600080fd5b506104556106de366004612471565b60096020526000908152604090205460ff1681565b3480156106ff57600080fd5b506104ae60135481565b34801561071557600080fd5b50610485610724366004612471565b610fa9565b34801561073557600080fd5b506104ae60145481565b34801561074b57600080fd5b506103e861075a366004612471565b6112e1565b34801561076b57600080fd5b506104ae60155481565b34801561078157600080fd5b506104ae610790366004612471565b6001600160a01b031660009081526007602052604090205490565b3480156107b757600080fd5b506103e861132d565b3480156107cc57600080fd5b506104ae60175481565b3480156107e257600080fd5b506103e86107f136600461241b565b611363565b34801561080257600080fd5b506104ae60105481565b34801561081857600080fd5b50610455610827366004612471565b600b6020526000908152604090205460ff1681565b34801561084857600080fd5b506000546001600160a01b0316610485565b34801561086657600080fd5b506103ff6113b8565b34801561087b57600080fd5b50601b546104ae565b34801561089057600080fd5b506104ae60185481565b3480156108a657600080fd5b506104556108b53660046123e1565b6113c7565b3480156108c657600080fd5b506103e86108d5366004612454565b611416565b3480156108e657600080fd5b50600554610485906001600160a01b031681565b34801561090657600080fd5b506104556109153660046123e1565b61145e565b34801561092657600080fd5b506103ff61146b565b34801561093b57600080fd5b506103e861094a3660046123e1565b6114f9565b34801561095b57600080fd5b506103e861096a3660046123b5565b61155e565b34801561097b57600080fd5b506103e861098a366004612454565b6115ad565b34801561099b57600080fd5b506104ae600e5481565b3480156109b157600080fd5b50600654610485906001600160a01b031681565b3480156109d157600080fd5b50601d54610485906001600160a01b031681565b3480156109f157600080fd5b506104ae60115481565b348015610a0757600080fd5b50610455610a16366004612471565b600a6020526000908152604090205460ff1681565b348015610a3757600080fd5b506103ff61162f565b348015610a4c57600080fd5b506104ae600f5481565b348015610a6257600080fd5b50601d5461045590600160b01b900460ff1681565b348015610a8357600080fd5b506104ae600d5481565b348015610a9957600080fd5b506104ae610aa83660046124a7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610adf57600080fd5b506103e8610aee36600461248e565b61163c565b348015610aff57600080fd5b506103e8610b0e36600461241b565b61166b565b348015610b1f57600080fd5b506104ae60165481565b348015610b3557600080fd5b506103e8610b4436600461248e565b6116c0565b348015610b5557600080fd5b506103e8610b64366004612471565b6116ef565b348015610b7557600080fd5b506103e8610b8436600461241b565b61178a565b348015610b9557600080fd5b50601d5461045590600160b81b900460ff1681565b6000546001600160a01b03163314610bdd5760405162461bcd60e51b8152600401610bd4906124d5565b60405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284919082169063a9059cbb906044016020604051808303816000875af1158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c53919061250a565b5050505050565b606060018054610c6990612527565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9590612527565b8015610ce25780601f10610cb757610100808354040283529160200191610ce2565b820191906000526020600020905b815481529060010190602001808311610cc557829003601f168201915b5050505050905090565b6000546001600160a01b03163314610d165760405162461bcd60e51b8152600401610bd4906124d5565b601083905560118290556012819055610d3981610d3385856117df565b906117df565b601755505050565b6000610d4e3384846117eb565b50600192915050565b6000546001600160a01b03163314610d815760405162461bcd60e51b8152600401610bd4906124d5565b600d839055600e829055600f819055610d9e81610d3385856117df565b601655505050565b6000546001600160a01b03163314610dd05760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610e0884848461190f565b50610e5b8433610e56856040518060600160405280602881526020016126eb602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611cde565b6117eb565b5060015b9392505050565b6000546001600160a01b03163314610e905760405162461bcd60e51b8152600401610bd4906124d5565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260076020526040812054600454610ef391611d0a565b905090565b6000546001600160a01b03163314610f225760405162461bcd60e51b8152600401610bd4906124d5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610d4e918590610e5690866117df565b6000546001600160a01b03163314610fa45760405162461bcd60e51b8152600401610bd4906124d5565b601b55565b600080546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610bd4906124d5565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b9190612562565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611088573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ac9190612562565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612562565b91506001600160a01b03821661127257806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118d9190612562565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fe9190612562565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801561124b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126f9190612562565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610bd4906124d5565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113575760405162461bcd60e51b8152600401610bd4906124d5565b6113616000611d16565b565b6000546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b606060028054610c6990612527565b6000610d4e3384610e5685604051806060016040528060258152602001612713602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611cde565b6000546001600160a01b031633146114405760405162461bcd60e51b8152600401610bd4906124d5565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b6000610e5b33848461190f565b6002805461147890612527565b80601f01602080910402602001604051908101604052809291908181526020018280546114a490612527565b80156114f15780601f106114c6576101008083540402835291602001916114f1565b820191906000526020600020905b8154815290600101906020018083116114d457829003601f168201915b505050505081565b6000546001600160a01b031633146115235760405162461bcd60e51b8152600401610bd4906124d5565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611559573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146115885760405162461bcd60e51b8152600401610bd4906124d5565b6013839055601482905560158190556115a581610d3385856117df565b601855505050565b6000546001600160a01b031633146115d75760405162461bcd60e51b8152600401610bd4906124d5565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061162490831515815260200190565b60405180910390a150565b6001805461147890612527565b6000546001600160a01b031633146116665760405162461bcd60e51b8152600401610bd4906124d5565b601955565b6000546001600160a01b031633146116955760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146116ea5760405162461bcd60e51b8152600401610bd4906124d5565b601a55565b6000546001600160a01b031633146117195760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03811661177e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd4565b61178781611d16565b50565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610bd4906124d5565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610e5f8284612595565b6001600160a01b03831661184d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bd4565b6001600160a01b0382166118ae5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bd4565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166119755760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bd4565b6001600160a01b0383166119d75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bd4565b601d54600160a01b900460ff16156119fb576119f4848484611d66565b9050610e5f565b6001600160a01b0384166000908152600b602052604090205460ff16158015611a3d57506001600160a01b0383166000908152600b602052604090205460ff16155b15611aa557601954821115611aa55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610bd4565b30600090815260076020526040902054601b5481108015908190611ad35750601d54600160a01b900460ff16155b8015611af857506001600160a01b0386166000908152600c602052604090205460ff16155b8015611b0d5750601d54600160a81b900460ff165b15611b3357601d54600160b01b900460ff1615611b2a57601b5491505b611b3382611e4c565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260079091529190912054611b85918690611cde565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff1680611bd257506001600160a01b03861660009081526009602052604090205460ff165b611be657611be1878787611f82565b611be8565b845b601d54909150600160b81b900460ff168015611c1d57506001600160a01b0386166000908152600a602052604090205460ff16155b15611c5357601a54611c4882610d33896001600160a01b031660009081526007602052604090205490565b1115611c5357600080fd5b6001600160a01b038616600090815260076020526040902054611c7690826117df565b6001600160a01b0380881660008181526007602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cca9085815260200190565b60405180910390a360019350505050610e5f565b60008184841115611d025760405162461bcd60e51b8152600401610bd49190612360565b505050900390565b6000610e5f82846125ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600790915291822054611db7918490611cde565b6001600160a01b038086166000908152600760205260408082209390935590851681522054611de690836117df565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e3a9086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b179055601854601354600091611e8291600291611e7c9182908790612091565b9061209d565b90506000611e908383611d0a565b9050611e9b816120a9565b6013544790600090611ebb90611eb290600261209d565b60185490611d0a565b90506000611edd6002611e7c84611e7c6013548861209190919063ffffffff16565b90506000611efa83611e7c6015548761209190919063ffffffff16565b90506000611f1282611f0c8786611d0a565b90611d0a565b90508015611f3057600554611f30906001600160a01b031682611523565b8115611f4c57600654611f4c906001600160a01b031683611523565b600083118015611f5c5750600087115b15611f6b57611f6b878461223c565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c6020526040812054819060ff1615611fc657611fbf6064611e7c6016548661209190919063ffffffff16565b9050612004565b6001600160a01b0384166000908152600c602052604090205460ff1615612004576120016064611e7c6017548661209190919063ffffffff16565b90505b801561207e573060009081526007602052604090205461202490826117df565b30600081815260076020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120759085815260200190565b60405180910390a35b6120888382611d0a565b95945050505050565b6000610e5f82846125c4565b6000610e5f82846125e3565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120de576120de612605565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b9190612562565b8160018151811061216e5761216e612605565b6001600160a01b039283166020918202929092010152601c5461219491309116846117eb565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906121cd90859060009086903090429060040161265f565b600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161223092919061269b565b60405180910390a15050565b601c546122549030906001600160a01b0316846117eb565b601c546001600160a01b031663f305d71982308560008061227d6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156122e5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c5391906126bc565b6001600160a01b038116811461178757600080fd5b60008060006060848603121561233457600080fd5b833561233f8161230a565b9250602084013561234f8161230a565b929592945050506040919091013590565b600060208083528351808285015260005b8181101561238d57858101830151858201604001528201612371565b8181111561239f576000604083870101525b50601f01601f1916929092016040019392505050565b6000806000606084860312156123ca57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156123f457600080fd5b82356123ff8161230a565b946020939093013593505050565b801515811461178757600080fd5b6000806040838503121561242e57600080fd5b82356124398161230a565b915060208301356124498161240d565b809150509250929050565b60006020828403121561246657600080fd5b8135610e5f8161240d565b60006020828403121561248357600080fd5b8135610e5f8161230a565b6000602082840312156124a057600080fd5b5035919050565b600080604083850312156124ba57600080fd5b82356124c58161230a565b915060208301356124498161230a565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561251c57600080fd5b8151610e5f8161240d565b600181811c9082168061253b57607f821691505b6020821081141561255c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561257457600080fd5b8151610e5f8161230a565b634e487b7160e01b600052601160045260246000fd5b600082198211156125a8576125a861257f565b500190565b6000828210156125bf576125bf61257f565b500390565b60008160001904831182151516156125de576125de61257f565b500290565b60008261260057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156126545781516001600160a01b03168752958201959082019060010161262f565b509495945050505050565b85815284602082015260a06040820152600061267e60a083018661261b565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006126b4604083018461261b565b949350505050565b6000806000606084860312156126d157600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206fcd282f776ead16a5218e82bb2e96c3347b671996151027e42ec6fe80cf1f1d64736f6c634300080c0033

Deployed Bytecode Sourcemap

18217:16197:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34189:216;;;;;;;;;;-1:-1:-1;34189:216:0;;;;;:::i;:::-;;:::i;:::-;;22874:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25450:349;;;;;;;;;;-1:-1:-1;25450:349:0;;;;;:::i;:::-;;:::i;24168:161::-;;;;;;;;;;-1:-1:-1;24168:161:0;;;;;:::i;:::-;;:::i;:::-;;;2019:14:1;;2012:22;1994:41;;1982:2;1967:18;24168:161:0;1854:187:1;19606:41:0;;;;;;;;;;-1:-1:-1;19606:41:0;;;;-1:-1:-1;;;;;19606:41:0;;;;;;-1:-1:-1;;;;;2237:32:1;;;2219:51;;2207:2;2192:18;19606:41:0;2046:230:1;23151:100:0;;;;;;;;;;-1:-1:-1;23231:12:0;;23151:100;;;2427:25:1;;;2415:2;2400:18;23151:100:0;2281:177:1;25101:341:0;;;;;;;;;;-1:-1:-1;25101:341:0;;;;;:::i;:::-;;:::i;26429:135::-;;;;;;;;;;-1:-1:-1;26429:135:0;;;;;:::i;:::-;;:::i;19693:28::-;;;;;;;;;;-1:-1:-1;19693:28:0;;;;-1:-1:-1;;;19693:28:0;;;;;;28763:313;;;;;;;;;;-1:-1:-1;28763:313:0;;;;;:::i;:::-;;:::i;19211:31::-;;;;;;;;;;;;;;;;26308:113;;;;;;;;;;-1:-1:-1;26308:113:0;;;;;:::i;:::-;;:::i;18560:81::-;;;;;;;;;;;;;;;27398:128;;;;;;;;;;;;;:::i;26814:127::-;;;;;;;;;;-1:-1:-1;26814:127:0;;;;;:::i;:::-;;:::i;23060:83::-;;;;;;;;;;-1:-1:-1;23126:9:0;;;;23060:83;;;3851:4:1;3839:17;;;3821:36;;3809:2;3794:18;23060:83:0;3679:184:1;18404:22:0;;;;;;;;;;-1:-1:-1;18404:22:0;;;;;;;;23537:218;;;;;;;;;;-1:-1:-1;23537:218:0;;;;;:::i;:::-;;:::i;26682:124::-;;;;;;;;;;-1:-1:-1;26682:124:0;;;;;:::i;:::-;;:::i;18433:27::-;;;;;;;;;;;;;;;;18960:45;;;;;;;;;;-1:-1:-1;18960:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19728:33;;;;;;;;;;-1:-1:-1;19728:33:0;;;;-1:-1:-1;;;19728:33:0;;;;;;18789:50;;;;;;;;;;-1:-1:-1;18789:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19251:30;;;;;;;;;;;;;;;;27672:807;;;;;;;;;;-1:-1:-1;27672:807:0;;;;;:::i;:::-;;:::i;19288:30::-;;;;;;;;;;;;;;;;26949:125;;;;;;;;;;-1:-1:-1;26949:125:0;;;;;:::i;:::-;;:::i;19325:29::-;;;;;;;;;;;;;;;;23259:119;;;;;;;;;;-1:-1:-1;23259:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;23352:18:0;23325:7;23352:18;;;:9;:18;;;;;;;23259:119;9766:103;;;;;;;;;;;;;:::i;19402:33::-;;;;;;;;;;;;;;;;24682:129;;;;;;;;;;-1:-1:-1;24682:129:0;;;;;:::i;:::-;;:::i;19133:32::-;;;;;;;;;;;;;;;;18905:48;;;;;;;;;;-1:-1:-1;18905:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9543:87;;;;;;;;;;-1:-1:-1;9589:7:0;9616:6;-1:-1:-1;;;;;9616:6:0;9543:87;;22965;;;;;;;;;;;;;:::i;24040:120::-;;;;;;;;;;-1:-1:-1;24129:23:0;;24040:120;;19442:39;;;;;;;;;;;;;;;;23763:269;;;;;;;;;;-1:-1:-1;23763:269:0;;;;;:::i;:::-;;:::i;27261:125::-;;;;;;;;;;-1:-1:-1;27261:125:0;;;;;:::i;:::-;;:::i;18469:39::-;;;;;;;;;;-1:-1:-1;18469:39:0;;;;-1:-1:-1;;;;;18469:39:0;;;28588:167;;;;;;;;;;-1:-1:-1;28588:167:0;;;;;:::i;:::-;;:::i;18376:21::-;;;;;;;;;;;;;:::i;34049:132::-;;;;;;;;;;-1:-1:-1;34049:132:0;;;;;:::i;:::-;;:::i;25811:366::-;;;;;;;;;;-1:-1:-1;25811:366:0;;;;;:::i;:::-;;:::i;27082:171::-;;;;;;;;;;-1:-1:-1;27082:171:0;;;;;:::i;:::-;;:::i;19052:31::-;;;;;;;;;;;;;;;;18515:38;;;;;;;;;;-1:-1:-1;18515:38:0;;;;-1:-1:-1;;;;;18515:38:0;;;19654:26;;;;;;;;;;-1:-1:-1;19654:26:0;;;;-1:-1:-1;;;;;19654:26:0;;;19172:32;;;;;;;;;;;;;;;;18846:52;;;;;;;;;;-1:-1:-1;18846:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18350:19;;;;;;;;;;;;;:::i;19090:30::-;;;;;;;;;;;;;;;;19768:37;;;;;;;;;;-1:-1:-1;19768:37:0;;;;-1:-1:-1;;;19768:37:0;;;;;;19014:31;;;;;;;;;;;;;;;;23386:143;;;;;;;;;;-1:-1:-1;23386:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;23494:18:0;;;23467:7;23494:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;23386:143;26189:111;;;;;;;;;;-1:-1:-1;26189:111:0;;;;;:::i;:::-;;:::i;24958:135::-;;;;;;;;;;-1:-1:-1;24958:135:0;;;;;:::i;:::-;;:::i;19363:32::-;;;;;;;;;;;;;;;;26572:102;;;;;;;;;;-1:-1:-1;26572:102:0;;;;;:::i;:::-;;:::i;9877:201::-;;;;;;;;;;-1:-1:-1;9877:201:0;;;;;:::i;:::-;;:::i;24819:127::-;;;;;;;;;;-1:-1:-1;24819:127:0;;;;;:::i;:::-;;:::i;19812:28::-;;;;;;;;;;-1:-1:-1;19812:28:0;;;;-1:-1:-1;;;19812:28:0;;;;;;34189:216;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;;;;;;;;;34357:40:::1;::::0;-1:-1:-1;;;34357:40:0;;-1:-1:-1;;;;;5223:32:1;;;34357:40:0::1;::::0;::::1;5205:51:1::0;5272:18;;;5265:34;;;34333:12:0;;34357:21;;::::1;::::0;::::1;::::0;5178:18:1;;34357:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34293:112;34189:216:::0;;;:::o;22874:83::-;22911:13;22944:5;22937:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22874:83;:::o;25450:349::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;25574:17:::1;:35:::0;;;25620:17:::1;:35:::0;;;25666:16:::1;:29:::0;;;25729:62:::1;25685:10:::0;25729:40:::1;25594:15:::0;25640;25729:21:::1;:40::i;:::-;:44:::0;::::1;:62::i;:::-;25708:18;:83:::0;-1:-1:-1;;;25450:349:0:o;24168:161::-;24243:4;24260:39;2631:10;24283:7;24292:6;24260:8;:39::i;:::-;-1:-1:-1;24317:4:0;24168:161;;;;:::o;25101:341::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;25224:16:::1;:34:::0;;;25269:16:::1;:34:::0;;;25314:15:::1;:28:::0;;;25375:59:::1;25332:10:::0;25375:38:::1;25243:15:::0;25288;25375:20:::1;:38::i;:59::-;25355:17;:79:::0;-1:-1:-1;;;25101:341:0:o;26429:135::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26520:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;26520:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26429:135::o;28763:313::-;28861:4;28878:36;28888:6;28896:9;28907:6;28878:9;:36::i;:::-;-1:-1:-1;28925:121:0;28934:6;2631:10;28956:89;28994:6;28956:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28956:19:0;;;;;;:11;:19;;;;;;;;2631:10;28956:33;;;;;;;;;;:37;:89::i;:::-;28925:8;:121::i;:::-;-1:-1:-1;29064:4:0;28763:313;;;;;;:::o;26308:113::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;26386:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;26386:27:0::1;-1:-1:-1::0;;;;26386:27:0;;::::1;::::0;;;::::1;::::0;;26308:113::o;27398:128::-;27505:11;-1:-1:-1;;;;;23352:18:0;27451:7;23352:18;;;:9;:18;;;;;;27478:12;;:40;;:16;:40::i;:::-;27471:47;;27398:128;:::o;26814:127::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;26895:16:::1;:38:::0;;-1:-1:-1;;;;;;26895:38:0::1;-1:-1:-1::0;;;;;26895:38:0;;;::::1;::::0;;;::::1;::::0;;26814:127::o;23537:218::-;2631:10;23625:4;23674:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23674:34:0;;;;;;;;;;23625:4;;23642:83;;23665:7;;23674:50;;23713:10;23674:38;:50::i;26682:124::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;26764:23:::1;:34:::0;26682:124::o;27672:807::-;27752:22;9616:6;;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;27789:35:::1;27846:16;27789:74;;27912:16;-1:-1:-1::0;;;;;27912:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27894:53:0::1;;27956:4;27963:16;-1:-1:-1::0;;;;;27963:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27894:93;::::0;-1:-1:-1;;;;;;27894:93:0::1;::::0;;;;;;-1:-1:-1;;;;;6431:15:1;;;27894:93:0::1;::::0;::::1;6413:34:1::0;6483:15;;6463:18;;;6456:43;6348:18;;27894:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27877:110:::0;-1:-1:-1;;;;;;28003:28:0;::::1;28000:225;;28117:16;-1:-1:-1::0;;;;;28117:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28099:74:0::1;;28182:4;28189:16;-1:-1:-1::0;;;;;28189:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28099:114;::::0;-1:-1:-1;;;;;;28099:114:0::1;::::0;;;;;;-1:-1:-1;;;;;6431:15:1;;;28099:114:0::1;::::0;::::1;6413:34:1::0;6483:15;;6463:18;;;6456:43;6348:18;;28099:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28082:131;;28000:225;28237:11;:28:::0;;-1:-1:-1;;;;;;28237:28:0;;::::1;-1:-1:-1::0;;;;;28237:28:0;;::::1;::::0;;::::1;::::0;;28299:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;28371:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;28371:48:0;;::::1;-1:-1:-1::0;28371:48:0;;::::1;::::0;;;28451:11;;;;::::1;28430:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;28237:28;28251:14;-1:-1:-1;27672:807:0:o;26949:125::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;27029:15:::1;:37:::0;;-1:-1:-1;;;;;;27029:37:0::1;-1:-1:-1::0;;;;;27029:37:0;;;::::1;::::0;;;::::1;::::0;;26949:125::o;9766:103::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;9831:30:::1;9858:1;9831:18;:30::i;:::-;9766:103::o:0;24682:129::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24771:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;24771:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24682:129::o;22965:87::-;23004:13;23037:7;23030:14;;;;;:::i;23763:269::-;23856:4;23873:129;2631:10;23896:7;23905:96;23944:15;23905:96;;;;;;;;;;;;;;;;;2631:10;23905:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23905:34:0;;;;;;;;;;;;:38;:96::i;27261:125::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;27342:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;27342:36:0::1;-1:-1:-1::0;;;;27342:36:0;;::::1;::::0;;;::::1;::::0;;27261:125::o;28588:167::-;28666:4;28683:42;2631:10;28707:9;28718:6;28683:9;:42::i;18376:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34049:132::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;34138:35:::1;::::0;-1:-1:-1;;;;;34138:27:0;::::1;::::0;:35;::::1;;;::::0;34166:6;;34138:35:::1;::::0;;;34166:6;34138:27;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;34049:132:::0;;:::o;25811:366::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;25952:15:::1;:35:::0;;;25998:15:::1;:35:::0;;;26044:14:::1;:29:::0;;;26113:56:::1;26061:12:::0;26113:36:::1;25970:17:::0;26016;26113:19:::1;:36::i;:56::-;26086:24;:83:::0;-1:-1:-1;;;25811:366:0:o;27082:171::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;27159:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;27159:32:0::1;-1:-1:-1::0;;;;27159:32:0;;::::1;;::::0;;27207:38:::1;::::0;::::1;::::0;::::1;::::0;27183:8;2019:14:1;2012:22;1994:41;;1982:2;1967:18;;1854:187;27207:38:0::1;;;;;;;;27082:171:::0;:::o;18350:19::-;;;;;;;:::i;26189:111::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;26266:12:::1;:26:::0;26189:111::o;24958:135::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25048:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;25048:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24958:135::o;26572:102::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;26644:10:::1;:22:::0;26572:102::o;9877:201::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9966:22:0;::::1;9958:73;;;::::0;-1:-1:-1;;;9958:73:0;;6712:2:1;9958:73:0::1;::::0;::::1;6694:21:1::0;6751:2;6731:18;;;6724:30;6790:34;6770:18;;;6763:62;-1:-1:-1;;;6841:18:1;;;6834:36;6887:19;;9958:73:0::1;6510:402:1::0;9958:73:0::1;10042:28;10061:8;10042:18;:28::i;:::-;9877:201:::0;:::o;24819:127::-;9589:7;9616:6;-1:-1:-1;;;;;9616:6:0;2631:10;9678:23;9670:68;;;;-1:-1:-1;;;9670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24906:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;24906:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24819:127::o;8032:98::-;8090:7;8117:5;8121:1;8117;:5;:::i;24337:337::-;-1:-1:-1;;;;;24430:19:0;;24422:68;;;;-1:-1:-1;;;24422:68:0;;7384:2:1;24422:68:0;;;7366:21:1;7423:2;7403:18;;;7396:30;7462:34;7442:18;;;7435:62;-1:-1:-1;;;7513:18:1;;;7506:34;7557:19;;24422:68:0;7182:400:1;24422:68:0;-1:-1:-1;;;;;24509:21:0;;24501:68;;;;-1:-1:-1;;;24501:68:0;;7789:2:1;24501:68:0;;;7771:21:1;7828:2;7808:18;;;7801:30;7867:34;7847:18;;;7840:62;-1:-1:-1;;;7918:18:1;;;7911:32;7960:19;;24501:68:0;7587:398:1;24501:68:0;-1:-1:-1;;;;;24582:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24634:32;;2427:25:1;;;24634:32:0;;2400:18:1;24634:32:0;;;;;;;24337:337;;;:::o;29084:1738::-;29171:4;-1:-1:-1;;;;;29204:20:0;;29196:70;;;;-1:-1:-1;;;29196:70:0;;8192:2:1;29196:70:0;;;8174:21:1;8231:2;8211:18;;;8204:30;8270:34;8250:18;;;8243:62;-1:-1:-1;;;8321:18:1;;;8314:35;8366:19;;29196:70:0;7990:401:1;29196:70:0;-1:-1:-1;;;;;29285:23:0;;29277:71;;;;-1:-1:-1;;;29277:71:0;;8598:2:1;29277:71:0;;;8580:21:1;8637:2;8617:18;;;8610:30;8676:34;8656:18;;;8649:62;-1:-1:-1;;;8727:18:1;;;8720:33;8770:19;;29277:71:0;8396:399:1;29277:71:0;29374:16;;-1:-1:-1;;;29374:16:0;;;;29371:1444;;;29424:41;29439:6;29447:9;29458:6;29424:14;:41::i;:::-;29417:48;;;;29371:1444;-1:-1:-1;;;;;29521:23:0;;;;;;:15;:23;;;;;;;;29520:24;:55;;;;-1:-1:-1;;;;;;29549:26:0;;;;;;:15;:26;;;;;;;;29548:27;29520:55;29517:170;;;29614:12;;29604:6;:22;;29596:75;;;;-1:-1:-1;;;29596:75:0;;9002:2:1;29596:75:0;;;8984:21:1;9041:2;9021:18;;;9014:30;9080:34;9060:18;;;9053:62;-1:-1:-1;;;9131:18:1;;;9124:38;9179:19;;29596:75:0;8800:404:1;29596:75:0;29768:4;29719:28;23352:18;;;:9;:18;;;;;;29844:23;;29820:47;;;;;;;29900:44;;-1:-1:-1;29928:16:0;;-1:-1:-1;;;29928:16:0;;;;29927:17;29900:44;:69;;;;-1:-1:-1;;;;;;29949:20:0;;;;;;:12;:20;;;;;;;;29948:21;29900:69;:94;;;;-1:-1:-1;29973:21:0;;-1:-1:-1;;;29973:21:0;;;;29900:94;29896:305;;;30032:25;;-1:-1:-1;;;30032:25:0;;;;30029:97;;;30103:23;;30080:46;;30029:97;30145:36;30160:20;30145:14;:36::i;:::-;30237:53;;;;;;;;;;;-1:-1:-1;;;30237:53:0;;;;;;;;-1:-1:-1;;;;;30237:17:0;;-1:-1:-1;30237:17:0;;;:9;:17;;;;;;;;:53;;30259:6;;30237:21;:53::i;:::-;-1:-1:-1;;;;;30217:17:0;;;;;;:9;:17;;;;;;;;:73;;;;30330:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;30359:28:0;;;;;;:17;:28;;;;;;;;30330:57;30329:148;;30443:34;30451:6;30459:9;30470:6;30443:7;:34::i;:::-;30329:148;;;30434:6;30329:148;30508:16;;30307:170;;-1:-1:-1;;;;30508:16:0;;;;:51;;;;-1:-1:-1;;;;;;30529:30:0;;;;;;:19;:30;;;;;;;;30528:31;30508:51;30505:133;;;30627:10;;30586:37;30611:11;30586:20;30596:9;-1:-1:-1;;;;;23352:18:0;23325:7;23352:18;;;:9;:18;;;;;;;23259:119;30586:37;:51;;30578:60;;;;;;-1:-1:-1;;;;;30678:20:0;;;;;;:9;:20;;;;;;:37;;30703:11;30678:24;:37::i;:::-;-1:-1:-1;;;;;30655:20:0;;;;;;;:9;:20;;;;;;;:60;;;;30737:40;;;;;;;;;;30765:11;2427:25:1;;2415:2;2400:18;;2281:177;30737:40:0;;;;;;;;30799:4;30792:11;;;;;;;8562:240;8682:7;8743:12;8735:6;;;;8727:29;;;;-1:-1:-1;;;8727:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;8778:5:0;;;8562:240::o;8138:98::-;8196:7;8223:5;8227:1;8223;:5;:::i;10086:191::-;10160:16;10179:6;;-1:-1:-1;;;;;10196:17:0;;;-1:-1:-1;;;;;;10196:17:0;;;;;;10229:40;;10179:6;;;;;;;10229:40;;10160:16;10229:40;10149:128;10086:191;:::o;30830:330::-;30960:53;;;;;;;;;;;-1:-1:-1;;;30960:53:0;;;;;;;;-1:-1:-1;;;;;30960:17:0;;30923:4;30960:17;;;:9;:17;;;;;;;:53;;30982:6;;30960:21;:53::i;:::-;-1:-1:-1;;;;;30940:17:0;;;;;;;:9;:17;;;;;;:73;;;;31047:20;;;;;;;:32;;31072:6;31047:24;:32::i;:::-;-1:-1:-1;;;;;31024:20:0;;;;;;;:9;:20;;;;;;;:55;;;;31095:35;;;;;;;;;;31123:6;2427:25:1;;2415:2;2400:18;;2281:177;31095:35:0;;;;;;;;-1:-1:-1;31148:4:0;30830:330;;;;;:::o;31168:1044::-;20263:16;:23;;-1:-1:-1;;;;20263:23:0;-1:-1:-1;;;20263:23:0;;;31305:24:::1;::::0;31284:15:::1;::::0;20263:23;;31272:65:::1;::::0;31335:1:::1;::::0;31272:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;31250:87:::0;-1:-1:-1;31348:21:0::1;31372:24;:7:::0;31250:87;31372:11:::1;:24::i;:::-;31348:48;;31409:31;31426:13;31409:16;:31::i;:::-;31561:15;::::0;31476:21:::1;::::0;31451:22:::1;::::0;31532:52:::1;::::0;31561:22:::1;::::0;31581:1:::1;31561:19;:22::i;:::-;31532:24;::::0;;:28:::1;:52::i;:::-;31510:74;;31605:26;31634:59;31691:1;31634:52;31674:11;31634:35;31653:15;;31634:14;:18;;:35;;;;:::i;:59::-;31605:88;;31704:21;31728:51;31767:11;31728:34;31747:14;;31728;:18;;:34;;;;:::i;:51::-;31704:75:::0;-1:-1:-1;31790:26:0::1;31819:57;31704:75:::0;31819:38:::1;:14:::0;31838:18;31819::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;31790:86:::0;-1:-1:-1;31892:22:0;;31889:98:::1;;31950:16;::::0;31929:58:::1;::::0;-1:-1:-1;;;;;31950:16:0::1;31968:18:::0;31929:20:::1;:58::i;:::-;32003:17:::0;;32000:87:::1;;32056:15;::::0;32035:52:::1;::::0;-1:-1:-1;;;;;32056:15:0::1;32073:13:::0;32035:20:::1;:52::i;:::-;32124:1;32103:18;:22;:41;;;;;32143:1;32129:11;:15;32103:41;32100:104;;;32159:45;32172:11;32185:18;32159:12;:45::i;:::-;-1:-1:-1::0;;20309:16:0;:24;;-1:-1:-1;;;;20309:24:0;;;-1:-1:-1;;;;;;31168:1044:0:o;33419:622::-;-1:-1:-1;;;;;33580:20:0;;33505:7;33580:20;;;:12;:20;;;;;;33505:7;;33580:20;;33577:223;;;33629:38;33663:3;33629:29;33640:17;;33629:6;:10;;:29;;;;:::i;:38::-;33617:50;;33577:223;;;-1:-1:-1;;;;;33697:23:0;;;;;;:12;:23;;;;;;;;33694:106;;;33749:39;33784:3;33749:30;33760:18;;33749:6;:10;;:30;;;;:::i;:39::-;33737:51;;33694:106;33823:13;;33820:173;;33898:4;33880:24;;;;:9;:24;;;;;;:39;;33909:9;33880:28;:39::i;:::-;33871:4;33853:24;;;;:9;:24;;;;;;;:66;;;;33939:42;;-1:-1:-1;;;;;33939:42:0;;;;;;;33971:9;2427:25:1;;2415:2;2400:18;;2281:177;33939:42:0;;;;;;;;33820:173;34012:21;:6;34023:9;34012:10;:21::i;:::-;34005:28;33419:622;-1:-1:-1;;;;;33419:622:0:o;8244:98::-;8302:7;8329:5;8333:1;8329;:5;:::i;8350:98::-;8408:7;8435:5;8439:1;8435;:5;:::i;32224:666::-;32374:16;;;32388:1;32374:16;;;;;;;;32350:21;;32374:16;;;;;;;;;;-1:-1:-1;32374:16:0;32350:40;;32419:4;32401;32406:1;32401:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32401:23:0;;;:7;;;;;;;;;;:23;;;;32445:15;;:22;;;-1:-1:-1;;;32445:22:0;;;;:15;;;;;:20;;:22;;;;;32401:7;;32445:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32435:4;32440:1;32435:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32435:32:0;;;:7;;;;;;;;;:32;32512:15;;32480:62;;32497:4;;32512:15;32530:11;32480:8;:62::i;:::-;32581:15;;:240;;-1:-1:-1;;;32581:240:0;;-1:-1:-1;;;;;32581:15:0;;;;:66;;:240;;32662:11;;32581:15;;32732:4;;32759;;32795:15;;32581:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32847:35;32864:11;32877:4;32847:35;;;;;;;:::i;:::-;;;;;;;;32279:611;32224:666;:::o;32898:513::-;33078:15;;33046:62;;33063:4;;-1:-1:-1;;;;;33078:15:0;33096:11;33046:8;:62::i;:::-;33151:15;;-1:-1:-1;;;;;33151:15:0;:31;33190:9;33223:4;33243:11;33151:15;;33355:7;9589;9616:6;-1:-1:-1;;;;;9616:6:0;;9543:87;33355:7;33151:252;;;;;;-1:-1:-1;;;;;;33151:252:0;;;-1:-1:-1;;;;;11747:15:1;;;33151:252:0;;;11729:34:1;11779:18;;;11772:34;;;;11822:18;;;11815:34;;;;11865:18;;;11858:34;11929:15;;;11908:19;;;11901:44;33377:15:0;11961:19:1;;;11954:35;11663:19;;33151:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:456;227:6;235;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;477:2:1;462:18;;449:32;490:33;449:32;490:33;:::i;:::-;150:456;;542:7;;-1:-1:-1;;;596:2:1;581:18;;;;568:32;;150:456::o;611:597::-;723:4;752:2;781;770:9;763:21;813:6;807:13;856:6;851:2;840:9;836:18;829:34;881:1;891:140;905:6;902:1;899:13;891:140;;;1000:14;;;996:23;;990:30;966:17;;;985:2;962:26;955:66;920:10;;891:140;;;1049:6;1046:1;1043:13;1040:91;;;1119:1;1114:2;1105:6;1094:9;1090:22;1086:31;1079:42;1040:91;-1:-1:-1;1192:2:1;1171:15;-1:-1:-1;;1167:29:1;1152:45;;;;1199:2;1148:54;;611:597;-1:-1:-1;;;611:597:1:o;1213:316::-;1290:6;1298;1306;1359:2;1347:9;1338:7;1334:23;1330:32;1327:52;;;1375:1;1372;1365:12;1327:52;-1:-1:-1;;1398:23:1;;;1468:2;1453:18;;1440:32;;-1:-1:-1;1519:2:1;1504:18;;;1491:32;;1213:316;-1:-1:-1;1213:316:1:o;1534:315::-;1602:6;1610;1663:2;1651:9;1642:7;1638:23;1634:32;1631:52;;;1679:1;1676;1669:12;1631:52;1718:9;1705:23;1737:31;1762:5;1737:31;:::i;:::-;1787:5;1839:2;1824:18;;;;1811:32;;-1:-1:-1;;;1534:315:1:o;2463:118::-;2549:5;2542:13;2535:21;2528:5;2525:32;2515:60;;2571:1;2568;2561:12;2586:382;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:31;2811:5;2786:31;:::i;:::-;2836:5;-1:-1:-1;2893:2:1;2878:18;;2865:32;2906:30;2865:32;2906:30;:::i;:::-;2955:7;2945:17;;;2586:382;;;;;:::o;2973:241::-;3029:6;3082:2;3070:9;3061:7;3057:23;3053:32;3050:52;;;3098:1;3095;3088:12;3050:52;3137:9;3124:23;3156:28;3178:5;3156:28;:::i;3427:247::-;3486:6;3539:2;3527:9;3518:7;3514:23;3510:32;3507:52;;;3555:1;3552;3545:12;3507:52;3594:9;3581:23;3613:31;3638:5;3613:31;:::i;3868:180::-;3927:6;3980:2;3968:9;3959:7;3955:23;3951:32;3948:52;;;3996:1;3993;3986:12;3948:52;-1:-1:-1;4019:23:1;;3868:180;-1:-1:-1;3868:180:1:o;4277:388::-;4345:6;4353;4406:2;4394:9;4385:7;4381:23;4377:32;4374:52;;;4422:1;4419;4412:12;4374:52;4461:9;4448:23;4480:31;4505:5;4480:31;:::i;:::-;4530:5;-1:-1:-1;4587:2:1;4572:18;;4559:32;4600:33;4559:32;4600:33;:::i;4670:356::-;4872:2;4854:21;;;4891:18;;;4884:30;4950:34;4945:2;4930:18;;4923:62;5017:2;5002:18;;4670:356::o;5310:245::-;5377:6;5430:2;5418:9;5409:7;5405:23;5401:32;5398:52;;;5446:1;5443;5436:12;5398:52;5478:9;5472:16;5497:28;5519:5;5497:28;:::i;5560:380::-;5639:1;5635:12;;;;5682;;;5703:61;;5757:4;5749:6;5745:17;5735:27;;5703:61;5810:2;5802:6;5799:14;5779:18;5776:38;5773:161;;;5856:10;5851:3;5847:20;5844:1;5837:31;5891:4;5888:1;5881:15;5919:4;5916:1;5909:15;5773:161;;5560:380;;;:::o;5945:251::-;6015:6;6068:2;6056:9;6047:7;6043:23;6039:32;6036:52;;;6084:1;6081;6074:12;6036:52;6116:9;6110:16;6135:31;6160:5;6135:31;:::i;6917:127::-;6978:10;6973:3;6969:20;6966:1;6959:31;7009:4;7006:1;6999:15;7033:4;7030:1;7023:15;7049:128;7089:3;7120:1;7116:6;7113:1;7110:13;7107:39;;;7126:18;;:::i;:::-;-1:-1:-1;7162:9:1;;7049:128::o;9209:125::-;9249:4;9277:1;9274;9271:8;9268:34;;;9282:18;;:::i;:::-;-1:-1:-1;9319:9:1;;9209:125::o;9339:168::-;9379:7;9445:1;9441;9437:6;9433:14;9430:1;9427:21;9422:1;9415:9;9408:17;9404:45;9401:71;;;9452:18;;:::i;:::-;-1:-1:-1;9492:9:1;;9339:168::o;9512:217::-;9552:1;9578;9568:132;;9622:10;9617:3;9613:20;9610:1;9603:31;9657:4;9654:1;9647:15;9685:4;9682:1;9675:15;9568:132;-1:-1:-1;9714:9:1;;9512:217::o;9866:127::-;9927:10;9922:3;9918:20;9915:1;9908:31;9958:4;9955:1;9948:15;9982:4;9979:1;9972:15;9998:461;10051:3;10089:5;10083:12;10116:6;10111:3;10104:19;10142:4;10171:2;10166:3;10162:12;10155:19;;10208:2;10201:5;10197:14;10229:1;10239:195;10253:6;10250:1;10247:13;10239:195;;;10318:13;;-1:-1:-1;;;;;10314:39:1;10302:52;;10374:12;;;;10409:15;;;;10350:1;10268:9;10239:195;;;-1:-1:-1;10450:3:1;;9998:461;-1:-1:-1;;;;;9998:461:1:o;10464:582::-;10763:6;10752:9;10745:25;10806:6;10801:2;10790:9;10786:18;10779:34;10849:3;10844:2;10833:9;10829:18;10822:31;10726:4;10870:57;10922:3;10911:9;10907:19;10899:6;10870:57;:::i;:::-;-1:-1:-1;;;;;10963:32:1;;;;10958:2;10943:18;;10936:60;-1:-1:-1;11027:3:1;11012:19;11005:35;10862:65;10464:582;-1:-1:-1;;;10464:582:1:o;11051:332::-;11258:6;11247:9;11240:25;11301:2;11296;11285:9;11281:18;11274:30;11221:4;11321:56;11373:2;11362:9;11358:18;11350:6;11321:56;:::i;:::-;11313:64;11051:332;-1:-1:-1;;;;11051:332:1:o;12000:306::-;12088:6;12096;12104;12157:2;12145:9;12136:7;12132:23;12128:32;12125:52;;;12173:1;12170;12163:12;12125:52;12202:9;12196:16;12186:26;;12252:2;12241:9;12237:18;12231:25;12221:35;;12296:2;12285:9;12281:18;12275:25;12265:35;;12000:306;;;;;:::o

Swarm Source

ipfs://6fcd282f776ead16a5218e82bb2e96c3347b671996151027e42ec6fe80cf1f1d
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.