ETH Price: $2,479.63 (-3.18%)

Token

DEDEDE Token (DEDEDE)
 

Overview

Max Total Supply

841,033,056,644,858.709329328598619895 DEDEDE

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
362,791,702,892.316938797488091144 DEDEDE

Value
$0.00
0x5b8ddb3d9e64e74fc298c7478fd2c2b048fd20b6
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:
DEDEDE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

// kingudede.de
// twitter.com/kingudedede
// t.me/dededecoin

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
 
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
 
// import "../utils/Context.sol";
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
 
// pragma solidity ^0.8.0;
 
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
 
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}
 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
 
// pragma solidity ^0.8.0;
 
// import "../IERC20.sol";
 
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
// pragma solidity ^0.8.0;
 
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    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;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
 
        return true;
    }
 
    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0));
        require(to != address(0));
 
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount);
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
 
        emit Transfer(from, to, amount);
    }
 
    function _mint(address to, uint256 amount) internal virtual {
        _totalSupply += amount;
 
        // Cannot overflow because the sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            _balances[to] += amount;
        }
 
        emit Transfer(address(0), to, amount);
    }
 
    function _burn(address from, uint256 amount) internal virtual {
        _balances[from] -= amount;
 
        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            _totalSupply -= amount;
        }
 
        emit Transfer(from, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount);
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
}
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
 
    function WETH() external pure returns (address);
 
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}
contract DEDEDE is ERC20, Ownable {
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0);
 
    bool private swapping;
 
    address public marketingWallet;
    address public liquidityWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;
 
    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private previousFee;
 
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    ); 
 
    constructor() payable ERC20("DEDEDE Token", "DEDEDE") {
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
 
        uint256 totalSupply = 888_888_888_888_888 ether;
 
        maxTransactionAmount = (totalSupply);
        maxWallet = (totalSupply);
        swapTokensAtAmount = (totalSupply * 1) / 1000;
 
        buyMarketingFee = 0;
        buyLiquidityFee = 0;
        buyBurnFee = 0;
        buyTotalFees =
            buyMarketingFee +
            buyLiquidityFee +
            buyBurnFee;
 
        sellMarketingFee = 23;
        sellLiquidityFee = 0;
        sellBurnFee = 2;
        sellTotalFees =
            sellMarketingFee +
            sellLiquidityFee +
            sellBurnFee;
 
        previousFee = sellTotalFees;
 
        marketingWallet = _msgSender();
        liquidityWallet = _msgSender();
 
        excludeFromFees(_msgSender(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(liquidityWallet, true);
 
        excludeFromMaxTransaction(_msgSender(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(liquidityWallet, true);
 
        _mint(address(this), (totalSupply * 100) / 100);
    }
 
    receive() external payable {}
 
    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }
 
    function openTrading() external onlyOwner {
        require(!tradingActive);
 
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        _approve(address(this), address(uniswapV2Pair), type(uint256).max);
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
 
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
 
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            _msgSender(),
            block.timestamp
        );
        tradingActive = true;
        swapEnabled = true;
    }
 
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(newAmount >= (totalSupply() * 1) / 100000);
        require(newAmount <= (totalSupply() * 5) / 1000);
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxWalletAndTxnAmount(
        uint256 newTxnNum,
        uint256 newMaxWalletNum
    ) external onlyOwner {
        require(newTxnNum >= ((totalSupply() * 5) / 1000));
        require(newMaxWalletNum >= ((totalSupply() * 5) / 1000));
        maxWallet = newMaxWalletNum;
        maxTransactionAmount = newTxnNum;
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function automateBuyFees(
        uint256 _buyMarketingFee,
        uint256 _buyLiquidityFee,
        uint256 _buyBurnFee,
        uint256 _sellMarketingFee,
        uint256 _sellLiquidityFee,
        uint256 _sellBurnFee
    ) external onlyOwner {
        updateBuyFees(
            _buyMarketingFee,
            _buyLiquidityFee,
            _buyBurnFee
        );
        updateSellFees(
            _sellMarketingFee,
            _sellLiquidityFee,
            _sellBurnFee
        );
    }
 
    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) private {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBurnFee = _burnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
        require(buyTotalFees <= 32);
    }
 
    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _burnFee
    ) private {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBurnFee = _burnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
        previousFee = sellTotalFees;
        require(sellTotalFees <= 32);
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
 
    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success, ) = address(msg.sender).call{value: address(this).balance}(
            ""
        );
    }
 
    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(IERC20(tkn).balanceOf(address(this)) > 0);
        uint256 amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
 
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0));
        require(to != address(0));
 
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !swapping
        ) {
            if (!tradingActive) {
                require(_isExcludedFromFees[from] || _isExcludedFromFees[to]);
            }
 
            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(amount <= maxTransactionAmount);
                require(amount + balanceOf(to) <= maxWallet);
            }
            //when sell
            else if (
                automatedMarketMakerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(amount <= maxTransactionAmount);
            } else if (!_isExcludedMaxTransactionAmount[to]) {
                require(amount + balanceOf(to) <= maxWallet);
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        uint256 burnFees = 0;
 
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount * sellTotalFees / 100;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                burnFees = (fees * sellBurnFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount * buyTotalFees / 100;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                burnFees = (fees * buyBurnFee) / buyTotalFees;
            }
 
            if (fees > 0) {
                if (burnFees > 0) {
                    super._burn(from, burnFees);
                }
                super._transfer(from, address(this), fees - burnFees);
            }
            
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
        sellTotalFees = previousFee;
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing;
        bool success;
 
        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }
 
        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
 
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH);
 
        uint256 ethBalance = address(this).balance - initialETHBalance;
 
        uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;
 
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
 
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
 
        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"}],"name":"automateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTxnNum","type":"uint256"},{"internalType":"uint256","name":"newMaxWalletNum","type":"uint256"}],"name":"updateMaxWalletAndTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506040518060400160405280600c81526020017f44454445444520546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f44454445444500000000000000000000000000000000000000000000000000008152508160039081620000b7919062000b1d565b508060049081620000c9919062000b1d565b505050620000ec620000e06200048460201b60201c565b6200048c60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000169306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200055260201b60201c565b60006d2bd35ae79a49ed3975a215e0000090508060098190555080600b819055506103e86001826200019c919062000c33565b620001a8919062000cad565b600a819055506000600e819055506000600f819055506000601081905550601054600f54600e54620001db919062000ce5565b620001e7919062000ce5565b600d819055506017601281905550600060138190555060026014819055506014546013546012546200021a919062000ce5565b62000226919062000ce5565b601181905550601154601781905550620002456200048460201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002956200048460201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002f7620002e96200048460201b60201c565b60016200063f60201b60201c565b6200030a3060016200063f60201b60201c565b6200031e600060016200063f60201b60201c565b62000353600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200063f60201b60201c565b62000388600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200063f60201b60201c565b620003aa6200039c6200048460201b60201c565b6001620006aa60201b60201c565b620003bd306001620006aa60201b60201c565b620003d160006001620006aa60201b60201c565b620003e66080516001620006aa60201b60201c565b6200041b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006aa60201b60201c565b62000450600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006aa60201b60201c565b6200047d306064808462000465919062000c33565b62000471919062000cad565b6200071560201b60201c565b5062000dd1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000632919062000d31565b60405180910390a3505050565b6200064f620007e860201b60201c565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006ba620007e860201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b806002600082825462000729919062000ce5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007dc919062000d31565b60405180910390a35050565b620007f86200048460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200081e6200087960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086e9062000daf565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200092557607f821691505b6020821081036200093b576200093a620008dd565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000966565b620009b1868362000966565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009fe620009f8620009f284620009c9565b620009d3565b620009c9565b9050919050565b6000819050919050565b62000a1a83620009dd565b62000a3262000a298262000a05565b84845462000973565b825550505050565b600090565b62000a4962000a3a565b62000a5681848462000a0f565b505050565b5b8181101562000a7e5762000a7260008262000a3f565b60018101905062000a5c565b5050565b601f82111562000acd5762000a978162000941565b62000aa28462000956565b8101602085101562000ab2578190505b62000aca62000ac18562000956565b83018262000a5b565b50505b505050565b600082821c905092915050565b600062000af26000198460080262000ad2565b1980831691505092915050565b600062000b0d838362000adf565b9150826002028217905092915050565b62000b2882620008a3565b67ffffffffffffffff81111562000b445762000b43620008ae565b5b62000b5082546200090c565b62000b5d82828562000a82565b600060209050601f83116001811462000b95576000841562000b80578287015190505b62000b8c858262000aff565b86555062000bfc565b601f19841662000ba58662000941565b60005b8281101562000bcf5784890151825560018201915060208501945060208101905062000ba8565b8683101562000bef578489015162000beb601f89168262000adf565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c4082620009c9565b915062000c4d83620009c9565b925082820262000c5d81620009c9565b9150828204841483151762000c775762000c7662000c04565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cba82620009c9565b915062000cc783620009c9565b92508262000cda5762000cd962000c7e565b5b828204905092915050565b600062000cf282620009c9565b915062000cff83620009c9565b925082820190508082111562000d1a5762000d1962000c04565b5b92915050565b62000d2b81620009c9565b82525050565b600060208201905062000d48600083018462000d20565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d9760208362000d4e565b915062000da48262000d5f565b602082019050919050565b6000602082019050818103600083015262000dca8162000d88565b9050919050565b60805161381162000e2c60003960008181610a7e01528181610f4701528181610ff2015281816111ac015281816112a90152818161293201528181612a1301528181612a3a01528181612ad60152612afd01526138116000f3fe6080604052600436106102555760003560e01c806395d89b4111610139578063d257b34f116100b6578063e71dc3f51161007a578063e71dc3f5146108db578063f11a24d314610906578063f2fde38b14610931578063f5648a4f1461095a578063f637434214610971578063f8b45b051461099c5761025c565b8063d257b34f146107e0578063d46980161461081d578063d85ba06314610848578063dd62ed3e14610873578063e2f45605146108b05761025c565b8063bbc0c742116100fd578063bbc0c74214610721578063c02466681461074c578063c8c8ebe414610775578063c9567bf9146107a0578063cb963728146107b75761025c565b806395d89b41146106285780639618839914610653578063a457c2d71461067c578063a9059cbb146106b9578063adb873bd146106f65761025c565b80634fbee193116101d2578063715018a611610196578063715018a61461053c5780637571336a1461055357806375f0a8741461057c5780637bce5a04146105a75780638da5cb5b146105d257806392136913146105fd5761025c565b80634fbee1931461044357806351a0faf7146104805780636a486a8e146104a95780636ddd1713146104d457806370a08231146104ff5761025c565b806327c8f8351161021957806327c8f8351461035c578063313ce5671461038757806339509351146103b257806342966c68146103ef57806349bd5a5e146104185761025c565b806306fdde0314610261578063095ea7b31461028c5780631694505e146102c957806318160ddd146102f457806323b872dd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109c7565b6040516102839190612c5c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612d17565b610a59565b6040516102c09190612d72565b60405180910390f35b3480156102d557600080fd5b506102de610a7c565b6040516102eb9190612dec565b60405180910390f35b34801561030057600080fd5b50610309610aa0565b6040516103169190612e16565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612e31565b610aaa565b6040516103539190612d72565b60405180910390f35b34801561036857600080fd5b50610371610ad9565b60405161037e9190612e93565b60405180910390f35b34801561039357600080fd5b5061039c610ade565b6040516103a99190612eca565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190612d17565b610ae7565b6040516103e69190612d72565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612ee5565b610b1e565b005b34801561042457600080fd5b5061042d610b2b565b60405161043a9190612e93565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612f12565b610b51565b6040516104779190612d72565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612f3f565b610ba7565b005b3480156104b557600080fd5b506104be610bcd565b6040516104cb9190612e16565b60405180910390f35b3480156104e057600080fd5b506104e9610bd3565b6040516104f69190612d72565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612f12565b610be6565b6040516105339190612e16565b60405180910390f35b34801561054857600080fd5b50610551610c2e565b005b34801561055f57600080fd5b5061057a60048036038101906105759190612ff8565b610c42565b005b34801561058857600080fd5b50610591610ca5565b60405161059e9190612e93565b60405180910390f35b3480156105b357600080fd5b506105bc610ccb565b6040516105c99190612e16565b60405180910390f35b3480156105de57600080fd5b506105e7610cd1565b6040516105f49190612e93565b60405180910390f35b34801561060957600080fd5b50610612610cfb565b60405161061f9190612e16565b60405180910390f35b34801561063457600080fd5b5061063d610d01565b60405161064a9190612c5c565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190613038565b610d93565b005b34801561068857600080fd5b506106a3600480360381019061069e9190612d17565b610e07565b6040516106b09190612d72565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190612d17565b610e7e565b6040516106ed9190612d72565b60405180910390f35b34801561070257600080fd5b5061070b610ea1565b6040516107189190612e16565b60405180910390f35b34801561072d57600080fd5b50610736610ea7565b6040516107439190612d72565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e9190612ff8565b610eba565b005b34801561078157600080fd5b5061078a610f1d565b6040516107979190612e16565b60405180910390f35b3480156107ac57600080fd5b506107b5610f23565b005b3480156107c357600080fd5b506107de60048036038101906107d99190612f12565b611399565b005b3480156107ec57600080fd5b5061080760048036038101906108029190612ee5565b611528565b6040516108149190612d72565b60405180910390f35b34801561082957600080fd5b5061083261159d565b60405161083f9190612e93565b60405180910390f35b34801561085457600080fd5b5061085d6115c3565b60405161086a9190612e16565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613078565b6115c9565b6040516108a79190612e16565b60405180910390f35b3480156108bc57600080fd5b506108c5611650565b6040516108d29190612e16565b60405180910390f35b3480156108e757600080fd5b506108f0611656565b6040516108fd9190612e16565b60405180910390f35b34801561091257600080fd5b5061091b61165c565b6040516109289190612e16565b60405180910390f35b34801561093d57600080fd5b5061095860048036038101906109539190612f12565b611662565b005b34801561096657600080fd5b5061096f6116e5565b005b34801561097d57600080fd5b5061098661175e565b6040516109939190612e16565b60405180910390f35b3480156109a857600080fd5b506109b1611764565b6040516109be9190612e16565b60405180910390f35b6060600380546109d6906130e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a02906130e7565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b600080610a6461176a565b9050610a71818585611772565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600080610ab561176a565b9050610ac285828561185d565b610acd8585856118b3565b60019150509392505050565b600081565b60006012905090565b600080610af261176a565b9050610b13818585610b0485896115c9565b610b0e9190613147565b611772565b600191505092915050565b610b2833826121d3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610baf6122a2565b610bba868686612320565b610bc583838361236d565b505050505050565b60115481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c366122a2565b610c4060006123c3565b565b610c4a6122a2565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b606060048054610d10906130e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c906130e7565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b5050505050905090565b610d9b6122a2565b6103e86005610da8610aa0565b610db2919061317b565b610dbc91906131ec565b821015610dc857600080fd5b6103e86005610dd5610aa0565b610ddf919061317b565b610de991906131ec565b811015610df557600080fd5b80600b81905550816009819055505050565b600080610e1261176a565b90506000610e2082866115c9565b905083811015610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c9061328f565b60405180910390fd5b610e728286868403611772565b60019250505092915050565b600080610e8961176a565b9050610e968185856118b3565b600191505092915050565b60145481565b600c60009054906101000a900460ff1681565b610ec26122a2565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b610f2b6122a2565b600c60009054906101000a900460ff1615610f4557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd491906132c4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f91906132c4565b6040518363ffffffff1660e01b815260040161109c9291906132f1565b6020604051808303816000875af11580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906132c4565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061116c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611772565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161120992919061331a565b6020604051808303816000875af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190613358565b5061127a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612489565b6112a7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610c42565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71947306112ee30610be6565b6000806112f961176a565b426040518863ffffffff1660e01b815260040161131b969594939291906133c0565b60606040518083038185885af1158015611339573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061135e9190613436565b5050506001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6113a16122a2565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113dc9190612e93565b602060405180830381865afa1580156113f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141d9190613489565b1161142757600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114629190612e93565b602060405180830381865afa15801561147f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a39190613489565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114e092919061331a565b6020604051808303816000875af11580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190613358565b505050565b60006115326122a2565b620186a06001611540610aa0565b61154a919061317b565b61155491906131ec565b82101561156057600080fd5b6103e8600561156d610aa0565b611577919061317b565b61158191906131ec565b82111561158d57600080fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b600f5481565b61166a6122a2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613528565b60405180910390fd5b6116e2816123c3565b50565b6116ed6122a2565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161171390613579565b60006040518083038185875af1925050503d8060008114611750576040519150601f19603f3d011682016040523d82523d6000602084013e611755565b606091505b50508091505050565b60135481565b600b5481565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118509190612e16565b60405180910390a3505050565b600061186984846115c9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118ad578181101561189f57600080fd5b6118ac8484848403611772565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361192557600080fd5b6000810361193e57611939838360006124e4565b6121ce565b611946610cd1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119b45750611984610cd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119ed5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a3f5750600660149054906101000a900460ff16155b15611d1457600c60009054906101000a900460ff16611b0357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611af95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611b0257600080fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ba65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611be157600954811115611bba57600080fd5b600b54611bc683610be6565b82611bd19190613147565b1115611bdc57600080fd5b611d13565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c845750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57600954811115611c9857600080fd5b611d12565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d1157600b54611cfa83610be6565b82611d059190613147565b1115611d1057600080fd5b5b5b5b5b6000611d1f30610be6565b90506000600a548210159050808015611d445750600c60019054906101000a900460ff165b8015611d5d5750600660149054906101000a900460ff16155b8015611db35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e095750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e5f5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ea3576001600660146101000a81548160ff021916908315150217905550611e876126a2565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f595750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f6357600090505b60008082156121b457601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fc757506000601154115b1561207057606460115487611fdc919061317b565b611fe691906131ec565b915060115460135483611ff9919061317b565b61200391906131ec565b601660008282546120149190613147565b925050819055506011546012548361202c919061317b565b61203691906131ec565b601560008282546120479190613147565b925050819055506011546014548361205f919061317b565b61206991906131ec565b9050612171565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120cb57506000600d54115b15612170576064600d54876120e0919061317b565b6120ea91906131ec565b9150600d54600f54836120fd919061317b565b61210791906131ec565b601660008282546121189190613147565b92505081905550600d54600e5483612130919061317b565b61213a91906131ec565b6015600082825461214b9190613147565b92505081905550600d5460105483612163919061317b565b61216d91906131ec565b90505b5b60008211156121a557600081111561218e5761218d88826121d3565b5b6121a48830838561219f919061358e565b6124e4565b5b81866121b1919061358e565b95505b6121bf8888886124e4565b60175460118190555050505050505b505050565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612221919061358e565b9250508190555080600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122969190612e16565b60405180910390a35050565b6122aa61176a565b73ffffffffffffffffffffffffffffffffffffffff166122c8610cd1565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123159061360e565b60405180910390fd5b565b82600e8190555081600f8190555080601081905550601054600f54600e546123489190613147565b6123529190613147565b600d819055506020600d54111561236857600080fd5b505050565b8260128190555081601381905550806014819055506014546013546012546123959190613147565b61239f9190613147565b601181905550601154601781905550602060115411156123be57600080fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361255657600080fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a657600080fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126949190612e16565b60405180910390a350505050565b60006126ad30610be6565b905060006015546016546126c19190613147565b90506000808314806126d35750600082145b156126e057505050612891565b6014600a546126ef919061317b565b831115612708576014600a54612705919061317b565b92505b60006002836016548661271b919061317b565b61272591906131ec565b61272f91906131ec565b90506000818561273f919061358e565b9050600047905061274f82612893565b6000814761275d919061358e565b905060008660155483612770919061317b565b61277a91906131ec565b90506000818361278a919061358e565b9050600060168190555060006015819055506000861180156127ac5750600081115b156127f9576127bb8682612ad0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516127f09392919061362e565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161283f90613579565b60006040518083038185875af1925050503d806000811461287c576040519150601f19603f3d011682016040523d82523d6000602084013e612881565b606091505b5050809750505050505050505050505b565b6000600267ffffffffffffffff8111156128b0576128af613665565b5b6040519080825280602002602001820160405280156128de5781602001602082028036833780820191505090505b50905030816000815181106128f6576128f5613694565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561299b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bf91906132c4565b816001815181106129d3576129d2613694565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a38307f000000000000000000000000000000000000000000000000000000000000000084611772565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a9a959493929190613781565b600060405180830381600087803b158015612ab457600080fd5b505af1158015612ac8573d6000803e3d6000fd5b505050505050565b612afb307f000000000000000000000000000000000000000000000000000000000000000084611772565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b82969594939291906133c0565b60606040518083038185885af1158015612ba0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc59190613436565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c06578082015181840152602081019050612beb565b60008484015250505050565b6000601f19601f8301169050919050565b6000612c2e82612bcc565b612c388185612bd7565b9350612c48818560208601612be8565b612c5181612c12565b840191505092915050565b60006020820190508181036000830152612c768184612c23565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cae82612c83565b9050919050565b612cbe81612ca3565b8114612cc957600080fd5b50565b600081359050612cdb81612cb5565b92915050565b6000819050919050565b612cf481612ce1565b8114612cff57600080fd5b50565b600081359050612d1181612ceb565b92915050565b60008060408385031215612d2e57612d2d612c7e565b5b6000612d3c85828601612ccc565b9250506020612d4d85828601612d02565b9150509250929050565b60008115159050919050565b612d6c81612d57565b82525050565b6000602082019050612d876000830184612d63565b92915050565b6000819050919050565b6000612db2612dad612da884612c83565b612d8d565b612c83565b9050919050565b6000612dc482612d97565b9050919050565b6000612dd682612db9565b9050919050565b612de681612dcb565b82525050565b6000602082019050612e016000830184612ddd565b92915050565b612e1081612ce1565b82525050565b6000602082019050612e2b6000830184612e07565b92915050565b600080600060608486031215612e4a57612e49612c7e565b5b6000612e5886828701612ccc565b9350506020612e6986828701612ccc565b9250506040612e7a86828701612d02565b9150509250925092565b612e8d81612ca3565b82525050565b6000602082019050612ea86000830184612e84565b92915050565b600060ff82169050919050565b612ec481612eae565b82525050565b6000602082019050612edf6000830184612ebb565b92915050565b600060208284031215612efb57612efa612c7e565b5b6000612f0984828501612d02565b91505092915050565b600060208284031215612f2857612f27612c7e565b5b6000612f3684828501612ccc565b91505092915050565b60008060008060008060c08789031215612f5c57612f5b612c7e565b5b6000612f6a89828a01612d02565b9650506020612f7b89828a01612d02565b9550506040612f8c89828a01612d02565b9450506060612f9d89828a01612d02565b9350506080612fae89828a01612d02565b92505060a0612fbf89828a01612d02565b9150509295509295509295565b612fd581612d57565b8114612fe057600080fd5b50565b600081359050612ff281612fcc565b92915050565b6000806040838503121561300f5761300e612c7e565b5b600061301d85828601612ccc565b925050602061302e85828601612fe3565b9150509250929050565b6000806040838503121561304f5761304e612c7e565b5b600061305d85828601612d02565b925050602061306e85828601612d02565b9150509250929050565b6000806040838503121561308f5761308e612c7e565b5b600061309d85828601612ccc565b92505060206130ae85828601612ccc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ff57607f821691505b602082108103613112576131116130b8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061315282612ce1565b915061315d83612ce1565b925082820190508082111561317557613174613118565b5b92915050565b600061318682612ce1565b915061319183612ce1565b925082820261319f81612ce1565b915082820484148315176131b6576131b5613118565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131f782612ce1565b915061320283612ce1565b925082613212576132116131bd565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613279602583612bd7565b91506132848261321d565b604082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b6000815190506132be81612cb5565b92915050565b6000602082840312156132da576132d9612c7e565b5b60006132e8848285016132af565b91505092915050565b60006040820190506133066000830185612e84565b6133136020830184612e84565b9392505050565b600060408201905061332f6000830185612e84565b61333c6020830184612e07565b9392505050565b60008151905061335281612fcc565b92915050565b60006020828403121561336e5761336d612c7e565b5b600061337c84828501613343565b91505092915050565b6000819050919050565b60006133aa6133a56133a084613385565b612d8d565b612ce1565b9050919050565b6133ba8161338f565b82525050565b600060c0820190506133d56000830189612e84565b6133e26020830188612e07565b6133ef60408301876133b1565b6133fc60608301866133b1565b6134096080830185612e84565b61341660a0830184612e07565b979650505050505050565b60008151905061343081612ceb565b92915050565b60008060006060848603121561344f5761344e612c7e565b5b600061345d86828701613421565b935050602061346e86828701613421565b925050604061347f86828701613421565b9150509250925092565b60006020828403121561349f5761349e612c7e565b5b60006134ad84828501613421565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613512602683612bd7565b915061351d826134b6565b604082019050919050565b6000602082019050818103600083015261354181613505565b9050919050565b600081905092915050565b50565b6000613563600083613548565b915061356e82613553565b600082019050919050565b600061358482613556565b9150819050919050565b600061359982612ce1565b91506135a483612ce1565b92508282039050818111156135bc576135bb613118565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f8602083612bd7565b9150613603826135c2565b602082019050919050565b60006020820190508181036000830152613627816135eb565b9050919050565b60006060820190506136436000830186612e07565b6136506020830185612e07565b61365d6040830184612e07565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f881612ca3565b82525050565b600061370a83836136ef565b60208301905092915050565b6000602082019050919050565b600061372e826136c3565b61373881856136ce565b9350613743836136df565b8060005b8381101561377457815161375b88826136fe565b975061376683613716565b925050600181019050613747565b5085935050505092915050565b600060a0820190506137966000830188612e07565b6137a360208301876133b1565b81810360408301526137b58186613723565b90506137c46060830185612e84565b6137d16080830184612e07565b969550505050505056fea2646970667358221220a467b6fe43bf1db9fa806f04d644cb31bba889ed42546a90390bad419904457164736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102555760003560e01c806395d89b4111610139578063d257b34f116100b6578063e71dc3f51161007a578063e71dc3f5146108db578063f11a24d314610906578063f2fde38b14610931578063f5648a4f1461095a578063f637434214610971578063f8b45b051461099c5761025c565b8063d257b34f146107e0578063d46980161461081d578063d85ba06314610848578063dd62ed3e14610873578063e2f45605146108b05761025c565b8063bbc0c742116100fd578063bbc0c74214610721578063c02466681461074c578063c8c8ebe414610775578063c9567bf9146107a0578063cb963728146107b75761025c565b806395d89b41146106285780639618839914610653578063a457c2d71461067c578063a9059cbb146106b9578063adb873bd146106f65761025c565b80634fbee193116101d2578063715018a611610196578063715018a61461053c5780637571336a1461055357806375f0a8741461057c5780637bce5a04146105a75780638da5cb5b146105d257806392136913146105fd5761025c565b80634fbee1931461044357806351a0faf7146104805780636a486a8e146104a95780636ddd1713146104d457806370a08231146104ff5761025c565b806327c8f8351161021957806327c8f8351461035c578063313ce5671461038757806339509351146103b257806342966c68146103ef57806349bd5a5e146104185761025c565b806306fdde0314610261578063095ea7b31461028c5780631694505e146102c957806318160ddd146102f457806323b872dd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109c7565b6040516102839190612c5c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612d17565b610a59565b6040516102c09190612d72565b60405180910390f35b3480156102d557600080fd5b506102de610a7c565b6040516102eb9190612dec565b60405180910390f35b34801561030057600080fd5b50610309610aa0565b6040516103169190612e16565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190612e31565b610aaa565b6040516103539190612d72565b60405180910390f35b34801561036857600080fd5b50610371610ad9565b60405161037e9190612e93565b60405180910390f35b34801561039357600080fd5b5061039c610ade565b6040516103a99190612eca565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190612d17565b610ae7565b6040516103e69190612d72565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190612ee5565b610b1e565b005b34801561042457600080fd5b5061042d610b2b565b60405161043a9190612e93565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190612f12565b610b51565b6040516104779190612d72565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612f3f565b610ba7565b005b3480156104b557600080fd5b506104be610bcd565b6040516104cb9190612e16565b60405180910390f35b3480156104e057600080fd5b506104e9610bd3565b6040516104f69190612d72565b60405180910390f35b34801561050b57600080fd5b5061052660048036038101906105219190612f12565b610be6565b6040516105339190612e16565b60405180910390f35b34801561054857600080fd5b50610551610c2e565b005b34801561055f57600080fd5b5061057a60048036038101906105759190612ff8565b610c42565b005b34801561058857600080fd5b50610591610ca5565b60405161059e9190612e93565b60405180910390f35b3480156105b357600080fd5b506105bc610ccb565b6040516105c99190612e16565b60405180910390f35b3480156105de57600080fd5b506105e7610cd1565b6040516105f49190612e93565b60405180910390f35b34801561060957600080fd5b50610612610cfb565b60405161061f9190612e16565b60405180910390f35b34801561063457600080fd5b5061063d610d01565b60405161064a9190612c5c565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190613038565b610d93565b005b34801561068857600080fd5b506106a3600480360381019061069e9190612d17565b610e07565b6040516106b09190612d72565b60405180910390f35b3480156106c557600080fd5b506106e060048036038101906106db9190612d17565b610e7e565b6040516106ed9190612d72565b60405180910390f35b34801561070257600080fd5b5061070b610ea1565b6040516107189190612e16565b60405180910390f35b34801561072d57600080fd5b50610736610ea7565b6040516107439190612d72565b60405180910390f35b34801561075857600080fd5b50610773600480360381019061076e9190612ff8565b610eba565b005b34801561078157600080fd5b5061078a610f1d565b6040516107979190612e16565b60405180910390f35b3480156107ac57600080fd5b506107b5610f23565b005b3480156107c357600080fd5b506107de60048036038101906107d99190612f12565b611399565b005b3480156107ec57600080fd5b5061080760048036038101906108029190612ee5565b611528565b6040516108149190612d72565b60405180910390f35b34801561082957600080fd5b5061083261159d565b60405161083f9190612e93565b60405180910390f35b34801561085457600080fd5b5061085d6115c3565b60405161086a9190612e16565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190613078565b6115c9565b6040516108a79190612e16565b60405180910390f35b3480156108bc57600080fd5b506108c5611650565b6040516108d29190612e16565b60405180910390f35b3480156108e757600080fd5b506108f0611656565b6040516108fd9190612e16565b60405180910390f35b34801561091257600080fd5b5061091b61165c565b6040516109289190612e16565b60405180910390f35b34801561093d57600080fd5b5061095860048036038101906109539190612f12565b611662565b005b34801561096657600080fd5b5061096f6116e5565b005b34801561097d57600080fd5b5061098661175e565b6040516109939190612e16565b60405180910390f35b3480156109a857600080fd5b506109b1611764565b6040516109be9190612e16565b60405180910390f35b6060600380546109d6906130e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a02906130e7565b8015610a4f5780601f10610a2457610100808354040283529160200191610a4f565b820191906000526020600020905b815481529060010190602001808311610a3257829003601f168201915b5050505050905090565b600080610a6461176a565b9050610a71818585611772565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600080610ab561176a565b9050610ac285828561185d565b610acd8585856118b3565b60019150509392505050565b600081565b60006012905090565b600080610af261176a565b9050610b13818585610b0485896115c9565b610b0e9190613147565b611772565b600191505092915050565b610b2833826121d3565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610baf6122a2565b610bba868686612320565b610bc583838361236d565b505050505050565b60115481565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c366122a2565b610c4060006123c3565b565b610c4a6122a2565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b606060048054610d10906130e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3c906130e7565b8015610d895780601f10610d5e57610100808354040283529160200191610d89565b820191906000526020600020905b815481529060010190602001808311610d6c57829003601f168201915b5050505050905090565b610d9b6122a2565b6103e86005610da8610aa0565b610db2919061317b565b610dbc91906131ec565b821015610dc857600080fd5b6103e86005610dd5610aa0565b610ddf919061317b565b610de991906131ec565b811015610df557600080fd5b80600b81905550816009819055505050565b600080610e1261176a565b90506000610e2082866115c9565b905083811015610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c9061328f565b60405180910390fd5b610e728286868403611772565b60019250505092915050565b600080610e8961176a565b9050610e968185856118b3565b600191505092915050565b60145481565b600c60009054906101000a900460ff1681565b610ec26122a2565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60095481565b610f2b6122a2565b600c60009054906101000a900460ff1615610f4557600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd491906132c4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f91906132c4565b6040518363ffffffff1660e01b815260040161109c9291906132f1565b6020604051808303816000875af11580156110bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110df91906132c4565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061116c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611772565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161120992919061331a565b6020604051808303816000875af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190613358565b5061127a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612489565b6112a7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610c42565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71947306112ee30610be6565b6000806112f961176a565b426040518863ffffffff1660e01b815260040161131b969594939291906133c0565b60606040518083038185885af1158015611339573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061135e9190613436565b5050506001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6113a16122a2565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113dc9190612e93565b602060405180830381865afa1580156113f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141d9190613489565b1161142757600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114629190612e93565b602060405180830381865afa15801561147f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a39190613489565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114e092919061331a565b6020604051808303816000875af11580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190613358565b505050565b60006115326122a2565b620186a06001611540610aa0565b61154a919061317b565b61155491906131ec565b82101561156057600080fd5b6103e8600561156d610aa0565b611577919061317b565b61158191906131ec565b82111561158d57600080fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60105481565b600f5481565b61166a6122a2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d090613528565b60405180910390fd5b6116e2816123c3565b50565b6116ed6122a2565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161171390613579565b60006040518083038185875af1925050503d8060008114611750576040519150601f19603f3d011682016040523d82523d6000602084013e611755565b606091505b50508091505050565b60135481565b600b5481565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118509190612e16565b60405180910390a3505050565b600061186984846115c9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118ad578181101561189f57600080fd5b6118ac8484848403611772565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361192557600080fd5b6000810361193e57611939838360006124e4565b6121ce565b611946610cd1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156119b45750611984610cd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156119ed5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a265750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611a3f5750600660149054906101000a900460ff16155b15611d1457600c60009054906101000a900460ff16611b0357601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611af95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611b0257600080fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611ba65750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611be157600954811115611bba57600080fd5b600b54611bc683610be6565b82611bd19190613147565b1115611bdc57600080fd5b611d13565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c845750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9d57600954811115611c9857600080fd5b611d12565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d1157600b54611cfa83610be6565b82611d059190613147565b1115611d1057600080fd5b5b5b5b5b6000611d1f30610be6565b90506000600a548210159050808015611d445750600c60019054906101000a900460ff165b8015611d5d5750600660149054906101000a900460ff16155b8015611db35750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e095750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e5f5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ea3576001600660146101000a81548160ff021916908315150217905550611e876126a2565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f595750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f6357600090505b60008082156121b457601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fc757506000601154115b1561207057606460115487611fdc919061317b565b611fe691906131ec565b915060115460135483611ff9919061317b565b61200391906131ec565b601660008282546120149190613147565b925050819055506011546012548361202c919061317b565b61203691906131ec565b601560008282546120479190613147565b925050819055506011546014548361205f919061317b565b61206991906131ec565b9050612171565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120cb57506000600d54115b15612170576064600d54876120e0919061317b565b6120ea91906131ec565b9150600d54600f54836120fd919061317b565b61210791906131ec565b601660008282546121189190613147565b92505081905550600d54600e5483612130919061317b565b61213a91906131ec565b6015600082825461214b9190613147565b92505081905550600d5460105483612163919061317b565b61216d91906131ec565b90505b5b60008211156121a557600081111561218e5761218d88826121d3565b5b6121a48830838561219f919061358e565b6124e4565b5b81866121b1919061358e565b95505b6121bf8888886124e4565b60175460118190555050505050505b505050565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612221919061358e565b9250508190555080600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122969190612e16565b60405180910390a35050565b6122aa61176a565b73ffffffffffffffffffffffffffffffffffffffff166122c8610cd1565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123159061360e565b60405180910390fd5b565b82600e8190555081600f8190555080601081905550601054600f54600e546123489190613147565b6123529190613147565b600d819055506020600d54111561236857600080fd5b505050565b8260128190555081601381905550806014819055506014546013546012546123959190613147565b61239f9190613147565b601181905550601154601781905550602060115411156123be57600080fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361251d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361255657600080fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a657600080fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126949190612e16565b60405180910390a350505050565b60006126ad30610be6565b905060006015546016546126c19190613147565b90506000808314806126d35750600082145b156126e057505050612891565b6014600a546126ef919061317b565b831115612708576014600a54612705919061317b565b92505b60006002836016548661271b919061317b565b61272591906131ec565b61272f91906131ec565b90506000818561273f919061358e565b9050600047905061274f82612893565b6000814761275d919061358e565b905060008660155483612770919061317b565b61277a91906131ec565b90506000818361278a919061358e565b9050600060168190555060006015819055506000861180156127ac5750600081115b156127f9576127bb8682612ad0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185826016546040516127f09392919061362e565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161283f90613579565b60006040518083038185875af1925050503d806000811461287c576040519150601f19603f3d011682016040523d82523d6000602084013e612881565b606091505b5050809750505050505050505050505b565b6000600267ffffffffffffffff8111156128b0576128af613665565b5b6040519080825280602002602001820160405280156128de5781602001602082028036833780820191505090505b50905030816000815181106128f6576128f5613694565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561299b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bf91906132c4565b816001815181106129d3576129d2613694565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611772565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a9a959493929190613781565b600060405180830381600087803b158015612ab457600080fd5b505af1158015612ac8573d6000803e3d6000fd5b505050505050565b612afb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611772565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b82969594939291906133c0565b60606040518083038185885af1158015612ba0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bc59190613436565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c06578082015181840152602081019050612beb565b60008484015250505050565b6000601f19601f8301169050919050565b6000612c2e82612bcc565b612c388185612bd7565b9350612c48818560208601612be8565b612c5181612c12565b840191505092915050565b60006020820190508181036000830152612c768184612c23565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cae82612c83565b9050919050565b612cbe81612ca3565b8114612cc957600080fd5b50565b600081359050612cdb81612cb5565b92915050565b6000819050919050565b612cf481612ce1565b8114612cff57600080fd5b50565b600081359050612d1181612ceb565b92915050565b60008060408385031215612d2e57612d2d612c7e565b5b6000612d3c85828601612ccc565b9250506020612d4d85828601612d02565b9150509250929050565b60008115159050919050565b612d6c81612d57565b82525050565b6000602082019050612d876000830184612d63565b92915050565b6000819050919050565b6000612db2612dad612da884612c83565b612d8d565b612c83565b9050919050565b6000612dc482612d97565b9050919050565b6000612dd682612db9565b9050919050565b612de681612dcb565b82525050565b6000602082019050612e016000830184612ddd565b92915050565b612e1081612ce1565b82525050565b6000602082019050612e2b6000830184612e07565b92915050565b600080600060608486031215612e4a57612e49612c7e565b5b6000612e5886828701612ccc565b9350506020612e6986828701612ccc565b9250506040612e7a86828701612d02565b9150509250925092565b612e8d81612ca3565b82525050565b6000602082019050612ea86000830184612e84565b92915050565b600060ff82169050919050565b612ec481612eae565b82525050565b6000602082019050612edf6000830184612ebb565b92915050565b600060208284031215612efb57612efa612c7e565b5b6000612f0984828501612d02565b91505092915050565b600060208284031215612f2857612f27612c7e565b5b6000612f3684828501612ccc565b91505092915050565b60008060008060008060c08789031215612f5c57612f5b612c7e565b5b6000612f6a89828a01612d02565b9650506020612f7b89828a01612d02565b9550506040612f8c89828a01612d02565b9450506060612f9d89828a01612d02565b9350506080612fae89828a01612d02565b92505060a0612fbf89828a01612d02565b9150509295509295509295565b612fd581612d57565b8114612fe057600080fd5b50565b600081359050612ff281612fcc565b92915050565b6000806040838503121561300f5761300e612c7e565b5b600061301d85828601612ccc565b925050602061302e85828601612fe3565b9150509250929050565b6000806040838503121561304f5761304e612c7e565b5b600061305d85828601612d02565b925050602061306e85828601612d02565b9150509250929050565b6000806040838503121561308f5761308e612c7e565b5b600061309d85828601612ccc565b92505060206130ae85828601612ccc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806130ff57607f821691505b602082108103613112576131116130b8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061315282612ce1565b915061315d83612ce1565b925082820190508082111561317557613174613118565b5b92915050565b600061318682612ce1565b915061319183612ce1565b925082820261319f81612ce1565b915082820484148315176131b6576131b5613118565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006131f782612ce1565b915061320283612ce1565b925082613212576132116131bd565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613279602583612bd7565b91506132848261321d565b604082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b6000815190506132be81612cb5565b92915050565b6000602082840312156132da576132d9612c7e565b5b60006132e8848285016132af565b91505092915050565b60006040820190506133066000830185612e84565b6133136020830184612e84565b9392505050565b600060408201905061332f6000830185612e84565b61333c6020830184612e07565b9392505050565b60008151905061335281612fcc565b92915050565b60006020828403121561336e5761336d612c7e565b5b600061337c84828501613343565b91505092915050565b6000819050919050565b60006133aa6133a56133a084613385565b612d8d565b612ce1565b9050919050565b6133ba8161338f565b82525050565b600060c0820190506133d56000830189612e84565b6133e26020830188612e07565b6133ef60408301876133b1565b6133fc60608301866133b1565b6134096080830185612e84565b61341660a0830184612e07565b979650505050505050565b60008151905061343081612ceb565b92915050565b60008060006060848603121561344f5761344e612c7e565b5b600061345d86828701613421565b935050602061346e86828701613421565b925050604061347f86828701613421565b9150509250925092565b60006020828403121561349f5761349e612c7e565b5b60006134ad84828501613421565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613512602683612bd7565b915061351d826134b6565b604082019050919050565b6000602082019050818103600083015261354181613505565b9050919050565b600081905092915050565b50565b6000613563600083613548565b915061356e82613553565b600082019050919050565b600061358482613556565b9150819050919050565b600061359982612ce1565b91506135a483612ce1565b92508282039050818111156135bc576135bb613118565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006135f8602083612bd7565b9150613603826135c2565b602082019050919050565b60006020820190508181036000830152613627816135eb565b9050919050565b60006060820190506136436000830186612e07565b6136506020830185612e07565b61365d6040830184612e07565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6136f881612ca3565b82525050565b600061370a83836136ef565b60208301905092915050565b6000602082019050919050565b600061372e826136c3565b61373881856136ce565b9350613743836136df565b8060005b8381101561377457815161375b88826136fe565b975061376683613716565b925050600181019050613747565b5085935050505092915050565b600060a0820190506137966000830188612e07565b6137a360208301876133b1565b81810360408301526137b58186613723565b90506137c46060830185612e84565b6137d16080830184612e07565b969550505050505056fea2646970667358221220a467b6fe43bf1db9fa806f04d644cb31bba889ed42546a90390bad419904457164736f6c63430008110033

Deployed Bytecode Sourcemap

18691:12432:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9257:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11765:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18735:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10389:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12588:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18828:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10230:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13293:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21607:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18793:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23419:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19334:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19150:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10561:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2800:103;;;;;;;;;;;;;:::i;:::-;;23262:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18917:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19225;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2157:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19369:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9477:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22911:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14067:506;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10945:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19445:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19110:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24731:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18994:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21699:884;;;;;;;;;;;;;:::i;:::-;;25064:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22592:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18954:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19191:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11243:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19036:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19299:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19262:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3059:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24872:183;;;;;;;;;;;;;:::i;:::-;;19407:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19076:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9257:100;9311:13;9344:5;9337:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9257:100;:::o;11765:242::-;11884:4;11906:13;11922:12;:10;:12::i;:::-;11906:28;;11945:32;11954:5;11961:7;11970:6;11945:8;:32::i;:::-;11995:4;11988:11;;;11765:242;;;;:::o;18735:51::-;;;:::o;10389:108::-;10450:7;10477:12;;10470:19;;10389:108;:::o;12588:295::-;12719:4;12736:15;12754:12;:10;:12::i;:::-;12736:30;;12777:38;12793:4;12799:7;12808:6;12777:15;:38::i;:::-;12826:27;12836:4;12842:2;12846:6;12826:9;:27::i;:::-;12871:4;12864:11;;;12588:295;;;;;:::o;18828:48::-;18874:1;18828:48;:::o;10230:93::-;10288:5;10313:2;10306:9;;10230:93;:::o;13293:270::-;13408:4;13430:13;13446:12;:10;:12::i;:::-;13430:28;;13469:64;13478:5;13485:7;13522:10;13494:25;13504:5;13511:7;13494:9;:25::i;:::-;:38;;;;:::i;:::-;13469:8;:64::i;:::-;13551:4;13544:11;;;13293:270;;;;:::o;21607:83::-;21657:25;21663:10;21675:6;21657:5;:25::i;:::-;21607:83;:::o;18793:28::-;;;;;;;;;;;;;:::o;25454:126::-;25520:4;25544:19;:28;25564:7;25544:28;;;;;;;;;;;;;;;;;;;;;;;;;25537:35;;25454:126;;;:::o;23419:512::-;2042:13;:11;:13::i;:::-;23684:112:::1;23712:16;23743;23774:11;23684:13;:112::i;:::-;23807:116;23836:17;23868;23900:12;23807:14;:116::i;:::-;23419:512:::0;;;;;;:::o;19334:28::-;;;;:::o;19150:31::-;;;;;;;;;;;;;:::o;10561:177::-;10680:7;10712:9;:18;10722:7;10712:18;;;;;;;;;;;;;;;;10705:25;;10561:177;;;:::o;2800:103::-;2042:13;:11;:13::i;:::-;2865:30:::1;2892:1;2865:18;:30::i;:::-;2800:103::o:0;23262:149::-;2042:13;:11;:13::i;:::-;23399:4:::1;23357:31;:39;23389:6;23357:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23262:149:::0;;:::o;18917:30::-;;;;;;;;;;;;;:::o;19225:::-;;;;:::o;2157:87::-;2203:7;2230:6;;;;;;;;;;;2223:13;;2157:87;:::o;19369:31::-;;;;:::o;9477:104::-;9533:13;9566:7;9559:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9477:104;:::o;22911:342::-;2042:13;:11;:13::i;:::-;23091:4:::1;23086:1;23070:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23069:26;;;;:::i;:::-;23055:9;:41;;23047:50;;;::::0;::::1;;23158:4;23153:1;23137:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23136:26;;;;:::i;:::-;23116:15;:47;;23108:56;;;::::0;::::1;;23187:15;23175:9;:27;;;;23236:9;23213:20;:32;;;;22911:342:::0;;:::o;14067:506::-;14187:4;14209:13;14225:12;:10;:12::i;:::-;14209:28;;14248:24;14275:25;14285:5;14292:7;14275:9;:25::i;:::-;14248:52;;14353:15;14333:16;:35;;14311:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14469:60;14478:5;14485:7;14513:15;14494:16;:34;14469:8;:60::i;:::-;14561:4;14554:11;;;;14067:506;;;;:::o;10945:234::-;11060:4;11082:13;11098:12;:10;:12::i;:::-;11082:28;;11121;11131:5;11138:2;11142:6;11121:9;:28::i;:::-;11167:4;11160:11;;;10945:234;;;;:::o;19445:26::-;;;;:::o;19110:33::-;;;;;;;;;;;;;:::o;24731:132::-;2042:13;:11;:13::i;:::-;24847:8:::1;24816:19;:28;24836:7;24816:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24731:132:::0;;:::o;18994:35::-;;;;:::o;21699:884::-;2042:13;:11;:13::i;:::-;21761::::1;;;;;;;;;;;21760:14;21752:23;;;::::0;::::1;;21823:15;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21805:55;;;21883:4;21903:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21805:131;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21789:13;;:147;;;;;;;;;;;;;;;;;;21947:66;21964:4;21979:13;;;;;;;;;;;21995:17;21947:8;:66::i;:::-;22031:13;;;;;;;;;;;22024:29;;;22076:15;22107:17;22024:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22149:58;22186:13;;;;;;;;;;;22202:4;22149:28;:58::i;:::-;22218:55;22252:13;;;;;;;;;;;22268:4;22218:25;:55::i;:::-;22287:15;:31;;;22326:21;22371:4;22391:24;22409:4;22391:9;:24::i;:::-;22430:1;22446::::0;22462:12:::1;:10;:12::i;:::-;22489:15;22287:228;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22542:4;22526:13;;:20;;;;;;;;;;;;;;;;;;22571:4;22557:11;;:18;;;;;;;;;;;;;;;;;;21699:884::o:0;25064:242::-;2042:13;:11;:13::i;:::-;25181:1:::1;25149:3;25142:21;;;25172:4;25142:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;25134:49;;;::::0;::::1;;25194:14;25218:3;25211:21;;;25241:4;25211:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25194:53;;25265:3;25258:20;;;25279:10;25291:6;25258:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25123:183;25064:242:::0;:::o;22592:310::-;22700:4;2042:13;:11;:13::i;:::-;22765:6:::1;22760:1;22744:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22743:28;;;;:::i;:::-;22730:9;:41;;22722:50;;;::::0;::::1;;22826:4;22821:1;22805:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22804:26;;;;:::i;:::-;22791:9;:39;;22783:48;;;::::0;::::1;;22863:9;22842:18;:30;;;;22890:4;22883:11;;22592:310:::0;;;:::o;18954:30::-;;;;;;;;;;;;;:::o;19191:27::-;;;;:::o;11243:201::-;11377:7;11409:11;:18;11421:5;11409:18;;;;;;;;;;;;;;;:27;11428:7;11409:27;;;;;;;;;;;;;;;;11402:34;;11243:201;;;;:::o;19036:33::-;;;;:::o;19299:25::-;;;;:::o;19262:30::-;;;;:::o;3059:238::-;2042:13;:11;:13::i;:::-;3182:1:::1;3162:22;;:8;:22;;::::0;3140:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3261:28;3280:8;3261:18;:28::i;:::-;3059:238:::0;:::o;24872:183::-;2042:13;:11;:13::i;:::-;24928:12:::1;24973:10;24965:24;;24997:21;24965:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24951:96;;;;;24917:138;24872:183::o:0;19407:31::-;;;;:::o;19076:24::-;;;;:::o;724:98::-;777:7;804:10;797:17;;724:98;:::o;16799:220::-;16957:6;16927:11;:18;16939:5;16927:18;;;;;;;;;;;;;;;:27;16946:7;16927:27;;;;;;;;;;;;;;;:36;;;;16995:7;16979:32;;16988:5;16979:32;;;17004:6;16979:32;;;;;;:::i;:::-;;;;;;;;16799:220;;;:::o;17311:420::-;17446:24;17473:25;17483:5;17490:7;17473:9;:25::i;:::-;17446:52;;17533:17;17513:16;:37;17509:215;;17595:6;17575:16;:26;;17567:35;;;;;;17646:51;17655:5;17662:7;17690:6;17671:16;:25;17646:8;:51::i;:::-;17509:215;17435:296;17311:420;;;:::o;25589:3169::-;25737:1;25721:18;;:4;:18;;;25713:27;;;;;;25773:1;25759:16;;:2;:16;;;25751:25;;;;;;25804:1;25794:6;:11;25790:93;;25822:28;25838:4;25844:2;25848:1;25822:15;:28::i;:::-;25865:7;;25790:93;25922:7;:5;:7::i;:::-;25914:15;;:4;:15;;;;:45;;;;;25952:7;:5;:7::i;:::-;25946:13;;:2;:13;;;;25914:45;:78;;;;;25990:1;25976:16;;:2;:16;;;;25914:78;:112;;;;;18874:1;26009:17;;:2;:17;;;;25914:112;:138;;;;;26044:8;;;;;;;;;;;26043:9;25914:138;25896:985;;;26084:13;;;;;;;;;;;26079:116;;26126:19;:25;26146:4;26126:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26155:19;:23;26175:2;26155:23;;;;;;;;;;;;;;;;;;;;;;;;;26126:52;26118:61;;;;;;26079:116;26258:25;:31;26284:4;26258:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26311:31;:35;26343:2;26311:35;;;;;;;;;;;;;;;;;;;;;;;;;26310:36;26258:88;26236:634;;;26399:20;;26389:6;:30;;26381:39;;;;;;26473:9;;26456:13;26466:2;26456:9;:13::i;:::-;26447:6;:22;;;;:::i;:::-;:35;;26439:44;;;;;;26236:634;;;26565:25;:29;26591:2;26565:29;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;26616:31;:37;26648:4;26616:37;;;;;;;;;;;;;;;;;;;;;;;;;26615:38;26565:88;26543:327;;;26706:20;;26696:6;:30;;26688:39;;;;;;26543:327;;;26754:31;:35;26786:2;26754:35;;;;;;;;;;;;;;;;;;;;;;;;;26749:121;;26844:9;;26827:13;26837:2;26827:9;:13::i;:::-;26818:6;:22;;;;:::i;:::-;:35;;26810:44;;;;;;26749:121;26543:327;26236:634;25896:985;26894:28;26925:24;26943:4;26925:9;:24::i;:::-;26894:55;;26963:12;27002:18;;26978:20;:42;;26963:57;;27052:7;:35;;;;;27076:11;;;;;;;;;;;27052:35;:61;;;;;27105:8;;;;;;;;;;;27104:9;27052:61;:110;;;;;27131:25;:31;27157:4;27131:31;;;;;;;;;;;;;;;;;;;;;;;;;27130:32;27052:110;:153;;;;;27180:19;:25;27200:4;27180:25;;;;;;;;;;;;;;;;;;;;;;;;;27179:26;27052:153;:194;;;;;27223:19;:23;27243:2;27223:23;;;;;;;;;;;;;;;;;;;;;;;;;27222:24;27052:194;27034:328;;;27284:4;27273:8;;:15;;;;;;;;;;;;;;;;;;27306:10;:8;:10::i;:::-;27345:5;27334:8;;:16;;;;;;;;;;;;;;;;;;27034:328;27375:12;27391:8;;;;;;;;;;;27390:9;27375:24;;27417:19;:25;27437:4;27417:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27446:19;:23;27466:2;27446:23;;;;;;;;;;;;;;;;;;;;;;;;;27417:52;27413:100;;;27496:5;27486:15;;27413:100;27526:12;27553:16;27591:7;27587:1079;;;27643:25;:29;27669:2;27643:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;27692:1;27676:13;;:17;27643:50;27639:748;;;27746:3;27730:13;;27721:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27714:35;;27818:13;;27798:16;;27791:4;:23;;;;:::i;:::-;27790:41;;;;:::i;:::-;27768:18;;:63;;;;;;;:::i;:::-;;;;;;;;27900:13;;27880:16;;27873:4;:23;;;;:::i;:::-;27872:41;;;;:::i;:::-;27850:18;;:63;;;;;;;:::i;:::-;;;;;;;;27966:13;;27951:11;;27944:4;:18;;;;:::i;:::-;27943:36;;;;:::i;:::-;27932:47;;27639:748;;;28041:25;:31;28067:4;28041:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28091:1;28076:12;;:16;28041:51;28037:350;;;28144:3;28129:12;;28120:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28113:34;;28215:12;;28196:15;;28189:4;:22;;;;:::i;:::-;28188:39;;;;:::i;:::-;28166:18;;:61;;;;;;;:::i;:::-;;;;;;;;28295:12;;28276:15;;28269:4;:22;;;;:::i;:::-;28268:39;;;;:::i;:::-;28246:18;;:61;;;;;;;:::i;:::-;;;;;;;;28359:12;;28345:10;;28338:4;:17;;;;:::i;:::-;28337:34;;;;:::i;:::-;28326:45;;28037:350;27639:748;28415:1;28408:4;:8;28404:208;;;28452:1;28441:8;:12;28437:88;;;28478:27;28490:4;28496:8;28478:11;:27::i;:::-;28437:88;28543:53;28559:4;28573;28587:8;28580:4;:15;;;;:::i;:::-;28543;:53::i;:::-;28404:208;28650:4;28640:14;;;;;:::i;:::-;;;27587:1079;28679:33;28695:4;28701:2;28705:6;28679:15;:33::i;:::-;28739:11;;28723:13;:27;;;;25702:3056;;;;;25589:3169;;;;:::o;16019:341::-;16111:6;16092:9;:15;16102:4;16092:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;16282:6;16266:12;;:22;;;;;;;;;;;16341:1;16318:34;;16327:4;16318:34;;;16345:6;16318:34;;;;;;:::i;:::-;;;;;;;;16019:341;;:::o;2323:132::-;2398:12;:10;:12::i;:::-;2387:23;;:7;:5;:7::i;:::-;:23;;;2379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2323:132::o;23940:363::-;24098:13;24080:15;:31;;;;24140:13;24122:15;:31;;;;24177:8;24164:10;:21;;;;24247:10;;24229:15;;24211;;:33;;;;:::i;:::-;:46;;;;:::i;:::-;24196:12;:61;;;;24292:2;24276:12;;:18;;24268:27;;;;;;23940:363;;;:::o;24312:410::-;24472:13;24453:16;:32;;;;24515:13;24496:16;:32;;;;24553:8;24539:11;:22;;;;24626:11;;24607:16;;24588;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;24572:13;:65;;;;24662:13;;24648:11;:27;;;;24711:2;24694:13;;:19;;24686:28;;;;;;24312:410;;;:::o;3458:191::-;3532:16;3551:6;;;;;;;;;;;3532:25;;3577:8;3568:6;;:17;;;;;;;;;;;;;;;;;;3632:8;3601:40;;3622:8;3601:40;;;;;;;;;;;;3521:128;3458:191;:::o;25315:130::-;25432:5;25398:25;:31;25424:4;25398:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25315:130;;:::o;15044:619::-;15191:1;15175:18;;:4;:18;;;15167:27;;;;;;15227:1;15213:16;;:2;:16;;;15205:25;;;;;;15244:19;15266:9;:15;15276:4;15266:15;;;;;;;;;;;;;;;;15244:37;;15315:6;15300:11;:21;;15292:30;;;;;;15390:6;15376:11;:20;15358:9;:15;15368:4;15358:15;;;;;;;;;;;;;;;:38;;;;15593:6;15576:9;:13;15586:2;15576:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15644:2;15629:26;;15638:4;15629:26;;;15648:6;15629:26;;;;;;:::i;:::-;;;;;;;;15156:507;15044:619;;;:::o;29659:1461::-;29698:23;29724:24;29742:4;29724:9;:24::i;:::-;29698:50;;29759:25;29821:18;;29787;;:52;;;;:::i;:::-;29759:80;;29850:12;29899:1;29880:15;:20;:46;;;;29925:1;29904:17;:22;29880:46;29876:85;;;29943:7;;;;;29876:85;30017:2;29996:18;;:23;;;;:::i;:::-;29978:15;:41;29974:115;;;30075:2;30054:18;;:23;;;;:::i;:::-;30036:41;;29974:115;30102:23;30215:1;30182:17;30147:18;;30129:15;:36;;;;:::i;:::-;30128:71;;;;:::i;:::-;:88;;;;:::i;:::-;30102:114;;30227:26;30274:15;30256;:33;;;;:::i;:::-;30227:62;;30303:25;30331:21;30303:49;;30366:36;30383:18;30366:16;:36::i;:::-;30416:18;30461:17;30437:21;:41;;;;:::i;:::-;30416:62;;30492:23;30552:17;30531:18;;30518:10;:31;;;;:::i;:::-;:51;;;;:::i;:::-;30492:77;;30583:23;30622:15;30609:10;:28;;;;:::i;:::-;30583:54;;30672:1;30651:18;:22;;;;30705:1;30684:18;:22;;;;30742:1;30724:15;:19;:42;;;;;30765:1;30747:15;:19;30724:42;30720:278;;;30783:46;30796:15;30813;30783:12;:46::i;:::-;30849:137;30882:18;30919:15;30953:18;;30849:137;;;;;;;;:::i;:::-;;;;;;;;30720:278;31033:15;;;;;;;;;;;31025:29;;31076:21;31025:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31011:101;;;;;29687:1433;;;;;;;;;29659:1461;:::o;28767:503::-;28833:21;28871:1;28857:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28833:40;;28902:4;28884;28889:1;28884:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28928:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28918:4;28923:1;28918:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28964:62;28981:4;28996:15;29014:11;28964:8;:62::i;:::-;29066:15;:66;;;29147:11;29173:1;29189:4;29216;29236:15;29066:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28822:448;28767:503;:::o;29279:371::-;29360:62;29377:4;29392:15;29410:11;29360:8;:62::i;:::-;29436:15;:31;;;29475:9;29508:4;29528:11;29554:1;29570;29586:15;;;;;;;;;;;29616;29436:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29279:371;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:118::-;5483:24;5501:5;5483:24;:::i;:::-;5478:3;5471:37;5396:118;;:::o;5520:222::-;5613:4;5651:2;5640:9;5636:18;5628:26;;5664:71;5732:1;5721:9;5717:17;5708:6;5664:71;:::i;:::-;5520:222;;;;:::o;5748:86::-;5783:7;5823:4;5816:5;5812:16;5801:27;;5748:86;;;:::o;5840:112::-;5923:22;5939:5;5923:22;:::i;:::-;5918:3;5911:35;5840:112;;:::o;5958:214::-;6047:4;6085:2;6074:9;6070:18;6062:26;;6098:67;6162:1;6151:9;6147:17;6138:6;6098:67;:::i;:::-;5958:214;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:1057::-;6952:6;6960;6968;6976;6984;6992;7041:3;7029:9;7020:7;7016:23;7012:33;7009:120;;;7048:79;;:::i;:::-;7009:120;7168:1;7193:53;7238:7;7229:6;7218:9;7214:22;7193:53;:::i;:::-;7183:63;;7139:117;7295:2;7321:53;7366:7;7357:6;7346:9;7342:22;7321:53;:::i;:::-;7311:63;;7266:118;7423:2;7449:53;7494:7;7485:6;7474:9;7470:22;7449:53;:::i;:::-;7439:63;;7394:118;7551:2;7577:53;7622:7;7613:6;7602:9;7598:22;7577:53;:::i;:::-;7567:63;;7522:118;7679:3;7706:53;7751:7;7742:6;7731:9;7727:22;7706:53;:::i;:::-;7696:63;;7650:119;7808:3;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7779:119;6848:1057;;;;;;;;:::o;7911:116::-;7981:21;7996:5;7981:21;:::i;:::-;7974:5;7971:32;7961:60;;8017:1;8014;8007:12;7961:60;7911:116;:::o;8033:133::-;8076:5;8114:6;8101:20;8092:29;;8130:30;8154:5;8130:30;:::i;:::-;8033:133;;;;:::o;8172:468::-;8237:6;8245;8294:2;8282:9;8273:7;8269:23;8265:32;8262:119;;;8300:79;;:::i;:::-;8262:119;8420:1;8445:53;8490:7;8481:6;8470:9;8466:22;8445:53;:::i;:::-;8435:63;;8391:117;8547:2;8573:50;8615:7;8606:6;8595:9;8591:22;8573:50;:::i;:::-;8563:60;;8518:115;8172:468;;;;;:::o;8646:474::-;8714:6;8722;8771:2;8759:9;8750:7;8746:23;8742:32;8739:119;;;8777:79;;:::i;:::-;8739:119;8897:1;8922:53;8967:7;8958:6;8947:9;8943:22;8922:53;:::i;:::-;8912:63;;8868:117;9024:2;9050:53;9095:7;9086:6;9075:9;9071:22;9050:53;:::i;:::-;9040:63;;8995:118;8646:474;;;;;:::o;9126:::-;9194:6;9202;9251:2;9239:9;9230:7;9226:23;9222:32;9219:119;;;9257:79;;:::i;:::-;9219:119;9377:1;9402:53;9447:7;9438:6;9427:9;9423:22;9402:53;:::i;:::-;9392:63;;9348:117;9504:2;9530:53;9575:7;9566:6;9555:9;9551:22;9530:53;:::i;:::-;9520:63;;9475:118;9126:474;;;;;:::o;9606:180::-;9654:77;9651:1;9644:88;9751:4;9748:1;9741:15;9775:4;9772:1;9765:15;9792:320;9836:6;9873:1;9867:4;9863:12;9853:22;;9920:1;9914:4;9910:12;9941:18;9931:81;;9997:4;9989:6;9985:17;9975:27;;9931:81;10059:2;10051:6;10048:14;10028:18;10025:38;10022:84;;10078:18;;:::i;:::-;10022:84;9843:269;9792:320;;;:::o;10118:180::-;10166:77;10163:1;10156:88;10263:4;10260:1;10253:15;10287:4;10284:1;10277:15;10304:191;10344:3;10363:20;10381:1;10363:20;:::i;:::-;10358:25;;10397:20;10415:1;10397:20;:::i;:::-;10392:25;;10440:1;10437;10433:9;10426:16;;10461:3;10458:1;10455:10;10452:36;;;10468:18;;:::i;:::-;10452:36;10304:191;;;;:::o;10501:410::-;10541:7;10564:20;10582:1;10564:20;:::i;:::-;10559:25;;10598:20;10616:1;10598:20;:::i;:::-;10593:25;;10653:1;10650;10646:9;10675:30;10693:11;10675:30;:::i;:::-;10664:41;;10854:1;10845:7;10841:15;10838:1;10835:22;10815:1;10808:9;10788:83;10765:139;;10884:18;;:::i;:::-;10765:139;10549:362;10501:410;;;;:::o;10917:180::-;10965:77;10962:1;10955:88;11062:4;11059:1;11052:15;11086:4;11083:1;11076:15;11103:185;11143:1;11160:20;11178:1;11160:20;:::i;:::-;11155:25;;11194:20;11212:1;11194:20;:::i;:::-;11189:25;;11233:1;11223:35;;11238:18;;:::i;:::-;11223:35;11280:1;11277;11273:9;11268:14;;11103:185;;;;:::o;11294:224::-;11434:34;11430:1;11422:6;11418:14;11411:58;11503:7;11498:2;11490:6;11486:15;11479:32;11294:224;:::o;11524:366::-;11666:3;11687:67;11751:2;11746:3;11687:67;:::i;:::-;11680:74;;11763:93;11852:3;11763:93;:::i;:::-;11881:2;11876:3;11872:12;11865:19;;11524:366;;;:::o;11896:419::-;12062:4;12100:2;12089:9;12085:18;12077:26;;12149:9;12143:4;12139:20;12135:1;12124:9;12120:17;12113:47;12177:131;12303:4;12177:131;:::i;:::-;12169:139;;11896:419;;;:::o;12321:143::-;12378:5;12409:6;12403:13;12394:22;;12425:33;12452:5;12425:33;:::i;:::-;12321:143;;;;:::o;12470:351::-;12540:6;12589:2;12577:9;12568:7;12564:23;12560:32;12557:119;;;12595:79;;:::i;:::-;12557:119;12715:1;12740:64;12796:7;12787:6;12776:9;12772:22;12740:64;:::i;:::-;12730:74;;12686:128;12470:351;;;;:::o;12827:332::-;12948:4;12986:2;12975:9;12971:18;12963:26;;12999:71;13067:1;13056:9;13052:17;13043:6;12999:71;:::i;:::-;13080:72;13148:2;13137:9;13133:18;13124:6;13080:72;:::i;:::-;12827:332;;;;;:::o;13165:::-;13286:4;13324:2;13313:9;13309:18;13301:26;;13337:71;13405:1;13394:9;13390:17;13381:6;13337:71;:::i;:::-;13418:72;13486:2;13475:9;13471:18;13462:6;13418:72;:::i;:::-;13165:332;;;;;:::o;13503:137::-;13557:5;13588:6;13582:13;13573:22;;13604:30;13628:5;13604:30;:::i;:::-;13503:137;;;;:::o;13646:345::-;13713:6;13762:2;13750:9;13741:7;13737:23;13733:32;13730:119;;;13768:79;;:::i;:::-;13730:119;13888:1;13913:61;13966:7;13957:6;13946:9;13942:22;13913:61;:::i;:::-;13903:71;;13859:125;13646:345;;;;:::o;13997:85::-;14042:7;14071:5;14060:16;;13997:85;;;:::o;14088:158::-;14146:9;14179:61;14197:42;14206:32;14232:5;14206:32;:::i;:::-;14197:42;:::i;:::-;14179:61;:::i;:::-;14166:74;;14088:158;;;:::o;14252:147::-;14347:45;14386:5;14347:45;:::i;:::-;14342:3;14335:58;14252:147;;:::o;14405:807::-;14654:4;14692:3;14681:9;14677:19;14669:27;;14706:71;14774:1;14763:9;14759:17;14750:6;14706:71;:::i;:::-;14787:72;14855:2;14844:9;14840:18;14831:6;14787:72;:::i;:::-;14869:80;14945:2;14934:9;14930:18;14921:6;14869:80;:::i;:::-;14959;15035:2;15024:9;15020:18;15011:6;14959:80;:::i;:::-;15049:73;15117:3;15106:9;15102:19;15093:6;15049:73;:::i;:::-;15132;15200:3;15189:9;15185:19;15176:6;15132:73;:::i;:::-;14405:807;;;;;;;;;:::o;15218:143::-;15275:5;15306:6;15300:13;15291:22;;15322:33;15349:5;15322:33;:::i;:::-;15218:143;;;;:::o;15367:663::-;15455:6;15463;15471;15520:2;15508:9;15499:7;15495:23;15491:32;15488:119;;;15526:79;;:::i;:::-;15488:119;15646:1;15671:64;15727:7;15718:6;15707:9;15703:22;15671:64;:::i;:::-;15661:74;;15617:128;15784:2;15810:64;15866:7;15857:6;15846:9;15842:22;15810:64;:::i;:::-;15800:74;;15755:129;15923:2;15949:64;16005:7;15996:6;15985:9;15981:22;15949:64;:::i;:::-;15939:74;;15894:129;15367:663;;;;;:::o;16036:351::-;16106:6;16155:2;16143:9;16134:7;16130:23;16126:32;16123:119;;;16161:79;;:::i;:::-;16123:119;16281:1;16306:64;16362:7;16353:6;16342:9;16338:22;16306:64;:::i;:::-;16296:74;;16252:128;16036:351;;;;:::o;16393:225::-;16533:34;16529:1;16521:6;16517:14;16510:58;16602:8;16597:2;16589:6;16585:15;16578:33;16393:225;:::o;16624:366::-;16766:3;16787:67;16851:2;16846:3;16787:67;:::i;:::-;16780:74;;16863:93;16952:3;16863:93;:::i;:::-;16981:2;16976:3;16972:12;16965:19;;16624:366;;;:::o;16996:419::-;17162:4;17200:2;17189:9;17185:18;17177:26;;17249:9;17243:4;17239:20;17235:1;17224:9;17220:17;17213:47;17277:131;17403:4;17277:131;:::i;:::-;17269:139;;16996:419;;;:::o;17421:147::-;17522:11;17559:3;17544:18;;17421:147;;;;:::o;17574:114::-;;:::o;17694:398::-;17853:3;17874:83;17955:1;17950:3;17874:83;:::i;:::-;17867:90;;17966:93;18055:3;17966:93;:::i;:::-;18084:1;18079:3;18075:11;18068:18;;17694:398;;;:::o;18098:379::-;18282:3;18304:147;18447:3;18304:147;:::i;:::-;18297:154;;18468:3;18461:10;;18098:379;;;:::o;18483:194::-;18523:4;18543:20;18561:1;18543:20;:::i;:::-;18538:25;;18577:20;18595:1;18577:20;:::i;:::-;18572:25;;18621:1;18618;18614:9;18606:17;;18645:1;18639:4;18636:11;18633:37;;;18650:18;;:::i;:::-;18633:37;18483:194;;;;:::o;18683:182::-;18823:34;18819:1;18811:6;18807:14;18800:58;18683:182;:::o;18871:366::-;19013:3;19034:67;19098:2;19093:3;19034:67;:::i;:::-;19027:74;;19110:93;19199:3;19110:93;:::i;:::-;19228:2;19223:3;19219:12;19212:19;;18871:366;;;:::o;19243:419::-;19409:4;19447:2;19436:9;19432:18;19424:26;;19496:9;19490:4;19486:20;19482:1;19471:9;19467:17;19460:47;19524:131;19650:4;19524:131;:::i;:::-;19516:139;;19243:419;;;:::o;19668:442::-;19817:4;19855:2;19844:9;19840:18;19832:26;;19868:71;19936:1;19925:9;19921:17;19912:6;19868:71;:::i;:::-;19949:72;20017:2;20006:9;20002:18;19993:6;19949:72;:::i;:::-;20031;20099:2;20088:9;20084:18;20075:6;20031:72;:::i;:::-;19668:442;;;;;;:::o;20116:180::-;20164:77;20161:1;20154:88;20261:4;20258:1;20251:15;20285:4;20282:1;20275:15;20302:180;20350:77;20347:1;20340:88;20447:4;20444:1;20437:15;20471:4;20468:1;20461:15;20488:114;20555:6;20589:5;20583:12;20573:22;;20488:114;;;:::o;20608:184::-;20707:11;20741:6;20736:3;20729:19;20781:4;20776:3;20772:14;20757:29;;20608:184;;;;:::o;20798:132::-;20865:4;20888:3;20880:11;;20918:4;20913:3;20909:14;20901:22;;20798:132;;;:::o;20936:108::-;21013:24;21031:5;21013:24;:::i;:::-;21008:3;21001:37;20936:108;;:::o;21050:179::-;21119:10;21140:46;21182:3;21174:6;21140:46;:::i;:::-;21218:4;21213:3;21209:14;21195:28;;21050:179;;;;:::o;21235:113::-;21305:4;21337;21332:3;21328:14;21320:22;;21235:113;;;:::o;21384:732::-;21503:3;21532:54;21580:5;21532:54;:::i;:::-;21602:86;21681:6;21676:3;21602:86;:::i;:::-;21595:93;;21712:56;21762:5;21712:56;:::i;:::-;21791:7;21822:1;21807:284;21832:6;21829:1;21826:13;21807:284;;;21908:6;21902:13;21935:63;21994:3;21979:13;21935:63;:::i;:::-;21928:70;;22021:60;22074:6;22021:60;:::i;:::-;22011:70;;21867:224;21854:1;21851;21847:9;21842:14;;21807:284;;;21811:14;22107:3;22100:10;;21508:608;;;21384:732;;;;:::o;22122:831::-;22385:4;22423:3;22412:9;22408:19;22400:27;;22437:71;22505:1;22494:9;22490:17;22481:6;22437:71;:::i;:::-;22518:80;22594:2;22583:9;22579:18;22570:6;22518:80;:::i;:::-;22645:9;22639:4;22635:20;22630:2;22619:9;22615:18;22608:48;22673:108;22776:4;22767:6;22673:108;:::i;:::-;22665:116;;22791:72;22859:2;22848:9;22844:18;22835:6;22791:72;:::i;:::-;22873:73;22941:3;22930:9;22926:19;22917:6;22873:73;:::i;:::-;22122:831;;;;;;;;:::o

Swarm Source

ipfs://a467b6fe43bf1db9fa806f04d644cb31bba889ed42546a90390bad4199044571
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.