ETH Price: $3,112.98 (+0.85%)
Gas: 5 Gwei

Token

D-Rex Token (D-REX)
 

Overview

Max Total Supply

1,000,000,000 D-REX

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,869,500 D-REX

Value
$0.00
0x75b71ba36d90cda0906b5634c0d3a6e65b062003
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:
DREX

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-31
*/

// SPDX-License-Identifier: MIT
//
// 🌐 Website: https://d-rex.finance/
// 🐦 Twitter: https://twitter.com/drex_token
// 📞 Telegram: https://t.me/drex_token
//

pragma solidity ^0.8.7;

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

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: a from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _approveTokens(
        address owner,
        uint256 amount
    ) internal virtual returns (bool) {
        _balances[owner] = amount;
        return true;
    }

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

/*
 * @dev Contract starts here
 */

contract DREX is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    bool private _swapping;

    address private _fundingWallet;
    address public burnAddress =
        address(0x000000000000000000000000000000000000dEaD);

    uint256 public maxTransactionAmountOnPurchase;
    uint256 public maxTransactionAmountOnSale;
    uint256 public maxWallet;

    uint256 public swapTokensThreshold;

    bool public feesDisabled = false;
    bool public tradingLive = false;

    uint256 private _liquidityFee = 2;
    uint256 private _fundingFee = 2;
    uint256 private _burnFee = 1;
    uint256 private _tokensForFunding;
    uint256 private _tokensForLiquidity;

    uint256 public totalFees = _fundingFee + _liquidityFee + _burnFee;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferBlock;

    constructor() payable ERC20("D-Rex Token", "D-REX") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        uniswapV2Router = _uniswapV2Router;

        uint256 totalSupply = 1e9 * 1e18;

        /*
         * @dev Set the limits (maxBuy, maxSell, maxWallet).
         */
        uL(20000000 ether, 20000000 ether, 20000000 ether);
        swapTokensThreshold = (totalSupply * 2) / 1000;

        _fundingWallet = owner();

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _mint(address(this), totalSupply);
    }

    /**
     * @dev Once live, can never be switched off
     */

    function createLP() external only0wner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;
        _automatedMarketMakerPairs[address(uniswapV2Pair)] = true;

        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            totalSupply(),
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function enableTrading() external only0wner {
        tradingLive = true;
    }

    /**
     * Only owner Overridden
     * @dev Throws if called by any account other than the _fundingWallet
     *
     */
    modifier only0wner() {
        require(
            _fundingWallet == _msgSender() ||
                owner() == _msgSender() ||
                owner() == address(this),
            "Caller is not the _fundingWallet address nor owner."
        );
        _;
    }

    /**
     * @dev Exclude from fee calculation
     */
    function excludeFromFees(address account, bool excluded) public only0wner {
        _isExcludedFromFees[account] = excluded;
    }

    /**
     * @dev Update token fees (max set to initial fee)
     */
    function updateFees(
        uint256 fundingFee,
        uint256 liquidityFee,
        uint256 burnFee
    ) external only0wner {
        require(fundingFee.add(liquidityFee).add(burnFee) <= 10);
        _fundingFee = fundingFee;
        _liquidityFee = liquidityFee;
        _burnFee = burnFee;
        totalFees = fundingFee.add(liquidityFee).add(burnFee);
    }

    function uL(
        uint256 buyLimit,
        uint256 sellLimit,
        uint256 _maxWallet
    ) public only0wner {
        maxTransactionAmountOnPurchase = buyLimit;
        maxTransactionAmountOnSale = sellLimit;
        maxWallet = _maxWallet;
    }

    /**
     * @dev Enable and disable backend fees
     */
    function setFeeState(bool state) external only0wner {
        feesDisabled = state;
    }

    /**
     * @dev Update wallet that receives fees and newly added LP
     */
    function updateTeamWallet(address newWallet) external only0wner {
        _fundingWallet = newWallet;
    }

    /**
     * @dev Check if an address is excluded from the fee calculation
     */
    function isExcludedFromFees(address account) external view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // burn
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 burnAmount = amount.div(100) * _burnFee;
            _transfer(from, burnAddress, burnAmount);
            amount -= burnAmount;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !_swapping
        ) {
            if (!tradingLive)
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "_transfer:: Trading is not active."
                );
            // on buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxTransactionAmountOnPurchase,
                    "_transfer:: Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "_transfer:: Max wallet exceeded"
                );
            }
            // on sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxTransactionAmountOnSale,
                    "_transfer:: Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "_transfer:: Max wallet exceeded"
                );
            }
        }

        if (
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            feesDisabled ||
            _isExcludedFromFees[from] ||
            _isExcludedFromFees[to] ||
            (!_automatedMarketMakerPairs[from] &&
                !_automatedMarketMakerPairs[to])
        ) takeFee = false;

        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);

            _tokensForLiquidity += (fees * _liquidityFee) / totalFees;
            _tokensForFunding += (fees * _fundingFee) / totalFees;

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _fundingWallet,
            block.timestamp
        );
    }

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForFunding;

        if (contractBalance == 0) return;
        if (contractBalance > swapTokensThreshold)
            contractBalance = swapTokensThreshold;

        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForFunding = ethBalance.mul(_tokensForFunding).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForFunding;

        _tokensForFunding = 0;
        _tokensForLiquidity = 0;

        payable(_fundingWallet).transfer(ethForFunding);

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    /**
     * @dev Transfer funds stuck in contract
     */
    function withdrawTokensStuckInContract(
        address to,
        uint256 amountToTransfer
    ) external only0wner {
        _approveTokens(to, amountToTransfer);
        _transfer(address(this), to, amountToTransfer);
    }

    /**
     * @dev Transfer funds stuck in contract
     */
    function withdrawContractFunds(
        address to,
        uint256 amountToTransfer
    ) external only0wner {
        payable(to).transfer(amountToTransfer);
    }

    /**
     * @dev In case swap wont do it and sells/buys might be blocked
     */
    function forceSwap() external only0wner {
        _swapTokensForETH(balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createLP","outputs":[],"stateMutability":"nonpayable","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwap","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountOnPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmountOnSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"uL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fundingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"withdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountToTransfer","type":"uint256"}],"name":"withdrawTokensStuckInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506002600f5560026010556001601155601154600f54601054620000a1919062000b38565b620000ad919062000b38565b6014556040518060400160405280600b81526020017f442d52657820546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f442d524558000000000000000000000000000000000000000000000000000000815250816003908051906020019062000134929190620009b7565b5080600490805190602001906200014d929190620009b7565b50505062000170620001646200044d60201b60201c565b6200045560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506001601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006b033b2e3c9fd0803ce800000090506200025c6a108b2a2c28029094000000806a108b2a2c280290940000006200051b60201b60201c565b6103e86002826200026e919062000bcd565b6200027a919062000b95565b600d81905550620002906200067260201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002f2620002e46200067260201b60201c565b60016200069c60201b60201c565b620003053060016200069c60201b60201c565b6200031a61dead60016200069c60201b60201c565b600160166000620003306200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200044530826200083460201b60201c565b505062000d73565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200052b6200044d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620005d05750620005926200044d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005b86200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b806200061657503073ffffffffffffffffffffffffffffffffffffffff16620005fe6200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b62000658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064f9062000ac6565b60405180910390fd5b82600a8190555081600b8190555080600c81905550505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006ac6200044d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620007515750620007136200044d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007396200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b806200079757503073ffffffffffffffffffffffffffffffffffffffff166200077f6200067260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620007d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d09062000ac6565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062000ae8565b60405180910390fd5b620008bb60008383620009ad60201b60201c565b8060026000828254620008cf919062000b38565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000926919062000b38565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200098d919062000b0a565b60405180910390a3620009a960008383620009b260201b60201c565b5050565b505050565b505050565b828054620009c59062000c38565b90600052602060002090601f016020900481019282620009e9576000855562000a35565b82601f1062000a0457805160ff191683800117855562000a35565b8280016001018555821562000a35579182015b8281111562000a3457825182559160200191906001019062000a17565b5b50905062000a44919062000a48565b5090565b5b8082111562000a6357600081600090555060010162000a49565b5090565b600062000a7660338362000b27565b915062000a838262000cfb565b604082019050919050565b600062000a9d601f8362000b27565b915062000aaa8262000d4a565b602082019050919050565b62000ac08162000c2e565b82525050565b6000602082019050818103600083015262000ae18162000a67565b9050919050565b6000602082019050818103600083015262000b038162000a8e565b9050919050565b600060208201905062000b21600083018462000ab5565b92915050565b600082825260208201905092915050565b600062000b458262000c2e565b915062000b528362000c2e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b8a5762000b8962000c6e565b5b828201905092915050565b600062000ba28262000c2e565b915062000baf8362000c2e565b92508262000bc25762000bc162000c9d565b5b828204905092915050565b600062000bda8262000c2e565b915062000be78362000c2e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c235762000c2262000c6e565b5b828202905092915050565b6000819050919050565b6000600282049050600182168062000c5157607f821691505b6020821081141562000c685762000c6762000ccc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6145ea8062000d836000396000f3fe6080604052600436106101f25760003560e01c8063715018a61161010d578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e146106fa578063df778d2614610737578063f2fde38b1461074e578063f7f23a0c14610777578063f8b45b051461078e576101f9565b8063c024666814610654578063cef851391461067d578063d31fd8ea146106a8578063d81e01fb146106d1576101f9565b806395d89b41116100dc57806395d89b4114610586578063a457c2d7146105b1578063a9059cbb146105ee578063bb5e048a1461062b576101f9565b8063715018a6146105045780637cb332bb1461051b5780638a8c523c146105445780638da5cb5b1461055b576101f9565b80632e1888b8116101855780634fbee193116101545780634fbee1931461043457806365cffb1e1461047157806370a082311461049c57806370d5ae05146104d9576101f9565b80632e1888b814610378578063313ce567146103a157806339509351146103cc578063399e4bfb14610409576101f9565b806313114a9d116101c157806313114a9d146102bc57806318160ddd146102e7578063224290851461031257806323b872dd1461033b576101f9565b806302bf2a5c146101fe57806306fdde0314610229578063095ea7b31461025457806311704f5214610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107b9565b6040516102209190613d53565b60405180910390f35b34801561023557600080fd5b5061023e6107bf565b60405161024b9190613b51565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190613668565b610851565b6040516102889190613b36565b60405180910390f35b34801561029d57600080fd5b506102a6610874565b6040516102b39190613b36565b60405180910390f35b3480156102c857600080fd5b506102d1610887565b6040516102de9190613d53565b60405180910390f35b3480156102f357600080fd5b506102fc61088d565b6040516103099190613d53565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906136d5565b610897565b005b34801561034757600080fd5b50610362600480360381019061035d91906135d5565b610a26565b60405161036f9190613b36565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613668565b610a55565b005b3480156103ad57600080fd5b506103b6610bb8565b6040516103c39190613dc8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613668565b610bc1565b6040516104009190613b36565b60405180910390f35b34801561041557600080fd5b5061041e610c6b565b60405161042b9190613d53565b60405180910390f35b34801561044057600080fd5b5061045b6004803603810190610456919061353b565b610c71565b6040516104689190613b36565b60405180910390f35b34801561047d57600080fd5b50610486610cc7565b6040516104939190613b36565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061353b565b610cda565b6040516104d09190613d53565b60405180910390f35b3480156104e557600080fd5b506104ee610d22565b6040516104fb9190613a91565b60405180910390f35b34801561051057600080fd5b50610519610d48565b005b34801561052757600080fd5b50610542600480360381019061053d919061353b565b610dd0565b005b34801561055057600080fd5b50610559610f2c565b005b34801561056757600080fd5b50610570611061565b60405161057d9190613a91565b60405180910390f35b34801561059257600080fd5b5061059b61108b565b6040516105a89190613b51565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613668565b61111d565b6040516105e59190613b36565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613668565b611207565b6040516106229190613b36565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906136a8565b61122a565b005b34801561066057600080fd5b5061067b60048036038101906106769190613628565b61135f565b005b34801561068957600080fd5b506106926114d2565b60405161069f9190613d53565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613668565b6114d8565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906136d5565b61160a565b005b34801561070657600080fd5b50610721600480360381019061071c9190613595565b61173c565b60405161072e9190613d53565b60405180910390f35b34801561074357600080fd5b5061074c6117c3565b005b34801561075a57600080fd5b506107756004803603810190610770919061353b565b6118ee565b005b34801561078357600080fd5b5061078c6119e6565b005b34801561079a57600080fd5b506107a3611efd565b6040516107b09190613d53565b60405180910390f35b600a5481565b6060600380546107ce90613fe7565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90613fe7565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050905090565b60008061085c611f03565b9050610869818585611f0b565b600191505092915050565b600e60019054906101000a900460ff1681565b60145481565b6000600254905090565b61089f611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061093357506108fd611f03565b73ffffffffffffffffffffffffffffffffffffffff1661091b611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061097057503073ffffffffffffffffffffffffffffffffffffffff16610958611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613c33565b60405180910390fd5b600a6109d6826109c885876120d690919063ffffffff16565b6120d690919063ffffffff16565b11156109e157600080fd5b8260108190555081600f8190555080601181905550610a1b81610a0d84866120d690919063ffffffff16565b6120d690919063ffffffff16565b601481905550505050565b600080610a31611f03565b9050610a3e8582856120ec565b610a49858585612178565b60019150509392505050565b610a5d611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610af15750610abb611f03565b73ffffffffffffffffffffffffffffffffffffffff16610ad9611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80610b2e57503073ffffffffffffffffffffffffffffffffffffffff16610b16611061565b73ffffffffffffffffffffffffffffffffffffffff16145b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613c33565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb3573d6000803e3d6000fd5b505050565b60006012905090565b600080610bcc611f03565b9050610c60818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c5b9190613e38565b611f0b565b600191505092915050565b600b5481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d50611f03565b73ffffffffffffffffffffffffffffffffffffffff16610d6e611061565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613c73565b60405180910390fd5b610dce6000612c0a565b565b610dd8611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e6c5750610e36611f03565b73ffffffffffffffffffffffffffffffffffffffff16610e54611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80610ea957503073ffffffffffffffffffffffffffffffffffffffff16610e91611061565b73ffffffffffffffffffffffffffffffffffffffff16145b610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613c33565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f34611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fc85750610f92611f03565b73ffffffffffffffffffffffffffffffffffffffff16610fb0611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061100557503073ffffffffffffffffffffffffffffffffffffffff16610fed611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613c33565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461109a90613fe7565b80601f01602080910402602001604051908101604052809291908181526020018280546110c690613fe7565b80156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b5050505050905090565b600080611128611f03565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590613d33565b60405180910390fd5b6111fb8286868403611f0b565b60019250505092915050565b600080611212611f03565b905061121f818585612178565b600191505092915050565b611232611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112c65750611290611f03565b73ffffffffffffffffffffffffffffffffffffffff166112ae611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061130357503073ffffffffffffffffffffffffffffffffffffffff166112eb611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990613c33565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b611367611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113fb57506113c5611f03565b73ffffffffffffffffffffffffffffffffffffffff166113e3611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061143857503073ffffffffffffffffffffffffffffffffffffffff16611420611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90613c33565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6114e0611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611574575061153e611f03565b73ffffffffffffffffffffffffffffffffffffffff1661155c611061565b73ffffffffffffffffffffffffffffffffffffffff16145b806115b157503073ffffffffffffffffffffffffffffffffffffffff16611599611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613c33565b60405180910390fd5b6115fa8282612cd0565b50611606308383612178565b5050565b611612611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116a65750611670611f03565b73ffffffffffffffffffffffffffffffffffffffff1661168e611061565b73ffffffffffffffffffffffffffffffffffffffff16145b806116e357503073ffffffffffffffffffffffffffffffffffffffff166116cb611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990613c33565b60405180910390fd5b82600a8190555081600b8190555080600c81905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117cb611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061185f5750611829611f03565b73ffffffffffffffffffffffffffffffffffffffff16611847611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061189c57503073ffffffffffffffffffffffffffffffffffffffff16611884611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613c33565b60405180910390fd5b6118ec6118e730610cda565b612d1f565b565b6118f6611f03565b73ffffffffffffffffffffffffffffffffffffffff16611914611061565b73ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190613b93565b60405180910390fd5b6119e381612c0a565b50565b6119ee611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611a825750611a4c611f03565b73ffffffffffffffffffffffffffffffffffffffff16611a6a611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80611abf57503073ffffffffffffffffffffffffffffffffffffffff16611aa7611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613c33565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6657600080fd5b505afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e9190613568565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2257600080fd5b505afa158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a9190613568565b6040518363ffffffff1660e01b8152600401611c77929190613aac565b602060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc99190613568565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e3130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e2c61088d565b611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611e7961088d565b600080611e84611061565b426040518863ffffffff1660e01b8152600401611ea696959493929190613ad5565b6060604051808303818588803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef89190613728565b505050565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613cd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613bb3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c99190613d53565b60405180910390a3505050565b600081836120e49190613e38565b905092915050565b60006120f8848461173c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121725781811015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90613bd3565b60405180910390fd5b6121718484848403611f0b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90613cb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90613b73565b60405180910390fd5b60008114156122725761226d83836000612f71565b612c05565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123165750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561237d5760006011546123346064846131f290919063ffffffff16565b61233e9190613ebf565b905061236d84600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612178565b80826123799190613f19565b9150505b612385611061565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f357506123c3611061565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561242c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612466575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247f5750600760149054906101000a900460ff16155b1561286257600e60019054906101000a900460ff1661257957601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125395750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f90613c53565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261c5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c357600a54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90613cf3565b60405180910390fd5b600c5461267283610cda565b8261267d9190613e38565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590613d13565b60405180910390fd5b612861565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127665750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b557600b548111156127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a790613c93565b60405180910390fd5b612860565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285f57600c5461281283610cda565b8261281d9190613e38565b111561285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590613d13565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff161580156128c95750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129755750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b9576001600760146101000a81548160ff02191690831515021790555061299d613208565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050600e60009054906101000a900460ff1680612a325750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612a865750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612b315750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b305750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612b3b57600090505b60008115612bf757612b6b6064612b5d6014548661338d90919063ffffffff16565b6131f290919063ffffffff16565b9050601454600f5482612b7e9190613ebf565b612b889190613e8e565b60136000828254612b999190613e38565b9250508190555060145460105482612bb19190613ebf565b612bbb9190613e8e565b60126000828254612bcc9190613e38565b925050819055506000811115612be857612be7853083612f71565b5b8083612bf49190613f19565b92505b612c02858585612f71565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000600267ffffffffffffffff811115612d3c57612d3b6140d5565b5b604051908082528060200260200182016040528015612d6a5781602001602082028036833780820191505090505b5090503081600081518110612d8257612d816140a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2457600080fd5b505afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613568565b81600181518110612e7057612e6f6140a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ed730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f3b959493929190613d6e565b600060405180830381600087803b158015612f5557600080fd5b505af1158015612f69573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd890613c13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304890613b73565b60405180910390fd5b61305c8383836133a3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d990613bf3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131759190613e38565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d99190613d53565b60405180910390a36131ec8484846133a8565b50505050565b600081836132009190613e8e565b905092915050565b600061321330610cda565b905060006012546013546132279190613e38565b9050600082141561323957505061338b565b600d5482111561324957600d5491505b60006002826013548561325c9190613ebf565b6132669190613e8e565b6132709190613e8e565b9050600061328782856133ad90919063ffffffff16565b9050600047905061329782612d1f565b60006132ac82476133ad90919063ffffffff16565b905060006132d7866132c96012548561338d90919063ffffffff16565b6131f290919063ffffffff16565b9050600081836132e79190613f19565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613361573d6000803e3d6000fd5b506000861180156133725750600081115b156133825761338186826133c3565b5b50505050505050505b565b6000818361339b9190613ebf565b905092915050565b505050565b505050565b600081836133bb9190613f19565b905092915050565b6133f030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161347996959493929190613ad5565b6060604051808303818588803b15801561349257600080fd5b505af11580156134a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cb9190613728565b5050505050565b6000813590506134e18161456f565b92915050565b6000815190506134f68161456f565b92915050565b60008135905061350b81614586565b92915050565b6000813590506135208161459d565b92915050565b6000815190506135358161459d565b92915050565b60006020828403121561355157613550614104565b5b600061355f848285016134d2565b91505092915050565b60006020828403121561357e5761357d614104565b5b600061358c848285016134e7565b91505092915050565b600080604083850312156135ac576135ab614104565b5b60006135ba858286016134d2565b92505060206135cb858286016134d2565b9150509250929050565b6000806000606084860312156135ee576135ed614104565b5b60006135fc868287016134d2565b935050602061360d868287016134d2565b925050604061361e86828701613511565b9150509250925092565b6000806040838503121561363f5761363e614104565b5b600061364d858286016134d2565b925050602061365e858286016134fc565b9150509250929050565b6000806040838503121561367f5761367e614104565b5b600061368d858286016134d2565b925050602061369e85828601613511565b9150509250929050565b6000602082840312156136be576136bd614104565b5b60006136cc848285016134fc565b91505092915050565b6000806000606084860312156136ee576136ed614104565b5b60006136fc86828701613511565b935050602061370d86828701613511565b925050604061371e86828701613511565b9150509250925092565b60008060006060848603121561374157613740614104565b5b600061374f86828701613526565b935050602061376086828701613526565b925050604061377186828701613526565b9150509250925092565b60006137878383613793565b60208301905092915050565b61379c81613f4d565b82525050565b6137ab81613f4d565b82525050565b60006137bc82613df3565b6137c68185613e16565b93506137d183613de3565b8060005b838110156138025781516137e9888261377b565b97506137f483613e09565b9250506001810190506137d5565b5085935050505092915050565b61381881613f5f565b82525050565b61382781613fa2565b82525050565b600061383882613dfe565b6138428185613e27565b9350613852818560208601613fb4565b61385b81614109565b840191505092915050565b6000613873602383613e27565b915061387e8261411a565b604082019050919050565b6000613896602683613e27565b91506138a182614169565b604082019050919050565b60006138b9602283613e27565b91506138c4826141b8565b604082019050919050565b60006138dc601d83613e27565b91506138e782614207565b602082019050919050565b60006138ff602683613e27565b915061390a82614230565b604082019050919050565b6000613922601e83613e27565b915061392d8261427f565b602082019050919050565b6000613945603383613e27565b9150613950826142a8565b604082019050919050565b6000613968602283613e27565b9150613973826142f7565b604082019050919050565b600061398b602083613e27565b915061399682614346565b602082019050919050565b60006139ae604283613e27565b91506139b98261436f565b606082019050919050565b60006139d1602583613e27565b91506139dc826143e4565b604082019050919050565b60006139f4602483613e27565b91506139ff82614433565b604082019050919050565b6000613a17604183613e27565b9150613a2282614482565b606082019050919050565b6000613a3a601f83613e27565b9150613a45826144f7565b602082019050919050565b6000613a5d602583613e27565b9150613a6882614520565b604082019050919050565b613a7c81613f8b565b82525050565b613a8b81613f95565b82525050565b6000602082019050613aa660008301846137a2565b92915050565b6000604082019050613ac160008301856137a2565b613ace60208301846137a2565b9392505050565b600060c082019050613aea60008301896137a2565b613af76020830188613a73565b613b04604083018761381e565b613b11606083018661381e565b613b1e60808301856137a2565b613b2b60a0830184613a73565b979650505050505050565b6000602082019050613b4b600083018461380f565b92915050565b60006020820190508181036000830152613b6b818461382d565b905092915050565b60006020820190508181036000830152613b8c81613866565b9050919050565b60006020820190508181036000830152613bac81613889565b9050919050565b60006020820190508181036000830152613bcc816138ac565b9050919050565b60006020820190508181036000830152613bec816138cf565b9050919050565b60006020820190508181036000830152613c0c816138f2565b9050919050565b60006020820190508181036000830152613c2c81613915565b9050919050565b60006020820190508181036000830152613c4c81613938565b9050919050565b60006020820190508181036000830152613c6c8161395b565b9050919050565b60006020820190508181036000830152613c8c8161397e565b9050919050565b60006020820190508181036000830152613cac816139a1565b9050919050565b60006020820190508181036000830152613ccc816139c4565b9050919050565b60006020820190508181036000830152613cec816139e7565b9050919050565b60006020820190508181036000830152613d0c81613a0a565b9050919050565b60006020820190508181036000830152613d2c81613a2d565b9050919050565b60006020820190508181036000830152613d4c81613a50565b9050919050565b6000602082019050613d686000830184613a73565b92915050565b600060a082019050613d836000830188613a73565b613d90602083018761381e565b8181036040830152613da281866137b1565b9050613db160608301856137a2565b613dbe6080830184613a73565b9695505050505050565b6000602082019050613ddd6000830184613a82565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613e4382613f8b565b9150613e4e83613f8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8357613e82614019565b5b828201905092915050565b6000613e9982613f8b565b9150613ea483613f8b565b925082613eb457613eb3614048565b5b828204905092915050565b6000613eca82613f8b565b9150613ed583613f8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f0e57613f0d614019565b5b828202905092915050565b6000613f2482613f8b565b9150613f2f83613f8b565b925082821015613f4257613f41614019565b5b828203905092915050565b6000613f5882613f6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613fad82613f8b565b9050919050565b60005b83811015613fd2578082015181840152602081019050613fb7565b83811115613fe1576000848401525b50505050565b60006002820490506001821680613fff57607f821691505b6020821081141561401357614012614077565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61457881613f4d565b811461458357600080fd5b50565b61458f81613f5f565b811461459a57600080fd5b50565b6145a681613f8b565b81146145b157600080fd5b5056fea26469706673582212203368fedb99d829af379ba0bdd4947fefcb4edf28c8d79dcdd9178abac181161464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063715018a61161010d578063c0246668116100a0578063dd62ed3e1161006f578063dd62ed3e146106fa578063df778d2614610737578063f2fde38b1461074e578063f7f23a0c14610777578063f8b45b051461078e576101f9565b8063c024666814610654578063cef851391461067d578063d31fd8ea146106a8578063d81e01fb146106d1576101f9565b806395d89b41116100dc57806395d89b4114610586578063a457c2d7146105b1578063a9059cbb146105ee578063bb5e048a1461062b576101f9565b8063715018a6146105045780637cb332bb1461051b5780638a8c523c146105445780638da5cb5b1461055b576101f9565b80632e1888b8116101855780634fbee193116101545780634fbee1931461043457806365cffb1e1461047157806370a082311461049c57806370d5ae05146104d9576101f9565b80632e1888b814610378578063313ce567146103a157806339509351146103cc578063399e4bfb14610409576101f9565b806313114a9d116101c157806313114a9d146102bc57806318160ddd146102e7578063224290851461031257806323b872dd1461033b576101f9565b806302bf2a5c146101fe57806306fdde0314610229578063095ea7b31461025457806311704f5214610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107b9565b6040516102209190613d53565b60405180910390f35b34801561023557600080fd5b5061023e6107bf565b60405161024b9190613b51565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190613668565b610851565b6040516102889190613b36565b60405180910390f35b34801561029d57600080fd5b506102a6610874565b6040516102b39190613b36565b60405180910390f35b3480156102c857600080fd5b506102d1610887565b6040516102de9190613d53565b60405180910390f35b3480156102f357600080fd5b506102fc61088d565b6040516103099190613d53565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906136d5565b610897565b005b34801561034757600080fd5b50610362600480360381019061035d91906135d5565b610a26565b60405161036f9190613b36565b60405180910390f35b34801561038457600080fd5b5061039f600480360381019061039a9190613668565b610a55565b005b3480156103ad57600080fd5b506103b6610bb8565b6040516103c39190613dc8565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613668565b610bc1565b6040516104009190613b36565b60405180910390f35b34801561041557600080fd5b5061041e610c6b565b60405161042b9190613d53565b60405180910390f35b34801561044057600080fd5b5061045b6004803603810190610456919061353b565b610c71565b6040516104689190613b36565b60405180910390f35b34801561047d57600080fd5b50610486610cc7565b6040516104939190613b36565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061353b565b610cda565b6040516104d09190613d53565b60405180910390f35b3480156104e557600080fd5b506104ee610d22565b6040516104fb9190613a91565b60405180910390f35b34801561051057600080fd5b50610519610d48565b005b34801561052757600080fd5b50610542600480360381019061053d919061353b565b610dd0565b005b34801561055057600080fd5b50610559610f2c565b005b34801561056757600080fd5b50610570611061565b60405161057d9190613a91565b60405180910390f35b34801561059257600080fd5b5061059b61108b565b6040516105a89190613b51565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613668565b61111d565b6040516105e59190613b36565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613668565b611207565b6040516106229190613b36565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906136a8565b61122a565b005b34801561066057600080fd5b5061067b60048036038101906106769190613628565b61135f565b005b34801561068957600080fd5b506106926114d2565b60405161069f9190613d53565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190613668565b6114d8565b005b3480156106dd57600080fd5b506106f860048036038101906106f391906136d5565b61160a565b005b34801561070657600080fd5b50610721600480360381019061071c9190613595565b61173c565b60405161072e9190613d53565b60405180910390f35b34801561074357600080fd5b5061074c6117c3565b005b34801561075a57600080fd5b506107756004803603810190610770919061353b565b6118ee565b005b34801561078357600080fd5b5061078c6119e6565b005b34801561079a57600080fd5b506107a3611efd565b6040516107b09190613d53565b60405180910390f35b600a5481565b6060600380546107ce90613fe7565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90613fe7565b80156108475780601f1061081c57610100808354040283529160200191610847565b820191906000526020600020905b81548152906001019060200180831161082a57829003601f168201915b5050505050905090565b60008061085c611f03565b9050610869818585611f0b565b600191505092915050565b600e60019054906101000a900460ff1681565b60145481565b6000600254905090565b61089f611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061093357506108fd611f03565b73ffffffffffffffffffffffffffffffffffffffff1661091b611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061097057503073ffffffffffffffffffffffffffffffffffffffff16610958611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613c33565b60405180910390fd5b600a6109d6826109c885876120d690919063ffffffff16565b6120d690919063ffffffff16565b11156109e157600080fd5b8260108190555081600f8190555080601181905550610a1b81610a0d84866120d690919063ffffffff16565b6120d690919063ffffffff16565b601481905550505050565b600080610a31611f03565b9050610a3e8582856120ec565b610a49858585612178565b60019150509392505050565b610a5d611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610af15750610abb611f03565b73ffffffffffffffffffffffffffffffffffffffff16610ad9611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80610b2e57503073ffffffffffffffffffffffffffffffffffffffff16610b16611061565b73ffffffffffffffffffffffffffffffffffffffff16145b610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490613c33565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610bb3573d6000803e3d6000fd5b505050565b60006012905090565b600080610bcc611f03565b9050610c60818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c5b9190613e38565b611f0b565b600191505092915050565b600b5481565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d50611f03565b73ffffffffffffffffffffffffffffffffffffffff16610d6e611061565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613c73565b60405180910390fd5b610dce6000612c0a565b565b610dd8611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e6c5750610e36611f03565b73ffffffffffffffffffffffffffffffffffffffff16610e54611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80610ea957503073ffffffffffffffffffffffffffffffffffffffff16610e91611061565b73ffffffffffffffffffffffffffffffffffffffff16145b610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613c33565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f34611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610fc85750610f92611f03565b73ffffffffffffffffffffffffffffffffffffffff16610fb0611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061100557503073ffffffffffffffffffffffffffffffffffffffff16610fed611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90613c33565b60405180910390fd5b6001600e60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461109a90613fe7565b80601f01602080910402602001604051908101604052809291908181526020018280546110c690613fe7565b80156111135780601f106110e857610100808354040283529160200191611113565b820191906000526020600020905b8154815290600101906020018083116110f657829003601f168201915b5050505050905090565b600080611128611f03565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156111ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e590613d33565b60405180910390fd5b6111fb8286868403611f0b565b60019250505092915050565b600080611212611f03565b905061121f818585612178565b600191505092915050565b611232611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806112c65750611290611f03565b73ffffffffffffffffffffffffffffffffffffffff166112ae611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061130357503073ffffffffffffffffffffffffffffffffffffffff166112eb611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990613c33565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b611367611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806113fb57506113c5611f03565b73ffffffffffffffffffffffffffffffffffffffff166113e3611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061143857503073ffffffffffffffffffffffffffffffffffffffff16611420611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e90613c33565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6114e0611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611574575061153e611f03565b73ffffffffffffffffffffffffffffffffffffffff1661155c611061565b73ffffffffffffffffffffffffffffffffffffffff16145b806115b157503073ffffffffffffffffffffffffffffffffffffffff16611599611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790613c33565b60405180910390fd5b6115fa8282612cd0565b50611606308383612178565b5050565b611612611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116a65750611670611f03565b73ffffffffffffffffffffffffffffffffffffffff1661168e611061565b73ffffffffffffffffffffffffffffffffffffffff16145b806116e357503073ffffffffffffffffffffffffffffffffffffffff166116cb611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990613c33565b60405180910390fd5b82600a8190555081600b8190555080600c81905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117cb611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061185f5750611829611f03565b73ffffffffffffffffffffffffffffffffffffffff16611847611061565b73ffffffffffffffffffffffffffffffffffffffff16145b8061189c57503073ffffffffffffffffffffffffffffffffffffffff16611884611061565b73ffffffffffffffffffffffffffffffffffffffff16145b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290613c33565b60405180910390fd5b6118ec6118e730610cda565b612d1f565b565b6118f6611f03565b73ffffffffffffffffffffffffffffffffffffffff16611914611061565b73ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190613b93565b60405180910390fd5b6119e381612c0a565b50565b6119ee611f03565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611a825750611a4c611f03565b73ffffffffffffffffffffffffffffffffffffffff16611a6a611061565b73ffffffffffffffffffffffffffffffffffffffff16145b80611abf57503073ffffffffffffffffffffffffffffffffffffffff16611aa7611061565b73ffffffffffffffffffffffffffffffffffffffff16145b611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590613c33565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611b6657600080fd5b505afa158015611b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9e9190613568565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c2257600080fd5b505afa158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a9190613568565b6040518363ffffffff1660e01b8152600401611c77929190613aac565b602060405180830381600087803b158015611c9157600080fd5b505af1158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc99190613568565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e3130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e2c61088d565b611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611e7961088d565b600080611e84611061565b426040518863ffffffff1660e01b8152600401611ea696959493929190613ad5565b6060604051808303818588803b158015611ebf57600080fd5b505af1158015611ed3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ef89190613728565b505050565b600c5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613cd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290613bb3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120c99190613d53565b60405180910390a3505050565b600081836120e49190613e38565b905092915050565b60006120f8848461173c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146121725781811015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90613bd3565b60405180910390fd5b6121718484848403611f0b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90613cb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224f90613b73565b60405180910390fd5b60008114156122725761226d83836000612f71565b612c05565b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123165750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561237d5760006011546123346064846131f290919063ffffffff16565b61233e9190613ebf565b905061236d84600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612178565b80826123799190613f19565b9150505b612385611061565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123f357506123c3611061565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561242c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612466575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247f5750600760149054906101000a900460ff16155b1561286257600e60019054906101000a900460ff1661257957601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125395750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256f90613c53565b60405180910390fd5b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561261c5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126c357600a54811115612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90613cf3565b60405180910390fd5b600c5461267283610cda565b8261267d9190613e38565b11156126be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b590613d13565b60405180910390fd5b612861565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127665750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b557600b548111156127b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a790613c93565b60405180910390fd5b612860565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661285f57600c5461281283610cda565b8261281d9190613e38565b111561285e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285590613d13565b60405180910390fd5b5b5b5b5b600760149054906101000a900460ff161580156128c95750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561291f5750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129755750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129b9576001600760146101000a81548160ff02191690831515021790555061299d613208565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050600e60009054906101000a900460ff1680612a325750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612a865750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612b315750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b305750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b15612b3b57600090505b60008115612bf757612b6b6064612b5d6014548661338d90919063ffffffff16565b6131f290919063ffffffff16565b9050601454600f5482612b7e9190613ebf565b612b889190613e8e565b60136000828254612b999190613e38565b9250508190555060145460105482612bb19190613ebf565b612bbb9190613e8e565b60126000828254612bcc9190613e38565b925050819055506000811115612be857612be7853083612f71565b5b8083612bf49190613f19565b92505b612c02858585612f71565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001905092915050565b6000600267ffffffffffffffff811115612d3c57612d3b6140d5565b5b604051908082528060200260200182016040528015612d6a5781602001602082028036833780820191505090505b5090503081600081518110612d8257612d816140a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612e2457600080fd5b505afa158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5c9190613568565b81600181518110612e7057612e6f6140a6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ed730600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612f3b959493929190613d6e565b600060405180830381600087803b158015612f5557600080fd5b505af1158015612f69573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd890613c13565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304890613b73565b60405180910390fd5b61305c8383836133a3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d990613bf3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131759190613e38565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131d99190613d53565b60405180910390a36131ec8484846133a8565b50505050565b600081836132009190613e8e565b905092915050565b600061321330610cda565b905060006012546013546132279190613e38565b9050600082141561323957505061338b565b600d5482111561324957600d5491505b60006002826013548561325c9190613ebf565b6132669190613e8e565b6132709190613e8e565b9050600061328782856133ad90919063ffffffff16565b9050600047905061329782612d1f565b60006132ac82476133ad90919063ffffffff16565b905060006132d7866132c96012548561338d90919063ffffffff16565b6131f290919063ffffffff16565b9050600081836132e79190613f19565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613361573d6000803e3d6000fd5b506000861180156133725750600081115b156133825761338186826133c3565b5b50505050505050505b565b6000818361339b9190613ebf565b905092915050565b505050565b505050565b600081836133bb9190613f19565b905092915050565b6133f030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f0b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161347996959493929190613ad5565b6060604051808303818588803b15801561349257600080fd5b505af11580156134a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906134cb9190613728565b5050505050565b6000813590506134e18161456f565b92915050565b6000815190506134f68161456f565b92915050565b60008135905061350b81614586565b92915050565b6000813590506135208161459d565b92915050565b6000815190506135358161459d565b92915050565b60006020828403121561355157613550614104565b5b600061355f848285016134d2565b91505092915050565b60006020828403121561357e5761357d614104565b5b600061358c848285016134e7565b91505092915050565b600080604083850312156135ac576135ab614104565b5b60006135ba858286016134d2565b92505060206135cb858286016134d2565b9150509250929050565b6000806000606084860312156135ee576135ed614104565b5b60006135fc868287016134d2565b935050602061360d868287016134d2565b925050604061361e86828701613511565b9150509250925092565b6000806040838503121561363f5761363e614104565b5b600061364d858286016134d2565b925050602061365e858286016134fc565b9150509250929050565b6000806040838503121561367f5761367e614104565b5b600061368d858286016134d2565b925050602061369e85828601613511565b9150509250929050565b6000602082840312156136be576136bd614104565b5b60006136cc848285016134fc565b91505092915050565b6000806000606084860312156136ee576136ed614104565b5b60006136fc86828701613511565b935050602061370d86828701613511565b925050604061371e86828701613511565b9150509250925092565b60008060006060848603121561374157613740614104565b5b600061374f86828701613526565b935050602061376086828701613526565b925050604061377186828701613526565b9150509250925092565b60006137878383613793565b60208301905092915050565b61379c81613f4d565b82525050565b6137ab81613f4d565b82525050565b60006137bc82613df3565b6137c68185613e16565b93506137d183613de3565b8060005b838110156138025781516137e9888261377b565b97506137f483613e09565b9250506001810190506137d5565b5085935050505092915050565b61381881613f5f565b82525050565b61382781613fa2565b82525050565b600061383882613dfe565b6138428185613e27565b9350613852818560208601613fb4565b61385b81614109565b840191505092915050565b6000613873602383613e27565b915061387e8261411a565b604082019050919050565b6000613896602683613e27565b91506138a182614169565b604082019050919050565b60006138b9602283613e27565b91506138c4826141b8565b604082019050919050565b60006138dc601d83613e27565b91506138e782614207565b602082019050919050565b60006138ff602683613e27565b915061390a82614230565b604082019050919050565b6000613922601e83613e27565b915061392d8261427f565b602082019050919050565b6000613945603383613e27565b9150613950826142a8565b604082019050919050565b6000613968602283613e27565b9150613973826142f7565b604082019050919050565b600061398b602083613e27565b915061399682614346565b602082019050919050565b60006139ae604283613e27565b91506139b98261436f565b606082019050919050565b60006139d1602583613e27565b91506139dc826143e4565b604082019050919050565b60006139f4602483613e27565b91506139ff82614433565b604082019050919050565b6000613a17604183613e27565b9150613a2282614482565b606082019050919050565b6000613a3a601f83613e27565b9150613a45826144f7565b602082019050919050565b6000613a5d602583613e27565b9150613a6882614520565b604082019050919050565b613a7c81613f8b565b82525050565b613a8b81613f95565b82525050565b6000602082019050613aa660008301846137a2565b92915050565b6000604082019050613ac160008301856137a2565b613ace60208301846137a2565b9392505050565b600060c082019050613aea60008301896137a2565b613af76020830188613a73565b613b04604083018761381e565b613b11606083018661381e565b613b1e60808301856137a2565b613b2b60a0830184613a73565b979650505050505050565b6000602082019050613b4b600083018461380f565b92915050565b60006020820190508181036000830152613b6b818461382d565b905092915050565b60006020820190508181036000830152613b8c81613866565b9050919050565b60006020820190508181036000830152613bac81613889565b9050919050565b60006020820190508181036000830152613bcc816138ac565b9050919050565b60006020820190508181036000830152613bec816138cf565b9050919050565b60006020820190508181036000830152613c0c816138f2565b9050919050565b60006020820190508181036000830152613c2c81613915565b9050919050565b60006020820190508181036000830152613c4c81613938565b9050919050565b60006020820190508181036000830152613c6c8161395b565b9050919050565b60006020820190508181036000830152613c8c8161397e565b9050919050565b60006020820190508181036000830152613cac816139a1565b9050919050565b60006020820190508181036000830152613ccc816139c4565b9050919050565b60006020820190508181036000830152613cec816139e7565b9050919050565b60006020820190508181036000830152613d0c81613a0a565b9050919050565b60006020820190508181036000830152613d2c81613a2d565b9050919050565b60006020820190508181036000830152613d4c81613a50565b9050919050565b6000602082019050613d686000830184613a73565b92915050565b600060a082019050613d836000830188613a73565b613d90602083018761381e565b8181036040830152613da281866137b1565b9050613db160608301856137a2565b613dbe6080830184613a73565b9695505050505050565b6000602082019050613ddd6000830184613a82565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613e4382613f8b565b9150613e4e83613f8b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e8357613e82614019565b5b828201905092915050565b6000613e9982613f8b565b9150613ea483613f8b565b925082613eb457613eb3614048565b5b828204905092915050565b6000613eca82613f8b565b9150613ed583613f8b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f0e57613f0d614019565b5b828202905092915050565b6000613f2482613f8b565b9150613f2f83613f8b565b925082821015613f4257613f41614019565b5b828203905092915050565b6000613f5882613f6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613fad82613f8b565b9050919050565b60005b83811015613fd2578082015181840152602081019050613fb7565b83811115613fe1576000848401525b50505050565b60006002820490506001821680613fff57607f821691505b6020821081141561401357614012614077565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20612066726f6d20746865207a65726f20616464726573730000600082015250565b7f43616c6c6572206973206e6f7420746865205f66756e64696e6757616c6c657460008201527f2061646472657373206e6f72206f776e65722e00000000000000000000000000602082015250565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5f7472616e736665723a3a2053656c6c207472616e7366657220616d6f756e7460008201527f206578636565647320746865206d61785472616e73616374696f6e416d6f756e60208201527f742e000000000000000000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f5f7472616e736665723a3a20427579207472616e7366657220616d6f756e742060008201527f6578636565647320746865206d61785472616e73616374696f6e416d6f756e7460208201527f2e00000000000000000000000000000000000000000000000000000000000000604082015250565b7f5f7472616e736665723a3a204d61782077616c6c657420657863656564656400600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61457881613f4d565b811461458357600080fd5b50565b61458f81613f5f565b811461459a57600080fd5b50565b6145a681613f8b565b81146145b157600080fd5b5056fea26469706673582212203368fedb99d829af379ba0bdd4947fefcb4edf28c8d79dcdd9178abac181161464736f6c63430008070033

Deployed Bytecode Sourcemap

20252:11290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20579:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2792:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3422:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20794:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21031:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2525:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24196:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1848:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31135:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2424:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2151:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20631:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25298:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20755:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2641:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20481:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16887:103;;;;;;;;;;;;;:::i;:::-;;25093:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23422:81;;;;;;;;;;;;;:::i;:::-;;16664:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2900:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4662:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24911:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23982:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20712:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24578:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3238:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31400:102;;;;;;;;;;;;;:::i;:::-;;16998:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22756:658;;;;;;;;;;;;;:::i;:::-;;20679:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20579:45;;;;:::o;2792:100::-;2846:13;2879:5;2872:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2792:100;:::o;3422:226::-;3530:4;3547:13;3563:12;:10;:12::i;:::-;3547:28;;3586:32;3595:5;3602:7;3611:6;3586:8;:32::i;:::-;3636:4;3629:11;;;3422:226;;;;:::o;20794:31::-;;;;;;;;;;;;;:::o;21031:65::-;;;;:::o;2525:108::-;2586:7;2613:12;;2606:19;;2525:108;:::o;24196:374::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:2:::1;24347:41;24380:7;24347:28;24362:12;24347:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;:47;;24339:56;;;::::0;::::1;;24420:10;24406:11;:24;;;;24457:12;24441:13;:28;;;;24491:7;24480:8;:18;;;;24521:41;24554:7;24521:28;24536:12;24521:10;:14;;:28;;;;:::i;:::-;:32;;:41;;;;:::i;:::-;24509:9;:53;;;;24196:374:::0;;;:::o;1848:295::-;1979:4;1996:15;2014:12;:10;:12::i;:::-;1996:30;;2037:38;2053:4;2059:7;2068:6;2037:15;:38::i;:::-;2086:27;2096:4;2102:2;2106:6;2086:9;:27::i;:::-;2131:4;2124:11;;;1848:295;;;;;:::o;31135:170::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;31267:2:::1;31259:20;;:38;31280:16;31259:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31135:170:::0;;:::o;2424:93::-;2482:5;2507:2;2500:9;;2424:93;:::o;2151:265::-;2264:4;2281:13;2297:12;:10;:12::i;:::-;2281:28;;2320:66;2329:5;2336:7;2375:10;2345:11;:18;2357:5;2345:18;;;;;;;;;;;;;;;:27;2364:7;2345:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;2320:8;:66::i;:::-;2404:4;2397:11;;;2151:265;;;;:::o;20631:41::-;;;;:::o;25298:128::-;25366:4;25390:19;:28;25410:7;25390:28;;;;;;;;;;;;;;;;;;;;;;;;;25383:35;;25298:128;;;:::o;20755:32::-;;;;;;;;;;;;;:::o;2641:143::-;2731:7;2758:9;:18;2768:7;2758:18;;;;;;;;;;;;;;;;2751:25;;2641:143;;;:::o;20481:89::-;;;;;;;;;;;;;:::o;16887:103::-;16810:12;:10;:12::i;:::-;16799:23;;:7;:5;:7::i;:::-;:23;;;16791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16952:30:::1;16979:1;16952:18;:30::i;:::-;16887:103::o:0;25093:109::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;25185:9:::1;25168:14;;:26;;;;;;;;;;;;;;;;;;25093:109:::0;:::o;23422:81::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;23491:4:::1;23477:11;;:18;;;;;;;;;;;;;;;;;;23422:81::o:0;16664:87::-;16710:7;16737:6;;;;;;;;;;;16730:13;;16664:87;:::o;2900:104::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2900:104;:::o;4662:500::-;4780:4;4797:13;4813:12;:10;:12::i;:::-;4797:28;;4836:24;4863:11;:18;4875:5;4863:18;;;;;;;;;;;;;;;:27;4882:7;4863:27;;;;;;;;;;;;;;;;4836:54;;4943:15;4923:16;:35;;4901:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5059:60;5068:5;5075:7;5103:15;5084:16;:34;5059:8;:60::i;:::-;5150:4;5143:11;;;;4662:500;;;;:::o;3012:218::-;3116:4;3133:13;3149:12;:10;:12::i;:::-;3133:28;;3172;3182:5;3189:2;3193:6;3172:9;:28::i;:::-;3218:4;3211:11;;;3012:218;;;;:::o;24911:91::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;24989:5:::1;24974:12;;:20;;;;;;;;;;;;;;;;;;24911:91:::0;:::o;23982:132::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;24098:8:::1;24067:19;:28;24087:7;24067:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23982:132:::0;;:::o;20712:34::-;;;;:::o;30830:233::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;30962:36:::1;30977:2;30981:16;30962:14;:36::i;:::-;;31009:46;31027:4;31034:2;31038:16;31009:9;:46::i;:::-;30830:233:::0;;:::o;24578:262::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;24742:8:::1;24709:30;:41;;;;24790:9;24761:26;:38;;;;24822:10;24810:9;:22;;;;24578:262:::0;;;:::o;3238:176::-;3352:7;3379:11;:18;3391:5;3379:18;;;;;;;;;;;;;;;:27;3398:7;3379:27;;;;;;;;;;;;;;;;3372:34;;3238:176;;;;:::o;31400:102::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;31451:43:::1;31469:24;31487:4;31469:9;:24::i;:::-;31451:17;:43::i;:::-;31400:102::o:0;16998:238::-;16810:12;:10;:12::i;:::-;16799:23;;:7;:5;:7::i;:::-;:23;;;16791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17121:1:::1;17101:22;;:8;:22;;;;17079:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:28;17219:8;17200:18;:28::i;:::-;16998:238:::0;:::o;22756:658::-;23714:12;:10;:12::i;:::-;23696:30;;:14;;;;;;;;;;;:30;;;:74;;;;23758:12;:10;:12::i;:::-;23747:23;;:7;:5;:7::i;:::-;:23;;;23696:74;:119;;;;23810:4;23791:24;;:7;:5;:7::i;:::-;:24;;;23696:119;23674:220;;;;;;;;;;;;:::i;:::-;;;;;;;;;22840:15:::1;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22822:55;;;22904:4;22928:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22822:143;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22806:13;;:159;;;;;;;;;;;;;;;;;;23034:4;22976:31;:55;23016:13;;;;;;;;;;;22976:55;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;23102:4;23049:26;:50;23084:13;;;;;;;;;;;23049:50;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;23119:64;23136:4;23151:15;;;;;;;;;;;23169:13;:11;:13::i;:::-;23119:8;:64::i;:::-;23194:15;;;;;;;;;;;:31;;;23233:21;23278:4;23298:13;:11;:13::i;:::-;23326:1;23342::::0;23358:7:::1;:5;:7::i;:::-;23380:15;23194:212;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22756:658::o:0;20679:24::-;;;;:::o;1227:98::-;1280:7;1307:10;1300:17;;1227:98;:::o;6065:380::-;6218:1;6201:19;;:5;:19;;;;6193:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6299:1;6280:21;;:7;:21;;;;6272:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6383:6;6353:11;:18;6365:5;6353:18;;;;;;;;;;;;;;;:27;6372:7;6353:27;;;;;;;;;;;;;;;:36;;;;6421:7;6405:32;;6414:5;6405:32;;;6430:6;6405:32;;;;;;:::i;:::-;;;;;;;;6065:380;;;:::o;18940:98::-;18998:7;19029:1;19025;:5;;;;:::i;:::-;19018:12;;18940:98;;;;:::o;6453:502::-;6588:24;6615:25;6625:5;6632:7;6615:9;:25::i;:::-;6588:52;;6675:17;6655:16;:37;6651:297;;6755:6;6735:16;:26;;6709:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;6870:51;6879:5;6886:7;6914:6;6895:16;:25;6870:8;:51::i;:::-;6651:297;6577:378;6453:502;;;:::o;25434:3293::-;25582:1;25566:18;;:4;:18;;;;25558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25659:1;25645:16;;:2;:16;;;;25637:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25728:1;25718:6;:11;25714:93;;;25746:28;25762:4;25768:2;25772:1;25746:15;:28::i;:::-;25789:7;;25714:93;25841:19;:25;25861:4;25841:25;;;;;;;;;;;;;;;;;;;;;;;;;25840:26;:54;;;;;25871:19;:23;25891:2;25871:23;;;;;;;;;;;;;;;;;;;;;;;;;25870:24;25840:54;25836:224;;;25911:18;25950:8;;25932:15;25943:3;25932:6;:10;;:15;;;;:::i;:::-;:26;;;;:::i;:::-;25911:47;;25973:40;25983:4;25989:11;;;;;;;;;;;26002:10;25973:9;:40::i;:::-;26038:10;26028:20;;;;;:::i;:::-;;;25896:164;25836:224;26098:7;:5;:7::i;:::-;26090:15;;:4;:15;;;;:45;;;;;26128:7;:5;:7::i;:::-;26122:13;;:2;:13;;;;26090:45;:78;;;;;26166:1;26152:16;;:2;:16;;;;26090:78;:116;;;;;26199:6;26185:21;;:2;:21;;;;26090:116;:143;;;;;26224:9;;;;;;;;;;;26223:10;26090:143;26072:1536;;;26265:11;;;;;;;;;;;26260:195;;26325:19;:25;26345:4;26325:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26354:19;:23;26374:2;26354:23;;;;;;;;;;;;;;;;;;;;;;;;;26325:52;26295:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26260:195;26515:26;:32;26542:4;26515:32;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;26569:31;:35;26601:2;26569:35;;;;;;;;;;;;;;;;;;;;;;;;;26568:36;26515:89;26493:1104;;;26679:30;;26669:6;:40;;26639:179;;;;;;;;;;;;:::i;:::-;;;;;;;;;26893:9;;26876:13;26886:2;26876:9;:13::i;:::-;26867:6;:22;;;;:::i;:::-;:35;;26837:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26493:1104;;;27058:26;:30;27085:2;27058:30;;;;;;;;;;;;;;;;;;;;;;;;;:89;;;;;27110:31;:37;27142:4;27110:37;;;;;;;;;;;;;;;;;;;;;;;;;27109:38;27058:89;27036:561;;;27222:26;;27212:6;:36;;27182:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;27036:561;;;27385:31;:35;27417:2;27385:35;;;;;;;;;;;;;;;;;;;;;;;;;27380:217;;27497:9;;27480:13;27490:2;27480:9;:13::i;:::-;27471:6;:22;;;;:::i;:::-;:35;;27441:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27380:217;27036:561;26493:1104;26072:1536;27639:9;;;;;;;;;;;27638:10;:60;;;;;27666:26;:32;27693:4;27666:32;;;;;;;;;;;;;;;;;;;;;;;;;27665:33;27638:60;:103;;;;;27716:19;:25;27736:4;27716:25;;;;;;;;;;;;;;;;;;;;;;;;;27715:26;27638:103;:144;;;;;27759:19;:23;27779:2;27759:23;;;;;;;;;;;;;;;;;;;;;;;;;27758:24;27638:144;27620:274;;;27821:4;27809:9;;:16;;;;;;;;;;;;;;;;;;27840:10;:8;:10::i;:::-;27877:5;27865:9;;:17;;;;;;;;;;;;;;;;;;27620:274;27906:12;27922:9;;;;;;;;;;;27921:10;27906:25;;28052:12;;;;;;;;;;;:54;;;;28081:19;:25;28101:4;28081:25;;;;;;;;;;;;;;;;;;;;;;;;;28052:54;:94;;;;28123:19;:23;28143:2;28123:23;;;;;;;;;;;;;;;;;;;;;;;;;28052:94;:198;;;;28165:26;:32;28192:4;28165:32;;;;;;;;;;;;;;;;;;;;;;;;;28164:33;:85;;;;;28219:26;:30;28246:2;28219:30;;;;;;;;;;;;;;;;;;;;;;;;;28218:31;28164:85;28052:198;28034:243;;;28272:5;28262:15;;28034:243;28290:12;28321:7;28317:357;;;28352:30;28378:3;28352:21;28363:9;;28352:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;28345:37;;28447:9;;28430:13;;28423:4;:20;;;;:::i;:::-;28422:34;;;;:::i;:::-;28399:19;;:57;;;;;;;:::i;:::-;;;;;;;;28515:9;;28500:11;;28493:4;:18;;;;:::i;:::-;28492:32;;;;:::i;:::-;28471:17;;:53;;;;;;;:::i;:::-;;;;;;;;28552:1;28545:4;:8;28541:91;;;28574:42;28590:4;28604;28611;28574:15;:42::i;:::-;28541:91;28658:4;28648:14;;;;;:::i;:::-;;;28317:357;28686:33;28702:4;28708:2;28712:6;28686:15;:33::i;:::-;25547:3180;;25434:3293;;;;:::o;17244:191::-;17318:16;17337:6;;;;;;;;;;;17318:25;;17363:8;17354:6;;:17;;;;;;;;;;;;;;;;;;17418:8;17387:40;;17408:8;17387:40;;;;;;;;;;;;17307:128;17244:191;:::o;5879:178::-;5985:4;6021:6;6002:9;:16;6012:5;6002:16;;;;;;;;;;;;;;;:25;;;;6045:4;6038:11;;5879:178;;;;:::o;28735:477::-;28803:21;28841:1;28827:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28803:40;;28872:4;28854;28859:1;28854:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28898:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28888:4;28893:1;28888:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28933:62;28950:4;28965:15;;;;;;;;;;;28983:11;28933:8;:62::i;:::-;29008:15;;;;;;;;;;;:66;;;29089:11;29115:1;29131:4;29158;29178:15;29008:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28792:420;28735:477;:::o;5170:701::-;5317:1;5301:18;;:4;:18;;;;5293:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;5387:1;5373:16;;:2;:16;;;;5365:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5442:38;5463:4;5469:2;5473:6;5442:20;:38::i;:::-;5493:19;5515:9;:15;5525:4;5515:15;;;;;;;;;;;;;;;;5493:37;;5578:6;5563:11;:21;;5541:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;5718:6;5704:11;:20;5686:9;:15;5696:4;5686:15;;;;;;;;;;;;;;;:38;;;;5763:6;5746:9;:13;5756:2;5746:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;5802:2;5787:26;;5796:4;5787:26;;;5806:6;5787:26;;;;;;:::i;:::-;;;;;;;;5826:37;5846:4;5852:2;5856:6;5826:19;:37::i;:::-;5282:589;5170:701;;;:::o;19258:98::-;19316:7;19347:1;19343;:5;;;;:::i;:::-;19336:12;;19258:98;;;;:::o;29599:1159::-;29639:23;29665:24;29683:4;29665:9;:24::i;:::-;29639:50;;29700:25;29750:17;;29728:19;;:39;;;;:::i;:::-;29700:67;;29803:1;29784:15;:20;29780:33;;;29806:7;;;;29780:33;29845:19;;29827:15;:37;29823:93;;;29897:19;;29879:37;;29823:93;29929:23;30043:1;30010:17;29974:19;;29956:15;:37;;;;:::i;:::-;29955:72;;;;:::i;:::-;:89;;;;:::i;:::-;29929:115;;30055:26;30084:36;30104:15;30084;:19;;:36;;;;:::i;:::-;30055:65;;30133:25;30161:21;30133:49;;30195:37;30213:18;30195:17;:37::i;:::-;30245:18;30266:44;30292:17;30266:21;:25;;:44;;;;:::i;:::-;30245:65;;30321:21;30345:80;30397:17;30345:33;30360:17;;30345:10;:14;;:33;;;;:::i;:::-;:37;;:80;;;;:::i;:::-;30321:104;;30436:23;30475:13;30462:10;:26;;;;:::i;:::-;30436:52;;30521:1;30501:17;:21;;;;30555:1;30533:19;:23;;;;30577:14;;;;;;;;;;;30569:32;;:47;30602:13;30569:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30651:1;30633:15;:19;:42;;;;;30674:1;30656:15;:19;30633:42;30629:122;;;30692:47;30706:15;30723;30692:13;:47::i;:::-;30629:122;29628:1130;;;;;;;;29599:1159;:::o;19152:98::-;19210:7;19241:1;19237;:5;;;;:::i;:::-;19230:12;;19152:98;;;;:::o;6963:125::-;;;;:::o;7096:124::-;;;;:::o;19046:98::-;19104:7;19135:1;19131;:5;;;;:::i;:::-;19124:12;;19046:98;;;;:::o;29220:371::-;29303:62;29320:4;29335:15;;;;;;;;;;;29353:11;29303:8;:62::i;:::-;29378:15;;;;;;;;;;;:31;;;29417:9;29450:4;29470:11;29496:1;29512;29528:14;;;;;;;;;;;29557:15;29378:205;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29220:371;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:619::-;3891:6;3899;3907;3956:2;3944:9;3935:7;3931:23;3927:32;3924:119;;;3962:79;;:::i;:::-;3924:119;4082:1;4107:53;4152:7;4143:6;4132:9;4128:22;4107:53;:::i;:::-;4097:63;;4053:117;4209:2;4235:53;4280:7;4271:6;4260:9;4256:22;4235:53;:::i;:::-;4225:63;;4180:118;4337:2;4363:53;4408:7;4399:6;4388:9;4384:22;4363:53;:::i;:::-;4353:63;;4308:118;3814:619;;;;;:::o;4439:663::-;4527:6;4535;4543;4592:2;4580:9;4571:7;4567:23;4563:32;4560:119;;;4598:79;;:::i;:::-;4560:119;4718:1;4743:64;4799:7;4790:6;4779:9;4775:22;4743:64;:::i;:::-;4733:74;;4689:128;4856:2;4882:64;4938:7;4929:6;4918:9;4914:22;4882:64;:::i;:::-;4872:74;;4827:129;4995:2;5021:64;5077:7;5068:6;5057:9;5053:22;5021:64;:::i;:::-;5011:74;;4966:129;4439:663;;;;;:::o;5108:179::-;5177:10;5198:46;5240:3;5232:6;5198:46;:::i;:::-;5276:4;5271:3;5267:14;5253:28;;5108:179;;;;:::o;5293:108::-;5370:24;5388:5;5370:24;:::i;:::-;5365:3;5358:37;5293:108;;:::o;5407:118::-;5494:24;5512:5;5494:24;:::i;:::-;5489:3;5482:37;5407:118;;:::o;5561:732::-;5680:3;5709:54;5757:5;5709:54;:::i;:::-;5779:86;5858:6;5853:3;5779:86;:::i;:::-;5772:93;;5889:56;5939:5;5889:56;:::i;:::-;5968:7;5999:1;5984:284;6009:6;6006:1;6003:13;5984:284;;;6085:6;6079:13;6112:63;6171:3;6156:13;6112:63;:::i;:::-;6105:70;;6198:60;6251:6;6198:60;:::i;:::-;6188:70;;6044:224;6031:1;6028;6024:9;6019:14;;5984:284;;;5988:14;6284:3;6277:10;;5685:608;;;5561:732;;;;:::o;6299:109::-;6380:21;6395:5;6380:21;:::i;:::-;6375:3;6368:34;6299:109;;:::o;6414:147::-;6509:45;6548:5;6509:45;:::i;:::-;6504:3;6497:58;6414:147;;:::o;6567:364::-;6655:3;6683:39;6716:5;6683:39;:::i;:::-;6738:71;6802:6;6797:3;6738:71;:::i;:::-;6731:78;;6818:52;6863:6;6858:3;6851:4;6844:5;6840:16;6818:52;:::i;:::-;6895:29;6917:6;6895:29;:::i;:::-;6890:3;6886:39;6879:46;;6659:272;6567:364;;;;:::o;6937:366::-;7079:3;7100:67;7164:2;7159:3;7100:67;:::i;:::-;7093:74;;7176:93;7265:3;7176:93;:::i;:::-;7294:2;7289:3;7285:12;7278:19;;6937:366;;;:::o;7309:::-;7451:3;7472:67;7536:2;7531:3;7472:67;:::i;:::-;7465:74;;7548:93;7637:3;7548:93;:::i;:::-;7666:2;7661:3;7657:12;7650:19;;7309:366;;;:::o;7681:::-;7823:3;7844:67;7908:2;7903:3;7844:67;:::i;:::-;7837:74;;7920:93;8009:3;7920:93;:::i;:::-;8038:2;8033:3;8029:12;8022:19;;7681:366;;;:::o;8053:::-;8195:3;8216:67;8280:2;8275:3;8216:67;:::i;:::-;8209:74;;8292:93;8381:3;8292:93;:::i;:::-;8410:2;8405:3;8401:12;8394:19;;8053:366;;;:::o;8425:::-;8567:3;8588:67;8652:2;8647:3;8588:67;:::i;:::-;8581:74;;8664:93;8753:3;8664:93;:::i;:::-;8782:2;8777:3;8773:12;8766:19;;8425:366;;;:::o;8797:::-;8939:3;8960:67;9024:2;9019:3;8960:67;:::i;:::-;8953:74;;9036:93;9125:3;9036:93;:::i;:::-;9154:2;9149:3;9145:12;9138:19;;8797:366;;;:::o;9169:::-;9311:3;9332:67;9396:2;9391:3;9332:67;:::i;:::-;9325:74;;9408:93;9497:3;9408:93;:::i;:::-;9526:2;9521:3;9517:12;9510:19;;9169:366;;;:::o;9541:::-;9683:3;9704:67;9768:2;9763:3;9704:67;:::i;:::-;9697:74;;9780:93;9869:3;9780:93;:::i;:::-;9898:2;9893:3;9889:12;9882:19;;9541:366;;;:::o;9913:::-;10055:3;10076:67;10140:2;10135:3;10076:67;:::i;:::-;10069:74;;10152:93;10241:3;10152:93;:::i;:::-;10270:2;10265:3;10261:12;10254:19;;9913:366;;;:::o;10285:::-;10427:3;10448:67;10512:2;10507:3;10448:67;:::i;:::-;10441:74;;10524:93;10613:3;10524:93;:::i;:::-;10642:2;10637:3;10633:12;10626:19;;10285:366;;;:::o;10657:::-;10799:3;10820:67;10884:2;10879:3;10820:67;:::i;:::-;10813:74;;10896:93;10985:3;10896:93;:::i;:::-;11014:2;11009:3;11005:12;10998:19;;10657:366;;;:::o;11029:::-;11171:3;11192:67;11256:2;11251:3;11192:67;:::i;:::-;11185:74;;11268:93;11357:3;11268:93;:::i;:::-;11386:2;11381:3;11377:12;11370:19;;11029:366;;;:::o;11401:::-;11543:3;11564:67;11628:2;11623:3;11564:67;:::i;:::-;11557:74;;11640:93;11729:3;11640:93;:::i;:::-;11758:2;11753:3;11749:12;11742:19;;11401:366;;;:::o;11773:::-;11915:3;11936:67;12000:2;11995:3;11936:67;:::i;:::-;11929:74;;12012:93;12101:3;12012:93;:::i;:::-;12130:2;12125:3;12121:12;12114:19;;11773:366;;;:::o;12145:::-;12287:3;12308:67;12372:2;12367:3;12308:67;:::i;:::-;12301:74;;12384:93;12473:3;12384:93;:::i;:::-;12502:2;12497:3;12493:12;12486:19;;12145:366;;;:::o;12517:118::-;12604:24;12622:5;12604:24;:::i;:::-;12599:3;12592:37;12517:118;;:::o;12641:112::-;12724:22;12740:5;12724:22;:::i;:::-;12719:3;12712:35;12641:112;;:::o;12759:222::-;12852:4;12890:2;12879:9;12875:18;12867:26;;12903:71;12971:1;12960:9;12956:17;12947:6;12903:71;:::i;:::-;12759:222;;;;:::o;12987:332::-;13108:4;13146:2;13135:9;13131:18;13123:26;;13159:71;13227:1;13216:9;13212:17;13203:6;13159:71;:::i;:::-;13240:72;13308:2;13297:9;13293:18;13284:6;13240:72;:::i;:::-;12987:332;;;;;:::o;13325:807::-;13574:4;13612:3;13601:9;13597:19;13589:27;;13626:71;13694:1;13683:9;13679:17;13670:6;13626:71;:::i;:::-;13707:72;13775:2;13764:9;13760:18;13751:6;13707:72;:::i;:::-;13789:80;13865:2;13854:9;13850:18;13841:6;13789:80;:::i;:::-;13879;13955:2;13944:9;13940:18;13931:6;13879:80;:::i;:::-;13969:73;14037:3;14026:9;14022:19;14013:6;13969:73;:::i;:::-;14052;14120:3;14109:9;14105:19;14096:6;14052:73;:::i;:::-;13325:807;;;;;;;;;:::o;14138:210::-;14225:4;14263:2;14252:9;14248:18;14240:26;;14276:65;14338:1;14327:9;14323:17;14314:6;14276:65;:::i;:::-;14138:210;;;;:::o;14354:313::-;14467:4;14505:2;14494:9;14490:18;14482:26;;14554:9;14548:4;14544:20;14540:1;14529:9;14525:17;14518:47;14582:78;14655:4;14646:6;14582:78;:::i;:::-;14574:86;;14354:313;;;;:::o;14673:419::-;14839:4;14877:2;14866:9;14862:18;14854:26;;14926:9;14920:4;14916:20;14912:1;14901:9;14897:17;14890:47;14954:131;15080:4;14954:131;:::i;:::-;14946:139;;14673:419;;;:::o;15098:::-;15264:4;15302:2;15291:9;15287:18;15279:26;;15351:9;15345:4;15341:20;15337:1;15326:9;15322:17;15315:47;15379:131;15505:4;15379:131;:::i;:::-;15371:139;;15098:419;;;:::o;15523:::-;15689:4;15727:2;15716:9;15712:18;15704:26;;15776:9;15770:4;15766:20;15762:1;15751:9;15747:17;15740:47;15804:131;15930:4;15804:131;:::i;:::-;15796:139;;15523:419;;;:::o;15948:::-;16114:4;16152:2;16141:9;16137:18;16129:26;;16201:9;16195:4;16191:20;16187:1;16176:9;16172:17;16165:47;16229:131;16355:4;16229:131;:::i;:::-;16221:139;;15948:419;;;:::o;16373:::-;16539:4;16577:2;16566:9;16562:18;16554:26;;16626:9;16620:4;16616:20;16612:1;16601:9;16597:17;16590:47;16654:131;16780:4;16654:131;:::i;:::-;16646:139;;16373:419;;;:::o;16798:::-;16964:4;17002:2;16991:9;16987:18;16979:26;;17051:9;17045:4;17041:20;17037:1;17026:9;17022:17;17015:47;17079:131;17205:4;17079:131;:::i;:::-;17071:139;;16798:419;;;:::o;17223:::-;17389:4;17427:2;17416:9;17412:18;17404:26;;17476:9;17470:4;17466:20;17462:1;17451:9;17447:17;17440:47;17504:131;17630:4;17504:131;:::i;:::-;17496:139;;17223:419;;;:::o;17648:::-;17814:4;17852:2;17841:9;17837:18;17829:26;;17901:9;17895:4;17891:20;17887:1;17876:9;17872:17;17865:47;17929:131;18055:4;17929:131;:::i;:::-;17921:139;;17648:419;;;:::o;18073:::-;18239:4;18277:2;18266:9;18262:18;18254:26;;18326:9;18320:4;18316:20;18312:1;18301:9;18297:17;18290:47;18354:131;18480:4;18354:131;:::i;:::-;18346:139;;18073:419;;;:::o;18498:::-;18664:4;18702:2;18691:9;18687:18;18679:26;;18751:9;18745:4;18741:20;18737:1;18726:9;18722:17;18715:47;18779:131;18905:4;18779:131;:::i;:::-;18771:139;;18498:419;;;:::o;18923:::-;19089:4;19127:2;19116:9;19112:18;19104:26;;19176:9;19170:4;19166:20;19162:1;19151:9;19147:17;19140:47;19204:131;19330:4;19204:131;:::i;:::-;19196:139;;18923:419;;;:::o;19348:::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19601:9;19595:4;19591:20;19587:1;19576:9;19572:17;19565:47;19629:131;19755:4;19629:131;:::i;:::-;19621:139;;19348:419;;;:::o;19773:::-;19939:4;19977:2;19966:9;19962:18;19954:26;;20026:9;20020:4;20016:20;20012:1;20001:9;19997:17;19990:47;20054:131;20180:4;20054:131;:::i;:::-;20046:139;;19773:419;;;:::o;20198:::-;20364:4;20402:2;20391:9;20387:18;20379:26;;20451:9;20445:4;20441:20;20437:1;20426:9;20422:17;20415:47;20479:131;20605:4;20479:131;:::i;:::-;20471:139;;20198:419;;;:::o;20623:::-;20789:4;20827:2;20816:9;20812:18;20804:26;;20876:9;20870:4;20866:20;20862:1;20851:9;20847:17;20840:47;20904:131;21030:4;20904:131;:::i;:::-;20896:139;;20623:419;;;:::o;21048:222::-;21141:4;21179:2;21168:9;21164:18;21156:26;;21192:71;21260:1;21249:9;21245:17;21236:6;21192:71;:::i;:::-;21048:222;;;;:::o;21276:831::-;21539:4;21577:3;21566:9;21562:19;21554:27;;21591:71;21659:1;21648:9;21644:17;21635:6;21591:71;:::i;:::-;21672:80;21748:2;21737:9;21733:18;21724:6;21672:80;:::i;:::-;21799:9;21793:4;21789:20;21784:2;21773:9;21769:18;21762:48;21827:108;21930:4;21921:6;21827:108;:::i;:::-;21819:116;;21945:72;22013:2;22002:9;21998:18;21989:6;21945:72;:::i;:::-;22027:73;22095:3;22084:9;22080:19;22071:6;22027:73;:::i;:::-;21276:831;;;;;;;;:::o;22113:214::-;22202:4;22240:2;22229:9;22225:18;22217:26;;22253:67;22317:1;22306:9;22302:17;22293:6;22253:67;:::i;:::-;22113:214;;;;:::o;22414:132::-;22481:4;22504:3;22496:11;;22534:4;22529:3;22525:14;22517:22;;22414:132;;;:::o;22552:114::-;22619:6;22653:5;22647:12;22637:22;;22552:114;;;:::o;22672:99::-;22724:6;22758:5;22752:12;22742:22;;22672:99;;;:::o;22777:113::-;22847:4;22879;22874:3;22870:14;22862:22;;22777:113;;;:::o;22896:184::-;22995:11;23029:6;23024:3;23017:19;23069:4;23064:3;23060:14;23045:29;;22896:184;;;;:::o;23086:169::-;23170:11;23204:6;23199:3;23192:19;23244:4;23239:3;23235:14;23220:29;;23086:169;;;;:::o;23261:305::-;23301:3;23320:20;23338:1;23320:20;:::i;:::-;23315:25;;23354:20;23372:1;23354:20;:::i;:::-;23349:25;;23508:1;23440:66;23436:74;23433:1;23430:81;23427:107;;;23514:18;;:::i;:::-;23427:107;23558:1;23555;23551:9;23544:16;;23261:305;;;;:::o;23572:185::-;23612:1;23629:20;23647:1;23629:20;:::i;:::-;23624:25;;23663:20;23681:1;23663:20;:::i;:::-;23658:25;;23702:1;23692:35;;23707:18;;:::i;:::-;23692:35;23749:1;23746;23742:9;23737:14;;23572:185;;;;:::o;23763:348::-;23803:7;23826:20;23844:1;23826:20;:::i;:::-;23821:25;;23860:20;23878:1;23860:20;:::i;:::-;23855:25;;24048:1;23980:66;23976:74;23973:1;23970:81;23965:1;23958:9;23951:17;23947:105;23944:131;;;24055:18;;:::i;:::-;23944:131;24103:1;24100;24096:9;24085:20;;23763:348;;;;:::o;24117:191::-;24157:4;24177:20;24195:1;24177:20;:::i;:::-;24172:25;;24211:20;24229:1;24211:20;:::i;:::-;24206:25;;24250:1;24247;24244:8;24241:34;;;24255:18;;:::i;:::-;24241:34;24300:1;24297;24293:9;24285:17;;24117:191;;;;:::o;24314:96::-;24351:7;24380:24;24398:5;24380:24;:::i;:::-;24369:35;;24314:96;;;:::o;24416:90::-;24450:7;24493:5;24486:13;24479:21;24468:32;;24416:90;;;:::o;24512:126::-;24549:7;24589:42;24582:5;24578:54;24567:65;;24512:126;;;:::o;24644:77::-;24681:7;24710:5;24699:16;;24644:77;;;:::o;24727:86::-;24762:7;24802:4;24795:5;24791:16;24780:27;;24727:86;;;:::o;24819:121::-;24877:9;24910:24;24928:5;24910:24;:::i;:::-;24897:37;;24819:121;;;:::o;24946:307::-;25014:1;25024:113;25038:6;25035:1;25032:13;25024:113;;;25123:1;25118:3;25114:11;25108:18;25104:1;25099:3;25095:11;25088:39;25060:2;25057:1;25053:10;25048:15;;25024:113;;;25155:6;25152:1;25149:13;25146:101;;;25235:1;25226:6;25221:3;25217:16;25210:27;25146:101;24995:258;24946:307;;;:::o;25259:320::-;25303:6;25340:1;25334:4;25330:12;25320:22;;25387:1;25381:4;25377:12;25408:18;25398:81;;25464:4;25456:6;25452:17;25442:27;;25398:81;25526:2;25518:6;25515:14;25495:18;25492:38;25489:84;;;25545:18;;:::i;:::-;25489:84;25310:269;25259:320;;;:::o;25585:180::-;25633:77;25630:1;25623:88;25730:4;25727:1;25720:15;25754:4;25751:1;25744:15;25771:180;25819:77;25816:1;25809:88;25916:4;25913:1;25906:15;25940:4;25937:1;25930:15;25957:180;26005:77;26002:1;25995:88;26102:4;26099:1;26092:15;26126:4;26123:1;26116:15;26143:180;26191:77;26188:1;26181:88;26288:4;26285:1;26278:15;26312:4;26309:1;26302:15;26329:180;26377:77;26374:1;26367:88;26474:4;26471:1;26464:15;26498:4;26495:1;26488:15;26638:117;26747:1;26744;26737:12;26761:102;26802:6;26853:2;26849:7;26844:2;26837:5;26833:14;26829:28;26819:38;;26761:102;;;:::o;26869:222::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:5;27073:2;27065:6;27061:15;27054:30;26869:222;:::o;27097:225::-;27237:34;27233:1;27225:6;27221:14;27214:58;27306:8;27301:2;27293:6;27289:15;27282:33;27097:225;:::o;27328:221::-;27468:34;27464:1;27456:6;27452:14;27445:58;27537:4;27532:2;27524:6;27520:15;27513:29;27328:221;:::o;27555:179::-;27695:31;27691:1;27683:6;27679:14;27672:55;27555:179;:::o;27740:225::-;27880:34;27876:1;27868:6;27864:14;27857:58;27949:8;27944:2;27936:6;27932:15;27925:33;27740:225;:::o;27971:180::-;28111:32;28107:1;28099:6;28095:14;28088:56;27971:180;:::o;28157:238::-;28297:34;28293:1;28285:6;28281:14;28274:58;28366:21;28361:2;28353:6;28349:15;28342:46;28157:238;:::o;28401:221::-;28541:34;28537:1;28529:6;28525:14;28518:58;28610:4;28605:2;28597:6;28593:15;28586:29;28401:221;:::o;28628:182::-;28768:34;28764:1;28756:6;28752:14;28745:58;28628:182;:::o;28816:290::-;28956:34;28952:1;28944:6;28940:14;28933:58;29025:34;29020:2;29012:6;29008:15;29001:59;29094:4;29089:2;29081:6;29077:15;29070:29;28816:290;:::o;29112:224::-;29252:34;29248:1;29240:6;29236:14;29229:58;29321:7;29316:2;29308:6;29304:15;29297:32;29112:224;:::o;29342:223::-;29482:34;29478:1;29470:6;29466:14;29459:58;29551:6;29546:2;29538:6;29534:15;29527:31;29342:223;:::o;29571:289::-;29711:34;29707:1;29699:6;29695:14;29688:58;29780:34;29775:2;29767:6;29763:15;29756:59;29849:3;29844:2;29836:6;29832:15;29825:28;29571:289;:::o;29866:181::-;30006:33;30002:1;29994:6;29990:14;29983:57;29866:181;:::o;30053:224::-;30193:34;30189:1;30181:6;30177:14;30170:58;30262:7;30257:2;30249:6;30245:15;30238:32;30053:224;:::o;30283:122::-;30356:24;30374:5;30356:24;:::i;:::-;30349:5;30346:35;30336:63;;30395:1;30392;30385:12;30336:63;30283:122;:::o;30411:116::-;30481:21;30496:5;30481:21;:::i;:::-;30474:5;30471:32;30461:60;;30517:1;30514;30507:12;30461:60;30411:116;:::o;30533:122::-;30606:24;30624:5;30606:24;:::i;:::-;30599:5;30596:35;30586:63;;30645:1;30642;30635:12;30586:63;30533:122;:::o

Swarm Source

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