ETH Price: $2,815.72 (+8.51%)
 

Overview

Max Total Supply

1,000,000,000,000,000 sETH

Holders

83

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,999,258,280.773578315 sETH

Value
$0.00
0xe7e4a48f4faf8aacf32ddc08193783ba6b8ecde6
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:
ShibFamily

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-25
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.4;

interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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

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

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

interface IPancakeV2Factory {
    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 IPancakeV2Pair {
    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 IPancakeV2Router01 {
    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 IPancakeV2Router02 is IPancakeV2Router01 {
    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 ShibFamily is Context, IBEP20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    
    mapping(address => uint256) private cooldown;
    
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromAutoLiquidity;

    address[] private _excluded;
    address payable public _marketingWallet = payable(0xfE105d0f2cc3D653b789e4Fea50110FE5E4334a8); // Marketing Address
    address public immutable _burnAddress = 0x000000000000000000000000000000000000dEaD;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name     = "ShibFamily";
    string private constant _symbol   = "sETH";
    uint8  private constant _decimals = 9;
    
    uint256 public  _taxFee       = 4; // holders tax
    uint256 public  _liquidityFee = 4; // auto lp
    uint256 public  _marketingFee  = 2; // Marketing wallet
    uint256 public  _burnFee      = 2; // burn address
    
    uint256 public  _maxTxAmount     = 500 * 10**9 * 10**9;
    uint256 private _minTokenBalance = 100 * 10**6 * 10**9;
    
    // auto liquidity
    IPancakeV2Router02 public pancakeV2Router;
    address            public pancakeV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private cooldownEnabled = false;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {

        _rOwned[_msgSender()] = _rTotal;
        
        // pancake
        IPancakeV2Router02 _pancakeV2Router = IPancakeV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pancakeV2Pair = IPancakeV2Factory(_pancakeV2Router.factory())
            .createPair(address(this), _pancakeV2Router.WETH());
        pancakeV2Router = _pancakeV2Router;
        
        // exclude system contracts
        _isExcludedFromFee[owner()]         = true;
        _isExcludedFromFee[address(this)]   = true;
        _isExcludedFromFee[_marketingWallet] = true;

        _isExcludedFromAutoLiquidity[pancakeV2Pair]            = true;
        _isExcludedFromAutoLiquidity[address(pancakeV2Router)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        (, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount);
        uint256 currentRate = _getRate();

        if (!deductTransferFee) {
            (uint256 rAmount,,) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);
            return rAmount;

        } else {
            (, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);
            return rTransferAmount;
        }
    }
    
    function setCooldownEnabled(bool onoff) external onlyOwner() {
        cooldownEnabled = onoff;
    }

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

        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already included");

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function setExcludedFromFee(address account, bool e) external onlyOwner {
        _isExcludedFromFee[account] = e;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        _liquidityFee = liquidityFee;
    }

    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner {
        _marketingFee = marketingFee;
    }
    
    function setMarketingAddress(address marketingWallet) external onlyOwner() {
        _marketingWallet = payable(marketingWallet);
    }
    
    function setBurnFeePercent(uint256 burnFee) external onlyOwner {
        _burnFee = burnFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(100);
    }

    function setMinTokenBalance(uint256 minTokenBalance) external onlyOwner {
        _minTokenBalance = minTokenBalance;
    }

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

    function setPancakeRouter(address r) external onlyOwner {
        IPancakeV2Router02 _pancakeV2Router = IPancakeV2Router02(r);
        pancakeV2Router = _pancakeV2Router;
    }

    function setPancakePair(address p) external onlyOwner {
        pancakeV2Pair = p;
    }

    function setExcludedFromAutoLiquidity(address a, bool b) external onlyOwner {
        _isExcludedFromAutoLiquidity[a] = b;
    }

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        uint256 tFee       = tAmount.mul(_taxFee).div(100);
        uint256 tLiquidity = tAmount.mul(_liquidityFee).div(100);
        uint256 tMarketing = tAmount.mul(_marketingFee).div(100);
        uint256 tBurn      = tAmount.mul(_burnFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee);
        tTransferAmount = tTransferAmount.sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tMarketing);
        tTransferAmount = tTransferAmount.sub(tBurn);
        return (tTransferAmount, tFee, tLiquidity, tMarketing, tBurn);
    }

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function takeTransactionFee(address to, uint256 tAmount, uint256 currentRate) private {
        if (tAmount <= 0) { return; }

        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[to] = _rOwned[to].add(rAmount);
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to].add(tAmount);
        }
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner())
            if (from != owner() && to != owner()) {
                if (cooldownEnabled) {
                    if (
                        from != address(this) && to != address(this) && from != address(pancakeV2Router) && to != address(pancakeV2Router)
                    ) {
                        require(
                            _msgSender() == address(pancakeV2Router) ||
                                _msgSender() == pancakeV2Pair,
                            "ERR: PancakeSwap only"
                        );
                    }
                }
            
            
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            
            if (
                from == pancakeV2Pair &&
                to != address(pancakeV2Router) &&
                !_isExcludedFromFee[to] &&
                cooldownEnabled
            ) {
                require(cooldown[to] < block.timestamp);
                cooldown[to] = block.timestamp + (180 seconds);
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool isOverMinTokenBalance = contractTokenBalance >= _minTokenBalance;
        if (
            isOverMinTokenBalance &&
            !inSwapAndLiquify &&
            !_isExcludedFromAutoLiquidity[from] &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = _minTokenBalance;
            swapAndLiquify(contractTokenBalance);
        }

            
    }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {

        uint256 half      = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        
        swapTokensForBnb(half);

        
        uint256 newBalance = address(this).balance.sub(initialBalance);

        
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForBnb(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeV2Router.WETH();

        _approve(address(this), address(pancakeV2Router), tokenAmount);
        pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }

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

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        uint256 previousTaxFee       = _taxFee;
        uint256 previousLiquidityFee = _liquidityFee;
        uint256 previousMarketingFee  = _marketingFee;
        uint256 previousBurnFee      = _burnFee;

        if (!takeFee) {
            _taxFee       = 0;
            _liquidityFee = 0;
            _marketingFee  = 0;
            _burnFee      = 0;
        }
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);

        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);

        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);

        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if (!takeFee) {
            _taxFee       = previousTaxFee;
            _liquidityFee = previousLiquidityFee;
            _marketingFee  = previousMarketingFee;
            _burnFee      = previousBurnFee;
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);

        _rOwned[sender]    = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        takeTransactionFee(address(_marketingWallet), tMarketing, currentRate);
        takeTransactionFee(address(_burnAddress), tBurn, currentRate);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _marketingWallet, tMarketing);
        emit Transfer(sender, _burnAddress, tBurn);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        takeTransactionFee(address(_marketingWallet), tMarketing, currentRate);
        takeTransactionFee(address(_burnAddress), tBurn, currentRate);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _marketingWallet, tMarketing);
        emit Transfer(sender, _burnAddress, tBurn);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(address(this), tLiquidity, currentRate);
        takeTransactionFee(address(_marketingWallet), tMarketing, currentRate);
        takeTransactionFee(address(_burnAddress), tBurn, currentRate);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _marketingWallet, tMarketing);
        emit Transfer(sender, _burnAddress, tBurn);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 tBurn) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, tBurn, currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        
        takeTransactionFee(address(this), tLiquidity, currentRate);
        takeTransactionFee(address(_marketingWallet), tMarketing, currentRate);
        takeTransactionFee(address(_burnAddress), tBurn, currentRate);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
        emit Transfer(sender, _marketingWallet, tMarketing);
        emit Transfer(sender, _burnAddress, tBurn);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromAutoLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Router","outputs":[{"internalType":"contract IPancakeV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"b","type":"bool"}],"name":"setExcludedFromAutoLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setPancakePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setPancakeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600b80546001600160a01b03191673fe105d0f2cc3d653b789e4fea50110fe5e4334a81790556ddead00000000000000000000000060805269d3c21bcecceda1000000600c8190556200005a9060001962000419565b6200006890600019620003f5565b600d556004600f81905560105560026011819055601255681b1ae4d6e2ef50000060135567016345785d8a00006014556016805461ffff60a81b1916600160a81b179055348015620000b957600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200015d57600080fd5b505afa15801562000172573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001989190620003c5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e157600080fd5b505afa158015620001f6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021c9190620003c5565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026557600080fd5b505af11580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a09190620003c5565b601680546001600160a01b03199081166001600160a01b039384161790915560158054909116918316919091179055600160056000620002e86000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530815260058452828120805486166001908117909155600b54831682528382208054871682179055601654831682526009909452828120805486168517905560155490911681522080549092161790556200036e3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620003b691815260200190565b60405180910390a3506200043a565b600060208284031215620003d7578081fd5b81516001600160a01b0381168114620003ee578182fd5b9392505050565b6000828210156200041457634e487b7160e01b81526011600452602481fd5b500390565b6000826200043557634e487b7160e01b81526012600452602481fd5b500690565b60805160601c612d1e62000467600039600081816107d90152818161255501526126190152612d1e6000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063a9059cbb116100c1578063cea269581161007a578063cea2695814610831578063d543dbeb14610851578063dd46706414610871578063dd62ed3e14610891578063f2fde38b146108d7578063f8316c90146108f757600080fd5b8063a9059cbb14610757578063b0ac157114610777578063baa0439814610797578063bd3900c0146107c7578063c0b0fda2146107fb578063c49b9a801461081157600080fd5b8063906e9dd011610113578063906e9dd01461069557806395d89b41146106b5578063962dfc75146106e2578063a457c2d714610702578063a5b601be14610722578063a69df4b51461074257600080fd5b806370a08231146105d3578063715018a6146105f35780637d1db4a51461060857806388f820201461061e5780638da5cb5b146106575780638ee88c531461067557600080fd5b80633b124fe7116101fe5780635932ead1116101b75780635932ead1146105285780635d83b45414610548578063602bc62b14610568578063632a6a351461057d5780636612e66f1461059d5780636bc87c3a146105bd57600080fd5b80633b124fe7146104585780634549b0391461046e578063457c194c1461048e5780634a74bb02146104ae57806352390c02146104cf5780635342acb4146104ef57600080fd5b806322976e0d1161025057806322976e0d146103a657806323b872dd146103bc5780632d838119146103dc578063313ce567146103fc5780633685d41914610418578063395093511461043857600080fd5b8063061c82d0146102a357806306fdde03146102c5578063095ea7b31461030a57806313114a9d1461033a57806318160ddd146103595780631a4cd1b11461036e57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004612a65565b610917565b005b3480156102d157600080fd5b5060408051808201909152600a8152695368696246616d696c7960b01b60208201525b6040516103019190612acc565b60405180910390f35b34801561031657600080fd5b5061032a610325366004612a20565b61094f565b6040519015158152602001610301565b34801561034657600080fd5b50600e545b604051908152602001610301565b34801561036557600080fd5b50600c5461034b565b34801561037a57600080fd5b5060155461038e906001600160a01b031681565b6040516001600160a01b039091168152602001610301565b3480156103b257600080fd5b5061034b60115481565b3480156103c857600080fd5b5061032a6103d73660046129ac565b610966565b3480156103e857600080fd5b5061034b6103f7366004612a65565b6109cf565b34801561040857600080fd5b5060405160098152602001610301565b34801561042457600080fd5b506102c361043336600461293c565b610a53565b34801561044457600080fd5b5061032a610453366004612a20565b610c42565b34801561046457600080fd5b5061034b600f5481565b34801561047a57600080fd5b5061034b610489366004612a7d565b610c78565b34801561049a57600080fd5b506102c36104a9366004612a65565b610d36565b3480156104ba57600080fd5b5060165461032a90600160a81b900460ff1681565b3480156104db57600080fd5b506102c36104ea36600461293c565b610d65565b3480156104fb57600080fd5b5061032a61050a36600461293c565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561053457600080fd5b506102c3610543366004612a4b565b610eb8565b34801561055457600080fd5b506102c36105633660046129ec565b610f00565b34801561057457600080fd5b5060025461034b565b34801561058957600080fd5b5060165461038e906001600160a01b031681565b3480156105a957600080fd5b506102c36105b83660046129ec565b610f55565b3480156105c957600080fd5b5061034b60105481565b3480156105df57600080fd5b5061034b6105ee36600461293c565b610faa565b3480156105ff57600080fd5b506102c3611009565b34801561061457600080fd5b5061034b60135481565b34801561062a57600080fd5b5061032a61063936600461293c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066357600080fd5b506000546001600160a01b031661038e565b34801561068157600080fd5b506102c3610690366004612a65565b61106b565b3480156106a157600080fd5b506102c36106b036600461293c565b61109a565b3480156106c157600080fd5b506040805180820190915260048152630e68aa8960e31b60208201526102f4565b3480156106ee57600080fd5b50600b5461038e906001600160a01b031681565b34801561070e57600080fd5b5061032a61071d366004612a20565b6110e6565b34801561072e57600080fd5b506102c361073d36600461293c565b611135565b34801561074e57600080fd5b506102c3611181565b34801561076357600080fd5b5061032a610772366004612a20565b611287565b34801561078357600080fd5b506102c3610792366004612a65565b611294565b3480156107a357600080fd5b5061032a6107b236600461293c565b60096020526000908152604090205460ff1681565b3480156107d357600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561080757600080fd5b5061034b60125481565b34801561081d57600080fd5b506102c361082c366004612a4b565b6112c3565b34801561083d57600080fd5b506102c361084c366004612a65565b611345565b34801561085d57600080fd5b506102c361086c366004612a65565b611374565b34801561087d57600080fd5b506102c361088c366004612a65565b6113c4565b34801561089d57600080fd5b5061034b6108ac366004612974565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108e357600080fd5b506102c36108f236600461293c565b611449565b34801561090357600080fd5b506102c361091236600461293c565b611521565b6000546001600160a01b0316331461094a5760405162461bcd60e51b815260040161094190612b1f565b60405180910390fd5b600f55565b600061095c33848461156d565b5060015b92915050565b6000610973848484611691565b6109c584336109c085604051806060016040528060288152602001612c7c602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611afd565b61156d565b5060019392505050565b6000600d54821115610a365760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610941565b6000610a40611b37565b9050610a4c8382611b5a565b9392505050565b6000546001600160a01b03163314610a7d5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03811660009081526006602052604090205460ff16610ae55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610941565b60005b600a54811015610c3e57816001600160a01b0316600a8281548110610b1d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610c2c57600a8054610b4890600190612c1b565b81548110610b6657634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b039092169183908110610ba057634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600690925220805460ff19169055600a805480610c0657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c3681612c32565b915050610ae8565b5050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161095c9185906109c09086611b9c565b6000600c54831115610ccc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610941565b600080600080610cdb87611bfb565b9450945094509450506000610cee611b37565b905086610d16576000610d05898787878787611cbd565b509097506109609650505050505050565b6000610d26898787878787611cbd565b5097506109609650505050505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040161094190612b1f565b601155565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03811660009081526006602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610941565b6001600160a01b03811660009081526003602052604090205415610e52576001600160a01b038116600090815260036020526040902054610e38906109cf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600660205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161094190612b1f565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f7f5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff1615610fe757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610960906109cf565b6000546001600160a01b031633146110335760405162461bcd60e51b815260040161094190612b1f565b600080546040516001600160a01b0390911690600080516020612ca4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110955760405162461bcd60e51b815260040161094190612b1f565b601055565b6000546001600160a01b031633146110c45760405162461bcd60e51b815260040161094190612b1f565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600061095c33846109c085604051806060016040528060258152602001612cc4602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611afd565b6000546001600160a01b0316331461115f5760405162461bcd60e51b815260040161094190612b1f565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146111e75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610941565b60025442116112385760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610941565b600154600080546040516001600160a01b039384169390911691600080516020612ca483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061095c338484611691565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161094190612b1f565b601455565b6000546001600160a01b031633146112ed5760405162461bcd60e51b815260040161094190612b1f565b60168054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061133a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161094190612b1f565b601255565b6000546001600160a01b0316331461139e5760405162461bcd60e51b815260040161094190612b1f565b6113be60646113b883600c54611d4d90919063ffffffff16565b90611b5a565b60135550565b6000546001600160a01b031633146113ee5760405162461bcd60e51b815260040161094190612b1f565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561141d8142612bc4565b600255600080546040516001600160a01b0390911690600080516020612ca4833981519152908390a350565b6000546001600160a01b031633146114735760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b0381166114d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610941565b600080546040516001600160a01b0380851693921691600080516020612ca483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b815260040161094190612b1f565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115cf5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610941565b6001600160a01b0382166116305760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610941565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116f55760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610941565b6001600160a01b0382166117575760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610941565b600081116117b95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610941565b6000546001600160a01b038481169116148015906117e557506000546001600160a01b03838116911614155b15611aa0576000546001600160a01b0384811691161480159061181657506000546001600160a01b03838116911614155b15611aa057601654600160b01b900460ff1615611901576001600160a01b038316301480159061184f57506001600160a01b0382163014155b801561186957506015546001600160a01b03848116911614155b801561188357506015546001600160a01b03838116911614155b15611901576015546001600160a01b0316336001600160a01b031614806118bd57506016546001600160a01b0316336001600160a01b0316145b6119015760405162461bcd60e51b81526020600482015260156024820152744552523a2050616e63616b6553776170206f6e6c7960581b6044820152606401610941565b6013548111156119645760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610941565b6016546001600160a01b03848116911614801561198f57506015546001600160a01b03838116911614155b80156119b457506001600160a01b03821660009081526005602052604090205460ff16155b80156119c95750601654600160b01b900460ff165b15611a17576001600160a01b03821660009081526007602052604090205442116119f257600080fd5b6119fd4260b4612bc4565b6001600160a01b0383166000908152600760205260409020555b6000611a2230610faa565b90506013548110611a3257506013545b60145481108015908190611a505750601654600160a01b900460ff16155b8015611a7557506001600160a01b03851660009081526009602052604090205460ff16155b8015611a8a5750601654600160a81b900460ff165b15611a9d576014549150611a9d82611dcc565b50505b6001600160a01b03831660009081526005602052604090205460019060ff1680611ae257506001600160a01b03831660009081526005602052604090205460ff165b15611aeb575060005b611af784848484611e73565b50505050565b60008184841115611b215760405162461bcd60e51b81526004016109419190612acc565b506000611b2e8486612c1b565b95945050505050565b6000806000611b44611fbf565b9092509050611b538282611b5a565b9250505090565b6000610a4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612179565b600080611ba98385612bc4565b905083811015610a4c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610941565b600080600080600080611c1e60646113b8600f548a611d4d90919063ffffffff16565b90506000611c3c60646113b86010548b611d4d90919063ffffffff16565b90506000611c5a60646113b86011548c611d4d90919063ffffffff16565b90506000611c7860646113b86012548d611d4d90919063ffffffff16565b90506000611c868b866121a7565b9050611c9281856121a7565b9050611c9e81846121a7565b9050611caa81836121a7565b9b949a5092985090965094509092505050565b6000808080611ccc8a86611d4d565b90506000611cda8a87611d4d565b90506000611ce88a88611d4d565b90506000611cf68a89611d4d565b90506000611d048a8a611d4d565b90506000611d1286866121a7565b9050611d1e81856121a7565b9050611d2a81846121a7565b9050611d3681836121a7565b959f959e50939c50939a5050505050505050505050565b600082611d5c57506000610960565b6000611d688385612bfc565b905082611d758583612bdc565b14610a4c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610941565b6016805460ff60a01b1916600160a01b1790556000611dec826002611b5a565b90506000611dfa83836121a7565b905047611e06836121e9565b6000611e1247836121a7565b9050611e1e838261236e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff60a01b19169055505050565b600f5460105460115460125484611e99576000600f819055601081905560118190556012555b6001600160a01b03881660009081526006602052604090205460ff168015611eda57506001600160a01b03871660009081526006602052604090205460ff16155b15611eef57611eea888888612452565b611f9b565b6001600160a01b03881660009081526006602052604090205460ff16158015611f3057506001600160a01b03871660009081526006602052604090205460ff165b15611f4057611eea888888612692565b6001600160a01b03881660009081526006602052604090205460ff168015611f8057506001600160a01b03871660009081526006602052604090205460ff165b15611f9057611eea88888861275c565b611f9b8888886127f0565b84611fb557600f8490556010839055601182905560128190555b5050505050505050565b600d54600c546000918291825b600a54811015612149578260036000600a8481548110611ffc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061207557508160046000600a848154811061204e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561208b57600d54600c54945094505050509091565b6120df60036000600a84815481106120b357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121a7565b925061213560046000600a848154811061210957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121a7565b91508061214181612c32565b915050611fcc565b50600c54600d5461215991611b5a565b82101561217057600d54600c549350935050509091565b90939092509050565b6000818361219a5760405162461bcd60e51b81526004016109419190612acc565b506000611b2e8486612bdc565b6000610a4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611afd565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061222c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561228057600080fd5b505afa158015612294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b89190612958565b816001815181106122d957634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526015546122ff913091168461156d565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790612338908590600090869030904290600401612b54565b600060405180830381600087803b15801561235257600080fd5b505af1158015612366573d6000803e3d6000fd5b505050505050565b6015546123869030906001600160a01b03168461156d565b6015546001600160a01b031663f305d7198230856000806123af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561241257600080fd5b505af1158015612426573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244b9190612a9f565b5050505050565b600080600080600061246386611bfb565b945094509450945094506000612477611b37565b9050600080600061248c8a8989898989611cbd565b6001600160a01b038f1660009081526004602052604090205492955090935091506124b7908b6121a7565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546124e690846121a7565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546125159083611b9c565b6001600160a01b038c16600090815260036020526040902055612539308886612855565b600b54612550906001600160a01b03168786612855565b61257b7f00000000000000000000000000000000000000000000000000000000000000008686612855565b6125858189612903565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040516125ca91815260200190565b60405180910390a3600b546040518781526001600160a01b03918216918e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161267c91815260200190565b60405180910390a3505050505050505050505050565b60008060008060006126a386611bfb565b9450945094509450945060006126b7611b37565b905060008060006126cc8a8989898989611cbd565b6001600160a01b038f1660009081526003602052604090205492955090935091506126f790846121a7565b6001600160a01b03808e16600090815260036020908152604080832094909455918e1681526004909152205461272d908a611b9c565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546125159083611b9c565b600080600080600061276d86611bfb565b945094509450945094506000612781611b37565b905060008060006127968a8989898989611cbd565b6001600160a01b038f1660009081526004602052604090205492955090935091506127c1908b6121a7565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546126f790846121a7565b600080600080600061280186611bfb565b945094509450945094506000612815611b37565b9050600080600061282a8a8989898989611cbd565b6001600160a01b038f1660009081526003602052604090205492955090935091506124e690846121a7565b6000821161286257505050565b600061286e8383611d4d565b6001600160a01b0385166000908152600360205260409020549091506128949082611b9c565b6001600160a01b03851660009081526003602090815260408083209390935560069052205460ff1615611af7576001600160a01b0384166000908152600460205260409020546128e49084611b9c565b6001600160a01b03851660009081526004602052604090205550505050565b600d5461291090836121a7565b600d55600e546129209082611b9c565b600e555050565b8035801515811461293757600080fd5b919050565b60006020828403121561294d578081fd5b8135610a4c81612c63565b600060208284031215612969578081fd5b8151610a4c81612c63565b60008060408385031215612986578081fd5b823561299181612c63565b915060208301356129a181612c63565b809150509250929050565b6000806000606084860312156129c0578081fd5b83356129cb81612c63565b925060208401356129db81612c63565b929592945050506040919091013590565b600080604083850312156129fe578182fd5b8235612a0981612c63565b9150612a1760208401612927565b90509250929050565b60008060408385031215612a32578182fd5b8235612a3d81612c63565b946020939093013593505050565b600060208284031215612a5c578081fd5b610a4c82612927565b600060208284031215612a76578081fd5b5035919050565b60008060408385031215612a8f578182fd5b82359150612a1760208401612927565b600080600060608486031215612ab3578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612af857858101830151858201604001528201612adc565b81811115612b095783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ba35784516001600160a01b031683529383019391830191600101612b7e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612bd757612bd7612c4d565b500190565b600082612bf757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612c1657612c16612c4d565b500290565b600082821015612c2d57612c2d612c4d565b500390565b6000600019821415612c4657612c46612c4d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612c7857600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e31e94f5c63ee6c87235d215a9ea6c6e3b0f7f72709f34d6788cb2e715b0e35f64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806370a082311161015a578063a9059cbb116100c1578063cea269581161007a578063cea2695814610831578063d543dbeb14610851578063dd46706414610871578063dd62ed3e14610891578063f2fde38b146108d7578063f8316c90146108f757600080fd5b8063a9059cbb14610757578063b0ac157114610777578063baa0439814610797578063bd3900c0146107c7578063c0b0fda2146107fb578063c49b9a801461081157600080fd5b8063906e9dd011610113578063906e9dd01461069557806395d89b41146106b5578063962dfc75146106e2578063a457c2d714610702578063a5b601be14610722578063a69df4b51461074257600080fd5b806370a08231146105d3578063715018a6146105f35780637d1db4a51461060857806388f820201461061e5780638da5cb5b146106575780638ee88c531461067557600080fd5b80633b124fe7116101fe5780635932ead1116101b75780635932ead1146105285780635d83b45414610548578063602bc62b14610568578063632a6a351461057d5780636612e66f1461059d5780636bc87c3a146105bd57600080fd5b80633b124fe7146104585780634549b0391461046e578063457c194c1461048e5780634a74bb02146104ae57806352390c02146104cf5780635342acb4146104ef57600080fd5b806322976e0d1161025057806322976e0d146103a657806323b872dd146103bc5780632d838119146103dc578063313ce567146103fc5780633685d41914610418578063395093511461043857600080fd5b8063061c82d0146102a357806306fdde03146102c5578063095ea7b31461030a57806313114a9d1461033a57806318160ddd146103595780631a4cd1b11461036e57600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102c36102be366004612a65565b610917565b005b3480156102d157600080fd5b5060408051808201909152600a8152695368696246616d696c7960b01b60208201525b6040516103019190612acc565b60405180910390f35b34801561031657600080fd5b5061032a610325366004612a20565b61094f565b6040519015158152602001610301565b34801561034657600080fd5b50600e545b604051908152602001610301565b34801561036557600080fd5b50600c5461034b565b34801561037a57600080fd5b5060155461038e906001600160a01b031681565b6040516001600160a01b039091168152602001610301565b3480156103b257600080fd5b5061034b60115481565b3480156103c857600080fd5b5061032a6103d73660046129ac565b610966565b3480156103e857600080fd5b5061034b6103f7366004612a65565b6109cf565b34801561040857600080fd5b5060405160098152602001610301565b34801561042457600080fd5b506102c361043336600461293c565b610a53565b34801561044457600080fd5b5061032a610453366004612a20565b610c42565b34801561046457600080fd5b5061034b600f5481565b34801561047a57600080fd5b5061034b610489366004612a7d565b610c78565b34801561049a57600080fd5b506102c36104a9366004612a65565b610d36565b3480156104ba57600080fd5b5060165461032a90600160a81b900460ff1681565b3480156104db57600080fd5b506102c36104ea36600461293c565b610d65565b3480156104fb57600080fd5b5061032a61050a36600461293c565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561053457600080fd5b506102c3610543366004612a4b565b610eb8565b34801561055457600080fd5b506102c36105633660046129ec565b610f00565b34801561057457600080fd5b5060025461034b565b34801561058957600080fd5b5060165461038e906001600160a01b031681565b3480156105a957600080fd5b506102c36105b83660046129ec565b610f55565b3480156105c957600080fd5b5061034b60105481565b3480156105df57600080fd5b5061034b6105ee36600461293c565b610faa565b3480156105ff57600080fd5b506102c3611009565b34801561061457600080fd5b5061034b60135481565b34801561062a57600080fd5b5061032a61063936600461293c565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561066357600080fd5b506000546001600160a01b031661038e565b34801561068157600080fd5b506102c3610690366004612a65565b61106b565b3480156106a157600080fd5b506102c36106b036600461293c565b61109a565b3480156106c157600080fd5b506040805180820190915260048152630e68aa8960e31b60208201526102f4565b3480156106ee57600080fd5b50600b5461038e906001600160a01b031681565b34801561070e57600080fd5b5061032a61071d366004612a20565b6110e6565b34801561072e57600080fd5b506102c361073d36600461293c565b611135565b34801561074e57600080fd5b506102c3611181565b34801561076357600080fd5b5061032a610772366004612a20565b611287565b34801561078357600080fd5b506102c3610792366004612a65565b611294565b3480156107a357600080fd5b5061032a6107b236600461293c565b60096020526000908152604090205460ff1681565b3480156107d357600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561080757600080fd5b5061034b60125481565b34801561081d57600080fd5b506102c361082c366004612a4b565b6112c3565b34801561083d57600080fd5b506102c361084c366004612a65565b611345565b34801561085d57600080fd5b506102c361086c366004612a65565b611374565b34801561087d57600080fd5b506102c361088c366004612a65565b6113c4565b34801561089d57600080fd5b5061034b6108ac366004612974565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3480156108e357600080fd5b506102c36108f236600461293c565b611449565b34801561090357600080fd5b506102c361091236600461293c565b611521565b6000546001600160a01b0316331461094a5760405162461bcd60e51b815260040161094190612b1f565b60405180910390fd5b600f55565b600061095c33848461156d565b5060015b92915050565b6000610973848484611691565b6109c584336109c085604051806060016040528060288152602001612c7c602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611afd565b61156d565b5060019392505050565b6000600d54821115610a365760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610941565b6000610a40611b37565b9050610a4c8382611b5a565b9392505050565b6000546001600160a01b03163314610a7d5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03811660009081526006602052604090205460ff16610ae55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610941565b60005b600a54811015610c3e57816001600160a01b0316600a8281548110610b1d57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610c2c57600a8054610b4890600190612c1b565b81548110610b6657634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b039092169183908110610ba057634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600690925220805460ff19169055600a805480610c0657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610c3681612c32565b915050610ae8565b5050565b3360008181526008602090815260408083206001600160a01b0387168452909152812054909161095c9185906109c09086611b9c565b6000600c54831115610ccc5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610941565b600080600080610cdb87611bfb565b9450945094509450506000610cee611b37565b905086610d16576000610d05898787878787611cbd565b509097506109609650505050505050565b6000610d26898787878787611cbd565b5097506109609650505050505050565b6000546001600160a01b03163314610d605760405162461bcd60e51b815260040161094190612b1f565b601155565b6000546001600160a01b03163314610d8f5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03811660009081526006602052604090205460ff1615610df85760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610941565b6001600160a01b03811660009081526003602052604090205415610e52576001600160a01b038116600090815260036020526040902054610e38906109cf565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600660205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314610ee25760405162461bcd60e51b815260040161094190612b1f565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b03163314610f2a5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f7f5760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b03811660009081526006602052604081205460ff1615610fe757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610960906109cf565b6000546001600160a01b031633146110335760405162461bcd60e51b815260040161094190612b1f565b600080546040516001600160a01b0390911690600080516020612ca4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110955760405162461bcd60e51b815260040161094190612b1f565b601055565b6000546001600160a01b031633146110c45760405162461bcd60e51b815260040161094190612b1f565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600061095c33846109c085604051806060016040528060258152602001612cc4602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190611afd565b6000546001600160a01b0316331461115f5760405162461bcd60e51b815260040161094190612b1f565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031633146111e75760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610941565b60025442116112385760405162461bcd60e51b815260206004820152601860248201527f436f6e7472616374206973207374696c6c206c6f636b656400000000000000006044820152606401610941565b600154600080546040516001600160a01b039384169390911691600080516020612ca483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600061095c338484611691565b6000546001600160a01b031633146112be5760405162461bcd60e51b815260040161094190612b1f565b601455565b6000546001600160a01b031633146112ed5760405162461bcd60e51b815260040161094190612b1f565b60168054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061133a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461136f5760405162461bcd60e51b815260040161094190612b1f565b601255565b6000546001600160a01b0316331461139e5760405162461bcd60e51b815260040161094190612b1f565b6113be60646113b883600c54611d4d90919063ffffffff16565b90611b5a565b60135550565b6000546001600160a01b031633146113ee5760405162461bcd60e51b815260040161094190612b1f565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561141d8142612bc4565b600255600080546040516001600160a01b0390911690600080516020612ca4833981519152908390a350565b6000546001600160a01b031633146114735760405162461bcd60e51b815260040161094190612b1f565b6001600160a01b0381166114d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610941565b600080546040516001600160a01b0380851693921691600080516020612ca483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b815260040161094190612b1f565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115cf5760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610941565b6001600160a01b0382166116305760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610941565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116f55760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610941565b6001600160a01b0382166117575760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610941565b600081116117b95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610941565b6000546001600160a01b038481169116148015906117e557506000546001600160a01b03838116911614155b15611aa0576000546001600160a01b0384811691161480159061181657506000546001600160a01b03838116911614155b15611aa057601654600160b01b900460ff1615611901576001600160a01b038316301480159061184f57506001600160a01b0382163014155b801561186957506015546001600160a01b03848116911614155b801561188357506015546001600160a01b03838116911614155b15611901576015546001600160a01b0316336001600160a01b031614806118bd57506016546001600160a01b0316336001600160a01b0316145b6119015760405162461bcd60e51b81526020600482015260156024820152744552523a2050616e63616b6553776170206f6e6c7960581b6044820152606401610941565b6013548111156119645760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610941565b6016546001600160a01b03848116911614801561198f57506015546001600160a01b03838116911614155b80156119b457506001600160a01b03821660009081526005602052604090205460ff16155b80156119c95750601654600160b01b900460ff165b15611a17576001600160a01b03821660009081526007602052604090205442116119f257600080fd5b6119fd4260b4612bc4565b6001600160a01b0383166000908152600760205260409020555b6000611a2230610faa565b90506013548110611a3257506013545b60145481108015908190611a505750601654600160a01b900460ff16155b8015611a7557506001600160a01b03851660009081526009602052604090205460ff16155b8015611a8a5750601654600160a81b900460ff165b15611a9d576014549150611a9d82611dcc565b50505b6001600160a01b03831660009081526005602052604090205460019060ff1680611ae257506001600160a01b03831660009081526005602052604090205460ff165b15611aeb575060005b611af784848484611e73565b50505050565b60008184841115611b215760405162461bcd60e51b81526004016109419190612acc565b506000611b2e8486612c1b565b95945050505050565b6000806000611b44611fbf565b9092509050611b538282611b5a565b9250505090565b6000610a4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612179565b600080611ba98385612bc4565b905083811015610a4c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610941565b600080600080600080611c1e60646113b8600f548a611d4d90919063ffffffff16565b90506000611c3c60646113b86010548b611d4d90919063ffffffff16565b90506000611c5a60646113b86011548c611d4d90919063ffffffff16565b90506000611c7860646113b86012548d611d4d90919063ffffffff16565b90506000611c868b866121a7565b9050611c9281856121a7565b9050611c9e81846121a7565b9050611caa81836121a7565b9b949a5092985090965094509092505050565b6000808080611ccc8a86611d4d565b90506000611cda8a87611d4d565b90506000611ce88a88611d4d565b90506000611cf68a89611d4d565b90506000611d048a8a611d4d565b90506000611d1286866121a7565b9050611d1e81856121a7565b9050611d2a81846121a7565b9050611d3681836121a7565b959f959e50939c50939a5050505050505050505050565b600082611d5c57506000610960565b6000611d688385612bfc565b905082611d758583612bdc565b14610a4c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610941565b6016805460ff60a01b1916600160a01b1790556000611dec826002611b5a565b90506000611dfa83836121a7565b905047611e06836121e9565b6000611e1247836121a7565b9050611e1e838261236e565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff60a01b19169055505050565b600f5460105460115460125484611e99576000600f819055601081905560118190556012555b6001600160a01b03881660009081526006602052604090205460ff168015611eda57506001600160a01b03871660009081526006602052604090205460ff16155b15611eef57611eea888888612452565b611f9b565b6001600160a01b03881660009081526006602052604090205460ff16158015611f3057506001600160a01b03871660009081526006602052604090205460ff165b15611f4057611eea888888612692565b6001600160a01b03881660009081526006602052604090205460ff168015611f8057506001600160a01b03871660009081526006602052604090205460ff165b15611f9057611eea88888861275c565b611f9b8888886127f0565b84611fb557600f8490556010839055601182905560128190555b5050505050505050565b600d54600c546000918291825b600a54811015612149578260036000600a8481548110611ffc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061207557508160046000600a848154811061204e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561208b57600d54600c54945094505050509091565b6120df60036000600a84815481106120b357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121a7565b925061213560046000600a848154811061210957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121a7565b91508061214181612c32565b915050611fcc565b50600c54600d5461215991611b5a565b82101561217057600d54600c549350935050509091565b90939092509050565b6000818361219a5760405162461bcd60e51b81526004016109419190612acc565b506000611b2e8486612bdc565b6000610a4c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611afd565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061222c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561228057600080fd5b505afa158015612294573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b89190612958565b816001815181106122d957634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526015546122ff913091168461156d565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac94790612338908590600090869030904290600401612b54565b600060405180830381600087803b15801561235257600080fd5b505af1158015612366573d6000803e3d6000fd5b505050505050565b6015546123869030906001600160a01b03168461156d565b6015546001600160a01b031663f305d7198230856000806123af6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561241257600080fd5b505af1158015612426573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061244b9190612a9f565b5050505050565b600080600080600061246386611bfb565b945094509450945094506000612477611b37565b9050600080600061248c8a8989898989611cbd565b6001600160a01b038f1660009081526004602052604090205492955090935091506124b7908b6121a7565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546124e690846121a7565b6001600160a01b03808e1660009081526003602052604080822093909355908d16815220546125159083611b9c565b6001600160a01b038c16600090815260036020526040902055612539308886612855565b600b54612550906001600160a01b03168786612855565b61257b7f000000000000000000000000000000000000000000000000000000000000dead8686612855565b6125858189612903565b8a6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040516125ca91815260200190565b60405180910390a3600b546040518781526001600160a01b03918216918e16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161267c91815260200190565b60405180910390a3505050505050505050505050565b60008060008060006126a386611bfb565b9450945094509450945060006126b7611b37565b905060008060006126cc8a8989898989611cbd565b6001600160a01b038f1660009081526003602052604090205492955090935091506126f790846121a7565b6001600160a01b03808e16600090815260036020908152604080832094909455918e1681526004909152205461272d908a611b9c565b6001600160a01b038c166000908152600460209081526040808320939093556003905220546125159083611b9c565b600080600080600061276d86611bfb565b945094509450945094506000612781611b37565b905060008060006127968a8989898989611cbd565b6001600160a01b038f1660009081526004602052604090205492955090935091506127c1908b6121a7565b6001600160a01b038d166000908152600460209081526040808320939093556003905220546126f790846121a7565b600080600080600061280186611bfb565b945094509450945094506000612815611b37565b9050600080600061282a8a8989898989611cbd565b6001600160a01b038f1660009081526003602052604090205492955090935091506124e690846121a7565b6000821161286257505050565b600061286e8383611d4d565b6001600160a01b0385166000908152600360205260409020549091506128949082611b9c565b6001600160a01b03851660009081526003602090815260408083209390935560069052205460ff1615611af7576001600160a01b0384166000908152600460205260409020546128e49084611b9c565b6001600160a01b03851660009081526004602052604090205550505050565b600d5461291090836121a7565b600d55600e546129209082611b9c565b600e555050565b8035801515811461293757600080fd5b919050565b60006020828403121561294d578081fd5b8135610a4c81612c63565b600060208284031215612969578081fd5b8151610a4c81612c63565b60008060408385031215612986578081fd5b823561299181612c63565b915060208301356129a181612c63565b809150509250929050565b6000806000606084860312156129c0578081fd5b83356129cb81612c63565b925060208401356129db81612c63565b929592945050506040919091013590565b600080604083850312156129fe578182fd5b8235612a0981612c63565b9150612a1760208401612927565b90509250929050565b60008060408385031215612a32578182fd5b8235612a3d81612c63565b946020939093013593505050565b600060208284031215612a5c578081fd5b610a4c82612927565b600060208284031215612a76578081fd5b5035919050565b60008060408385031215612a8f578182fd5b82359150612a1760208401612927565b600080600060608486031215612ab3578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612af857858101830151858201604001528201612adc565b81811115612b095783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612ba35784516001600160a01b031683529383019391830191600101612b7e565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612bd757612bd7612c4d565b500190565b600082612bf757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612c1657612c16612c4d565b500290565b600082821015612c2d57612c2d612c4d565b500390565b6000600019821415612c4657612c46612c4d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612c7857600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e31e94f5c63ee6c87235d215a9ea6c6e3b0f7f72709f34d6788cb2e715b0e35f64736f6c63430008040033

Deployed Bytecode Sourcemap

15464:20884:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22542:96;;;;;;;;;;-1:-1:-1;22542:96:0;;;;;:::i;:::-;;:::i;:::-;;18381:83;;;;;;;;;;-1:-1:-1;18451:5:0;;;;;;;;;;;;-1:-1:-1;;;18451:5:0;;;;18381:83;;;;;;;:::i;:::-;;;;;;;;19293:161;;;;;;;;;;-1:-1:-1;19293:161:0;;;;;:::i;:::-;;:::i;:::-;;;4424:14:1;;4417:22;4399:41;;4387:2;4372:18;19293:161:0;4354:92:1;20414:87:0;;;;;;;;;;-1:-1:-1;20483:10:0;;20414:87;;;11993:25:1;;;11981:2;11966:18;20414:87:0;11948:76:1;18658:95:0;;;;;;;;;;-1:-1:-1;18738:7:0;;18658:95;;16958:41;;;;;;;;;;-1:-1:-1;16958:41:0;;;;-1:-1:-1;;;;;16958:41:0;;;;;;-1:-1:-1;;;;;3379:32:1;;;3361:51;;3349:2;3334:18;16958:41:0;3316:102:1;16684:34:0;;;;;;;;;;;;;;;;19462:313;;;;;;;;;;-1:-1:-1;19462:313:0;;;;;:::i;:::-;;:::i;21317:254::-;;;;;;;;;;-1:-1:-1;21317:254:0;;;;;:::i;:::-;;:::i;18567:83::-;;;;;;;;;;-1:-1:-1;18567:83:0;;16564:1;13483:36:1;;13471:2;13456:18;18567:83:0;13438:87:1;21921:479:0;;;;;;;;;;-1:-1:-1;21921:479:0;;;;;:::i;:::-;;:::i;19783:218::-;;;;;;;;;;-1:-1:-1;19783:218:0;;;;;:::i;:::-;;:::i;16578:33::-;;;;;;;;;;;;;;;;20509:685;;;;;;;;;;-1:-1:-1;20509:685:0;;;;;:::i;:::-;;:::i;22778:120::-;;;;;;;;;;-1:-1:-1;22778:120:0;;;;;:::i;:::-;;:::i;17080:40::-;;;;;;;;;;-1:-1:-1;17080:40:0;;;;-1:-1:-1;;;17080:40:0;;;;;;21579:334;;;;;;;;;;-1:-1:-1;21579:334:0;;;;;:::i;:::-;;:::i;26767:123::-;;;;;;;;;;-1:-1:-1;26767:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;26855:27:0;26831:4;26855:27;;;:18;:27;;;;;;;;;26767:123;21206:103;;;;;;;;;;-1:-1:-1;21206:103:0;;;;;:::i;:::-;;:::i;23950:130::-;;;;;;;;;;-1:-1:-1;23950:130:0;;;;;:::i;:::-;;:::i;6860:90::-;;;;;;;;;;-1:-1:-1;6933:9:0;;6860:90;;17006:39;;;;;;;;;;-1:-1:-1;17006:39:0;;;;-1:-1:-1;;;;;17006:39:0;;;22408:122;;;;;;;;;;-1:-1:-1;22408:122:0;;;;;:::i;:::-;;:::i;16633:33::-;;;;;;;;;;;;;;;;18761:198;;;;;;;;;;-1:-1:-1;18761:198:0;;;;;:::i;:::-;;:::i;6452:148::-;;;;;;;;;;;;;:::i;16807:54::-;;;;;;;;;;;;;;;;20286:120;;;;;;;;;;-1:-1:-1;20286:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20378:20:0;20354:4;20378:20;;;:11;:20;;;;;;;;;20286:120;6238:79;;;;;;;;;;-1:-1:-1;6276:7:0;6303:6;-1:-1:-1;;;;;6303:6:0;6238:79;;22650:120;;;;;;;;;;-1:-1:-1;22650:120:0;;;;;:::i;:::-;;:::i;22910:137::-;;;;;;;;;;-1:-1:-1;22910:137:0;;;;;:::i;:::-;;:::i;18472:87::-;;;;;;;;;;-1:-1:-1;18544:7:0;;;;;;;;;;;;-1:-1:-1;;;18544:7:0;;;;18472:87;;16010:93;;;;;;;;;;-1:-1:-1;16010:93:0;;;;-1:-1:-1;;;;;16010:93:0;;;20009:269;;;;;;;;;;-1:-1:-1;20009:269:0;;;;;:::i;:::-;;:::i;23852:90::-;;;;;;;;;;-1:-1:-1;23852:90:0;;;;;:::i;:::-;;:::i;7196:298::-;;;;;;;;;;;;;:::i;18967:167::-;;;;;;;;;;-1:-1:-1;18967:167:0;;;;;:::i;:::-;;:::i;23312:125::-;;;;;;;;;;-1:-1:-1;23312:125:0;;;;;:::i;:::-;;:::i;15906:61::-;;;;;;;;;;-1:-1:-1;15906:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16131:82;;;;;;;;;;;;;;;16745:33;;;;;;;;;;;;;;;;23445:171;;;;;;;;;;-1:-1:-1;23445:171:0;;;;;:::i;:::-;;:::i;23059:100::-;;;;;;;;;;-1:-1:-1;23059:100:0;;;;;:::i;:::-;;:::i;23170:134::-;;;;;;;;;;-1:-1:-1;23170:134:0;;;;;:::i;:::-;;:::i;6958:226::-;;;;;;;;;;-1:-1:-1;6958:226:0;;;;;:::i;:::-;;:::i;19142:143::-;;;;;;;;;;-1:-1:-1;19142:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;19250:18:0;;;19223:7;19250:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19142:143;6608:244;;;;;;;;;;-1:-1:-1;6608:244:0;;;;;:::i;:::-;;:::i;23665:179::-;;;;;;;;;;-1:-1:-1;23665:179:0;;;;;:::i;:::-;;:::i;22542:96::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;;;;;;;;;22614:7:::1;:16:::0;22542:96::o;19293:161::-;19368:4;19385:39;5583:10;19408:7;19417:6;19385:8;:39::i;:::-;-1:-1:-1;19442:4:0;19293:161;;;;;:::o;19462:313::-;19560:4;19577:36;19587:6;19595:9;19606:6;19577:9;:36::i;:::-;19624:121;19633:6;5583:10;19655:89;19693:6;19655:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19655:19:0;;;;;;:11;:19;;;;;;;;5583:10;19655:33;;;;;;;;;;:37;:89::i;:::-;19624:8;:121::i;:::-;-1:-1:-1;19763:4:0;19462:313;;;;;:::o;21317:254::-;21383:7;21422;;21411;:18;;21403:73;;;;-1:-1:-1;;;21403:73:0;;6660:2:1;21403:73:0;;;6642:21:1;6699:2;6679:18;;;6672:30;6738:34;6718:18;;;6711:62;-1:-1:-1;;;6789:18:1;;;6782:40;6839:19;;21403:73:0;6632:232:1;21403:73:0;21489:19;21511:10;:8;:10::i;:::-;21489:32;-1:-1:-1;21539:24:0;:7;21489:32;21539:11;:24::i;:::-;21532:31;21317:254;-1:-1:-1;;;21317:254:0:o;21921:479::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22001:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21993:60;;;::::0;-1:-1:-1;;;21993:60:0;;8190:2:1;21993:60:0::1;::::0;::::1;8172:21:1::0;8229:2;8209:18;;;8202:30;8268:29;8248:18;;;8241:57;8315:18;;21993:60:0::1;8162:177:1::0;21993:60:0::1;22071:9;22066:327;22090:9;:16:::0;22086:20;::::1;22066:327;;;22148:7;-1:-1:-1::0;;;;;22132:23:0::1;:9;22142:1;22132:12;;;;;;-1:-1:-1::0;;;22132:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22132:12:0::1;:23;22128:254;;;22191:9;22201:16:::0;;:20:::1;::::0;22220:1:::1;::::0;22201:20:::1;:::i;:::-;22191:31;;;;;;-1:-1:-1::0;;;22191:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22176:9:::1;:12:::0;;-1:-1:-1;;;;;22191:31:0;;::::1;::::0;22186:1;;22176:12;::::1;;;-1:-1:-1::0;;;22176:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22176:46:0::1;-1:-1:-1::0;;;;;22176:46:0;;::::1;;::::0;;22241:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22280:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22280:28:0::1;::::0;;22327:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;22327:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22327:15:0;;;;;-1:-1:-1;;;;;;22327:15:0::1;::::0;;;;;22066:327:::1;21921:479:::0;:::o;22128:254::-:1;22108:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22066:327;;;;21921:479:::0;:::o;19783:218::-;5583:10;19871:4;19920:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19920:34:0;;;;;;;;;;19871:4;;19888:83;;19911:7;;19920:50;;19959:10;19920:38;:50::i;20509:685::-;20599:7;20638;;20627;:18;;20619:62;;;;-1:-1:-1;;;20619:62:0;;8896:2:1;20619:62:0;;;8878:21:1;8935:2;8915:18;;;8908:30;8974:33;8954:18;;;8947:61;9025:18;;20619:62:0;8868:181:1;20619:62:0;20695:12;20709:18;20729;20749:13;20766:20;20778:7;20766:11;:20::i;:::-;20692:94;;;;;;;;;20797:19;20819:10;:8;:10::i;:::-;20797:32;;20847:17;20842:345;;20882:15;20903:70;20915:7;20924:4;20930:10;20942;20954:5;20961:11;20903;:70::i;:::-;-1:-1:-1;20881:92:0;;-1:-1:-1;20988:14:0;;-1:-1:-1;;;;;;;20988:14:0;20842:345;21040:23;21068:70;21080:7;21089:4;21095:10;21107;21119:5;21126:11;21068;:70::i;:::-;-1:-1:-1;21037:101:0;-1:-1:-1;21153:22:0;;-1:-1:-1;;;;;;;21153:22:0;22778:120;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;22862:13:::1;:28:::0;22778:120::o;21579:334::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21660:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21659:21;21651:61;;;::::0;-1:-1:-1;;;21651:61:0;;7834:2:1;21651:61:0::1;::::0;::::1;7816:21:1::0;7873:2;7853:18;;;7846:30;7912:29;7892:18;;;7885:57;7959:18;;21651:61:0::1;7806:177:1::0;21651:61:0::1;-1:-1:-1::0;;;;;21729:16:0;::::1;21748:1;21729:16:::0;;;:7:::1;:16;::::0;;;;;:20;21725:109:::1;;-1:-1:-1::0;;;;;21805:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21785:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21766:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21725:109:::1;-1:-1:-1::0;;;;;21844:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;21844:27:0::1;21867:4;21844:27:::0;;::::1;::::0;;;21882:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21882:23:0::1;::::0;;::::1;::::0;;21579:334::o;21206:103::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;21278:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;21278:23:0::1;-1:-1:-1::0;;;;21278:23:0;;::::1;::::0;;;::::1;::::0;;21206:103::o;23950:130::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24037:31:0;;;::::1;;::::0;;;:28:::1;:31;::::0;;;;:35;;-1:-1:-1;;24037:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23950:130::o;22408:122::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22491:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:31;;-1:-1:-1;;22491:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22408:122::o;18761:198::-;-1:-1:-1;;;;;18851:20:0;;18827:7;18851:20;;;:11;:20;;;;;;;;18847:49;;;-1:-1:-1;;;;;;18880:16:0;;;;;:7;:16;;;;;;;18761:198::o;18847:49::-;-1:-1:-1;;;;;18934:16:0;;;;;;:7;:16;;;;;;18914:37;;:19;:37::i;6452:148::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;6559:1:::1;6543:6:::0;;6522:40:::1;::::0;-1:-1:-1;;;;;6543:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6522:40:0;6559:1;;6522:40:::1;6590:1;6573:19:::0;;-1:-1:-1;;;;;;6573:19:0::1;::::0;;6452:148::o;22650:120::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;22734:13:::1;:28:::0;22650:120::o;22910:137::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;22996:16:::1;:43:::0;;-1:-1:-1;;;;;;22996:43:0::1;-1:-1:-1::0;;;;;22996:43:0;;;::::1;::::0;;;::::1;::::0;;22910:137::o;20009:269::-;20102:4;20119:129;5583:10;20142:7;20151:96;20190:15;20151:96;;;;;;;;;;;;;;;;;5583:10;20151:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20151:34:0;;;;;;;;;;;;:38;:96::i;23852:90::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23917:13:::1;:17:::0;;-1:-1:-1;;;;;;23917:17:0::1;-1:-1:-1::0;;;;;23917:17:0;;;::::1;::::0;;;::::1;::::0;;23852:90::o;7196:298::-;7248:14;;-1:-1:-1;;;;;7248:14:0;7266:10;7248:28;7240:76;;;;-1:-1:-1;;;7240:76:0;;11645:2:1;7240:76:0;;;11627:21:1;11684:2;11664:18;;;11657:30;11723:34;11703:18;;;11696:62;-1:-1:-1;;;11774:18:1;;;11767:33;11817:19;;7240:76:0;11617:225:1;7240:76:0;7353:9;;7335:15;:27;7327:65;;;;-1:-1:-1;;;7327:65:0;;5902:2:1;7327:65:0;;;5884:21:1;5941:2;5921:18;;;5914:30;5980:26;5960:18;;;5953:54;6024:18;;7327:65:0;5874:174:1;7327:65:0;7437:14;;;7429:6;;7408:44;;-1:-1:-1;;;;;7437:14:0;;;;7429:6;;;;-1:-1:-1;;;;;;;;;;;7408:44:0;;7472:14;;;7463:23;;-1:-1:-1;;;;;;7463:23:0;-1:-1:-1;;;;;7472:14:0;;;7463:23;;;;;;7196:298::o;18967:167::-;19045:4;19062:42;5583:10;19086:9;19097:6;19062:9;:42::i;23312:125::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23395:16:::1;:34:::0;23312:125::o;23445:171::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23522:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;23522:32:0::1;-1:-1:-1::0;;;;23522:32:0;;::::1;;::::0;;23570:38:::1;::::0;::::1;::::0;::::1;::::0;23546:8;4424:14:1;4417:22;4399:41;;4387:2;4372:18;;4354:92;23570:38:0::1;;;;;;;;23445:171:::0;:::o;23059:100::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23133:8:::1;:18:::0;23059:100::o;23170:134::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23262:34:::1;23292:3;23262:25;23274:12;23262:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:34::i;:::-;23247:12;:49:::0;-1:-1:-1;23170:134:0:o;6958:226::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;7039:6:::1;::::0;;;7022:23;;-1:-1:-1;;;;;;7022:23:0;;::::1;-1:-1:-1::0;;;;;7039:6:0;::::1;7022:23;::::0;;;7056:19:::1;::::0;;7098:22:::1;7116:4:::0;7098:15:::1;:22;:::i;:::-;7086:9;:34:::0;7173:1:::1;7157:6:::0;;7136:40:::1;::::0;-1:-1:-1;;;;;7157:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7136:40:0;7173:1;;7136:40:::1;6958:226:::0;:::o;6608:244::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6697:22:0;::::1;6689:73;;;::::0;-1:-1:-1;;;6689:73:0;;7071:2:1;6689:73:0::1;::::0;::::1;7053:21:1::0;7110:2;7090:18;;;7083:30;7149:34;7129:18;;;7122:62;-1:-1:-1;;;7200:18:1;;;7193:36;7246:19;;6689:73:0::1;7043:228:1::0;6689:73:0::1;6799:6;::::0;;6778:38:::1;::::0;-1:-1:-1;;;;;6778:38:0;;::::1;::::0;6799:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6778:38:0;::::1;6827:6;:17:::0;;-1:-1:-1;;;;;;6827:17:0::1;-1:-1:-1::0;;;;;6827:17:0;;;::::1;::::0;;;::::1;::::0;;6608:244::o;23665:179::-;6365:6;;-1:-1:-1;;;;;6365:6:0;5583:10;6365:22;6357:67;;;;-1:-1:-1;;;6357:67:0;;;;;;;:::i;:::-;23802:15:::1;:34:::0;;-1:-1:-1;;;;;;23802:34:0::1;-1:-1:-1::0;;;;;23802:34:0;;;::::1;::::0;;;::::1;::::0;;23665:179::o;26898:337::-;-1:-1:-1;;;;;26991:19:0;;26983:68;;;;-1:-1:-1;;;26983:68:0;;6255:2:1;26983:68:0;;;6237:21:1;6294:2;6274:18;;;6267:30;6333:34;6313:18;;;6306:62;-1:-1:-1;;;6384:18:1;;;6377:34;6428:19;;26983:68:0;6227:226:1;26983:68:0;-1:-1:-1;;;;;27070:21:0;;27062:68;;;;-1:-1:-1;;;27062:68:0;;11242:2:1;27062:68:0;;;11224:21:1;11281:2;11261:18;;;11254:30;11320:34;11300:18;;;11293:62;-1:-1:-1;;;11371:18:1;;;11364:32;11413:19;;27062:68:0;11214:224:1;27062:68:0;-1:-1:-1;;;;;27143:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;27195:32;;11993:25:1;;;27195:32:0;;11966:18:1;27195:32:0;;;;;;;26898:337;;;:::o;27243:2235::-;-1:-1:-1;;;;;27365:18:0;;27357:68;;;;-1:-1:-1;;;27357:68:0;;5496:2:1;27357:68:0;;;5478:21:1;5535:2;5515:18;;;5508:30;5574:34;5554:18;;;5547:62;-1:-1:-1;;;5625:18:1;;;5618:35;5670:19;;27357:68:0;5468:227:1;27357:68:0;-1:-1:-1;;;;;27444:16:0;;27436:64;;;;-1:-1:-1;;;27436:64:0;;10838:2:1;27436:64:0;;;10820:21:1;10877:2;10857:18;;;10850:30;10916:34;10896:18;;;10889:62;-1:-1:-1;;;10967:18:1;;;10960:33;11010:19;;27436:64:0;10810:225:1;27436:64:0;27528:1;27519:6;:10;27511:64;;;;-1:-1:-1;;;27511:64:0;;10428:2:1;27511:64:0;;;10410:21:1;10467:2;10447:18;;;10440:30;10506:34;10486:18;;;10479:62;-1:-1:-1;;;10557:18:1;;;10550:39;10606:19;;27511:64:0;10400:231:1;27511:64:0;6276:7;6303:6;-1:-1:-1;;;;;27592:15:0;;;6303:6;;27592:15;;;;:32;;-1:-1:-1;6276:7:0;6303:6;-1:-1:-1;;;;;27611:13:0;;;6303:6;;27611:13;;27592:32;27588:1693;;;6276:7;6303:6;-1:-1:-1;;;;;27643:15:0;;;6303:6;;27643:15;;;;:32;;-1:-1:-1;6276:7:0;6303:6;-1:-1:-1;;;;;27662:13:0;;;6303:6;;27662:13;;27643:32;27639:1642;;;27700:15;;-1:-1:-1;;;27700:15:0;;;;27696:507;;;-1:-1:-1;;;;;27770:21:0;;27786:4;27770:21;;;;:44;;-1:-1:-1;;;;;;27795:19:0;;27809:4;27795:19;;27770:44;:80;;;;-1:-1:-1;27834:15:0;;-1:-1:-1;;;;;27818:32:0;;;27834:15;;27818:32;;27770:80;:114;;;;-1:-1:-1;27868:15:0;;-1:-1:-1;;;;;27854:30:0;;;27868:15;;27854:30;;27770:114;27740:444;;;27997:15;;-1:-1:-1;;;;;27997:15:0;5583:10;-1:-1:-1;;;;;27973:40:0;;:106;;;-1:-1:-1;28066:13:0;;-1:-1:-1;;;;;28066:13:0;5583:10;-1:-1:-1;;;;;28050:29:0;;27973:106;27935:225;;;;-1:-1:-1;;;27935:225:0;;8546:2:1;27935:225:0;;;8528:21:1;8585:2;8565:18;;;8558:30;-1:-1:-1;;;8604:18:1;;;8597:51;8665:18;;27935:225:0;8518:171:1;27935:225:0;28263:12;;28253:6;:22;;28245:75;;;;-1:-1:-1;;;28245:75:0;;9256:2:1;28245:75:0;;;9238:21:1;9295:2;9275:18;;;9268:30;9334:34;9314:18;;;9307:62;-1:-1:-1;;;9385:18:1;;;9378:38;9433:19;;28245:75:0;9228:230:1;28245:75:0;28379:13;;-1:-1:-1;;;;;28371:21:0;;;28379:13;;28371:21;:72;;;;-1:-1:-1;28427:15:0;;-1:-1:-1;;;;;28413:30:0;;;28427:15;;28413:30;;28371:72;:116;;;;-1:-1:-1;;;;;;28465:22:0;;;;;;:18;:22;;;;;;;;28464:23;28371:116;:152;;;;-1:-1:-1;28508:15:0;;-1:-1:-1;;;28508:15:0;;;;28371:152;28349:325;;;-1:-1:-1;;;;;28566:12:0;;;;;;:8;:12;;;;;;28581:15;-1:-1:-1;28558:39:0;;;;;;28631:31;:15;28650:11;28631:31;:::i;:::-;-1:-1:-1;;;;;28616:12:0;;;;;;:8;:12;;;;;:46;28349:325;28686:28;28717:24;28735:4;28717:9;:24::i;:::-;28686:55;;28790:12;;28766:20;:36;28762:104;;-1:-1:-1;28842:12:0;;28762:104;28939:16;;28915:40;;;;;;;28984:55;;-1:-1:-1;29023:16:0;;-1:-1:-1;;;29023:16:0;;;;29022:17;28984:55;:107;;;;-1:-1:-1;;;;;;29057:34:0;;;;;;:28;:34;;;;;;;;29056:35;28984:107;:145;;;;-1:-1:-1;29108:21:0;;-1:-1:-1;;;29108:21:0;;;;28984:145;28966:292;;;29179:16;;29156:39;;29210:36;29225:20;29210:14;:36::i;:::-;27639:1642;;;-1:-1:-1;;;;;29325:24:0;;29291:12;29325:24;;;:18;:24;;;;;;29306:4;;29325:24;;;:50;;-1:-1:-1;;;;;;29353:22:0;;;;;;:18;:22;;;;;;;;29325:50;29321:98;;;-1:-1:-1;29402:5:0;29321:98;29429:41;29444:4;29450:2;29454:6;29462:7;29429:14;:41::i;:::-;27243:2235;;;;:::o;1913:192::-;1999:7;2035:12;2027:6;;;;2019:29;;;;-1:-1:-1;;;2019:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2059:9:0;2071:5;2075:1;2071;:5;:::i;:::-;2059:17;1913:192;-1:-1:-1;;;;;1913:192:0:o;25678:163::-;25719:7;25740:15;25757;25776:19;:17;:19::i;:::-;25739:56;;-1:-1:-1;25739:56:0;-1:-1:-1;25813:20:0;25739:56;;25813:11;:20::i;:::-;25806:27;;;;25678:163;:::o;3311:132::-;3369:7;3396:39;3400:1;3403;3396:39;;;;;;;;;;;;;;;;;:3;:39::i;1010:181::-;1068:7;;1100:5;1104:1;1100;:5;:::i;:::-;1088:17;;1129:1;1124;:6;;1116:46;;;;-1:-1:-1;;;1116:46:0;;7478:2:1;1116:46:0;;;7460:21:1;7517:2;7497:18;;;7490:30;7556:29;7536:18;;;7529:57;7603:18;;1116:46:0;7450:177:1;24246:671:0;24306:7;24315;24324;24333;24342;24362:12;24383:29;24408:3;24383:20;24395:7;;24383;:11;;:20;;;;:::i;:29::-;24362:50;;24423:18;24444:35;24475:3;24444:26;24456:13;;24444:7;:11;;:26;;;;:::i;:35::-;24423:56;;24490:18;24511:35;24542:3;24511:26;24523:13;;24511:7;:11;;:26;;;;:::i;:35::-;24490:56;;24557:13;24578:30;24604:3;24578:21;24590:8;;24578:7;:11;;:21;;;;:::i;:30::-;24557:51;-1:-1:-1;24619:23:0;24645:17;:7;24657:4;24645:11;:17::i;:::-;24619:43;-1:-1:-1;24691:31:0;24619:43;24711:10;24691:19;:31::i;:::-;24673:49;-1:-1:-1;24751:31:0;24673:49;24771:10;24751:19;:31::i;:::-;24733:49;-1:-1:-1;24811:26:0;24733:49;24831:5;24811:19;:26::i;:::-;24793:44;24873:4;;-1:-1:-1;24879:10:0;;-1:-1:-1;24891:10:0;;-1:-1:-1;24879:10:0;-1:-1:-1;24246:671:0;;-1:-1:-1;;;24246:671:0:o;24925:745::-;25075:7;;;;25134:24;:7;25146:11;25134;:24::i;:::-;25113:45;-1:-1:-1;25169:12:0;25190:21;:4;25199:11;25190:8;:21::i;:::-;25169:42;-1:-1:-1;25222:18:0;25243:27;:10;25258:11;25243:14;:27::i;:::-;25222:48;-1:-1:-1;25281:18:0;25302:27;:10;25317:11;25302:14;:27::i;:::-;25281:48;-1:-1:-1;25340:13:0;25361:22;:5;25371:11;25361:9;:22::i;:::-;25340:43;-1:-1:-1;25394:23:0;25420:17;:7;25432:4;25420:11;:17::i;:::-;25394:43;-1:-1:-1;25466:31:0;25394:43;25486:10;25466:19;:31::i;:::-;25448:49;-1:-1:-1;25526:31:0;25448:49;25546:10;25526:19;:31::i;:::-;25508:49;-1:-1:-1;25586:26:0;25508:49;25606:5;25586:19;:26::i;:::-;25631:7;;;;-1:-1:-1;25657:4:0;;-1:-1:-1;24925:745:0;;-1:-1:-1;;;;;;;;;;;24925:745:0:o;2364:471::-;2422:7;2667:6;2663:47;;-1:-1:-1;2697:1:0;2690:8;;2663:47;2722:9;2734:5;2738:1;2734;:5;:::i;:::-;2722:17;-1:-1:-1;2767:1:0;2758:5;2762:1;2722:17;2758:5;:::i;:::-;:10;2750:56;;;;-1:-1:-1;;;2750:56:0;;9665:2:1;2750:56:0;;;9647:21:1;9704:2;9684:18;;;9677:30;9743:34;9723:18;;;9716:62;-1:-1:-1;;;9794:18:1;;;9787:31;9835:19;;2750:56:0;9637:223:1;29486:519:0;17471:16;:23;;-1:-1:-1;;;;17471:23:0;-1:-1:-1;;;17471:23:0;;;;29593:27:::1;:20:::0;29618:1:::1;29593:24;:27::i;:::-;29573:47:::0;-1:-1:-1;29631:17:0::1;29651:30;:20:::0;29573:47;29651:24:::1;:30::i;:::-;29631:50:::0;-1:-1:-1;29719:21:0::1;29763:22;29780:4:::0;29763:16:::1;:22::i;:::-;29808:18;29829:41;:21;29855:14:::0;29829:25:::1;:41::i;:::-;29808:62;;29893:35;29906:9;29917:10;29893:12;:35::i;:::-;29954:43;::::0;;13219:25:1;;;13275:2;13260:18;;13253:34;;;13303:18;;;13296:34;;;29954:43:0::1;::::0;13207:2:1;13192:18;29954:43:0::1;;;;;;;-1:-1:-1::0;;17517:16:0;:24;;-1:-1:-1;;;;17517:24:0;;;-1:-1:-1;;;29486:519:0:o;30944:1214::-;31082:7;;31131:13;;31187;;31242:8;;31268:7;31263:155;;31308:1;31292:7;:17;;;31324:13;:17;;;31356:13;:18;;;31389:8;:17;31263:155;-1:-1:-1;;;;;31442:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;31466:22:0;;;;;;:11;:22;;;;;;;;31465:23;31442:46;31438:473;;;31505:48;31527:6;31535:9;31546:6;31505:21;:48::i;:::-;31438:473;;;-1:-1:-1;;;;;31578:19:0;;;;;;:11;:19;;;;;;;;31577:20;:46;;;;-1:-1:-1;;;;;;31601:22:0;;;;;;:11;:22;;;;;;;;31577:46;31573:338;;;31640:46;31660:6;31668:9;31679:6;31640:19;:46::i;31573:338::-;-1:-1:-1;;;;;31710:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;31733:22:0;;;;;;:11;:22;;;;;;;;31710:45;31706:205;;;31772:48;31794:6;31802:9;31813:6;31772:21;:48::i;31706:205::-;31855:44;31873:6;31881:9;31892:6;31855:17;:44::i;:::-;31936:7;31931:220;;31960:7;:30;;;32005:13;:36;;;32056:13;:37;;;32108:8;:31;;;31931:220;30944:1214;;;;;;;;:::o;25849:561::-;25946:7;;25982;;25899;;;;;26006:289;26030:9;:16;26026:20;;26006:289;;;26096:7;26072;:21;26080:9;26090:1;26080:12;;;;;;-1:-1:-1;;;26080:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26080:12:0;26072:21;;;;;;;;;;;;;:31;;:66;;;26131:7;26107;:21;26115:9;26125:1;26115:12;;;;;;-1:-1:-1;;;26115:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26115:12:0;26107:21;;;;;;;;;;;;;:31;26072:66;26068:97;;;26148:7;;26157;;26140:25;;;;;;;25849:561;;:::o;26068:97::-;26190:34;26202:7;:21;26210:9;26220:1;26210:12;;;;;;-1:-1:-1;;;26210:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26210:12:0;26202:21;;;;;;;;;;;;;26190:7;;:11;:34::i;:::-;26180:44;;26249:34;26261:7;:21;26269:9;26279:1;26269:12;;;;;;-1:-1:-1;;;26269:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26269:12:0;26261:21;;;;;;;;;;;;;26249:7;;:11;:34::i;:::-;26239:44;-1:-1:-1;26048:3:0;;;;:::i;:::-;;;;26006:289;;;-1:-1:-1;26331:7:0;;26319;;:20;;:11;:20::i;:::-;26309:7;:30;26305:61;;;26349:7;;26358;;26341:25;;;;;;25849:561;;:::o;26305:61::-;26385:7;;26394;;-1:-1:-1;25849:561:0;-1:-1:-1;25849:561:0:o;3939:278::-;4025:7;4060:12;4053:5;4045:28;;;;-1:-1:-1;;;4045:28:0;;;;;;;;:::i;:::-;-1:-1:-1;4084:9:0;4096:5;4100:1;4096;:5;:::i;1474:136::-;1532:7;1559:43;1563:1;1566;1559:43;;;;;;;;;;;;;;;;;:3;:43::i;30013:501::-;30103:16;;;30117:1;30103:16;;;;;;;;30079:21;;30103:16;;;;;;;;;;-1:-1:-1;30103:16:0;30079:40;;30148:4;30130;30135:1;30130:7;;;;;;-1:-1:-1;;;30130:7:0;;;;;;;;;-1:-1:-1;;;;;30130:23:0;;;:7;;;;;;;;;;:23;;;;30174:15;;:22;;;-1:-1:-1;;;30174:22:0;;;;:15;;;;;:20;;:22;;;;;30130:7;;30174:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30164:4;30169:1;30164:7;;;;;;-1:-1:-1;;;30164:7:0;;;;;;;;;-1:-1:-1;;;;;30164:32:0;;;:7;;;;;;;;;:32;30241:15;;30209:62;;30226:4;;30241:15;30259:11;30209:8;:62::i;:::-;30282:15;;:224;;-1:-1:-1;;;30282:224:0;;-1:-1:-1;;;;;30282:15:0;;;;:66;;:224;;30363:11;;30282:15;;30433:4;;30460;;30480:15;;30282:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30013:501;;:::o;30522:414::-;30635:15;;30603:62;;30620:4;;-1:-1:-1;;;;;30635:15:0;30653:11;30603:8;:62::i;:::-;30676:15;;-1:-1:-1;;;;;30676:15:0;:31;30715:9;30748:4;30768:11;30676:15;;30880:7;6276;6303:6;-1:-1:-1;;;;;6303:6:0;;6238:79;30880:7;30676:252;;;;;;-1:-1:-1;;;;;;30676:252:0;;;-1:-1:-1;;;;;4006:15:1;;;30676:252:0;;;3988:34:1;4038:18;;;4031:34;;;;4081:18;;;4074:34;;;;4124:18;;;4117:34;4188:15;;;4167:19;;;4160:44;30902:15:0;4220:19:1;;;4213:35;3922:19;;30676:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30522:414;;:::o;35305:1038::-;35408:23;35433:12;35447:18;35467;35487:13;35504:20;35516:7;35504:11;:20::i;:::-;35407:117;;;;;;;;;;35535:19;35557:10;:8;:10::i;:::-;35535:32;;35579:15;35596:23;35621:12;35637:70;35649:7;35658:4;35664:10;35676;35688:5;35695:11;35637;:70::i;:::-;-1:-1:-1;;;;;35738:15:0;;;;;;:7;:15;;;;;;35578:129;;-1:-1:-1;35578:129:0;;-1:-1:-1;35578:129:0;-1:-1:-1;35738:28:0;;35758:7;35738:19;:28::i;:::-;-1:-1:-1;;;;;35720:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35795:7;:15;;;;:28;;35815:7;35795:19;:28::i;:::-;-1:-1:-1;;;;;35777:15:0;;;;;;;:7;:15;;;;;;:46;;;;35855:18;;;;;;;:39;;35878:15;35855:22;:39::i;:::-;-1:-1:-1;;;;;35834:18:0;;;;;;:7;:18;;;;;:60;35915:58;35942:4;35949:10;35961:11;35915:18;:58::i;:::-;36011:16;;35984:70;;-1:-1:-1;;;;;36011:16:0;36030:10;36042:11;35984:18;:70::i;:::-;36065:61;36092:12;36107:5;36114:11;36065:18;:61::i;:::-;36137:23;36149:4;36155;36137:11;:23::i;:::-;36193:9;-1:-1:-1;;;;;36176:44:0;36185:6;-1:-1:-1;;;;;36176:44:0;;36204:15;36176:44;;;;11993:25:1;;11981:2;11966:18;;11948:76;36176:44:0;;;;;;;;36253:16;;36236:46;;11993:25:1;;;-1:-1:-1;;;;;36253:16:0;;;;36236:46;;;;;11981:2:1;11966:18;36236:46:0;;;;;;;36315:12;-1:-1:-1;;;;;36298:37:0;36307:6;-1:-1:-1;;;;;36298:37:0;;36329:5;36298:37;;;;11993:25:1;;11981:2;11966:18;;11948:76;36298:37:0;;;;;;;;35305:1038;;;;;;;;;;;;:::o;34255:1042::-;34356:23;34381:12;34395:18;34415;34435:13;34452:20;34464:7;34452:11;:20::i;:::-;34355:117;;;;;;;;;;34483:19;34505:10;:8;:10::i;:::-;34483:32;;34527:15;34544:23;34569:12;34585:70;34597:7;34606:4;34612:10;34624;34636:5;34643:11;34585;:70::i;:::-;-1:-1:-1;;;;;34686:15:0;;;;;;:7;:15;;;;;;34526:129;;-1:-1:-1;34526:129:0;;-1:-1:-1;34526:129:0;-1:-1:-1;34686:28:0;;34526:129;34686:19;:28::i;:::-;-1:-1:-1;;;;;34668:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;34746:18;;;;;:7;:18;;;;;:39;;34769:15;34746:22;:39::i;:::-;-1:-1:-1;;;;;34725:18:0;;;;;;:7;:18;;;;;;;;:60;;;;34817:7;:18;;;;:39;;34840:15;34817:22;:39::i;33146:1101::-;33249:23;33274:12;33288:18;33308;33328:13;33345:20;33357:7;33345:11;:20::i;:::-;33248:117;;;;;;;;;;33376:19;33398:10;:8;:10::i;:::-;33376:32;;33420:15;33437:23;33462:12;33478:70;33490:7;33499:4;33505:10;33517;33529:5;33536:11;33478;:70::i;:::-;-1:-1:-1;;;;;33579:15:0;;;;;;:7;:15;;;;;;33419:129;;-1:-1:-1;33419:129:0;;-1:-1:-1;33419:129:0;-1:-1:-1;33579:28:0;;33599:7;33579:19;:28::i;:::-;-1:-1:-1;;;;;33561:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33636:7;:15;;;;:28;;33656:7;33636:19;:28::i;32166:972::-;32265:23;32290:12;32304:18;32324;32344:13;32361:20;32373:7;32361:11;:20::i;:::-;32264:117;;;;;;;;;;32392:19;32414:10;:8;:10::i;:::-;32392:32;;32436:15;32453:23;32478:12;32494:70;32506:7;32515:4;32521:10;32533;32545:5;32552:11;32494;:70::i;:::-;-1:-1:-1;;;;;32598:15:0;;;;;;:7;:15;;;;;;32435:129;;-1:-1:-1;32435:129:0;;-1:-1:-1;32435:129:0;-1:-1:-1;32598:28:0;;32435:129;32598:19;:28::i;26422:333::-;26534:1;26523:7;:12;26519:29;;26422:333;;;:::o;26519:29::-;26560:15;26578:24;:7;26590:11;26578;:24::i;:::-;-1:-1:-1;;;;;26627:11:0;;;;;;:7;:11;;;;;;26560:42;;-1:-1:-1;26627:24:0;;26560:42;26627:15;:24::i;:::-;-1:-1:-1;;;;;26613:11:0;;;;;;:7;:11;;;;;;;;:38;;;;26666:11;:15;;;;;;26662:86;;;-1:-1:-1;;;;;26712:11:0;;;;;;:7;:11;;;;;;:24;;26728:7;26712:15;:24::i;:::-;-1:-1:-1;;;;;26698:11:0;;;;;;:7;:11;;;;;:38;26422:333;;;;:::o;24088:150::-;24169:7;;:17;;24181:4;24169:11;:17::i;:::-;24156:7;:30;24210:10;;:20;;24225:4;24210:14;:20::i;:::-;24197:10;:33;-1:-1:-1;;24088:150:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1646:6;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;1979:6;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:190::-;2297:6;2350:2;2338:9;2329:7;2325:23;2321:32;2318:2;;;2371:6;2363;2356:22;2318:2;2399:26;2415:9;2399:26;:::i;2436:190::-;2495:6;2548:2;2536:9;2527:7;2523:23;2519:32;2516:2;;;2569:6;2561;2554:22;2516:2;-1:-1:-1;2597:23:1;;2506:120;-1:-1:-1;2506:120:1:o;2631:258::-;2696:6;2704;2757:2;2745:9;2736:7;2732:23;2728:32;2725:2;;;2778:6;2770;2763:22;2725:2;2819:9;2806:23;2796:33;;2848:35;2879:2;2868:9;2864:18;2848:35;:::i;2894:316::-;2982:6;2990;2998;3051:2;3039:9;3030:7;3026:23;3022:32;3019:2;;;3072:6;3064;3057:22;3019:2;3106:9;3100:16;3090:26;;3156:2;3145:9;3141:18;3135:25;3125:35;;3200:2;3189:9;3185:18;3179:25;3169:35;;3009:201;;;;;:::o;4686:603::-;4798:4;4827:2;4856;4845:9;4838:21;4888:6;4882:13;4931:6;4926:2;4915:9;4911:18;4904:34;4956:4;4969:140;4983:6;4980:1;4977:13;4969:140;;;5078:14;;;5074:23;;5068:30;5044:17;;;5063:2;5040:26;5033:66;4998:10;;4969:140;;;5127:6;5124:1;5121:13;5118:2;;;5197:4;5192:2;5183:6;5172:9;5168:22;5164:31;5157:45;5118:2;-1:-1:-1;5273:2:1;5252:15;-1:-1:-1;;5248:29:1;5233:45;;;;5280:2;5229:54;;4807:482;-1:-1:-1;;;4807:482:1:o;9865:356::-;10067:2;10049:21;;;10086:18;;;10079:30;10145:34;10140:2;10125:18;;10118:62;10212:2;10197:18;;10039:182::o;12029:983::-;12291:4;12339:3;12328:9;12324:19;12370:6;12359:9;12352:25;12396:2;12434:6;12429:2;12418:9;12414:18;12407:34;12477:3;12472:2;12461:9;12457:18;12450:31;12501:6;12536;12530:13;12567:6;12559;12552:22;12605:3;12594:9;12590:19;12583:26;;12644:2;12636:6;12632:15;12618:29;;12665:4;12678:195;12692:6;12689:1;12686:13;12678:195;;;12757:13;;-1:-1:-1;;;;;12753:39:1;12741:52;;12848:15;;;;12813:12;;;;12789:1;12707:9;12678:195;;;-1:-1:-1;;;;;;;12929:32:1;;;;12924:2;12909:18;;12902:60;-1:-1:-1;;;12993:3:1;12978:19;12971:35;12890:3;12300:712;-1:-1:-1;;;12300:712:1:o;13530:128::-;13570:3;13601:1;13597:6;13594:1;13591:13;13588:2;;;13607:18;;:::i;:::-;-1:-1:-1;13643:9:1;;13578:80::o;13663:217::-;13703:1;13729;13719:2;;-1:-1:-1;;;13754:31:1;;13808:4;13805:1;13798:15;13836:4;13761:1;13826:15;13719:2;-1:-1:-1;13865:9:1;;13709:171::o;13885:168::-;13925:7;13991:1;13987;13983:6;13979:14;13976:1;13973:21;13968:1;13961:9;13954:17;13950:45;13947:2;;;13998:18;;:::i;:::-;-1:-1:-1;14038:9:1;;13937:116::o;14058:125::-;14098:4;14126:1;14123;14120:8;14117:2;;;14131:18;;:::i;:::-;-1:-1:-1;14168:9:1;;14107:76::o;14188:135::-;14227:3;-1:-1:-1;;14248:17:1;;14245:2;;;14268:18;;:::i;:::-;-1:-1:-1;14315:1:1;14304:13;;14235:88::o;14328:127::-;14389:10;14384:3;14380:20;14377:1;14370:31;14420:4;14417:1;14410:15;14444:4;14441:1;14434:15;14460:131;-1:-1:-1;;;;;14535:31:1;;14525:42;;14515:2;;14581:1;14578;14571:12;14515:2;14505:86;:::o

Swarm Source

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