ETH Price: $3,391.77 (-1.95%)
Gas: 4 Gwei

Token

colR Coin ($colR)
 

Overview

Max Total Supply

100,000,000 $colR

Holders

424

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 $colR

Value
$0.00
0xfb848819e0a9d4013c659559c4b4202d5e17de77
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TOKEN

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-04
*/

// SPDX-License-Identifier: Unlicensed

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

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


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


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


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

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

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

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

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


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

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

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

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


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

        contract LockToken is Ownable {

        bool public isOpen = false;
        mapping(address => bool) private _whiteList;
        modifier open(address from, address to) {
            require(isOpen || _whiteList[from] || _whiteList[to], " Trading is not Open");
            _;
        }

        constructor() {
            _whiteList[msg.sender] = true;
            _whiteList[address(this)] = true;
        }

        function openTrade(bool value) external onlyOwner {
            isOpen = value;
        }

        function includeToWhiteList(address _users, bool _trueFalse) external onlyOwner 
        {
            _whiteList[_users] = _trueFalse;
        }
    }
        interface IERC20Metadata is IERC20 {
            /**
            * @dev Returns the name of the token.
            */
            function name() external view returns (string memory);

            /**
            * @dev Returns the symbol of the token.
            */
            function symbol() external view returns (string memory);

            /**
            * @dev Returns the decimals places of the token.
            */
            function decimals() external view returns (uint8);
        }
        contract ERC20 is Context,Ownable, IERC20, IERC20Metadata {
            using SafeMath for uint256;

            mapping(address => uint256) private _balances;

            mapping(address => mapping(address => uint256)) private _allowances;

            uint256 private _totalSupply;

            string private _name;
            string private _symbol;

            /**
            * @dev Sets the values for {name} and {symbol}.
            *
            * The default value of {decimals} is 18. To select a different value for
            * {decimals} you should overload it.
            *
            * All two of these values are immutable: they can only be set once during
            * construction.
            */
            constructor(string memory name_, string memory symbol_) {
                _name = name_;
                _symbol = symbol_;
            }

            /**
            * @dev Returns the name of the token.
            */
            function name() public view virtual override returns (string memory) {
                return _name;
            }

            /**
            * @dev Returns the symbol of the token, usually a shorter version of the
            * name.
            */
            function symbol() public view virtual override returns (string memory) {
                return _symbol;
            }

            /**
            * @dev Returns the number of decimals used to get its user representation.
            * For example, if `decimals` equals `2`, a balance of `505` tokens should
            * be displayed to a user as `5,05` (`505 / 10 ** 2`).
            *
            * Tokens usually opt for a value of 18, imitating the relationship between
            * Ether and Wei. This is the value {ERC20} uses, unless this function is
            * overridden;
            *
            * NOTE: This information is only used for _display_ purposes: it in
            * no way affects any of the arithmetic of the contract, including
            * {IERC20-balanceOf} and {IERC20-transfer}.
            */
            function decimals() public view virtual override returns (uint8) {
                return 18;
            }

            /**
            * @dev See {IERC20-totalSupply}.
            */
            function totalSupply() public view virtual override returns (uint256) {
                return _totalSupply;
            }

            /**
            * @dev See {IERC20-balanceOf}.
            */
            function balanceOf(address account) public view virtual override returns (uint256) {
                return _balances[account];
            }

            /**
            * @dev See {IERC20-transfer}.
            *
            * Requirements:
            *
            * - `recipient` cannot be the zero address.
            * - the caller must have a balance of at least `amount`.
            */
            function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
                _transfer(_msgSender(), recipient, amount);
                return true;
            }

            /**
            * @dev See {IERC20-allowance}.
            */
            function allowance(address owner, address spender) public view virtual override returns (uint256) {
                return _allowances[owner][spender];
            }

            /**
            * @dev See {IERC20-approve}.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            */
            function approve(address spender, uint256 amount) public virtual override returns (bool) {
                _approve(_msgSender(), spender, amount);
                return true;
            }

            /**
            * @dev See {IERC20-transferFrom}.
            *
            * Emits an {Approval} event indicating the updated allowance. This is not
            * required by the EIP. See the note at the beginning of {ERC20}.
            *
            * Requirements:
            *
            * - `sender` and `recipient` cannot be the zero address.
            * - `sender` must have a balance of at least `amount`.
            * - the caller must have allowance for ``sender``'s tokens of at least
            * `amount`.
            */
            function transferFrom(
                address sender,
                address recipient,
                uint256 amount
            ) public virtual override returns (bool) {
                _transfer(sender, recipient, amount);
                _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
                return true;
            }

            /**
            * @dev Atomically increases the allowance granted to `spender` by the caller.
            *
            * This is an alternative to {approve} that can be used as a mitigation for
            * problems described in {IERC20-approve}.
            *
            * Emits an {Approval} event indicating the updated allowance.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            */
            function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
                _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
                return true;
            }

            /**
            * @dev Atomically decreases the allowance granted to `spender` by the caller.
            *
            * This is an alternative to {approve} that can be used as a mitigation for
            * problems described in {IERC20-approve}.
            *
            * Emits an {Approval} event indicating the updated allowance.
            *
            * Requirements:
            *
            * - `spender` cannot be the zero address.
            * - `spender` must have allowance for the caller of at least
            * `subtractedValue`.
            */
            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;
            }

            /**
            * @dev Moves tokens `amount` from `sender` to `recipient`.
            *
            * This is internal function is equivalent to {transfer}, and can be used to
            * e.g. implement automatic token fees, slashing mechanisms, etc.
            *
            * Emits a {Transfer} event.
            *
            * Requirements:
            *
            * - `sender` cannot be the zero address.
            * - `recipient` cannot be the zero address.
            * - `sender` must have a balance of at least `amount`.
            */
            function _transfer(
                address sender,
                address recipient,
                uint256 amount
            ) internal virtual {
                require(sender != address(0), "ERC20: transfer from the zero address");
                require(recipient != address(0), "ERC20: transfer to the zero address");

                _beforeTokenTransfer(sender, recipient, amount);

                _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
                _balances[recipient] = _balances[recipient].add(amount);
                emit Transfer(sender, recipient, amount);
            }

            /** @dev Creates `amount` tokens and assigns them to `account`, increasing
            * the total supply.
            *
            * Emits a {Transfer} event with `from` set to the zero address.
            *
            * Requirements:
            *
            * - `account` cannot be the zero address.
            */
            function _mint(address account, uint256 amount) internal virtual {
                require(account != address(0), "ERC20: mint to the zero address");

                _beforeTokenTransfer(address(0), account, amount);

                _totalSupply = _totalSupply.add(amount);
                _balances[account] = _balances[account].add(amount);
                emit Transfer(address(0), account, amount);
            }

            /**
            * @dev Destroys `amount` tokens from `account`, reducing the
            * total supply.
            *
            * Emits a {Transfer} event with `to` set to the zero address.
            *
            * Requirements:
            *
            * - `account` cannot be the zero address.
            * - `account` must have at least `amount` tokens.
            */
            function _burn(address account, uint256 amount) internal virtual {
                require(account != address(0), "ERC20: burn from the zero address");

                _beforeTokenTransfer(account, address(0), amount);

                _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
                _totalSupply = _totalSupply.sub(amount);
                emit Transfer(account, address(0), amount);
            }

            /**
            * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
            *
            * This internal function is equivalent to `approve`, and can be used to
            * e.g. set automatic allowances for certain subsystems, etc.
            *
            * Emits an {Approval} event.
            *
            * Requirements:
            *
            * - `owner` cannot be the zero address.
            * - `spender` cannot be the zero address.
            */
            function _approve(
                address owner,
                address spender,
                uint256 amount
            ) internal virtual {
                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);
            }

            /**
            * @dev Hook that is called before any transfer of tokens. This includes
            * minting and burning.
            *
            * Calling conditions:
            *
            * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
            * will be to transferred to `to`.
            * - when `from` is zero, `amount` tokens will be minted for `to`.
            * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
            * - `from` and `to` are never both zero.
            *
            * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
            */
            function _beforeTokenTransfer(
                address from,
                address to,
                uint256 amount
            ) internal virtual {}
        }


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

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

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

            function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
            function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
            function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
            function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
            function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
        }

        interface IUniswapV2Router02 is IUniswapV2Router01 {
            function removeLiquidityETHSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline
            ) external returns (uint amountETH);
            function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
                address token,
                uint liquidity,
                uint amountTokenMin,
                uint amountETHMin,
                address to,
                uint deadline,
                bool approveMax, uint8 v, bytes32 r, bytes32 s
            ) external returns (uint amountETH);

            function swapExactTokensForTokensSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
            function swapExactETHForTokensSupportingFeeOnTransferTokens(
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external payable;
            function swapExactTokensForETHSupportingFeeOnTransferTokens(
                uint amountIn,
                uint amountOutMin,
                address[] calldata path,
                address to,
                uint deadline
            ) external;
        }

        contract TOKEN is ERC20, LockToken {
            using SafeMath for uint256;
            using Address for address;

            mapping (address => bool) private _isExcludedFromFee;
            address public _marketingWalletAddress;   
            address public _floorAddress;
            uint256 public _liquidityFee;
            uint256 private _previousLiquidityFee;
            uint256 public _marketingFee;
            uint256 private _previousMarketingFee;
            uint256 public _floorFee;
            uint256 private _previousFloorFee;
            IUniswapV2Router02 public uniswapV2Router;
            address public uniswapV2Pair;
            bool inSwapAndLiquify;
            bool public swapAndLiquifyEnabled = true;
            uint256 public numTokensSellToAddToLiquidity;
            uint256 public _maxWalletBalance;
            event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
            event SwapAndLiquifyEnabledUpdated(bool enabled);
            
            constructor () ERC20("colR Coin", "$colR"){


                _liquidityFee = 10;
                _previousLiquidityFee = _liquidityFee;        
                _marketingFee = 60;
                _previousMarketingFee = _marketingFee;
                _floorFee =30;
                _previousFloorFee = _floorFee;
                numTokensSellToAddToLiquidity = 50000 * 10 ** decimals();
                _maxWalletBalance = 200000 * 10 ** decimals();
                _marketingWalletAddress = 0x8A941E486772D8187B87F313a5676140842cA2b1;
                _floorAddress = 0xd281d8A332370f0D0DE52253629AcB897D1d621C;
                
                IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
                // Create a uniswap pair for this new token
                uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                    .createPair(address(this), _uniswapV2Router.WETH());

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

                /*
                    _mint is an internal function in ERC20.sol that is only called here,
                    and CANNOT be called ever again
                */
                _mint(owner(), 100000000 * 10 ** decimals());		
                
            }

            function excludeFromFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = true;
            }
            
            function includeInFee(address account) public onlyOwner {
                _isExcludedFromFee[account] = false;
            }
            
            function setLiquidityFeePercent(uint256 taxFee) external onlyOwner {
                _liquidityFee = taxFee;
            }

            function setMarketingFeePercent(uint256 devFee) external onlyOwner {
                _marketingFee = devFee;
            } 
            
            function setFloorFeePercent(uint256 floorFee) external onlyOwner {
                _floorFee = floorFee;
            }

            function setMarketingWalletAddress(address _addr) external onlyOwner {
                _marketingWalletAddress = _addr;
            }

            function setFloorWalletAddress(address _addr) external onlyOwner {
                _floorAddress = _addr;
            }
            
            function setNumTokensSellToAddToLiquidity(uint256 amount) external onlyOwner {
                numTokensSellToAddToLiquidity = amount * 10 ** decimals();
            }

            function setMaxBalance(uint256 maxBalancePercent) external onlyOwner {
                _maxWalletBalance = maxBalancePercent * 10** decimals();
            }

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

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

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

            // Withdraw stuked tokens 
            function withdrawStuckedTokens(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success){
            return IERC20(tokenAddress).transfer(msg.sender, tokens);
            }
        

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

            function _transfer(
                address from,
                address to,
                uint256 amount
            ) internal override open(from, to) {
                require(from != address(0), "ERC20: transfer from the zero address");
                require(to != address(0), "ERC20: transfer to the zero address");
                require(amount > 0, "Transfer amount must be greater than zero");
                
                if (from != owner() && to != uniswapV2Pair)
                require(
                balanceOf(to).add(amount) <= _maxWalletBalance,
                "Balance is exceeding maxWalletBalance"
                );

                uint256 contractTokenBalance = balanceOf(address(this)); 
                bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
                if (
                    overMinTokenBalance &&
                    !inSwapAndLiquify &&
                    from != uniswapV2Pair &&
                    swapAndLiquifyEnabled
                ) {
                    contractTokenBalance = numTokensSellToAddToLiquidity;
                    inSwapAndLiquify = true;
                    swapBack(contractTokenBalance);
                    inSwapAndLiquify = false;
                }
                
                if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
                super._transfer(from, to, amount);
                }
                else
                {
                    uint256 lpTokens = amount.mul(_liquidityFee).div(1000);
                    uint256 marketingTokens = amount.mul(_marketingFee).div(1000);
                    uint256 floorTokens = amount.mul(_floorFee).div(1000);
                    amount= amount.sub(lpTokens).sub(marketingTokens).sub(floorTokens);
                    super._transfer(from, address(this), lpTokens.add(floorTokens).add(marketingTokens));
                    super._transfer(from, to, amount);
                }
                
            }

            function swapBack(uint256 contractBalance) private {

                uint256 tokensForLiquidity = contractBalance.mul(_liquidityFee).div(1000);
                uint256 marketingTokens = contractBalance.mul(_marketingFee).div(1000);
                uint256 floorTokens = contractBalance.mul(_floorFee).div(1000);


                uint256 totalTokensToSwap = tokensForLiquidity + marketingTokens + floorTokens ;
                
                if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

                bool success;
                
                // Halve the amount of liquidity tokens
                uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
                
                swapTokensForEth(contractBalance - liquidityTokens); 
                
                uint256 ethBalance = address(this).balance;
                uint256 ethForLiquidity = ethBalance;

                uint256 ethForMarketing = ethBalance * marketingTokens / (totalTokensToSwap - (tokensForLiquidity/2));
                uint256 ethForFloor = ethBalance * floorTokens / (totalTokensToSwap - (tokensForLiquidity/2));

                ethForLiquidity -= ethForMarketing + ethForFloor ;
                                
                if(liquidityTokens > 0 && ethForLiquidity > 0){
                    addLiquidity(liquidityTokens, ethForLiquidity);

                }

                (success,) = address(_marketingWalletAddress).call{value: ethForMarketing}("");
                (success,) = address(_floorAddress).call{value: ethForFloor}("");

        }       

        

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

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

        function airdrop(address[] memory wallets, uint256[] memory amounts) external onlyOwner {
        require(wallets.length == amounts.length, "arrays must be the same length");
        require(wallets.length <= 200, "Can only airdrop 200 wallets per txn due to gas limits");
            
        for (uint i=0; i<wallets.length; i++) {
            address wallet = wallets[i];
            uint256 amount = amounts[i] * 10 ** decimals();
            transfer(wallet, amount);
        }
    }
        }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_floorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_floorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_users","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"includeToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","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":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"floorFee","type":"uint256"}],"name":"setFloorFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFloorWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBalancePercent","type":"uint256"}],"name":"setMaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckedFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"withdrawStuckedTokens","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff191690556013805460ff60a81b1916600160a81b1790553480156200002e57600080fd5b506040518060400160405280600981526020016831b7b6291021b7b4b760b91b815250604051806040016040528060058152602001641231b7b62960d91b8152506200007f620003f260201b60201c565b600080546001600160a01b0319166001600160a01b039290921691821781556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38151620000db90600590602085019062000517565b508051620000f190600690602084019062000517565b5050336000908152600860205260408082208054600160ff199182168117909255308452919092208054909116909117905550600a600c819055600d55603c600e819055600f55601e60108190556011556200014b601290565b6200015890600a620006d0565b620001669061c350620006e1565b601455620001776012600a620006d0565b620001869062030d40620006e1565b601555600a80546001600160a01b0319908116738a941e486772d8187b87f313a5676140842ca2b117909155600b805490911673d281d8a332370f0d0de52253629acb897d1d621c1790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91829163c45a0155916004808201926020929091908290030181865afa15801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b919062000703565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000703565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200030d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000333919062000703565b601380546001600160a01b03199081166001600160a01b039384161790915560128054909116918316919091179055600160096000620003703390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620003eb620003c76000546001600160a01b031690565b620003d56012600a620006d0565b620003e5906305f5e100620006e1565b620003f6565b506200078c565b3390565b6001600160a01b038216620004515760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b6200046d816004546200050060201b620012d31790919060201c565b6004556001600160a01b038216600090815260026020908152604090912054620004a2918390620012d362000500821b17901c565b6001600160a01b0383166000818152600260205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620004f49085815260200190565b60405180910390a35050565b60006200050e828462000735565b90505b92915050565b828054620005259062000750565b90600052602060002090601f01602090048101928262000549576000855562000594565b82601f106200056457805160ff191683800117855562000594565b8280016001018555821562000594579182015b828111156200059457825182559160200191906001019062000577565b50620005a2929150620005a6565b5090565b5b80821115620005a25760008155600101620005a7565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000614578160001904821115620005f857620005f8620005bd565b808516156200060657918102915b93841c9390800290620005d8565b509250929050565b6000826200062d5750600162000511565b816200063c5750600062000511565b8160018114620006555760028114620006605762000680565b600191505062000511565b60ff841115620006745762000674620005bd565b50506001821b62000511565b5060208310610133831016604e8410600b8410161715620006a5575081810a62000511565b620006b18383620005d3565b8060001904821115620006c857620006c8620005bd565b029392505050565b60006200050e60ff8416836200061c565b6000816000190483118215151615620006fe57620006fe620005bd565b500290565b6000602082840312156200071657600080fd5b81516001600160a01b03811681146200072e57600080fd5b9392505050565b600082198211156200074b576200074b620005bd565b500190565b600181811c908216806200076557607f821691505b6020821081036200078657634e487b7160e01b600052602260045260246000fd5b50919050565b612481806200079c6000396000f3fe6080604052600436106102555760003560e01c80635d729d8c11610139578063a457c2d7116100b6578063d12a76881161007a578063d12a768814610705578063d4a5af841461071b578063dd62ed3e14610731578063ea2f0b3714610777578063f0f165af14610797578063f2fde38b146107b757600080fd5b8063a457c2d714610665578063a9059cbb14610685578063c49b9a80146106a5578063c8f6b18b146106c5578063caea37b7146106e557600080fd5b8063715018a6116100fd578063715018a6146105dd5780638da5cb5b146105f25780638ee88c531461061057806395d89b41146106305780639d51d9b71461064557600080fd5b80635d729d8c146105315780635d8f29871461055157806367243482146105715780636bc87c3a1461059157806370a08231146105a757600080fd5b806339509351116101d2578063457c194c11610196578063457c194c1461045d57806347535d7b1461047d57806349bd5a5e146104975780634a74bb02146104b75780634cb80fd5146104d85780635342acb4146104f857600080fd5b806339509351146103bd5780634144d9e4146103dd57806341cb87fc146103fd578063437823ec1461041d57806343ce42a01461043d57600080fd5b806322976e0d1161021957806322976e0d1461032957806323b872dd1461033f5780632a3100881461035f57806330d35dee1461037f578063313ce567146103a157600080fd5b80630419c9371461026157806306fdde031461028a578063095ea7b3146102ac5780631694505e146102dc57806318160ddd1461031457600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5061027760105481565b6040519081526020015b60405180910390f35b34801561029657600080fd5b5061029f6107d7565b6040516102819190611d26565b3480156102b857600080fd5b506102cc6102c7366004611d93565b610869565b6040519015158152602001610281565b3480156102e857600080fd5b506012546102fc906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032057600080fd5b50600454610277565b34801561033557600080fd5b50610277600e5481565b34801561034b57600080fd5b506102cc61035a366004611dbf565b610880565b34801561036b57600080fd5b50600b546102fc906001600160a01b031681565b34801561038b57600080fd5b5061039f61039a366004611e0e565b6108e9565b005b3480156103ad57600080fd5b5060405160128152602001610281565b3480156103c957600080fd5b506102cc6103d8366004611d93565b61092f565b3480156103e957600080fd5b50600a546102fc906001600160a01b031681565b34801561040957600080fd5b5061039f610418366004611e2b565b610965565b34801561042957600080fd5b5061039f610438366004611e2b565b610b0a565b34801561044957600080fd5b5061039f610458366004611e2b565b610b58565b34801561046957600080fd5b5061039f610478366004611e48565b610ba4565b34801561048957600080fd5b506007546102cc9060ff1681565b3480156104a357600080fd5b506013546102fc906001600160a01b031681565b3480156104c357600080fd5b506013546102cc90600160a81b900460ff1681565b3480156104e457600080fd5b5061039f6104f3366004611e2b565b610bd3565b34801561050457600080fd5b506102cc610513366004611e2b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561053d57600080fd5b506102cc61054c366004611d93565b610c1f565b34801561055d57600080fd5b5061039f61056c366004611e61565b610cc2565b34801561057d57600080fd5b5061039f61058c366004611f70565b610d17565b34801561059d57600080fd5b50610277600c5481565b3480156105b357600080fd5b506102776105c2366004611e2b565b6001600160a01b031660009081526002602052604090205490565b3480156105e957600080fd5b5061039f610e8d565b3480156105fe57600080fd5b506000546001600160a01b03166102fc565b34801561061c57600080fd5b5061039f61062b366004611e48565b610f01565b34801561063c57600080fd5b5061029f610f30565b34801561065157600080fd5b5061039f610660366004611e48565b610f3f565b34801561067157600080fd5b506102cc610680366004611d93565b610f85565b34801561069157600080fd5b506102cc6106a0366004611d93565b610fd4565b3480156106b157600080fd5b5061039f6106c0366004611e0e565b610fe1565b3480156106d157600080fd5b5061039f6106e0366004611e48565b611063565b3480156106f157600080fd5b5061039f610700366004611e48565b611092565b34801561071157600080fd5b5061027760145481565b34801561072757600080fd5b5061027760155481565b34801561073d57600080fd5b5061027761074c366004612032565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561078357600080fd5b5061039f610792366004611e2b565b611158565b3480156107a357600080fd5b5061039f6107b2366004611e48565b6111a3565b3480156107c357600080fd5b5061039f6107d2366004611e2b565b6111e9565b6060600580546107e690612060565b80601f016020809104026020016040519081016040528092919081815260200182805461081290612060565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b5050505050905090565b60006108763384846112df565b5060015b92915050565b600061088d848484611404565b6108df84336108da856040518060600160405280602881526020016123ff602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061178e565b6112df565b5060019392505050565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526004016109139061209a565b60405180910390fd5b6007805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108769185906108da90866112d3565b6000546001600160a01b0316331461098f5760405162461bcd60e51b81526004016109139061209a565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f691906120cf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906120cf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad891906120cf565b601380546001600160a01b039283166001600160a01b0319918216179091556012805493909216921691909117905550565b6000546001600160a01b03163314610b345760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610b825760405162461bcd60e51b81526004016109139061209a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bce5760405162461bcd60e51b81526004016109139061209a565b600e55565b6000546001600160a01b03163314610bfd5760405162461bcd60e51b81526004016109139061209a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610c4a5760405162461bcd60e51b81526004016109139061209a565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906120ec565b9392505050565b6000546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d415760405162461bcd60e51b81526004016109139061209a565b8051825114610d925760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610913565b60c882511115610e035760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610913565b60005b8251811015610e88576000838281518110610e2357610e23612109565b602002602001015190506000610e37601290565b610e4290600a612219565b848481518110610e5457610e54612109565b6020026020010151610e669190612228565b9050610e728282610fd4565b5050508080610e8090612247565b915050610e06565b505050565b6000546001600160a01b03163314610eb75760405162461bcd60e51b81526004016109139061209a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b81526004016109139061209a565b600c55565b6060600680546107e690612060565b6000546001600160a01b03163314610f695760405162461bcd60e51b81526004016109139061209a565b610f756012600a612219565b610f7f9082612228565b60155550565b600061087633846108da85604051806060016040528060258152602001612427602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061178e565b6000610876338484611404565b6000546001600160a01b0316331461100b5760405162461bcd60e51b81526004016109139061209a565b60138054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061105890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461108d5760405162461bcd60e51b81526004016109139061209a565b601055565b6000546001600160a01b031633146110bc5760405162461bcd60e51b81526004016109139061209a565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611109576040519150601f19603f3d011682016040523d82523d6000602084013e61110e565b606091505b50509050806111545760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610913565b5050565b6000546001600160a01b031633146111825760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146111cd5760405162461bcd60e51b81526004016109139061209a565b6111d96012600a612219565b6111e39082612228565b60145550565b6000546001600160a01b031633146112135760405162461bcd60e51b81526004016109139061209a565b6001600160a01b0381166112785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8284612260565b6001600160a01b0383166113415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610913565b6001600160a01b0382166113a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610913565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6007548390839060ff168061143157506001600160a01b03821660009081526008602052604090205460ff165b8061145457506001600160a01b03811660009081526008602052604090205460ff165b6114975760405162461bcd60e51b8152602060048201526014602482015273102a3930b234b7339034b9903737ba1027b832b760611b6044820152606401610913565b6001600160a01b0385166114bd5760405162461bcd60e51b815260040161091390612278565b6001600160a01b0384166114e35760405162461bcd60e51b8152600401610913906122bd565b600083116115455760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610913565b6000546001600160a01b0386811691161480159061157157506013546001600160a01b03858116911614155b156115fe576015546115a28461159c876001600160a01b031660009081526002602052604090205490565b906112d3565b11156115fe5760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610913565b306000908152600260205260409020546014548110801590819061162c5750601354600160a01b900460ff16155b801561164657506013546001600160a01b03888116911614155b801561165b5750601354600160a81b900460ff165b1561168f576014546013805460ff60a01b1916600160a01b1790559150611681826117ba565b6013805460ff60a01b191690555b6001600160a01b03871660009081526009602052604090205460ff16806116ce57506001600160a01b03861660009081526009602052604090205460ff165b156116e3576116de8787876119c7565b611785565b60006117066103e8611700600c5489611ad390919063ffffffff16565b90611adf565b905060006117256103e8611700600e548a611ad390919063ffffffff16565b905060006117446103e86117006010548b611ad390919063ffffffff16565b905061175c8161175684818c88611aeb565b90611aeb565b97506117768a306117718561159c88876112d3565b6119c7565b6117818a8a8a6119c7565b5050505b50505050505050565b600081848411156117b25760405162461bcd60e51b81526004016109139190611d26565b505050900390565b60006117d76103e8611700600c5485611ad390919063ffffffff16565b905060006117f66103e8611700600e5486611ad390919063ffffffff16565b905060006118156103e861170060105487611ad390919063ffffffff16565b90506000816118248486612260565b61182e9190612260565b905084158061183b575080155b15611847575050505050565b600080600283611857888a612228565b6118619190612300565b61186b9190612300565b905061187f61187a8289612322565b611af7565b4780600061188e60028a612300565b6118989087612322565b6118a28985612228565b6118ac9190612300565b905060006118bb60028b612300565b6118c59088612322565b6118cf8986612228565b6118d99190612300565b90506118e58183612260565b6118ef9084612322565b92506000851180156119015750600083115b15611910576119108584611c51565b600a546040516001600160a01b03909116908390600081818185875af1925050503d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b5050600b546040519197506001600160a01b0316908290600081818185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b5050505050505050505050505050565b6001600160a01b0383166119ed5760405162461bcd60e51b815260040161091390612278565b6001600160a01b038216611a135760405162461bcd60e51b8152600401610913906122bd565b611a50816040518060600160405280602681526020016123d9602691396001600160a01b038616600090815260026020526040902054919061178e565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611a7f90826112d3565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113f79085815260200190565b6000610cbb8284612228565b6000610cbb8284612300565b6000610cbb8284612322565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2c57611b2c612109565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba991906120cf565b81600181518110611bbc57611bbc612109565b6001600160a01b039283166020918202929092010152601254611be291309116846112df565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c1b908590600090869030904290600401612339565b600060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050505050565b601254611c699030906001600160a01b0316846112df565b6012546001600160a01b031663f305d719823085600080611c926000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611cfa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d1f91906123aa565b5050505050565b600060208083528351808285015260005b81811015611d5357858101830151858201604001528201611d37565b81811115611d65576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d9057600080fd5b50565b60008060408385031215611da657600080fd5b8235611db181611d7b565b946020939093013593505050565b600080600060608486031215611dd457600080fd5b8335611ddf81611d7b565b92506020840135611def81611d7b565b929592945050506040919091013590565b8015158114611d9057600080fd5b600060208284031215611e2057600080fd5b8135610cbb81611e00565b600060208284031215611e3d57600080fd5b8135610cbb81611d7b565b600060208284031215611e5a57600080fd5b5035919050565b60008060408385031215611e7457600080fd5b8235611e7f81611d7b565b91506020830135611e8f81611e00565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ed957611ed9611e9a565b604052919050565b600067ffffffffffffffff821115611efb57611efb611e9a565b5060051b60200190565b600082601f830112611f1657600080fd5b81356020611f2b611f2683611ee1565b611eb0565b82815260059290921b84018101918181019086841115611f4a57600080fd5b8286015b84811015611f655780358352918301918301611f4e565b509695505050505050565b60008060408385031215611f8357600080fd5b823567ffffffffffffffff80821115611f9b57600080fd5b818501915085601f830112611faf57600080fd5b81356020611fbf611f2683611ee1565b82815260059290921b84018101918181019089841115611fde57600080fd5b948201945b83861015612005578535611ff681611d7b565b82529482019490820190611fe3565b9650508601359250508082111561201b57600080fd5b5061202885828601611f05565b9150509250929050565b6000806040838503121561204557600080fd5b823561205081611d7b565b91506020830135611e8f81611d7b565b600181811c9082168061207457607f821691505b60208210810361209457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156120e157600080fd5b8151610cbb81611d7b565b6000602082840312156120fe57600080fd5b8151610cbb81611e00565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156121705781600019048211156121565761215661211f565b8085161561216357918102915b93841c939080029061213a565b509250929050565b6000826121875750600161087a565b816121945750600061087a565b81600181146121aa57600281146121b4576121d0565b600191505061087a565b60ff8411156121c5576121c561211f565b50506001821b61087a565b5060208310610133831016604e8410600b84101617156121f3575081810a61087a565b6121fd8383612135565b80600019048211156122115761221161211f565b029392505050565b6000610cbb60ff841683612178565b60008160001904831182151516156122425761224261211f565b500290565b6000600182016122595761225961211f565b5060010190565b600082198211156122735761227361211f565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261231d57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156123345761233461211f565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123895784516001600160a01b031683529383019391830191600101612364565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123bf57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016bc820567ca6081c6f3c0f0810e5e5553eda1f1a8eea9027607b2e4973939a264736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80635d729d8c11610139578063a457c2d7116100b6578063d12a76881161007a578063d12a768814610705578063d4a5af841461071b578063dd62ed3e14610731578063ea2f0b3714610777578063f0f165af14610797578063f2fde38b146107b757600080fd5b8063a457c2d714610665578063a9059cbb14610685578063c49b9a80146106a5578063c8f6b18b146106c5578063caea37b7146106e557600080fd5b8063715018a6116100fd578063715018a6146105dd5780638da5cb5b146105f25780638ee88c531461061057806395d89b41146106305780639d51d9b71461064557600080fd5b80635d729d8c146105315780635d8f29871461055157806367243482146105715780636bc87c3a1461059157806370a08231146105a757600080fd5b806339509351116101d2578063457c194c11610196578063457c194c1461045d57806347535d7b1461047d57806349bd5a5e146104975780634a74bb02146104b75780634cb80fd5146104d85780635342acb4146104f857600080fd5b806339509351146103bd5780634144d9e4146103dd57806341cb87fc146103fd578063437823ec1461041d57806343ce42a01461043d57600080fd5b806322976e0d1161021957806322976e0d1461032957806323b872dd1461033f5780632a3100881461035f57806330d35dee1461037f578063313ce567146103a157600080fd5b80630419c9371461026157806306fdde031461028a578063095ea7b3146102ac5780631694505e146102dc57806318160ddd1461031457600080fd5b3661025c57005b600080fd5b34801561026d57600080fd5b5061027760105481565b6040519081526020015b60405180910390f35b34801561029657600080fd5b5061029f6107d7565b6040516102819190611d26565b3480156102b857600080fd5b506102cc6102c7366004611d93565b610869565b6040519015158152602001610281565b3480156102e857600080fd5b506012546102fc906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561032057600080fd5b50600454610277565b34801561033557600080fd5b50610277600e5481565b34801561034b57600080fd5b506102cc61035a366004611dbf565b610880565b34801561036b57600080fd5b50600b546102fc906001600160a01b031681565b34801561038b57600080fd5b5061039f61039a366004611e0e565b6108e9565b005b3480156103ad57600080fd5b5060405160128152602001610281565b3480156103c957600080fd5b506102cc6103d8366004611d93565b61092f565b3480156103e957600080fd5b50600a546102fc906001600160a01b031681565b34801561040957600080fd5b5061039f610418366004611e2b565b610965565b34801561042957600080fd5b5061039f610438366004611e2b565b610b0a565b34801561044957600080fd5b5061039f610458366004611e2b565b610b58565b34801561046957600080fd5b5061039f610478366004611e48565b610ba4565b34801561048957600080fd5b506007546102cc9060ff1681565b3480156104a357600080fd5b506013546102fc906001600160a01b031681565b3480156104c357600080fd5b506013546102cc90600160a81b900460ff1681565b3480156104e457600080fd5b5061039f6104f3366004611e2b565b610bd3565b34801561050457600080fd5b506102cc610513366004611e2b565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561053d57600080fd5b506102cc61054c366004611d93565b610c1f565b34801561055d57600080fd5b5061039f61056c366004611e61565b610cc2565b34801561057d57600080fd5b5061039f61058c366004611f70565b610d17565b34801561059d57600080fd5b50610277600c5481565b3480156105b357600080fd5b506102776105c2366004611e2b565b6001600160a01b031660009081526002602052604090205490565b3480156105e957600080fd5b5061039f610e8d565b3480156105fe57600080fd5b506000546001600160a01b03166102fc565b34801561061c57600080fd5b5061039f61062b366004611e48565b610f01565b34801561063c57600080fd5b5061029f610f30565b34801561065157600080fd5b5061039f610660366004611e48565b610f3f565b34801561067157600080fd5b506102cc610680366004611d93565b610f85565b34801561069157600080fd5b506102cc6106a0366004611d93565b610fd4565b3480156106b157600080fd5b5061039f6106c0366004611e0e565b610fe1565b3480156106d157600080fd5b5061039f6106e0366004611e48565b611063565b3480156106f157600080fd5b5061039f610700366004611e48565b611092565b34801561071157600080fd5b5061027760145481565b34801561072757600080fd5b5061027760155481565b34801561073d57600080fd5b5061027761074c366004612032565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561078357600080fd5b5061039f610792366004611e2b565b611158565b3480156107a357600080fd5b5061039f6107b2366004611e48565b6111a3565b3480156107c357600080fd5b5061039f6107d2366004611e2b565b6111e9565b6060600580546107e690612060565b80601f016020809104026020016040519081016040528092919081815260200182805461081290612060565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b5050505050905090565b60006108763384846112df565b5060015b92915050565b600061088d848484611404565b6108df84336108da856040518060600160405280602881526020016123ff602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061178e565b6112df565b5060019392505050565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526004016109139061209a565b60405180910390fd5b6007805460ff1916911515919091179055565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108769185906108da90866112d3565b6000546001600160a01b0316331461098f5760405162461bcd60e51b81526004016109139061209a565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f691906120cf565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6791906120cf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad891906120cf565b601380546001600160a01b039283166001600160a01b0319918216179091556012805493909216921691909117905550565b6000546001600160a01b03163314610b345760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610b825760405162461bcd60e51b81526004016109139061209a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610bce5760405162461bcd60e51b81526004016109139061209a565b600e55565b6000546001600160a01b03163314610bfd5760405162461bcd60e51b81526004016109139061209a565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600080546001600160a01b03163314610c4a5760405162461bcd60e51b81526004016109139061209a565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbb91906120ec565b9392505050565b6000546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d415760405162461bcd60e51b81526004016109139061209a565b8051825114610d925760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610913565b60c882511115610e035760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610913565b60005b8251811015610e88576000838281518110610e2357610e23612109565b602002602001015190506000610e37601290565b610e4290600a612219565b848481518110610e5457610e54612109565b6020026020010151610e669190612228565b9050610e728282610fd4565b5050508080610e8090612247565b915050610e06565b505050565b6000546001600160a01b03163314610eb75760405162461bcd60e51b81526004016109139061209a565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f2b5760405162461bcd60e51b81526004016109139061209a565b600c55565b6060600680546107e690612060565b6000546001600160a01b03163314610f695760405162461bcd60e51b81526004016109139061209a565b610f756012600a612219565b610f7f9082612228565b60155550565b600061087633846108da85604051806060016040528060258152602001612427602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061178e565b6000610876338484611404565b6000546001600160a01b0316331461100b5760405162461bcd60e51b81526004016109139061209a565b60138054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061105890831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461108d5760405162461bcd60e51b81526004016109139061209a565b601055565b6000546001600160a01b031633146110bc5760405162461bcd60e51b81526004016109139061209a565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114611109576040519150601f19603f3d011682016040523d82523d6000602084013e61110e565b606091505b50509050806111545760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610913565b5050565b6000546001600160a01b031633146111825760405162461bcd60e51b81526004016109139061209a565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146111cd5760405162461bcd60e51b81526004016109139061209a565b6111d96012600a612219565b6111e39082612228565b60145550565b6000546001600160a01b031633146112135760405162461bcd60e51b81526004016109139061209a565b6001600160a01b0381166112785760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cbb8284612260565b6001600160a01b0383166113415760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610913565b6001600160a01b0382166113a25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610913565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6007548390839060ff168061143157506001600160a01b03821660009081526008602052604090205460ff165b8061145457506001600160a01b03811660009081526008602052604090205460ff165b6114975760405162461bcd60e51b8152602060048201526014602482015273102a3930b234b7339034b9903737ba1027b832b760611b6044820152606401610913565b6001600160a01b0385166114bd5760405162461bcd60e51b815260040161091390612278565b6001600160a01b0384166114e35760405162461bcd60e51b8152600401610913906122bd565b600083116115455760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610913565b6000546001600160a01b0386811691161480159061157157506013546001600160a01b03858116911614155b156115fe576015546115a28461159c876001600160a01b031660009081526002602052604090205490565b906112d3565b11156115fe5760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610913565b306000908152600260205260409020546014548110801590819061162c5750601354600160a01b900460ff16155b801561164657506013546001600160a01b03888116911614155b801561165b5750601354600160a81b900460ff165b1561168f576014546013805460ff60a01b1916600160a01b1790559150611681826117ba565b6013805460ff60a01b191690555b6001600160a01b03871660009081526009602052604090205460ff16806116ce57506001600160a01b03861660009081526009602052604090205460ff165b156116e3576116de8787876119c7565b611785565b60006117066103e8611700600c5489611ad390919063ffffffff16565b90611adf565b905060006117256103e8611700600e548a611ad390919063ffffffff16565b905060006117446103e86117006010548b611ad390919063ffffffff16565b905061175c8161175684818c88611aeb565b90611aeb565b97506117768a306117718561159c88876112d3565b6119c7565b6117818a8a8a6119c7565b5050505b50505050505050565b600081848411156117b25760405162461bcd60e51b81526004016109139190611d26565b505050900390565b60006117d76103e8611700600c5485611ad390919063ffffffff16565b905060006117f66103e8611700600e5486611ad390919063ffffffff16565b905060006118156103e861170060105487611ad390919063ffffffff16565b90506000816118248486612260565b61182e9190612260565b905084158061183b575080155b15611847575050505050565b600080600283611857888a612228565b6118619190612300565b61186b9190612300565b905061187f61187a8289612322565b611af7565b4780600061188e60028a612300565b6118989087612322565b6118a28985612228565b6118ac9190612300565b905060006118bb60028b612300565b6118c59088612322565b6118cf8986612228565b6118d99190612300565b90506118e58183612260565b6118ef9084612322565b92506000851180156119015750600083115b15611910576119108584611c51565b600a546040516001600160a01b03909116908390600081818185875af1925050503d806000811461195d576040519150601f19603f3d011682016040523d82523d6000602084013e611962565b606091505b5050600b546040519197506001600160a01b0316908290600081818185875af1925050503d80600081146119b2576040519150601f19603f3d011682016040523d82523d6000602084013e6119b7565b606091505b5050505050505050505050505050565b6001600160a01b0383166119ed5760405162461bcd60e51b815260040161091390612278565b6001600160a01b038216611a135760405162461bcd60e51b8152600401610913906122bd565b611a50816040518060600160405280602681526020016123d9602691396001600160a01b038616600090815260026020526040902054919061178e565b6001600160a01b038085166000908152600260205260408082209390935590841681522054611a7f90826112d3565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113f79085815260200190565b6000610cbb8284612228565b6000610cbb8284612300565b6000610cbb8284612322565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611b2c57611b2c612109565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba991906120cf565b81600181518110611bbc57611bbc612109565b6001600160a01b039283166020918202929092010152601254611be291309116846112df565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790611c1b908590600090869030904290600401612339565b600060405180830381600087803b158015611c3557600080fd5b505af1158015611c49573d6000803e3d6000fd5b505050505050565b601254611c699030906001600160a01b0316846112df565b6012546001600160a01b031663f305d719823085600080611c926000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611cfa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d1f91906123aa565b5050505050565b600060208083528351808285015260005b81811015611d5357858101830151858201604001528201611d37565b81811115611d65576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d9057600080fd5b50565b60008060408385031215611da657600080fd5b8235611db181611d7b565b946020939093013593505050565b600080600060608486031215611dd457600080fd5b8335611ddf81611d7b565b92506020840135611def81611d7b565b929592945050506040919091013590565b8015158114611d9057600080fd5b600060208284031215611e2057600080fd5b8135610cbb81611e00565b600060208284031215611e3d57600080fd5b8135610cbb81611d7b565b600060208284031215611e5a57600080fd5b5035919050565b60008060408385031215611e7457600080fd5b8235611e7f81611d7b565b91506020830135611e8f81611e00565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ed957611ed9611e9a565b604052919050565b600067ffffffffffffffff821115611efb57611efb611e9a565b5060051b60200190565b600082601f830112611f1657600080fd5b81356020611f2b611f2683611ee1565b611eb0565b82815260059290921b84018101918181019086841115611f4a57600080fd5b8286015b84811015611f655780358352918301918301611f4e565b509695505050505050565b60008060408385031215611f8357600080fd5b823567ffffffffffffffff80821115611f9b57600080fd5b818501915085601f830112611faf57600080fd5b81356020611fbf611f2683611ee1565b82815260059290921b84018101918181019089841115611fde57600080fd5b948201945b83861015612005578535611ff681611d7b565b82529482019490820190611fe3565b9650508601359250508082111561201b57600080fd5b5061202885828601611f05565b9150509250929050565b6000806040838503121561204557600080fd5b823561205081611d7b565b91506020830135611e8f81611d7b565b600181811c9082168061207457607f821691505b60208210810361209457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000602082840312156120e157600080fd5b8151610cbb81611d7b565b6000602082840312156120fe57600080fd5b8151610cbb81611e00565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156121705781600019048211156121565761215661211f565b8085161561216357918102915b93841c939080029061213a565b509250929050565b6000826121875750600161087a565b816121945750600061087a565b81600181146121aa57600281146121b4576121d0565b600191505061087a565b60ff8411156121c5576121c561211f565b50506001821b61087a565b5060208310610133831016604e8410600b84101617156121f3575081810a61087a565b6121fd8383612135565b80600019048211156122115761221161211f565b029392505050565b6000610cbb60ff841683612178565b60008160001904831182151516156122425761224261211f565b500290565b6000600182016122595761225961211f565b5060010190565b600082198211156122735761227361211f565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261231d57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156123345761233461211f565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123895784516001600160a01b031683529383019391830191600101612364565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123bf57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016bc820567ca6081c6f3c0f0810e5e5553eda1f1a8eea9027607b2e4973939a264736f6c634300080d0033

Deployed Bytecode Sourcemap

31508:10814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31997:24;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;31997:24:0;;;;;;;;11819:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;14456:193::-;;;;;;;;;;-1:-1:-1;14456:193:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;14456:193:0;1254:187:1;32084:41:0;;;;;;;;;;-1:-1:-1;32084:41:0;;;;-1:-1:-1;;;;;32084:41:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;32084:41:0;1446:230:1;13154:124:0;;;;;;;;;;-1:-1:-1;13250:12:0;;13154:124;;31902:28;;;;;;;;;;;;;;;;15231:419;;;;;;;;;;-1:-1:-1;15231:419:0;;;;;:::i;:::-;;:::i;31764:28::-;;;;;;;;;;-1:-1:-1;31764:28:0;;;;-1:-1:-1;;;;;31764:28:0;;;10026:91;;;;;;;;;;-1:-1:-1;10026:91:0;;;;;:::i;:::-;;:::i;:::-;;12950:109;;;;;;;;;;-1:-1:-1;12950:109:0;;13041:2;2861:36:1;;2849:2;2834:18;12950:109:0;2719:184:1;16152:242:0;;;;;;;;;;-1:-1:-1;16152:242:0;;;;;:::i;:::-;;:::i;31708:38::-;;;;;;;;;;-1:-1:-1;31708:38:0;;;;-1:-1:-1;;;;;31708:38:0;;;35528:350;;;;;;;;;;-1:-1:-1;35528:350:0;;;;;:::i;:::-;;:::i;34130:127::-;;;;;;;;;;-1:-1:-1;34130:127:0;;;;;:::i;:::-;;:::i;35019:121::-;;;;;;;;;;-1:-1:-1;35019:121:0;;;;;:::i;:::-;;:::i;34579:124::-;;;;;;;;;;-1:-1:-1;34579:124:0;;;;;:::i;:::-;;:::i;9634:26::-;;;;;;;;;;-1:-1:-1;9634:26:0;;;;;;;;32140:28;;;;;;;;;;-1:-1:-1;32140:28:0;;;;-1:-1:-1;;;;;32140:28:0;;;32219:40;;;;;;;;;;-1:-1:-1;32219:40:0;;;;-1:-1:-1;;;32219:40:0;;;;;;34868:135;;;;;;;;;;-1:-1:-1;34868:135:0;;;;;:::i;:::-;;:::i;36814:139::-;;;;;;;;;;-1:-1:-1;36814:139:0;;;;;:::i;:::-;-1:-1:-1;;;;;36910:27:0;36878:4;36910:27;;;:18;:27;;;;;;;;;36814:139;36591:197;;;;;;;;;;-1:-1:-1;36591:197:0;;;;;:::i;:::-;;:::i;10129:148::-;;;;;;;;;;-1:-1:-1;10129:148:0;;;;;:::i;:::-;;:::i;41814:497::-;;;;;;;;;;-1:-1:-1;41814:497:0;;;;;:::i;:::-;;:::i;31807:28::-;;;;;;;;;;;;;;;;13371:143;;;;;;;;;;-1:-1:-1;13371:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13480:18:0;13445:7;13480:18;;;:9;:18;;;;;;;13371:143;9102:172;;;;;;;;;;;;;:::i;8799:103::-;;;;;;;;;;-1:-1:-1;8845:7:0;8880:6;-1:-1:-1;;;;;8880:6:0;8799:103;;34439:124;;;;;;;;;;-1:-1:-1;34439:124:0;;;;;:::i;:::-;;:::i;12091:120::-;;;;;;;;;;;;;:::i;35353:159::-;;;;;;;;;;-1:-1:-1;35353:159:0;;;;;:::i;:::-;;:::i;17004:293::-;;;;;;;;;;-1:-1:-1;17004:293:0;;;;;:::i;:::-;;:::i;13792:199::-;;;;;;;;;;-1:-1:-1;13792:199:0;;;;;:::i;:::-;;:::i;35894:197::-;;;;;;;;;;-1:-1:-1;35894:197:0;;;;;:::i;:::-;;:::i;34732:120::-;;;;;;;;;;-1:-1:-1;34732:120:0;;;;;:::i;:::-;;:::i;36269:266::-;;;;;;;;;;-1:-1:-1;36269:266:0;;;;;:::i;:::-;;:::i;32274:44::-;;;;;;;;;;;;;;;;32333:32;;;;;;;;;;;;;;;;14084:167;;;;;;;;;;-1:-1:-1;14084:167:0;;;;;:::i;:::-;-1:-1:-1;;;;;14208:18:0;;;14173:7;14208:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14084:167;34285:126;;;;;;;;;;-1:-1:-1;34285:126:0;;;;;:::i;:::-;;:::i;35168:169::-;;;;;;;;;;-1:-1:-1;35168:169:0;;;;;:::i;:::-;;:::i;9292:276::-;;;;;;;;;;-1:-1:-1;9292:276:0;;;;;:::i;:::-;;:::i;11819:116::-;11873:13;11914:5;11907:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11819:116;:::o;14456:193::-;14539:4;14564:39;4225:10;14587:7;14596:6;14564:8;:39::i;:::-;-1:-1:-1;14629:4:0;14456:193;;;;;:::o;15231:419::-;15403:4;15428:36;15438:6;15446:9;15457:6;15428:9;:36::i;:::-;15483:121;15492:6;4225:10;15514:89;15552:6;15514:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15514:19:0;;;;;;:11;:19;;;;;;;;4225:10;15514:33;;;;;;;;;;:37;:89::i;:::-;15483:8;:121::i;:::-;-1:-1:-1;15630:4:0;15231:419;;;;;:::o;10026:91::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;;;;;;;;;10091:6:::1;:14:::0;;-1:-1:-1;;10091:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10026:91::o;16152:242::-;4225:10;16240:4;16297:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16297:34:0;;;;;;;;;;16240:4;;16265:83;;16288:7;;16297:50;;16336:10;16297:38;:50::i;35528:350::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35611:35:::1;35668:9;35611:67;;35731:16;-1:-1:-1::0;;;;;35731:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35713:56:0::1;;35778:4;35785:16;-1:-1:-1::0;;;;;35785:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35713:96;::::0;-1:-1:-1;;;;;;35713:96:0::1;::::0;;;;;;-1:-1:-1;;;;;7844:15:1;;;35713:96:0::1;::::0;::::1;7826:34:1::0;7896:15;;7876:18;;;7869:43;7761:18;;35713:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35697:13;:112:::0;;-1:-1:-1;;;;;35697:112:0;;::::1;-1:-1:-1::0;;;;;;35697:112:0;;::::1;;::::0;;;35828:15:::1;:34:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;35528:350:0:o;34130:127::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34207:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34207:34:0::1;34237:4;34207:34;::::0;;34130:127::o;35019:121::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35103:13:::1;:21:::0;;-1:-1:-1;;;;;;35103:21:0::1;-1:-1:-1::0;;;;;35103:21:0;;;::::1;::::0;;;::::1;::::0;;35019:121::o;34579:124::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34665:13:::1;:22:::0;34579:124::o;34868:135::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34956:23:::1;:31:::0;;-1:-1:-1;;;;;;34956:31:0::1;-1:-1:-1::0;;;;;34956:31:0;;;::::1;::::0;;;::::1;::::0;;34868:135::o;36591:197::-;36688:12;8880:6;;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36723:49:::1;::::0;-1:-1:-1;;;36723:49:0;;36753:10:::1;36723:49;::::0;::::1;8097:51:1::0;8164:18;;;8157:34;;;-1:-1:-1;;;;;36723:29:0;::::1;::::0;::::1;::::0;8070:18:1;;36723:49:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36716:56:::0;36591:197;-1:-1:-1;;;36591:197:0:o;10129:148::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10234:18:0;;;::::1;;::::0;;;:10:::1;:18;::::0;;;;:31;;-1:-1:-1;;10234:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10129:148::o;41814:497::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;41939:7:::1;:14;41921:7;:14;:32;41913:75;;;::::0;-1:-1:-1;;;41913:75:0;;8654:2:1;41913:75:0::1;::::0;::::1;8636:21:1::0;8693:2;8673:18;;;8666:30;8732:32;8712:18;;;8705:60;8782:18;;41913:75:0::1;8452:354:1::0;41913:75:0::1;42025:3;42007:7;:14;:21;;41999:88;;;::::0;-1:-1:-1;;;41999:88:0;;9013:2:1;41999:88:0::1;::::0;::::1;8995:21:1::0;9052:2;9032:18;;;9025:30;9091:34;9071:18;;;9064:62;-1:-1:-1;;;9142:18:1;;;9135:52;9204:19;;41999:88:0::1;8811:418:1::0;41999:88:0::1;42117:6;42112:192;42129:7;:14;42127:1;:16;42112:192;;;42165:14;42182:7;42190:1;42182:10;;;;;;;;:::i;:::-;;;;;;;42165:27;;42207:14;42243:10;13041:2:::0;;12950:109;42243:10:::1;42237:16;::::0;:2:::1;:16;:::i;:::-;42224:7;42232:1;42224:10;;;;;;;;:::i;:::-;;;;;;;:29;;;;:::i;:::-;42207:46;;42268:24;42277:6;42285;42268:8;:24::i;:::-;;42150:154;;42145:3;;;;;:::i;:::-;;;;42112:192;;;;41814:497:::0;;:::o;9102:172::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;9217:1:::1;9201:6:::0;;9180:40:::1;::::0;-1:-1:-1;;;;;9201:6:0;;::::1;::::0;9180:40:::1;::::0;9217:1;;9180:40:::1;9256:1;9239:19:::0;;-1:-1:-1;;;;;;9239:19:0::1;::::0;;9102:172::o;34439:124::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34525:13:::1;:22:::0;34439:124::o;12091:120::-;12147:13;12188:7;12181:14;;;;;:::i;35353:159::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35481:15:::1;13041:2:::0;35481::::1;:15;:::i;:::-;35461:35;::::0;:17;:35:::1;:::i;:::-;35441:17;:55:::0;-1:-1:-1;35353:159:0:o;17004:293::-;17097:4;17122:129;4225:10;17145:7;17154:96;17193:15;17154:96;;;;;;;;;;;;;;;;;4225:10;17154:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17154:34:0;;;;;;;;;;;;:38;:96::i;13792:199::-;13878:4;13903:42;4225:10;13927:9;13938:6;13903:9;:42::i;35894:197::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35981:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35981:32:0::1;-1:-1:-1::0;;;;35981:32:0;;::::1;;::::0;;36037:38:::1;::::0;::::1;::::0;::::1;::::0;36005:8;1419:14:1;1412:22;1394:41;;1382:2;1367:18;;1254:187;36037:38:0::1;;;;;;;;35894:197:::0;:::o;34732:120::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;34816:9:::1;:20:::0;34732:120::o;36269:266::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;36417:9:::1;36431:6:::0;;:30:::1;::::0;-1:-1:-1;;;;;36431:6:0;;::::1;::::0;36450;;36417:9;36431:30;36417:9;36431:30;36450:6;36431;:30:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36416:45;;;36488:4;36480:35;;;::::0;-1:-1:-1;;;36480:35:0;;11606:2:1;36480:35:0::1;::::0;::::1;11588:21:1::0;11645:2;11625:18;;;11618:30;-1:-1:-1;;;11664:18:1;;;11657:48;11722:18;;36480:35:0::1;11404:342:1::0;36480:35:0::1;36330:205;36269:266:::0;:::o;34285:126::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34360:27:0::1;34390:5;34360:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34360:35:0::1;::::0;;34285:126::o;35168:169::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;35305:16:::1;13041:2:::0;35305::::1;:16;:::i;:::-;35296:25;::::0;:6;:25:::1;:::i;:::-;35264:29;:57:::0;-1:-1:-1;35168:169:0:o;9292:276::-;8845:7;8880:6;-1:-1:-1;;;;;8880:6:0;4225:10;8978:23;8970:68;;;;-1:-1:-1;;;8970:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9389:22:0;::::1;9381:73;;;::::0;-1:-1:-1;;;9381:73:0;;11953:2:1;9381:73:0::1;::::0;::::1;11935:21:1::0;11992:2;11972:18;;;11965:30;12031:34;12011:18;;;12004:62;-1:-1:-1;;;12082:18:1;;;12075:36;12128:19;;9381:73:0::1;11751:402:1::0;9381:73:0::1;9499:6;::::0;;9478:38:::1;::::0;-1:-1:-1;;;;;9478:38:0;;::::1;::::0;9499:6;::::1;::::0;9478:38:::1;::::0;::::1;9535:6;:17:::0;;-1:-1:-1;;;;;;9535:17:0::1;-1:-1:-1::0;;;;;9535:17:0;;;::::1;::::0;;;::::1;::::0;;9292:276::o;2601:114::-;2659:7;2694:5;2698:1;2694;:5;:::i;20763:452::-;-1:-1:-1;;;;;20939:19:0;;20931:68;;;;-1:-1:-1;;;20931:68:0;;12493:2:1;20931:68:0;;;12475:21:1;12532:2;12512:18;;;12505:30;12571:34;12551:18;;;12544:62;-1:-1:-1;;;12622:18:1;;;12615:34;12666:19;;20931:68:0;12291:400:1;20931:68:0;-1:-1:-1;;;;;21026:21:0;;21018:68;;;;-1:-1:-1;;;21018:68:0;;12898:2:1;21018:68:0;;;12880:21:1;12937:2;12917:18;;;12910:30;12976:34;12956:18;;;12949:62;-1:-1:-1;;;13027:18:1;;;13020:32;13069:19;;21018:68:0;12696:398:1;21018:68:0;-1:-1:-1;;;;;21107:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21167:32;;160:25:1;;;21167:32:0;;133:18:1;21167:32:0;;;;;;;;20763:452;;;:::o;36969:2039::-;9788:6;;37119:4;;37125:2;;9788:6;;;:26;;-1:-1:-1;;;;;;9798:16:0;;;;;;:10;:16;;;;;;;;9788:26;:44;;;-1:-1:-1;;;;;;9818:14:0;;;;;;:10;:14;;;;;;;;9788:44;9780:77;;;;-1:-1:-1;;;9780:77:0;;13301:2:1;9780:77:0;;;13283:21:1;13340:2;13320:18;;;13313:30;-1:-1:-1;;;13359:18:1;;;13352:50;13419:18;;9780:77:0;13099:344:1;9780:77:0;-1:-1:-1;;;;;37156:18:0;::::1;37148:68;;;;-1:-1:-1::0;;;37148:68:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37243:16:0;::::1;37235:64;;;;-1:-1:-1::0;;;37235:64:0::1;;;;;;;:::i;:::-;37335:1;37326:6;:10;37318:64;;;::::0;-1:-1:-1;;;37318:64:0;;14460:2:1;37318:64:0::1;::::0;::::1;14442:21:1::0;14499:2;14479:18;;;14472:30;14538:34;14518:18;;;14511:62;-1:-1:-1;;;14589:18:1;;;14582:39;14638:19;;37318:64:0::1;14258:405:1::0;37318:64:0::1;8845:7:::0;8880:6;-1:-1:-1;;;;;37423:15:0;;::::1;8880:6:::0;;37423:15:::1;::::0;::::1;::::0;:38:::1;;-1:-1:-1::0;37448:13:0::1;::::0;-1:-1:-1;;;;;37442:19:0;;::::1;37448:13:::0;::::1;37442:19;;37423:38;37419:210;;;37535:17;;37506:25;37524:6;37506:13;37516:2;-1:-1:-1::0;;;;;13480:18:0;13445:7;13480:18;;;:9;:18;;;;;;;13371:143;37506:13:::1;:17:::0;::::1;:25::i;:::-;:46;;37480:149;;;::::0;-1:-1:-1;;;37480:149:0;;14870:2:1;37480:149:0::1;::::0;::::1;14852:21:1::0;14909:2;14889:18;;;14882:30;14948:34;14928:18;;;14921:62;-1:-1:-1;;;14999:18:1;;;14992:35;15044:19;;37480:149:0::1;14668:401:1::0;37480:149:0::1;37699:4;37650:28;13480:18:::0;;;:9;:18;;;;;;37776:29:::1;::::0;37752:53;::::1;::::0;::::1;::::0;;;37850:61:::1;;-1:-1:-1::0;37895:16:0::1;::::0;-1:-1:-1;;;37895:16:0;::::1;;;37894:17;37850:61;:107;;;;-1:-1:-1::0;37944:13:0::1;::::0;-1:-1:-1;;;;;37936:21:0;;::::1;37944:13:::0;::::1;37936:21;;37850:107;:153;;;;-1:-1:-1::0;37982:21:0::1;::::0;-1:-1:-1;;;37982:21:0;::::1;;;37850:153;37824:440;;;38069:29;::::0;38121:16:::1;:23:::0;;-1:-1:-1;;;;38121:23:0::1;-1:-1:-1::0;;;38121:23:0::1;::::0;;38069:29;-1:-1:-1;38167:30:0::1;38069:29:::0;38167:8:::1;:30::i;:::-;38220:16;:24:::0;;-1:-1:-1;;;;38220:24:0::1;::::0;;37824:440:::1;-1:-1:-1::0;;;;;38303:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;38331:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;38303:50;38300:675;;;38373:33;38389:4;38395:2;38399:6;38373:15;:33::i;:::-;38300:675;;;38489:16;38508:35;38538:4;38508:25;38519:13;;38508:6;:10;;:25;;;;:::i;:::-;:29:::0;::::1;:35::i;:::-;38489:54;;38566:23;38592:35;38622:4;38592:25;38603:13;;38592:6;:10;;:25;;;;:::i;:35::-;38566:61;;38650:19;38672:31;38698:4;38672:21;38683:9;;38672:6;:10;;:21;;;;:::i;:31::-;38650:53:::0;-1:-1:-1;38734:58:0::1;38650:53:::0;38734:41:::1;38759:15:::0;38734:41;:6;38745:8;38734:10:::1;:20::i;:::-;:24:::0;::::1;:41::i;:58::-;38726:66:::0;-1:-1:-1;38815:84:0::1;38831:4:::0;38845::::1;38852:46;38882:15:::0;38852:25:::1;:8:::0;38865:11;38852:12:::1;:25::i;:46::-;38815:15;:84::i;:::-;38922:33;38938:4;38944:2;38948:6;38922:15;:33::i;:::-;38466:509;;;38300:675;37129:1879;;36969:2039:::0;;;;;:::o;3281:246::-;3367:7;3444:12;3436:6;;;;3428:29;;;;-1:-1:-1;;;3428:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3487:5:0;;;3281:246::o;39024:1638::-;39096:26;39125:44;39164:4;39125:34;39145:13;;39125:15;:19;;:34;;;;:::i;:44::-;39096:73;;39188:23;39214:44;39253:4;39214:34;39234:13;;39214:15;:19;;:34;;;;:::i;:44::-;39188:70;;39277:19;39299:40;39334:4;39299:30;39319:9;;39299:15;:19;;:30;;;;:::i;:40::-;39277:62;-1:-1:-1;39362:25:0;39277:62;39390:36;39411:15;39390:18;:36;:::i;:::-;:50;;;;:::i;:::-;39362:78;-1:-1:-1;39481:20:0;;;:46;;-1:-1:-1;39505:22:0;;39481:46;39478:60;;;39530:7;;;;39024:1638;:::o;39478:60::-;39558:12;;39749:1;39729:17;39690:36;39708:18;39690:15;:36;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;39664:86;-1:-1:-1;39787:51:0;39804:33;39664:86;39804:15;:33;:::i;:::-;39787:16;:51::i;:::-;39897:21;;39876:18;40073:20;40092:1;40073:18;:20;:::i;:::-;40052:42;;:17;:42;:::i;:::-;40020:28;40033:15;40020:10;:28;:::i;:::-;:75;;;;:::i;:::-;39994:101;-1:-1:-1;40114:19:0;40185:20;40204:1;40185:18;:20;:::i;:::-;40164:42;;:17;:42;:::i;:::-;40136:24;40149:11;40136:10;:24;:::i;:::-;:71;;;;:::i;:::-;40114:93;-1:-1:-1;40247:29:0;40114:93;40247:15;:29;:::i;:::-;40228:48;;;;:::i;:::-;;;40351:1;40333:15;:19;:42;;;;;40374:1;40356:15;:19;40333:42;40330:137;;;40399:46;40412:15;40429;40399:12;:46::i;:::-;40508:23;;40500:65;;-1:-1:-1;;;;;40508:23:0;;;;40545:15;;40500:65;;;;40545:15;40508:23;40500:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40605:13:0;;40597:51;;40487:78;;-1:-1:-1;;;;;;40605:13:0;;40632:11;;40597:51;;;;40632:11;40605:13;40597:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;39024:1638:0:o;17894:661::-;-1:-1:-1;;;;;18074:20:0;;18066:70;;;;-1:-1:-1;;;18066:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18163:23:0;;18155:71;;;;-1:-1:-1;;;18155:71:0;;;;;;;:::i;:::-;18335;18357:6;18335:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18335:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18315:17:0;;;;;;;:9;:17;;;;;;:91;;;;18448:20;;;;;;;:32;;18473:6;18448:24;:32::i;:::-;-1:-1:-1;;;;;18425:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18504:35;;;;;;;;;;18532:6;160:25:1;;148:2;133:18;;14:177;2865:114:0;2923:7;2958:5;2962:1;2958;:5;:::i;3007:114::-;3065:7;3100:5;3104:1;3100;:5;:::i;2733:114::-;2791:7;2826:5;2830:1;2826;:5;:::i;40697:595::-;40795:16;;;40809:1;40795:16;;;;;;;;40771:21;;40795:16;;;;;;;;;;-1:-1:-1;40795:16:0;40771:40;;40848:4;40830;40835:1;40830:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40830:23:0;;;:7;;;;;;;;;;:23;;;;40882:15;;:22;;;-1:-1:-1;;;40882:22:0;;;;:15;;;;;:20;;:22;;;;;40830:7;;40882:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40872:4;40877:1;40872:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40872:32:0;;;:7;;;;;;;;;:32;40955:15;;40923:62;;40940:4;;40955:15;40973:11;40923:8;:62::i;:::-;41004:15;;:272;;-1:-1:-1;;;41004:272:0;;-1:-1:-1;;;;;41004:15:0;;;;:66;;:272;;41093:11;;41004:15;;41179:4;;41214;;41242:15;;41004:272;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40752:540;40697:595;:::o;41308:494::-;41429:15;;41397:62;;41414:4;;-1:-1:-1;;;;;41429:15:0;41447:11;41397:8;:62::i;:::-;41478:15;;-1:-1:-1;;;;;41478:15:0;:31;41517:9;41558:4;41586:11;41478:15;;41722:7;8845;8880:6;-1:-1:-1;;;;;8880:6:0;;8799:103;41722:7;41478:308;;;;;;-1:-1:-1;;;;;;41478:308:0;;;-1:-1:-1;;;;;16770:15:1;;;41478:308:0;;;16752:34:1;16802:18;;;16795:34;;;;16845:18;;;16838:34;;;;16888:18;;;16881:34;16952:15;;;16931:19;;;16924:44;41752:15:0;16984:19:1;;;16977:35;16686:19;;41478:308:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41308:494;;:::o;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;853:70;798:131;:::o;934:315::-;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1681:456::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;-1:-1:-1;2008:2:1;1993:18;;1980:32;2021:33;1980:32;2021:33;:::i;:::-;1681:456;;2073:7;;-1:-1:-1;;;2127:2:1;2112:18;;;;2099:32;;1681:456::o;2350:118::-;2436:5;2429:13;2422:21;2415:5;2412:32;2402:60;;2458:1;2455;2448:12;2473:241;2529:6;2582:2;2570:9;2561:7;2557:23;2553:32;2550:52;;;2598:1;2595;2588:12;2550:52;2637:9;2624:23;2656:28;2678:5;2656:28;:::i;2908:247::-;2967:6;3020:2;3008:9;2999:7;2995:23;2991:32;2988:52;;;3036:1;3033;3026:12;2988:52;3075:9;3062:23;3094:31;3119:5;3094:31;:::i;3160:180::-;3219:6;3272:2;3260:9;3251:7;3247:23;3243:32;3240:52;;;3288:1;3285;3278:12;3240:52;-1:-1:-1;3311:23:1;;3160:180;-1:-1:-1;3160:180:1:o;3345:382::-;3410:6;3418;3471:2;3459:9;3450:7;3446:23;3442:32;3439:52;;;3487:1;3484;3477:12;3439:52;3526:9;3513:23;3545:31;3570:5;3545:31;:::i;:::-;3595:5;-1:-1:-1;3652:2:1;3637:18;;3624:32;3665:30;3624:32;3665:30;:::i;:::-;3714:7;3704:17;;;3345:382;;;;;:::o;3732:127::-;3793:10;3788:3;3784:20;3781:1;3774:31;3824:4;3821:1;3814:15;3848:4;3845:1;3838:15;3864:275;3935:2;3929:9;4000:2;3981:13;;-1:-1:-1;;3977:27:1;3965:40;;4035:18;4020:34;;4056:22;;;4017:62;4014:88;;;4082:18;;:::i;:::-;4118:2;4111:22;3864:275;;-1:-1:-1;3864:275:1:o;4144:183::-;4204:4;4237:18;4229:6;4226:30;4223:56;;;4259:18;;:::i;:::-;-1:-1:-1;4304:1:1;4300:14;4316:4;4296:25;;4144:183::o;4332:662::-;4386:5;4439:3;4432:4;4424:6;4420:17;4416:27;4406:55;;4457:1;4454;4447:12;4406:55;4493:6;4480:20;4519:4;4543:60;4559:43;4599:2;4559:43;:::i;:::-;4543:60;:::i;:::-;4637:15;;;4723:1;4719:10;;;;4707:23;;4703:32;;;4668:12;;;;4747:15;;;4744:35;;;4775:1;4772;4765:12;4744:35;4811:2;4803:6;4799:15;4823:142;4839:6;4834:3;4831:15;4823:142;;;4905:17;;4893:30;;4943:12;;;;4856;;4823:142;;;-1:-1:-1;4983:5:1;4332:662;-1:-1:-1;;;;;;4332:662:1:o;4999:1215::-;5117:6;5125;5178:2;5166:9;5157:7;5153:23;5149:32;5146:52;;;5194:1;5191;5184:12;5146:52;5234:9;5221:23;5263:18;5304:2;5296:6;5293:14;5290:34;;;5320:1;5317;5310:12;5290:34;5358:6;5347:9;5343:22;5333:32;;5403:7;5396:4;5392:2;5388:13;5384:27;5374:55;;5425:1;5422;5415:12;5374:55;5461:2;5448:16;5483:4;5507:60;5523:43;5563:2;5523:43;:::i;5507:60::-;5601:15;;;5683:1;5679:10;;;;5671:19;;5667:28;;;5632:12;;;;5707:19;;;5704:39;;;5739:1;5736;5729:12;5704:39;5763:11;;;;5783:217;5799:6;5794:3;5791:15;5783:217;;;5879:3;5866:17;5896:31;5921:5;5896:31;:::i;:::-;5940:18;;5816:12;;;;5978;;;;5783:217;;;6019:5;-1:-1:-1;;6062:18:1;;6049:32;;-1:-1:-1;;6093:16:1;;;6090:36;;;6122:1;6119;6112:12;6090:36;;6145:63;6200:7;6189:8;6178:9;6174:24;6145:63;:::i;:::-;6135:73;;;4999:1215;;;;;:::o;6219:388::-;6287:6;6295;6348:2;6336:9;6327:7;6323:23;6319:32;6316:52;;;6364:1;6361;6354:12;6316:52;6403:9;6390:23;6422:31;6447:5;6422:31;:::i;:::-;6472:5;-1:-1:-1;6529:2:1;6514:18;;6501:32;6542:33;6501:32;6542:33;:::i;6612:380::-;6691:1;6687:12;;;;6734;;;6755:61;;6809:4;6801:6;6797:17;6787:27;;6755:61;6862:2;6854:6;6851:14;6831:18;6828:38;6825:161;;6908:10;6903:3;6899:20;6896:1;6889:31;6943:4;6940:1;6933:15;6971:4;6968:1;6961:15;6825:161;;6612:380;;;:::o;6997:356::-;7199:2;7181:21;;;7218:18;;;7211:30;7277:34;7272:2;7257:18;;7250:62;7344:2;7329:18;;6997:356::o;7358:251::-;7428:6;7481:2;7469:9;7460:7;7456:23;7452:32;7449:52;;;7497:1;7494;7487:12;7449:52;7529:9;7523:16;7548:31;7573:5;7548:31;:::i;8202:245::-;8269:6;8322:2;8310:9;8301:7;8297:23;8293:32;8290:52;;;8338:1;8335;8328:12;8290:52;8370:9;8364:16;8389:28;8411:5;8389:28;:::i;9234:127::-;9295:10;9290:3;9286:20;9283:1;9276:31;9326:4;9323:1;9316:15;9350:4;9347:1;9340:15;9366:127;9427:10;9422:3;9418:20;9415:1;9408:31;9458:4;9455:1;9448:15;9482:4;9479:1;9472:15;9498:422;9587:1;9630:5;9587:1;9644:270;9665:7;9655:8;9652:21;9644:270;;;9724:4;9720:1;9716:6;9712:17;9706:4;9703:27;9700:53;;;9733:18;;:::i;:::-;9783:7;9773:8;9769:22;9766:55;;;9803:16;;;;9766:55;9882:22;;;;9842:15;;;;9644:270;;;9648:3;9498:422;;;;;:::o;9925:806::-;9974:5;10004:8;9994:80;;-1:-1:-1;10045:1:1;10059:5;;9994:80;10093:4;10083:76;;-1:-1:-1;10130:1:1;10144:5;;10083:76;10175:4;10193:1;10188:59;;;;10261:1;10256:130;;;;10168:218;;10188:59;10218:1;10209:10;;10232:5;;;10256:130;10293:3;10283:8;10280:17;10277:43;;;10300:18;;:::i;:::-;-1:-1:-1;;10356:1:1;10342:16;;10371:5;;10168:218;;10470:2;10460:8;10457:16;10451:3;10445:4;10442:13;10438:36;10432:2;10422:8;10419:16;10414:2;10408:4;10405:12;10401:35;10398:77;10395:159;;;-1:-1:-1;10507:19:1;;;10539:5;;10395:159;10586:34;10611:8;10605:4;10586:34;:::i;:::-;10656:6;10652:1;10648:6;10644:19;10635:7;10632:32;10629:58;;;10667:18;;:::i;:::-;10705:20;;9925:806;-1:-1:-1;;;9925:806:1:o;10736:140::-;10794:5;10823:47;10864:4;10854:8;10850:19;10844:4;10823:47;:::i;10881:168::-;10921:7;10987:1;10983;10979:6;10975:14;10972:1;10969:21;10964:1;10957:9;10950:17;10946:45;10943:71;;;10994:18;;:::i;:::-;-1:-1:-1;11034:9:1;;10881:168::o;11054:135::-;11093:3;11114:17;;;11111:43;;11134:18;;:::i;:::-;-1:-1:-1;11181:1:1;11170:13;;11054:135::o;12158:128::-;12198:3;12229:1;12225:6;12222:1;12219:13;12216:39;;;12235:18;;:::i;:::-;-1:-1:-1;12271:9:1;;12158:128::o;13448:401::-;13650:2;13632:21;;;13689:2;13669:18;;;13662:30;13728:34;13723:2;13708:18;;13701:62;-1:-1:-1;;;13794:2:1;13779:18;;13772:35;13839:3;13824:19;;13448:401::o;13854:399::-;14056:2;14038:21;;;14095:2;14075:18;;;14068:30;14134:34;14129:2;14114:18;;14107:62;-1:-1:-1;;;14200:2:1;14185:18;;14178:33;14243:3;14228:19;;13854:399::o;15074:217::-;15114:1;15140;15130:132;;15184:10;15179:3;15175:20;15172:1;15165:31;15219:4;15216:1;15209:15;15247:4;15244:1;15237:15;15130:132;-1:-1:-1;15276:9:1;;15074:217::o;15296:125::-;15336:4;15364:1;15361;15358:8;15355:34;;;15369:18;;:::i;:::-;-1:-1:-1;15406:9:1;;15296:125::o;15426:980::-;15688:4;15736:3;15725:9;15721:19;15767:6;15756:9;15749:25;15793:2;15831:6;15826:2;15815:9;15811:18;15804:34;15874:3;15869:2;15858:9;15854:18;15847:31;15898:6;15933;15927:13;15964:6;15956;15949:22;16002:3;15991:9;15987:19;15980:26;;16041:2;16033:6;16029:15;16015:29;;16062:1;16072:195;16086:6;16083:1;16080:13;16072:195;;;16151:13;;-1:-1:-1;;;;;16147:39:1;16135:52;;16242:15;;;;16207:12;;;;16183:1;16101:9;16072:195;;;-1:-1:-1;;;;;;;16323:32:1;;;;16318:2;16303:18;;16296:60;-1:-1:-1;;;16387:3:1;16372:19;16365:35;16284:3;15426:980;-1:-1:-1;;;15426:980:1:o;17023:306::-;17111:6;17119;17127;17180:2;17168:9;17159:7;17155:23;17151:32;17148:52;;;17196:1;17193;17186:12;17148:52;17225:9;17219:16;17209:26;;17275:2;17264:9;17260:18;17254:25;17244:35;;17319:2;17308:9;17304:18;17298:25;17288:35;;17023:306;;;;;:::o

Swarm Source

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