ETH Price: $3,353.88 (+0.88%)

Token

GOOGLEAI (GOOGLEAI)
 

Overview

Max Total Supply

1,000,000,000,000 GOOGLEAI

Holders

110

Market

Price

$0.00 @ 0.000000 ETH (+1.60%)

Onchain Market Cap

$1,463.18

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,197,867,598.916910615477343306 GOOGLEAI

Value
$1.75 ( ~0.000521783806236817 Eth) [0.1198%]
0x6ed4c63bccae0a7d2b87b9dc9111165510ce3796
Loading...
Loading
Loading...
Loading
Loading...
Loading

Market

Volume (24H):$15.44
Market Capitalization:$0.00
Circulating Supply:0.00 GOOGLEAI
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GOOGLEAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-15
*/

/*
  ______                                 __                   ______   ______ 
 /      \                               /  |                 /      \ /      |
/$$$$$$  |  ______    ______    ______  $$ |  ______        /$$$$$$  |$$$$$$/ 
$$ | _$$/  /      \  /      \  /      \ $$ | /      \       $$ |__$$ |  $$ |  
$$ |/    |/$$$$$$  |/$$$$$$  |/$$$$$$  |$$ |/$$$$$$  |      $$    $$ |  $$ |  
$$ |$$$$ |$$ |  $$ |$$ |  $$ |$$ |  $$ |$$ |$$    $$ |      $$$$$$$$ |  $$ |  
$$ \__$$ |$$ \__$$ |$$ \__$$ |$$ \__$$ |$$ |$$$$$$$$/       $$ |  $$ | _$$ |_ 
$$    $$/ $$    $$/ $$    $$/ $$    $$ |$$ |$$       |      $$ |  $$ |/ $$   |
 $$$$$$/   $$$$$$/   $$$$$$/   $$$$$$$ |$$/  $$$$$$$/       $$/   $$/ $$$$$$/ 
                              /  \__$$ |                                      
                              $$    $$/                                       
                               $$$$$$/                                        
*/

//SPDX-License-Identifier: MIT Licensed

pragma solidity ^0.8.4;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

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

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

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

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract GOOGLEAI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExmpt;
    mapping(address => bool) private _isRewardExmpt;
    bool public trading; // once enable can't be disable afterwards
    address[] private _excluded;
    address private _developmentWalletAddress =
        0xc78BA80B6ad9c0d52dC59c357aF302e256708eFA;

    address private LiquidityWallet =
        0x10f91a00370e253BE8a20a654c2EdfA15D8225F0;

    address private _BurnWallet = 0x0000000000000000000000000000000000000000;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    string private _name = "GOOGLEAI";
    string private _symbol = "GOOGLEAI";
    uint8 private _decimals = 18;
    uint256 public _taxFee = 9;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _developmentFee = 70;
    uint256 private _previousDevelopmentFee = _developmentFee;
    uint256 public _BurningFee = 1;
    uint256 private _previousBurningFee = _BurningFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    constructor() {
        _rOwned[owner()] = _rTotal;
        _isExmpt[owner()] = true;
        _isExmpt[address(this)] = true;
        _isExmpt[_developmentWalletAddress] = true;
        _isExmpt[LiquidityWallet] = true;
        emit Transfer(address(0), owner(), _tTotal);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tBurn,
            uint256 tDevelopment
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeBurning(tBurn);
        _takeDevelopment(tDevelopment);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    receive() external payable {}

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

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

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tBurn = calculateBurningFee(tAmount);
        uint256 tDevelopment = calculateDevelopmentFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(
            tDevelopment
        );
        return (tTransferAmount, tFee, tBurn, tDevelopment);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tBurn,
        uint256 tDevelopment,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rDevelopment = tDevelopment.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(
            rDevelopment
        );
        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 _takeBurning(uint256 tBurn) private {
        uint256 currentRate = _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[_BurnWallet] = _rOwned[_BurnWallet].add(rBurn);
        if (_isRewardExmpt[_BurnWallet])
            _tOwned[_BurnWallet] = _tOwned[_BurnWallet].add(tBurn);
    }

    function _takeDevelopment(uint256 tDevelopment) private {
        uint256 currentRate = _getRate();
        uint256 rDevelopment = tDevelopment.mul(currentRate);
        _rOwned[_developmentWalletAddress] = _rOwned[_developmentWalletAddress]
            .add(rDevelopment);
        if (_isRewardExmpt[_developmentWalletAddress])
            _tOwned[_developmentWalletAddress] = _tOwned[
                _developmentWalletAddress
            ].add(tDevelopment);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**3);
    }

    function calculateDevelopmentFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_developmentFee).div(10**3);
    }

    function calculateBurningFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_BurningFee).div(10**3);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _BurningFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousDevelopmentFee = _developmentFee;
        _previousBurningFee = _BurningFee;
        _taxFee = 0;
        _developmentFee = 0;
        _BurningFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _developmentFee = _previousDevelopmentFee;
        _BurningFee = _previousBurningFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExmpt[account];
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(amount > 0, "Transfer amount must be greater than zero");
        if (!_isExmpt[from] && !_isExmpt[to]) {
            require(trading, "Trading not enabled yet");
        }
        bool takeFee = true;
        if (_isExmpt[from] || _isExmpt[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }

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

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

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tBurn,
            uint256 tDevelopment
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeBurning(tBurn);
        _takeDevelopment(tDevelopment);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tBurn,
            uint256 tDevelopment
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeBurning(tBurn);
        _takeDevelopment(tDevelopment);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tBurn,
            uint256 tDevelopment
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeBurning(tBurn);
        _takeDevelopment(tDevelopment);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function enableTrading() external payable onlyOwner {
        require(!trading, "Already enabled");
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            LiquidityWallet,
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
        trading = true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_BurningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentFee","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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"payable","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600880546001600160a01b031990811673c78ba80b6ad9c0d52dc59c357af302e256708efa179091556009805482167310f91a00370e253be8a20a654c2edfa15d8225f0179055600a805490911690556c0c9f2c9cd04674edea40000000600b81905562000074905f196200029b565b62000081905f19620002bb565b600c55604080518082019091526008815267474f4f474c45414960c01b6020820152600e90620000b290826200037f565b50604080518082019091526008815267474f4f474c45414960c01b6020820152600f90620000e190826200037f565b506010805460ff1916601290811790915560096011819055905560466013819055601455600160158190556016553480156200011b575f80fd5b505f80546001600160a01b031916735fb5efa7b4ea98e79f07594e6ab51d778a4e4f7890811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c5460015f620001865f546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550600160045f620001be6200028d60201b60201c565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526004909352818320805485166001908117909155600854821684528284208054861682179055600954909116835291208054909216179055620002385f546001600160a01b031690565b6001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200027f91815260200190565b60405180910390a36200044b565b5f546001600160a01b031690565b5f82620002b657634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115620002db57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200030a57607f821691505b6020821081036200032957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200037a57805f5260205f20601f840160051c81016020851015620003565750805b601f840160051c820191505b8181101562000377575f815560010162000362565b50505b505050565b81516001600160401b038111156200039b576200039b620002e1565b620003b381620003ac8454620002f5565b846200032f565b602080601f831160018114620003e9575f8415620003d15750858301515b5f19600386901b1c1916600185901b17855562000443565b5f85815260208120601f198616915b828110156200041957888601518255948401946001909101908401620003f8565b50858210156200043757878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611cbb80620004595f395ff3fe608060405260043610610198575f3560e01c80635342acb4116100e757806395d89b4111610087578063d147518511610062578063d147518514610483578063dd62ed3e14610498578063ec44acf2146104dc578063f2fde38b146104f5575f80fd5b806395d89b4114610431578063a457c2d714610445578063a9059cbb14610464575f80fd5b8063715018a6116100c2578063715018a6146103c257806388f82020146103d65780638a8c523c1461040d5780638da5cb5b14610415575f80fd5b80635342acb4146103575780635d5ee5ed1461038e57806370a08231146103a3575f80fd5b80632d838119116101525780633b124fe71161012d5780633b124fe7146102e35780633bd5d173146102f85780634549b0391461031957806349bd5a5e14610338575f80fd5b80632d83811914610284578063313ce567146102a357806339509351146102c4575f80fd5b806306fdde03146101a3578063095ea7b3146101cd57806313114a9d146101fc5780631694505e1461021a57806318160ddd1461025157806323b872dd14610265575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101b7610514565b6040516101c49190611982565b60405180910390f35b3480156101d8575f80fd5b506101ec6101e73660046119e5565b6105a4565b60405190151581526020016101c4565b348015610207575f80fd5b50600d545b6040519081526020016101c4565b348015610225575f80fd5b50601754610239906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561025c575f80fd5b50600b5461020c565b348015610270575f80fd5b506101ec61027f366004611a0f565b6105ba565b34801561028f575f80fd5b5061020c61029e366004611a4d565b610621565b3480156102ae575f80fd5b5060105460405160ff90911681526020016101c4565b3480156102cf575f80fd5b506101ec6102de3660046119e5565b6106a8565b3480156102ee575f80fd5b5061020c60115481565b348015610303575f80fd5b50610317610312366004611a4d565b6106dd565b005b348015610324575f80fd5b5061020c610333366004611a71565b6107c5565b348015610343575f80fd5b50601854610239906001600160a01b031681565b348015610362575f80fd5b506101ec610371366004611a9f565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610399575f80fd5b5061020c60155481565b3480156103ae575f80fd5b5061020c6103bd366004611a9f565b610851565b3480156103cd575f80fd5b506103176108ad565b3480156103e1575f80fd5b506101ec6103f0366004611a9f565b6001600160a01b03165f9081526005602052604090205460ff1690565b61031761091e565b348015610420575f80fd5b505f546001600160a01b0316610239565b34801561043c575f80fd5b506101b7610c70565b348015610450575f80fd5b506101ec61045f3660046119e5565b610c7f565b34801561046f575f80fd5b506101ec61047e3660046119e5565b610ccc565b34801561048e575f80fd5b5061020c60135481565b3480156104a3575f80fd5b5061020c6104b2366004611aba565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156104e7575f80fd5b506006546101ec9060ff1681565b348015610500575f80fd5b5061031761050f366004611a9f565b610cd8565b6060600e805461052390611ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461054f90611ae6565b801561059a5780601f106105715761010080835404028352916020019161059a565b820191905f5260205f20905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b5f6105b0338484610dbf565b5060015b92915050565b5f6105c6848484610ee2565b610617843361061285604051806060016040528060288152602001611c39602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611034565b610dbf565b5060019392505050565b5f600c5482111561068c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b5f61069561105f565b90506106a18382611080565b9392505050565b335f8181526003602090815260408083206001600160a01b038716845290915281205490916105b0918590610612908661108b565b335f8181526005602052604090205460ff16156107515760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610683565b5f61075b83611096565b5050506001600160a01b0386165f90815260016020526040902054939450610788939250849150506110e9565b6001600160a01b0383165f90815260016020526040902055600c546107ad90826110e9565b600c55600d546107bd908461108b565b600d55505050565b5f600b548311156108185760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610683565b81610837575f61082784611096565b509496506105b495505050505050565b5f61084184611096565b509396506105b495505050505050565b6001600160a01b0381165f9081526005602052604081205460ff161561088c57506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f908152600160205260409020546105b490610621565b5f546001600160a01b031633146108d65760405162461bcd60e51b815260040161068390611b1e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109475760405162461bcd60e51b815260040161068390611b1e565b60065460ff161561098c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610683565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600b546109c3913091610dbf565b60175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a379190611b53565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190611b53565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610b04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b289190611b53565b601880546001600160a01b0319166001600160a01b039283161790556017541663f305d7193430610b5881610851565b60095460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092525f6044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015610bc2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610be79190611b6e565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190611b99565b506006805460ff19166001179055565b6060600f805461052390611ae6565b5f6105b0338461061285604051806060016040528060258152602001611c6160259139335f9081526003602090815260408083206001600160a01b038d1684529091529020549190611034565b5f6105b0338484610ee2565b5f546001600160a01b03163314610d015760405162461bcd60e51b815260040161068390611b1e565b6001600160a01b038116610d665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610683565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610683565b6001600160a01b038216610e825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610683565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111610f435760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610683565b6001600160a01b0383165f9081526004602052604090205460ff16158015610f8357506001600160a01b0382165f9081526004602052604090205460ff16155b15610fda5760065460ff16610fda5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610683565b6001600160a01b0383165f9081526004602052604090205460019060ff168061101a57506001600160a01b0383165f9081526004602052604090205460ff165b1561102257505f5b61102e848484846110f4565b50505050565b5f81848411156110575760405162461bcd60e51b81526004016106839190611982565b505050900390565b5f805f61106a611269565b90925090506110798282611080565b9250505090565b5f6106a18284611bc8565b5f6106a18284611be7565b5f805f805f805f805f805f6110aa8c6113d8565b93509350935093505f805f6110c98f8787876110c461105f565b611427565b919f509d509b509599509397509195509350505050919395979092949650565b5f6106a18284611bfa565b8061110157611101611484565b6001600160a01b0384165f9081526005602052604090205460ff16801561114057506001600160a01b0383165f9081526005602052604090205460ff16155b15611155576111508484846114bc565b61124d565b6001600160a01b0384165f9081526005602052604090205460ff1615801561119457506001600160a01b0383165f9081526005602052604090205460ff165b156111a4576111508484846115f9565b6001600160a01b0384165f9081526005602052604090205460ff161580156111e457506001600160a01b0383165f9081526005602052604090205460ff16155b156111f4576111508484846116b0565b6001600160a01b0384165f9081526005602052604090205460ff16801561123257506001600160a01b0383165f9081526005602052604090205460ff165b1561124257611150848484611704565b61124d8484846116b0565b8061102e5761102e601254601155601454601355601654601555565b600c54600b545f918291825b6007548110156113a8578260015f6007848154811061129657611296611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806112fe57508160025f600784815481106112d8576112d8611c0d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561131457600c54600b54945094505050509091565b61135860015f6007848154811061132d5761132d611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906110e9565b925061139e60025f6007848154811061137357611373611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906110e9565b9150600101611275565b50600b54600c546113b891611080565b8210156113cf57600c54600b549350935050509091565b90939092509050565b5f805f805f6113e686611786565b90505f6113f2876117a8565b90505f6113fe886117c4565b90505f6114178261141185818d896110e9565b906110e9565b9993985091965094509092505050565b5f80808061143589866117e0565b90505f61144289876117e0565b90505f61144f89886117e0565b90505f61145c89896117e0565b90505f61146f82611411858189896110e9565b949d949c50929a509298505050505050505050565b6011541580156114945750601554155b1561149b57565b6011805460125560138054601455601580546016555f928390559082905555565b5f805f805f805f6114cc88611096565b96509650965096509650965096506115108860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461153e90886110e9565b6001600160a01b03808c165f9081526001602052604080822093909355908b168152205461156c908761108b565b6001600160a01b038a165f9081526001602052604090205561158d826117eb565b611596816118a5565b6115a0858461195e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516115e591815260200190565b60405180910390a350505050505050505050565b5f805f805f805f61160988611096565b965096509650965096509650965061164d8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b03808c165f90815260016020908152604080832094909455918c16815260029091522054611682908561108b565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461156c908761108b565b5f805f805f805f6116c088611096565b965096509650965096509650965061153e8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b5f805f805f805f61171488611096565b96509650965096509650965096506117588860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461164d90886110e9565b5f6105b46103e86117a2601154856117e090919063ffffffff16565b90611080565b5f6105b46103e86117a2601554856117e090919063ffffffff16565b5f6105b46103e86117a2601354856117e090919063ffffffff16565b5f6106a18284611c21565b5f6117f461105f565b90505f61180183836117e0565b600a546001600160a01b03165f90815260016020526040902054909150611828908261108b565b600a80546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a057600a546001600160a01b03165f90815260026020526040902054611885908461108b565b600a546001600160a01b03165f908152600260205260409020555b505050565b5f6118ae61105f565b90505f6118bb83836117e0565b6008546001600160a01b03165f908152600160205260409020549091506118e2908261108b565b600880546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a0576008546001600160a01b03165f9081526002602052604090205461193f908461108b565b6008546001600160a01b03165f90815260026020526040902055505050565b600c5461196b90836110e9565b600c55600d5461197b908261108b565b600d555050565b5f602080835283518060208501525f5b818110156119ae57858101830151858201604001528201611992565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119e2575f80fd5b50565b5f80604083850312156119f6575f80fd5b8235611a01816119ce565b946020939093013593505050565b5f805f60608486031215611a21575f80fd5b8335611a2c816119ce565b92506020840135611a3c816119ce565b929592945050506040919091013590565b5f60208284031215611a5d575f80fd5b5035919050565b80151581146119e2575f80fd5b5f8060408385031215611a82575f80fd5b823591506020830135611a9481611a64565b809150509250929050565b5f60208284031215611aaf575f80fd5b81356106a1816119ce565b5f8060408385031215611acb575f80fd5b8235611ad6816119ce565b91506020830135611a94816119ce565b600181811c90821680611afa57607f821691505b602082108103611b1857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611b63575f80fd5b81516106a1816119ce565b5f805f60608486031215611b80575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611ba9575f80fd5b81516106a181611a64565b634e487b7160e01b5f52601160045260245ffd5b5f82611be257634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105b4576105b4611bb4565b818103818111156105b4576105b4611bb4565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176105b4576105b4611bb456fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064cdb4e5acdbd1dfbc752cf7286df9726bdd8211846a5d0f3924a4fe55d5b08d64736f6c63430008160033

Deployed Bytecode

0x608060405260043610610198575f3560e01c80635342acb4116100e757806395d89b4111610087578063d147518511610062578063d147518514610483578063dd62ed3e14610498578063ec44acf2146104dc578063f2fde38b146104f5575f80fd5b806395d89b4114610431578063a457c2d714610445578063a9059cbb14610464575f80fd5b8063715018a6116100c2578063715018a6146103c257806388f82020146103d65780638a8c523c1461040d5780638da5cb5b14610415575f80fd5b80635342acb4146103575780635d5ee5ed1461038e57806370a08231146103a3575f80fd5b80632d838119116101525780633b124fe71161012d5780633b124fe7146102e35780633bd5d173146102f85780634549b0391461031957806349bd5a5e14610338575f80fd5b80632d83811914610284578063313ce567146102a357806339509351146102c4575f80fd5b806306fdde03146101a3578063095ea7b3146101cd57806313114a9d146101fc5780631694505e1461021a57806318160ddd1461025157806323b872dd14610265575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101b7610514565b6040516101c49190611982565b60405180910390f35b3480156101d8575f80fd5b506101ec6101e73660046119e5565b6105a4565b60405190151581526020016101c4565b348015610207575f80fd5b50600d545b6040519081526020016101c4565b348015610225575f80fd5b50601754610239906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561025c575f80fd5b50600b5461020c565b348015610270575f80fd5b506101ec61027f366004611a0f565b6105ba565b34801561028f575f80fd5b5061020c61029e366004611a4d565b610621565b3480156102ae575f80fd5b5060105460405160ff90911681526020016101c4565b3480156102cf575f80fd5b506101ec6102de3660046119e5565b6106a8565b3480156102ee575f80fd5b5061020c60115481565b348015610303575f80fd5b50610317610312366004611a4d565b6106dd565b005b348015610324575f80fd5b5061020c610333366004611a71565b6107c5565b348015610343575f80fd5b50601854610239906001600160a01b031681565b348015610362575f80fd5b506101ec610371366004611a9f565b6001600160a01b03165f9081526004602052604090205460ff1690565b348015610399575f80fd5b5061020c60155481565b3480156103ae575f80fd5b5061020c6103bd366004611a9f565b610851565b3480156103cd575f80fd5b506103176108ad565b3480156103e1575f80fd5b506101ec6103f0366004611a9f565b6001600160a01b03165f9081526005602052604090205460ff1690565b61031761091e565b348015610420575f80fd5b505f546001600160a01b0316610239565b34801561043c575f80fd5b506101b7610c70565b348015610450575f80fd5b506101ec61045f3660046119e5565b610c7f565b34801561046f575f80fd5b506101ec61047e3660046119e5565b610ccc565b34801561048e575f80fd5b5061020c60135481565b3480156104a3575f80fd5b5061020c6104b2366004611aba565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b3480156104e7575f80fd5b506006546101ec9060ff1681565b348015610500575f80fd5b5061031761050f366004611a9f565b610cd8565b6060600e805461052390611ae6565b80601f016020809104026020016040519081016040528092919081815260200182805461054f90611ae6565b801561059a5780601f106105715761010080835404028352916020019161059a565b820191905f5260205f20905b81548152906001019060200180831161057d57829003601f168201915b5050505050905090565b5f6105b0338484610dbf565b5060015b92915050565b5f6105c6848484610ee2565b610617843361061285604051806060016040528060288152602001611c39602891396001600160a01b038a165f9081526003602090815260408083203384529091529020549190611034565b610dbf565b5060019392505050565b5f600c5482111561068c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b5f61069561105f565b90506106a18382611080565b9392505050565b335f8181526003602090815260408083206001600160a01b038716845290915281205490916105b0918590610612908661108b565b335f8181526005602052604090205460ff16156107515760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610683565b5f61075b83611096565b5050506001600160a01b0386165f90815260016020526040902054939450610788939250849150506110e9565b6001600160a01b0383165f90815260016020526040902055600c546107ad90826110e9565b600c55600d546107bd908461108b565b600d55505050565b5f600b548311156108185760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610683565b81610837575f61082784611096565b509496506105b495505050505050565b5f61084184611096565b509396506105b495505050505050565b6001600160a01b0381165f9081526005602052604081205460ff161561088c57506001600160a01b03165f9081526002602052604090205490565b6001600160a01b0382165f908152600160205260409020546105b490610621565b5f546001600160a01b031633146108d65760405162461bcd60e51b815260040161068390611b1e565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109475760405162461bcd60e51b815260040161068390611b1e565b60065460ff161561098c5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610683565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600b546109c3913091610dbf565b60175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a379190611b53565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190611b53565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610b04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b289190611b53565b601880546001600160a01b0319166001600160a01b039283161790556017541663f305d7193430610b5881610851565b60095460405160e086901b6001600160e01b03191681526001600160a01b03938416600482015260248101929092525f6044830181905260648301529190911660848201524260a482015260c40160606040518083038185885af1158015610bc2573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610be79190611b6e565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610c3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c609190611b99565b506006805460ff19166001179055565b6060600f805461052390611ae6565b5f6105b0338461061285604051806060016040528060258152602001611c6160259139335f9081526003602090815260408083206001600160a01b038d1684529091529020549190611034565b5f6105b0338484610ee2565b5f546001600160a01b03163314610d015760405162461bcd60e51b815260040161068390611b1e565b6001600160a01b038116610d665760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610683565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610e215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610683565b6001600160a01b038216610e825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610683565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111610f435760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610683565b6001600160a01b0383165f9081526004602052604090205460ff16158015610f8357506001600160a01b0382165f9081526004602052604090205460ff16155b15610fda5760065460ff16610fda5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610683565b6001600160a01b0383165f9081526004602052604090205460019060ff168061101a57506001600160a01b0383165f9081526004602052604090205460ff165b1561102257505f5b61102e848484846110f4565b50505050565b5f81848411156110575760405162461bcd60e51b81526004016106839190611982565b505050900390565b5f805f61106a611269565b90925090506110798282611080565b9250505090565b5f6106a18284611bc8565b5f6106a18284611be7565b5f805f805f805f805f805f6110aa8c6113d8565b93509350935093505f805f6110c98f8787876110c461105f565b611427565b919f509d509b509599509397509195509350505050919395979092949650565b5f6106a18284611bfa565b8061110157611101611484565b6001600160a01b0384165f9081526005602052604090205460ff16801561114057506001600160a01b0383165f9081526005602052604090205460ff16155b15611155576111508484846114bc565b61124d565b6001600160a01b0384165f9081526005602052604090205460ff1615801561119457506001600160a01b0383165f9081526005602052604090205460ff165b156111a4576111508484846115f9565b6001600160a01b0384165f9081526005602052604090205460ff161580156111e457506001600160a01b0383165f9081526005602052604090205460ff16155b156111f4576111508484846116b0565b6001600160a01b0384165f9081526005602052604090205460ff16801561123257506001600160a01b0383165f9081526005602052604090205460ff165b1561124257611150848484611704565b61124d8484846116b0565b8061102e5761102e601254601155601454601355601654601555565b600c54600b545f918291825b6007548110156113a8578260015f6007848154811061129657611296611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411806112fe57508160025f600784815481106112d8576112d8611c0d565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054115b1561131457600c54600b54945094505050509091565b61135860015f6007848154811061132d5761132d611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205484906110e9565b925061139e60025f6007848154811061137357611373611c0d565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205483906110e9565b9150600101611275565b50600b54600c546113b891611080565b8210156113cf57600c54600b549350935050509091565b90939092509050565b5f805f805f6113e686611786565b90505f6113f2876117a8565b90505f6113fe886117c4565b90505f6114178261141185818d896110e9565b906110e9565b9993985091965094509092505050565b5f80808061143589866117e0565b90505f61144289876117e0565b90505f61144f89886117e0565b90505f61145c89896117e0565b90505f61146f82611411858189896110e9565b949d949c50929a509298505050505050505050565b6011541580156114945750601554155b1561149b57565b6011805460125560138054601455601580546016555f928390559082905555565b5f805f805f805f6114cc88611096565b96509650965096509650965096506115108860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461153e90886110e9565b6001600160a01b03808c165f9081526001602052604080822093909355908b168152205461156c908761108b565b6001600160a01b038a165f9081526001602052604090205561158d826117eb565b611596816118a5565b6115a0858461195e565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516115e591815260200190565b60405180910390a350505050505050505050565b5f805f805f805f61160988611096565b965096509650965096509650965061164d8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b03808c165f90815260016020908152604080832094909455918c16815260029091522054611682908561108b565b6001600160a01b038a165f9081526002602090815260408083209390935560019052205461156c908761108b565b5f805f805f805f6116c088611096565b965096509650965096509650965061153e8760015f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b5f805f805f805f61171488611096565b96509650965096509650965096506117588860025f8d6001600160a01b03166001600160a01b031681526020019081526020015f20546110e990919063ffffffff16565b6001600160a01b038b165f9081526002602090815260408083209390935560019052205461164d90886110e9565b5f6105b46103e86117a2601154856117e090919063ffffffff16565b90611080565b5f6105b46103e86117a2601554856117e090919063ffffffff16565b5f6105b46103e86117a2601354856117e090919063ffffffff16565b5f6106a18284611c21565b5f6117f461105f565b90505f61180183836117e0565b600a546001600160a01b03165f90815260016020526040902054909150611828908261108b565b600a80546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a057600a546001600160a01b03165f90815260026020526040902054611885908461108b565b600a546001600160a01b03165f908152600260205260409020555b505050565b5f6118ae61105f565b90505f6118bb83836117e0565b6008546001600160a01b03165f908152600160205260409020549091506118e2908261108b565b600880546001600160a01b039081165f90815260016020908152604080832095909555925490911681526005909152205460ff16156118a0576008546001600160a01b03165f9081526002602052604090205461193f908461108b565b6008546001600160a01b03165f90815260026020526040902055505050565b600c5461196b90836110e9565b600c55600d5461197b908261108b565b600d555050565b5f602080835283518060208501525f5b818110156119ae57858101830151858201604001528201611992565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119e2575f80fd5b50565b5f80604083850312156119f6575f80fd5b8235611a01816119ce565b946020939093013593505050565b5f805f60608486031215611a21575f80fd5b8335611a2c816119ce565b92506020840135611a3c816119ce565b929592945050506040919091013590565b5f60208284031215611a5d575f80fd5b5035919050565b80151581146119e2575f80fd5b5f8060408385031215611a82575f80fd5b823591506020830135611a9481611a64565b809150509250929050565b5f60208284031215611aaf575f80fd5b81356106a1816119ce565b5f8060408385031215611acb575f80fd5b8235611ad6816119ce565b91506020830135611a94816119ce565b600181811c90821680611afa57607f821691505b602082108103611b1857634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611b63575f80fd5b81516106a1816119ce565b5f805f60608486031215611b80575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215611ba9575f80fd5b81516106a181611a64565b634e487b7160e01b5f52601160045260245ffd5b5f82611be257634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156105b4576105b4611bb4565b818103818111156105b4576105b4611bb4565b634e487b7160e01b5f52603260045260245ffd5b80820281158282048414176105b4576105b4611bb456fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064cdb4e5acdbd1dfbc752cf7286df9726bdd8211846a5d0f3924a4fe55d5b08d64736f6c63430008160033

Deployed Bytecode Sourcemap

19022:16650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20768:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21756:193;;;;;;;;;;-1:-1:-1;21756:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;21756:193:0;1023:187:1;23258:87:0;;;;;;;;;;-1:-1:-1;23327:10:0;;23258:87;;;1361:25:1;;;1349:2;1334:18;23258:87:0;1215:177:1;20390:41:0;;;;;;;;;;-1:-1:-1;20390:41:0;;;;-1:-1:-1;;;;;20390:41:0;;;;;;-1:-1:-1;;;;;1588:32:1;;;1570:51;;1558:2;1543:18;20390:41:0;1397:230:1;21045:95:0;;;;;;;;;;-1:-1:-1;21125:7:0;;21045:95;;21957:446;;;;;;;;;;-1:-1:-1;21957:446:0;;;;;:::i;:::-;;:::i;24276:322::-;;;;;;;;;;-1:-1:-1;24276:322:0;;;;;:::i;:::-;;:::i;20954:83::-;;;;;;;;;;-1:-1:-1;21020:9:0;;20954:83;;21020:9;;;;2420:36:1;;2408:2;2393:18;20954:83:0;2278:184:1;22411:300:0;;;;;;;;;;-1:-1:-1;22411:300:0;;;;;:::i;:::-;;:::i;20108:26::-;;;;;;;;;;;;;;;;23353:424;;;;;;;;;;-1:-1:-1;23353:424:0;;;;;:::i;:::-;;:::i;:::-;;23785:483;;;;;;;;;;-1:-1:-1;23785:483:0;;;;;:::i;:::-;;:::i;20438:28::-;;;;;;;;;;-1:-1:-1;20438:28:0;;;;-1:-1:-1;;;;;20438:28:0;;;30292:114;;;;;;;;;;-1:-1:-1;30292:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;30381:17:0;30357:4;30381:17;;;:8;:17;;;;;;;;;30292:114;20295:30;;;;;;;;;;;;;;;;21148:201;;;;;;;;;;-1:-1:-1;21148:201:0;;;;;:::i;:::-;;:::i;9235:148::-;;;;;;;;;;;;;:::i;23127:123::-;;;;;;;;;;-1:-1:-1;23127:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23219:23:0;23195:4;23219:23;;;:14;:23;;;;;;;;;23127:123;34843:826;;;:::i;9012:87::-;;;;;;;;;;-1:-1:-1;9058:7:0;9085:6;-1:-1:-1;;;;;9085:6:0;9012:87;;20859;;;;;;;;;;;;;:::i;22719:400::-;;;;;;;;;;-1:-1:-1;22719:400:0;;;;;:::i;:::-;;:::i;21357:199::-;;;;;;;;;;-1:-1:-1;21357:199:0;;;;;:::i;:::-;;:::i;20189:35::-;;;;;;;;;;;;;;;;21564:184;;;;;;;;;;-1:-1:-1;21564:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;21713:18:0;;;21681:7;21713:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21564:184;19416:19;;;;;;;;;;-1:-1:-1;19416:19:0;;;;;;;;9391:281;;;;;;;;;;-1:-1:-1;9391:281:0;;;;;:::i;:::-;;:::i;20768:83::-;20805:13;20838:5;20831:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20768:83;:::o;21756:193::-;21858:4;21880:39;4526:10;21903:7;21912:6;21880:8;:39::i;:::-;-1:-1:-1;21937:4:0;21756:193;;;;;:::o;21957:446::-;22089:4;22106:36;22116:6;22124:9;22135:6;22106:9;:36::i;:::-;22153:220;22176:6;4526:10;22224:138;22280:6;22224:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22224:19:0;;;;;;:11;:19;;;;;;;;4526:10;22224:33;;;;;;;;;;:37;:138::i;:::-;22153:8;:220::i;:::-;-1:-1:-1;22391:4:0;21957:446;;;;;:::o;24276:322::-;24370:7;24428;;24417;:18;;24395:110;;;;-1:-1:-1;;;24395:110:0;;4344:2:1;24395:110:0;;;4326:21:1;4383:2;4363:18;;;4356:30;4422:34;4402:18;;;4395:62;-1:-1:-1;;;4473:18:1;;;4466:40;4523:19;;24395:110:0;;;;;;;;;24516:19;24538:10;:8;:10::i;:::-;24516:32;-1:-1:-1;24566:24:0;:7;24516:32;24566:11;:24::i;:::-;24559:31;24276:322;-1:-1:-1;;;24276:322:0:o;22411:300::-;4526:10;22526:4;22620:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22620:34:0;;;;;;;;;;22526:4;;22548:133;;22598:7;;22620:50;;22659:10;22620:38;:50::i;23353:424::-;4526:10;23405:14;23468:22;;;:14;:22;;;;;;;;23467:23;23445:117;;;;-1:-1:-1;;;23445:117:0;;4755:2:1;23445:117:0;;;4737:21:1;4794:2;4774:18;;;4767:30;4833:34;4813:18;;;4806:62;-1:-1:-1;;;4884:18:1;;;4877:42;4936:19;;23445:117:0;4553:408:1;23445:117:0;23574:15;23605:19;23616:7;23605:10;:19::i;:::-;-1:-1:-1;;;;;;;;23653:15:0;;;;;;:7;:15;;;;;;23573:51;;-1:-1:-1;23653:28:0;;:15;-1:-1:-1;23573:51:0;;-1:-1:-1;;23653:19:0;:28::i;:::-;-1:-1:-1;;;;;23635:15:0;;;;;;:7;:15;;;;;:46;23702:7;;:20;;23714:7;23702:11;:20::i;:::-;23692:7;:30;23746:10;;:23;;23761:7;23746:14;:23::i;:::-;23733:10;:36;-1:-1:-1;;;23353:424:0:o;23785:483::-;23903:7;23947;;23936;:18;;23928:62;;;;-1:-1:-1;;;23928:62:0;;5168:2:1;23928:62:0;;;5150:21:1;5207:2;5187:18;;;5180:30;5246:33;5226:18;;;5219:61;5297:18;;23928:62:0;4966:355:1;23928:62:0;24006:17;24001:260;;24041:15;24072:19;24083:7;24072:10;:19::i;:::-;-1:-1:-1;24040:51:0;;-1:-1:-1;24106:14:0;;-1:-1:-1;;;;;;24106:14:0;24001:260;24156:23;24193:19;24204:7;24193:10;:19::i;:::-;-1:-1:-1;24153:59:0;;-1:-1:-1;24227:22:0;;-1:-1:-1;;;;;;24227:22:0;21148:201;-1:-1:-1;;;;;21238:23:0;;21214:7;21238:23;;;:14;:23;;;;;;;;21234:52;;;-1:-1:-1;;;;;;21270:16:0;;;;;:7;:16;;;;;;;21148:201::o;21234:52::-;-1:-1:-1;;;;;21324:16:0;;;;;;:7;:16;;;;;;21304:37;;:19;:37::i;9235:148::-;9058:7;9085:6;-1:-1:-1;;;;;9085:6:0;4526:10;9147:23;9139:68;;;;-1:-1:-1;;;9139:68:0;;;;;;;:::i;:::-;9342:1:::1;9326:6:::0;;9305:40:::1;::::0;-1:-1:-1;;;;;9326:6:0;;::::1;::::0;9305:40:::1;::::0;9342:1;;9305:40:::1;9373:1;9356:19:::0;;-1:-1:-1;;;;;;9356:19:0::1;::::0;;9235:148::o;34843:826::-;9058:7;9085:6;-1:-1:-1;;;;;9085:6:0;4526:10;9147:23;9139:68;;;;-1:-1:-1;;;9139:68:0;;;;;;;:::i;:::-;34915:7:::1;::::0;::::1;;34914:8;34906:36;;;::::0;-1:-1:-1;;;34906:36:0;;5889:2:1;34906:36:0::1;::::0;::::1;5871:21:1::0;5928:2;5908:18;;;5901:30;-1:-1:-1;;;5947:18:1;;;5940:45;6002:18;;34906:36:0::1;5687:339:1::0;34906:36:0::1;34953:15;:104:::0;;-1:-1:-1;;;;;;34953:104:0::1;35004:42;34953:104:::0;;::::1;::::0;;;35118:7:::1;::::0;35068:58:::1;::::0;35085:4:::1;::::0;35068:8:::1;:58::i;:::-;35171:15;;;;;;;;;-1:-1:-1::0;;;;;35171:15:0::1;-1:-1:-1::0;;;;;35171:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35153:55:0::1;;35231:4;35251:15;;;;;;;;;-1:-1:-1::0;;;;;35251:15:0::1;-1:-1:-1::0;;;;;35251:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35153:131;::::0;-1:-1:-1;;;;;;35153:131:0::1;::::0;;;;;;-1:-1:-1;;;;;6517:15:1;;;35153:131:0::1;::::0;::::1;6499:34:1::0;6569:15;;6549:18;;;6542:43;6434:18;;35153:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35137:13;:147:::0;;-1:-1:-1;;;;;;35137:147:0::1;-1:-1:-1::0;;;;;35137:147:0;;::::1;;::::0;;35295:15:::1;::::0;::::1;:31;35334:9;35367:4;35387:24;35367:4:::0;35387:9:::1;:24::i;:::-;35458:15;::::0;35295:219:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;35295:219:0;;;-1:-1:-1;;;;;6955:15:1;;;35295:219:0::1;::::0;::::1;6937:34:1::0;6987:18;;;6980:34;;;;35426:1:0::1;7030:18:1::0;;;7023:34;;;7073:18;;;7066:34;35458:15:0;;;::::1;7116:19:1::0;;;7109:44;35488:15:0::1;7169:19:1::0;;;7162:35;6871:19;;35295:219:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;35532:13:0::1;::::0;35577:15:::1;::::0;35525:111:::1;::::0;-1:-1:-1;;;35525:111:0;;-1:-1:-1;;;;;35577:15:0;;::::1;35525:111;::::0;::::1;7693:51:1::0;-1:-1:-1;;7760:18:1;;;7753:34;35532:13:0;::::1;::::0;-1:-1:-1;35525:29:0::1;::::0;7666:18:1;;35525:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;35647:7:0::1;:14:::0;;-1:-1:-1;;35647:14:0::1;35657:4;35647:14;::::0;;34843:826::o;20859:87::-;20898:13;20931:7;20924:14;;;;;:::i;22719:400::-;22839:4;22861:228;4526:10;22911:7;22933:145;22990:15;22933:145;;;;;;;;;;;;;;;;;4526:10;22933:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22933:34:0;;;;;;;;;;;;:38;:145::i;21357:199::-;21462:4;21484:42;4526:10;21508:9;21519:6;21484:9;:42::i;9391:281::-;9058:7;9085:6;-1:-1:-1;;;;;9085:6:0;4526:10;9147:23;9139:68;;;;-1:-1:-1;;;9139:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9494:22:0;::::1;9472:110;;;::::0;-1:-1:-1;;;9472:110:0;;8250:2:1;9472:110:0::1;::::0;::::1;8232:21:1::0;8289:2;8269:18;;;8262:30;8328:34;8308:18;;;8301:62;-1:-1:-1;;;8379:18:1;;;8372:36;8425:19;;9472:110:0::1;8048:402:1::0;9472:110:0::1;9619:6;::::0;;9598:38:::1;::::0;-1:-1:-1;;;;;9598:38:0;;::::1;::::0;9619:6;::::1;::::0;9598:38:::1;::::0;::::1;9647:6;:17:::0;;-1:-1:-1;;;;;;9647:17:0::1;-1:-1:-1::0;;;;;9647:17:0;;;::::1;::::0;;;::::1;::::0;;9391:281::o;30414:369::-;-1:-1:-1;;;;;30541:19:0;;30533:68;;;;-1:-1:-1;;;30533:68:0;;8657:2:1;30533:68:0;;;8639:21:1;8696:2;8676:18;;;8669:30;8735:34;8715:18;;;8708:62;-1:-1:-1;;;8786:18:1;;;8779:34;8830:19;;30533:68:0;8455:400:1;30533:68:0;-1:-1:-1;;;;;30620:21:0;;30612:68;;;;-1:-1:-1;;;30612:68:0;;9062:2:1;30612:68:0;;;9044:21:1;9101:2;9081:18;;;9074:30;9140:34;9120:18;;;9113:62;-1:-1:-1;;;9191:18:1;;;9184:32;9233:19;;30612:68:0;8860:398:1;30612:68:0;-1:-1:-1;;;;;30691:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30743:32;;1361:25:1;;;30743:32:0;;1334:18:1;30743:32:0;;;;;;;30414:369;;;:::o;30791:474::-;30922:1;30913:6;:10;30905:64;;;;-1:-1:-1;;;30905:64:0;;9465:2:1;30905:64:0;;;9447:21:1;9504:2;9484:18;;;9477:30;9543:34;9523:18;;;9516:62;-1:-1:-1;;;9594:18:1;;;9587:39;9643:19;;30905:64:0;9263:405:1;30905:64:0;-1:-1:-1;;;;;30985:14:0;;;;;;:8;:14;;;;;;;;30984:15;:32;;;;-1:-1:-1;;;;;;31004:12:0;;;;;;:8;:12;;;;;;;;31003:13;30984:32;30980:108;;;31041:7;;;;31033:43;;;;-1:-1:-1;;;31033:43:0;;9875:2:1;31033:43:0;;;9857:21:1;9914:2;9894:18;;;9887:30;9953:25;9933:18;;;9926:53;9996:18;;31033:43:0;9673:347:1;31033:43:0;-1:-1:-1;;;;;31132:14:0;;31098:12;31132:14;;;:8;:14;;;;;;31113:4;;31132:14;;;:30;;-1:-1:-1;;;;;;31150:12:0;;;;;;:8;:12;;;;;;;;31132:30;31128:78;;;-1:-1:-1;31189:5:0;31128:78;31216:41;31231:4;31237:2;31241:6;31249:7;31216:14;:41::i;:::-;30894:371;30791:474;;;:::o;3672:240::-;3792:7;3853:12;3845:6;;;;3837:29;;;;-1:-1:-1;;;3837:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3888:5:0;;;3672:240::o;27698:164::-;27740:7;27761:15;27778;27797:19;:17;:19::i;:::-;27760:56;;-1:-1:-1;27760:56:0;-1:-1:-1;27834:20:0;27760:56;;27834:11;:20::i;:::-;27827:27;;;;27698:164;:::o;3460:98::-;3518:7;3545:5;3549:1;3545;:5;:::i;3142:98::-;3200:7;3227:5;3231:1;3227;:5;:::i;25627:838::-;25727:7;25749;25771;25793;25815;25837;25859;25909:23;25947:12;25974:13;26002:20;26036;26048:7;26036:11;:20::i;:::-;25894:162;;;;;;;;26068:15;26085:23;26110:12;26126:135;26152:7;26174:4;26193:5;26213:12;26240:10;:8;:10::i;:::-;26126:11;:135::i;:::-;26067:194;;-1:-1:-1;26067:194:0;-1:-1:-1;26067:194:0;-1:-1:-1;26365:15:0;;-1:-1:-1;26395:4:0;;-1:-1:-1;26414:5:0;;-1:-1:-1;26434:12:0;-1:-1:-1;;;;25627:838:0;;;;;;;;;:::o;3248:98::-;3306:7;3333:5;3337:1;3333;:5;:::i;31752:858::-;31908:7;31903:28;;31917:14;:12;:14::i;:::-;-1:-1:-1;;;;;31946:22:0;;;;;;:14;:22;;;;;;;;:52;;;;-1:-1:-1;;;;;;31973:25:0;;;;;;:14;:25;;;;;;;;31972:26;31946:52;31942:621;;;32015:48;32037:6;32045:9;32056:6;32015:21;:48::i;:::-;31942:621;;;-1:-1:-1;;;;;32086:22:0;;;;;;:14;:22;;;;;;;;32085:23;:52;;;;-1:-1:-1;;;;;;32112:25:0;;;;;;:14;:25;;;;;;;;32085:52;32081:482;;;32154:46;32174:6;32182:9;32193:6;32154:19;:46::i;32081:482::-;-1:-1:-1;;;;;32223:22:0;;;;;;:14;:22;;;;;;;;32222:23;:53;;;;-1:-1:-1;;;;;;32250:25:0;;;;;;:14;:25;;;;;;;;32249:26;32222:53;32218:345;;;32292:44;32310:6;32318:9;32329:6;32292:17;:44::i;32218:345::-;-1:-1:-1;;;;;32358:22:0;;;;;;:14;:22;;;;;;;;:51;;;;-1:-1:-1;;;;;;32384:25:0;;;;;;:14;:25;;;;;;;;32358:51;32354:209;;;32426:48;32448:6;32456:9;32467:6;32426:21;:48::i;32354:209::-;32507:44;32525:6;32533:9;32544:6;32507:17;:44::i;:::-;32578:7;32573:29;;32587:15;30165;;30155:7;:25;30209:23;;30191:15;:41;30257:19;;30243:11;:33;30111:173;27870:605;27968:7;;28004;;27921;;;;;28022:338;28046:9;:16;28042:20;;28022:338;;;28130:7;28106;:21;28114:9;28124:1;28114:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28114:12:0;28106:21;;;;;;;;;;;;;:31;;:83;;;28182:7;28158;:21;28166:9;28176:1;28166:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28166:12:0;28158:21;;;;;;;;;;;;;:31;28106:83;28084:146;;;28213:7;;28222;;28205:25;;;;;;;27870:605;;:::o;28084:146::-;28255:34;28267:7;:21;28275:9;28285:1;28275:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28275:12:0;28267:21;;;;;;;;;;;;;28255:7;;:11;:34::i;:::-;28245:44;;28314:34;28326:7;:21;28334:9;28344:1;28334:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28334:12:0;28326:21;;;;;;;;;;;;;28314:7;;:11;:34::i;:::-;28304:44;-1:-1:-1;28064:3:0;;28022:338;;;-1:-1:-1;28396:7:0;;28384;;:20;;:11;:20::i;:::-;28374:7;:30;28370:61;;;28414:7;;28423;;28406:25;;;;;;27870:605;;:::o;28370:61::-;28450:7;;28459;;-1:-1:-1;27870:605:0;-1:-1:-1;27870:605:0:o;26473:539::-;26574:7;26596;26618;26640;26675:12;26690:24;26706:7;26690:15;:24::i;:::-;26675:39;;26725:13;26741:28;26761:7;26741:19;:28::i;:::-;26725:44;;26780:20;26803:32;26827:7;26803:23;:32::i;:::-;26780:55;-1:-1:-1;26846:23:0;26872:70;26780:55;26872:28;26894:5;26872:28;:7;26884:4;26872:11;:17::i;:::-;:21;;:28::i;:70::-;26846:96;26978:4;;-1:-1:-1;26984:5:0;;-1:-1:-1;26984:5:0;-1:-1:-1;26473:539:0;;-1:-1:-1;;;26473:539:0:o;27020:670::-;27245:7;;;;27342:24;:7;27354:11;27342;:24::i;:::-;27324:42;-1:-1:-1;27377:12:0;27392:21;:4;27401:11;27392:8;:21::i;:::-;27377:36;-1:-1:-1;27424:13:0;27440:22;:5;27450:11;27440:9;:22::i;:::-;27424:38;-1:-1:-1;27473:20:0;27496:29;:12;27513:11;27496:16;:29::i;:::-;27473:52;-1:-1:-1;27536:23:0;27562:70;27473:52;27562:28;27584:5;27562:28;:7;27574:4;27562:11;:17::i;:70::-;27651:7;;;;-1:-1:-1;27677:4:0;;-1:-1:-1;27020:670:0;;-1:-1:-1;;;;;;;;;27020:670:0:o;29798:305::-;29845:7;;:12;:32;;;;-1:-1:-1;29861:11:0;;:16;29845:32;29841:45;;;29798:305::o;29841:45::-;29914:7;;;29896:15;:25;29958:15;;;29932:23;:41;30006:11;;;29984:19;:33;-1:-1:-1;30028:11:0;;;;30050:19;;;;30080:15;29798:305::o;34085:750::-;34236:15;34266:23;34304:12;34331:23;34369:12;34396:13;34424:20;34458:19;34469:7;34458:10;:19::i;:::-;34221:256;;;;;;;;;;;;;;34506:28;34526:7;34506;:15;34514:6;-1:-1:-1;;;;;34506:15:0;-1:-1:-1;;;;;34506:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;34488:15:0;;;;;;:7;:15;;;;;;;;:46;;;;34563:7;:15;;;;:28;;34583:7;34563:19;:28::i;:::-;-1:-1:-1;;;;;34545:15:0;;;;;;;:7;:15;;;;;;:46;;;;34623:18;;;;;;;:39;;34646:15;34623:22;:39::i;:::-;-1:-1:-1;;;;;34602:18:0;;;;;;:7;:18;;;;;:60;34673:19;34686:5;34673:12;:19::i;:::-;34703:30;34720:12;34703:16;:30::i;:::-;34744:23;34756:4;34762;34744:11;:23::i;:::-;34800:9;-1:-1:-1;;;;;34783:44:0;34792:6;-1:-1:-1;;;;;34783:44:0;;34811:15;34783:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;34783:44:0;;;;;;;;34210:625;;;;;;;34085:750;;;:::o;33315:762::-;33464:15;33494:23;33532:12;33559:23;33597:12;33624:13;33652:20;33686:19;33697:7;33686:10;:19::i;:::-;33449:256;;;;;;;;;;;;;;33734:28;33754:7;33734;:15;33742:6;-1:-1:-1;;;;;33734:15:0;-1:-1:-1;;;;;33734:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;33716:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;33794:18;;;;;:7;:18;;;;;:39;;33817:15;33794:22;:39::i;:::-;-1:-1:-1;;;;;33773:18:0;;;;;;:7;:18;;;;;;;;:60;;;;33865:7;:18;;;;:39;;33888:15;33865:22;:39::i;32618:689::-;32765:15;32795:23;32833:12;32860:23;32898:12;32925:13;32953:20;32987:19;32998:7;32987:10;:19::i;:::-;32750:256;;;;;;;;;;;;;;33035:28;33055:7;33035;:15;33043:6;-1:-1:-1;;;;;33035:15:0;-1:-1:-1;;;;;33035:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;24606:821::-;24757:15;24787:23;24825:12;24852:23;24890:12;24917:13;24945:20;24979:19;24990:7;24979:10;:19::i;:::-;24742:256;;;;;;;;;;;;;;25027:28;25047:7;25027;:15;25035:6;-1:-1:-1;;;;;25027:15:0;-1:-1:-1;;;;;25027:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;25009:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25084:7;:15;;;;:28;;25104:7;25084:19;:28::i;29296:130::-;29360:7;29387:31;29412:5;29387:20;29399:7;;29387;:11;;:20;;;;:::i;:::-;:24;;:31::i;29620:170::-;29715:7;29747:35;29776:5;29747:24;29759:11;;29747:7;:11;;:24;;;;:::i;29434:178::-;29533:7;29565:39;29598:5;29565:28;29577:15;;29565:7;:11;;:28;;;;:::i;3354:98::-;3412:7;3439:5;3443:1;3439;:5;:::i;28483:321::-;28539:19;28561:10;:8;:10::i;:::-;28539:32;-1:-1:-1;28582:13:0;28598:22;:5;28539:32;28598:9;:22::i;:::-;28662:11;;-1:-1:-1;;;;;28662:11:0;28654:20;;;;:7;:20;;;;;;28582:38;;-1:-1:-1;28654:31:0;;28582:38;28654:24;:31::i;:::-;28639:11;;;-1:-1:-1;;;;;28639:11:0;;;28631:20;;;;:7;:20;;;;;;;;:54;;;;28715:11;;;;;28700:27;;:14;:27;;;;;;;28696:100;;;28773:11;;-1:-1:-1;;;;;28773:11:0;28765:20;;;;:7;:20;;;;;;:31;;28790:5;28765:24;:31::i;:::-;28750:11;;-1:-1:-1;;;;;28750:11:0;28742:20;;;;:7;:20;;;;;:54;28696:100;28528:276;;28483:321;:::o;28812:476::-;28879:19;28901:10;:8;:10::i;:::-;28879:32;-1:-1:-1;28922:20:0;28945:29;:12;28879:32;28945:16;:29::i;:::-;29030:25;;-1:-1:-1;;;;;29030:25:0;29022:34;;;;:7;:34;;;;;;28922:52;;-1:-1:-1;29022:66:0;;28922:52;29022;:66::i;:::-;28993:25;;;-1:-1:-1;;;;;28993:25:0;;;28985:34;;;;:7;:34;;;;;;;;:103;;;;29118:25;;;;;29103:41;;:14;:41;;;;;;;29099:181;;;29222:25;;-1:-1:-1;;;;;29222:25:0;29196:66;;;;:7;:66;;;;;;:84;;29267:12;29196:70;:84::i;:::-;29167:25;;-1:-1:-1;;;;;29167:25:0;29159:34;;;;:7;:34;;;;;:121;28868:420;;28812:476;:::o;25472:147::-;25550:7;;:17;;25562:4;25550:11;:17::i;:::-;25540:7;:27;25591:10;;:20;;25606:4;25591:14;:20::i;:::-;25578:10;:33;-1:-1:-1;;25472:147:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1632:456::-;1709:6;1717;1725;1778:2;1766:9;1757:7;1753:23;1749:32;1746:52;;;1794:1;1791;1784:12;1746:52;1833:9;1820:23;1852:31;1877:5;1852:31;:::i;:::-;1902:5;-1:-1:-1;1959:2:1;1944:18;;1931:32;1972:33;1931:32;1972:33;:::i;:::-;1632:456;;2024:7;;-1:-1:-1;;;2078:2:1;2063:18;;;;2050:32;;1632:456::o;2093:180::-;2152:6;2205:2;2193:9;2184:7;2180:23;2176:32;2173:52;;;2221:1;2218;2211:12;2173:52;-1:-1:-1;2244:23:1;;2093:180;-1:-1:-1;2093:180:1:o;2467:118::-;2553:5;2546:13;2539:21;2532:5;2529:32;2519:60;;2575:1;2572;2565:12;2590:309;2655:6;2663;2716:2;2704:9;2695:7;2691:23;2687:32;2684:52;;;2732:1;2729;2722:12;2684:52;2768:9;2755:23;2745:33;;2828:2;2817:9;2813:18;2800:32;2841:28;2863:5;2841:28;:::i;:::-;2888:5;2878:15;;;2590:309;;;;;:::o;3112:247::-;3171:6;3224:2;3212:9;3203:7;3199:23;3195:32;3192:52;;;3240:1;3237;3230:12;3192:52;3279:9;3266:23;3298:31;3323:5;3298:31;:::i;3364:388::-;3432:6;3440;3493:2;3481:9;3472:7;3468:23;3464:32;3461:52;;;3509:1;3506;3499:12;3461:52;3548:9;3535:23;3567:31;3592:5;3567:31;:::i;:::-;3617:5;-1:-1:-1;3674:2:1;3659:18;;3646:32;3687:33;3646:32;3687:33;:::i;3757:380::-;3836:1;3832:12;;;;3879;;;3900:61;;3954:4;3946:6;3942:17;3932:27;;3900:61;4007:2;3999:6;3996:14;3976:18;3973:38;3970:161;;4053:10;4048:3;4044:20;4041:1;4034:31;4088:4;4085:1;4078:15;4116:4;4113:1;4106:15;3970:161;;3757:380;;;:::o;5326:356::-;5528:2;5510:21;;;5547:18;;;5540:30;5606:34;5601:2;5586:18;;5579:62;5673:2;5658:18;;5326:356::o;6031:251::-;6101:6;6154:2;6142:9;6133:7;6129:23;6125:32;6122:52;;;6170:1;6167;6160:12;6122:52;6202:9;6196:16;6221:31;6246:5;6221:31;:::i;7208:306::-;7296:6;7304;7312;7365:2;7353:9;7344:7;7340:23;7336:32;7333:52;;;7381:1;7378;7371:12;7333:52;7410:9;7404:16;7394:26;;7460:2;7449:9;7445:18;7439:25;7429:35;;7504:2;7493:9;7489:18;7483:25;7473:35;;7208:306;;;;;:::o;7798:245::-;7865:6;7918:2;7906:9;7897:7;7893:23;7889:32;7886:52;;;7934:1;7931;7924:12;7886:52;7966:9;7960:16;7985:28;8007:5;7985:28;:::i;10025:127::-;10086:10;10081:3;10077:20;10074:1;10067:31;10117:4;10114:1;10107:15;10141:4;10138:1;10131:15;10157:217;10197:1;10223;10213:132;;10267:10;10262:3;10258:20;10255:1;10248:31;10302:4;10299:1;10292:15;10330:4;10327:1;10320:15;10213:132;-1:-1:-1;10359:9:1;;10157:217::o;10379:125::-;10444:9;;;10465:10;;;10462:36;;;10478:18;;:::i;10509:128::-;10576:9;;;10597:11;;;10594:37;;;10611:18;;:::i;10642:127::-;10703:10;10698:3;10694:20;10691:1;10684:31;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10774:168;10847:9;;;10878;;10895:15;;;10889:22;;10875:37;10865:71;;10916:18;;:::i

Swarm Source

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