ETH Price: $3,459.75 (+1.12%)
Gas: 10 Gwei

Token

Dancing Trump (DTRUMP)
 

Overview

Max Total Supply

1,000,000,000 DTRUMP

Holders

146

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
274,184.121883761362729391 DTRUMP

Value
$0.00
0x53Dc172aEf3DB4F9D8ab771B8D0D5BA388400d98
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:
DTRUMP

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-21
*/

/*
 * SPDX-License-Identifier: MIT
 * https://t.me/dancingtrumpeth
 * https://x.com/DancingTrumpETH
 * https://dancingtrumpeth.com
 */

pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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
    );
}

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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 upd 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing 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);
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event ProjectWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("Dancing Trump", "DTRUMP") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        exemptFrmLimits(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        exemptFrmLimits(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMarketingTax = 30;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 30;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 1_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(0xBE43c7475726aB8E6F646441c636D0232573A334);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        exemptFrmFees(msg.sender, true);
        exemptFrmFees(address(this), true);
        exemptFrmFees(address(0xdead), true);
        exemptFrmFees(marketingWallet, true);

        exemptFrmLimits(msg.sender, true);
        exemptFrmLimits(address(this), true);
        exemptFrmLimits(address(0xdead), true);
        exemptFrmLimits(marketingWallet, true);

        transferOwnership(msg.sender);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, _totalSupply);
    }

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function openTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function limitsDisableSet() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function changeSwabackValues(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newMaxTxLimit Base 1000, so 1% = 10
     */
    function changeMxTx(uint256 newMaxTxLimit) external onlyOwner {
        require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newMaxTxLimit * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newMaxWalletLimit Base 1000, so 1% = 10
     */
    function changeMaWallet(uint256 newMaxWalletLimit) external onlyOwner {
        require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newMaxWalletLimit * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function exemptFrmLimits(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFesBuy(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFesSell(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function exemptFrmFees(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function changeMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function changeProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackValues()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function maxTxValues()
        external
        view
        returns (
            bool _limitsEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function receiverwallets()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function taxValues()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

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

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] && !transferLimitExempt[to]
                ) {
                    require(
                        amount <= maxTx,
                        "Buy transfer amount exceeds the maxTx."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] && !transferLimitExempt[from]
                ) {
                    require(
                        amount <= maxTx,
                        "Sell transfer amount exceeds the maxTx."
                    );
                } else if (!transferLimitExempt[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

        if (
            canSwap &&
            swapbackEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !transferTaxExempt[from] &&
            !transferTaxExempt[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (transferTaxExempt[from] || transferTaxExempt[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        (success, ) = address(projectWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"changeMaWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"changeMxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"changeSwabackValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFrmFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFrmLimits","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":[],"name":"limitsDisableSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","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":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600d81526020017f44616e63696e67205472756d70000000000000000000000000000000000000008152506040518060400160405280600681526020017f445452554d5000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000f1f565b508060049081620000f2919062000f1f565b5050506200011562000109620005f860201b60201c565b6200060060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000141816001620006c660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e7919062001070565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000275919062001070565b6040518363ffffffff1660e01b815260040162000294929190620010b3565b6020604051808303816000875af1158015620002b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002da919062001070565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200032260a0516001620006c660201b60201c565b6200033760a05160016200080060201b60201c565b6000601e9050600080601e905060008062000357620008a160201b60201c565b600a62000365919062001270565b633b9aca00620003769190620012c1565b90506103e8600a826200038a9190620012c1565b6200039691906200133b565b600a819055506103e8600a82620003ae9190620012c1565b620003ba91906200133b565b6009819055506103e8600182620003d29190620012c1565b620003de91906200133b565b6006819055506064600282620003f59190620012c1565b6200040191906200133b565b60078190555084600f8190555083601081905550601054600f5462000427919062001373565b600e8190555082601281905550816013819055506013546012546200044d919062001373565b60118190555073be43c7475726ab8e6f646441c636d0232573a334600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004fc336001620008aa60201b60201c565b6200050f306001620008aa60201b60201c565b6200052461dead6001620008aa60201b60201c565b62000559600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008aa60201b60201c565b6200056c336001620006c660201b60201c565b6200057f306001620006c660201b60201c565b6200059461dead6001620006c660201b60201c565b620005c9600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006c660201b60201c565b620005da33620009e460201b60201c565b620005ec338262000af960201b60201c565b505050505050620015a3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d6620005f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006fc62000c7160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074c906200140f565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620007f491906200144e565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620008ba620005f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008e062000c7160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000930906200140f565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d891906200144e565b60405180910390a25050565b620009f4620005f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a1a62000c7160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6a906200140f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000adc90620014e1565b60405180910390fd5b62000af6816200060060201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b629062001553565b60405180910390fd5b62000b7f6000838362000c9b60201b60201c565b806002600082825462000b93919062001373565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000bea919062001373565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c51919062001586565b60405180910390a362000c6d6000838362000ca060201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d2757607f821691505b60208210810362000d3d5762000d3c62000cdf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000da77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d68565b62000db3868362000d68565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e0062000dfa62000df48462000dcb565b62000dd5565b62000dcb565b9050919050565b6000819050919050565b62000e1c8362000ddf565b62000e3462000e2b8262000e07565b84845462000d75565b825550505050565b600090565b62000e4b62000e3c565b62000e5881848462000e11565b505050565b5b8181101562000e805762000e7460008262000e41565b60018101905062000e5e565b5050565b601f82111562000ecf5762000e998162000d43565b62000ea48462000d58565b8101602085101562000eb4578190505b62000ecc62000ec38562000d58565b83018262000e5d565b50505b505050565b600082821c905092915050565b600062000ef46000198460080262000ed4565b1980831691505092915050565b600062000f0f838362000ee1565b9150826002028217905092915050565b62000f2a8262000ca5565b67ffffffffffffffff81111562000f465762000f4562000cb0565b5b62000f52825462000d0e565b62000f5f82828562000e84565b600060209050601f83116001811462000f97576000841562000f82578287015190505b62000f8e858262000f01565b86555062000ffe565b601f19841662000fa78662000d43565b60005b8281101562000fd15784890151825560018201915060208501945060208101905062000faa565b8683101562000ff1578489015162000fed601f89168262000ee1565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001038826200100b565b9050919050565b6200104a816200102b565b81146200105657600080fd5b50565b6000815190506200106a816200103f565b92915050565b60006020828403121562001089576200108862001006565b5b6000620010998482850162001059565b91505092915050565b620010ad816200102b565b82525050565b6000604082019050620010ca6000830185620010a2565b620010d96020830184620010a2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200116e57808604811115620011465762001145620010e0565b5b6001851615620011565780820291505b808102905062001166856200110f565b945062001126565b94509492505050565b6000826200118957600190506200125c565b816200119957600090506200125c565b8160018114620011b25760028114620011bd57620011f3565b60019150506200125c565b60ff841115620011d257620011d1620010e0565b5b8360020a915084821115620011ec57620011eb620010e0565b5b506200125c565b5060208310610133831016604e8410600b84101617156200122d5782820a905083811115620012275762001226620010e0565b5b6200125c565b6200123c84848460016200111c565b92509050818404811115620012565762001255620010e0565b5b81810290505b9392505050565b600060ff82169050919050565b60006200127d8262000dcb565b91506200128a8362001263565b9250620012b97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001177565b905092915050565b6000620012ce8262000dcb565b9150620012db8362000dcb565b9250828202620012eb8162000dcb565b91508282048414831517620013055762001304620010e0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013488262000dcb565b9150620013558362000dcb565b9250826200136857620013676200130c565b5b828204905092915050565b6000620013808262000dcb565b91506200138d8362000dcb565b9250828201905080821115620013a857620013a7620010e0565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013f7602083620013ae565b91506200140482620013bf565b602082019050919050565b600060208201905081810360008301526200142a81620013e8565b9050919050565b60008115159050919050565b620014488162001431565b82525050565b60006020820190506200146560008301846200143d565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014c9602683620013ae565b9150620014d6826200146b565b604082019050919050565b60006020820190508181036000830152620014fc81620014ba565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200153b601f83620013ae565b9150620015488262001503565b602082019050919050565b600060208201905081810360008301526200156e816200152c565b9050919050565b620015808162000dcb565b82525050565b60006020820190506200159d600083018462001575565b92915050565b60805160a0516146e3620015de600039600081816110f50152611c740152600081816130c0015281816131a101526131c801526146e36000f3fe6080604052600436106101f25760003560e01c806399e5b5c81161010d578063d404a657116100a0578063ea334fa51161006f578063ea334fa5146106fa578063f242ab4114610723578063f2fde38b1461074e578063f3dc390214610777578063fab82a8e146107a7576101f9565b8063d404a6571461062c578063dd62ed3e14610655578063e13b200714610692578063e50eb7b4146106d1576101f9565b8063b45fa0a0116100dc578063b45fa0a01461059a578063bb85c6d1146105c3578063c4d48695146105ec578063c9567bf914610615576101f9565b806399e5b5c8146104ce5780639a7a23d6146104f7578063a457c2d714610520578063a9059cbb1461055d576101f9565b80634ada218b1161018557806377b5312c1161015457806377b5312c146104345780638da5cb5b14610461578063953288741461048c57806395d89b41146104a3576101f9565b80634ada218b1461038c5780635a44b93c146103b757806370a08231146103e0578063715018a61461041d576101f9565b806323b872dd116101c157806323b872dd146102ba578063313ce567146102f757806331f8151114610322578063395093511461034f576101f9565b806305397b1d146101fe57806306fdde0314610227578063095ea7b31461025257806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906132af565b6107d3565b005b34801561023357600080fd5b5061023c6108fe565b604051610249919061337f565b60405180910390f35b34801561025e57600080fd5b50610279600480360381019061027491906133ff565b610990565b604051610286919061345a565b60405180910390f35b34801561029b57600080fd5b506102a46109ae565b6040516102b19190613484565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061349f565b6109b8565b6040516102ee919061345a565b60405180910390f35b34801561030357600080fd5b5061030c610ab0565b604051610319919061350e565b60405180910390f35b34801561032e57600080fd5b50610337610ab9565b60405161034693929190613529565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906133ff565b610adf565b604051610383919061345a565b60405180910390f35b34801561039857600080fd5b506103a1610b8b565b6040516103ae919061345a565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d9919061358c565b610b9e565b005b3480156103ec57600080fd5b50610407600480360381019061040291906135cc565b610cc3565b6040516104149190613484565b60405180910390f35b34801561042957600080fd5b50610432610d0b565b005b34801561044057600080fd5b50610449610d93565b60405161045893929190613529565b60405180910390f35b34801561046d57600080fd5b50610476610db9565b6040516104839190613608565b60405180910390f35b34801561049857600080fd5b506104a1610de3565b005b3480156104af57600080fd5b506104b8610ea9565b6040516104c5919061337f565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906135cc565b610f3b565b005b34801561050357600080fd5b5061051e6004803603810190610519919061358c565b611077565b005b34801561052c57600080fd5b50610547600480360381019061054291906133ff565b61118f565b604051610554919061345a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906133ff565b61127a565b604051610591919061345a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613623565b611298565b005b3480156105cf57600080fd5b506105ea60048036038101906105e591906135cc565b611441565b005b3480156105f857600080fd5b50610613600480360381019061060e9190613676565b61157d565b005b34801561062157600080fd5b5061062a61169f565b005b34801561063857600080fd5b50610653600480360381019061064e91906132af565b611780565b005b34801561066157600080fd5b5061067c600480360381019061067791906136a3565b6118ab565b6040516106899190613484565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906135cc565b611932565b6040516106c8939291906136e3565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190613676565b611a2b565b005b34801561070657600080fd5b50610721600480360381019061071c919061358c565b611b4d565b005b34801561072f57600080fd5b50610738611c72565b6040516107459190613608565b60405180910390f35b34801561075a57600080fd5b50610775600480360381019061077091906135cc565b611c96565b005b34801561078357600080fd5b5061078c611d8d565b60405161079e9695949392919061371a565b60405180910390f35b3480156107b357600080fd5b506107bc611dbc565b6040516107ca92919061377b565b60405180910390f35b6107db611e0d565b73ffffffffffffffffffffffffffffffffffffffff166107f9610db9565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906137f0565b60405180910390fd5b81600f8190555080601081905550601054600f5461086d919061383f565b600e819055506064600e5411156108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b0906138e5565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f546010546040516108f293929190613905565b60405180910390a15050565b60606003805461090d9061396b565b80601f01602080910402602001604051908101604052809291908181526020018280546109399061396b565b80156109865780601f1061095b57610100808354040283529160200191610986565b820191906000526020600020905b81548152906001019060200180831161096957829003601f168201915b5050505050905090565b60006109a461099d611e0d565b8484611e15565b6001905092915050565b6000600254905090565b60006109c5848484611fde565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a10611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790613a0e565b60405180910390fd5b610aa485610a9c611e0d565b858403611e15565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b6000610b81610aec611e0d565b848460016000610afa611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7c919061383f565b611e15565b6001905092915050565b600c60009054906101000a900460ff1681565b610ba6611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610bc4610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c11906137f0565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610cb7919061345a565b60405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d13611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610d31610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906137f0565b60405180910390fd5b610d916000612a47565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610deb611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610e09610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906137f0565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b606060048054610eb89061396b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee49061396b565b8015610f315780601f10610f0657610100808354040283529160200191610f31565b820191906000526020600020905b815481529060010190602001808311610f1457829003601f168201915b5050505050905090565b610f43611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610f61610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae906137f0565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61107f611e0d565b73ffffffffffffffffffffffffffffffffffffffff1661109d610db9565b73ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea906137f0565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613aa0565b60405180910390fd5b61118b8282612b0d565b5050565b6000806001600061119e611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290613b32565b60405180910390fd5b61126f611266611e0d565b85858403611e15565b600191505092915050565b600061128e611287611e0d565b8484611fde565b6001905092915050565b6112a0611e0d565b73ffffffffffffffffffffffffffffffffffffffff166112be610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906137f0565b60405180910390fd5b6001821015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613bc4565b60405180910390fd5b8181101561139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613c56565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826113c16109ae565b6113cb9190613c76565b6113d59190613ce7565b600681905550612710816113e76109ae565b6113f19190613c76565b6113fb9190613ce7565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161143493929190613529565b60405180910390a1505050565b611449611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611467610db9565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906137f0565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611585611e0d565b73ffffffffffffffffffffffffffffffffffffffff166115a3610db9565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906137f0565b60405180910390fd5b600581101561163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613d8a565b60405180910390fd5b6103e86116486109ae565b826116539190613c76565b61165d9190613ce7565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516116949190613484565b60405180910390a150565b6116a7611e0d565b73ffffffffffffffffffffffffffffffffffffffff166116c5610db9565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906137f0565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611788611e0d565b73ffffffffffffffffffffffffffffffffffffffff166117a6610db9565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f3906137f0565b60405180910390fd5b816012819055508060138190555060135460125461181a919061383f565b60118190555060646011541115611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613e1c565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160115460125460135460405161189f93929190613905565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611a33611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611a51610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906137f0565b60405180910390fd5b6002811015611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613e88565b60405180910390fd5b6103e8611af66109ae565b82611b019190613c76565b611b0b9190613ce7565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051611b429190613484565b60405180910390a150565b611b55611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611b73610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc0906137f0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c66919061345a565b60405180910390a25050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c9e611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611cbc610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d09906137f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f1a565b60405180910390fd5b611d8a81612a47565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea9061403e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fd19190613484565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612044906140d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390614162565b60405180910390fd5b600081036120d5576120d083836000612bae565b612a42565b600860009054906101000a900460ff16156125d0576120f2610db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121605750612130610db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121ec5750600560149054906101000a900460ff16155b156125cf57600c60009054906101000a900460ff166122e657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a65750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc906141f4565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123895750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561243057600a548111156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614286565b60405180910390fd5b6009546123df83610cc3565b826123ea919061383f565b111561242b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612422906142f2565b60405180910390fd5b6125ce565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124d35750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252257600a5481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614384565b60405180910390fd5b6125cd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125cc5760095461257f83610cc3565b8261258a919061383f565b11156125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c2906142f2565b60405180910390fd5b5b5b5b5b5b60006125db30610cc3565b9050600060065482101590508080156126005750600560159054906101000a900460ff165b80156126195750600560149054906101000a900460ff16155b801561266f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c55750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561271b5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275f576001600560146101000a81548160ff021916908315150217905550612743612e2d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128155750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281f57600090505b60008115612a3257601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561288257506000601154115b1561291c576128af60646128a160115488612feb90919063ffffffff16565b61300190919063ffffffff16565b9050601154601354826128c29190613c76565b6128cc9190613ce7565b601560008282546128dd919061383f565b92505081905550601154601254826128f59190613c76565b6128ff9190613ce7565b60146000828254612910919061383f565b92505081905550612a0e565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297757506000600e54115b15612a0d576129a46064612996600e5488612feb90919063ffffffff16565b61300190919063ffffffff16565b9050600e54601054826129b79190613c76565b6129c19190613ce7565b601560008282546129d2919061383f565b92505081905550600e54600f54826129ea9190613c76565b6129f49190613ce7565b60146000828254612a05919061383f565b925050819055505b5b6000811115612a2357612a22873083612bae565b5b8085612a2f91906143a4565b94505b612a3d878787612bae565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c14906140d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614162565b60405180910390fd5b612c97838383613017565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d149061444a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db0919061383f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e149190613484565b60405180910390a3612e2784848461301c565b50505050565b6000612e3830610cc3565b905060008190506000808303612e5057505050612fe9565b600754831115612e605760075492505b60008390506000479050612e7382613021565b6000612e88824761325e90919063ffffffff16565b90506000612eb386612ea560155485612feb90919063ffffffff16565b61300190919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612f0b9061449b565b60006040518083038185875af1925050503d8060008114612f48576040519150601f19603f3d011682016040523d82523d6000602084013e612f4d565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f999061449b565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b505080955050505050505050505b565b60008183612ff99190613c76565b905092915050565b6000818361300f9190613ce7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561303e5761303d6144b0565b5b60405190808252806020026020018201604052801561306c5781602001602082028036833780820191505090505b5090503081600081518110613084576130836144df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190614523565b81600181518110613161576131606144df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131c6307f000000000000000000000000000000000000000000000000000000000000000084611e15565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613228959493929190614653565b600060405180830381600087803b15801561324257600080fd5b505af1158015613256573d6000803e3d6000fd5b505050505050565b6000818361326c91906143a4565b905092915050565b600080fd5b6000819050919050565b61328c81613279565b811461329757600080fd5b50565b6000813590506132a981613283565b92915050565b600080604083850312156132c6576132c5613274565b5b60006132d48582860161329a565b92505060206132e58582860161329a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561332957808201518184015260208101905061330e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613351826132ef565b61335b81856132fa565b935061336b81856020860161330b565b61337481613335565b840191505092915050565b600060208201905081810360008301526133998184613346565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cc826133a1565b9050919050565b6133dc816133c1565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000806040838503121561341657613415613274565b5b6000613424858286016133ea565b92505060206134358582860161329a565b9150509250929050565b60008115159050919050565b6134548161343f565b82525050565b600060208201905061346f600083018461344b565b92915050565b61347e81613279565b82525050565b60006020820190506134996000830184613475565b92915050565b6000806000606084860312156134b8576134b7613274565b5b60006134c6868287016133ea565b93505060206134d7868287016133ea565b92505060406134e88682870161329a565b9150509250925092565b600060ff82169050919050565b613508816134f2565b82525050565b600060208201905061352360008301846134ff565b92915050565b600060608201905061353e600083018661344b565b61354b6020830185613475565b6135586040830184613475565b949350505050565b6135698161343f565b811461357457600080fd5b50565b60008135905061358681613560565b92915050565b600080604083850312156135a3576135a2613274565b5b60006135b1858286016133ea565b92505060206135c285828601613577565b9150509250929050565b6000602082840312156135e2576135e1613274565b5b60006135f0848285016133ea565b91505092915050565b613602816133c1565b82525050565b600060208201905061361d60008301846135f9565b92915050565b60008060006060848603121561363c5761363b613274565b5b600061364a86828701613577565b935050602061365b8682870161329a565b925050604061366c8682870161329a565b9150509250925092565b60006020828403121561368c5761368b613274565b5b600061369a8482850161329a565b91505092915050565b600080604083850312156136ba576136b9613274565b5b60006136c8858286016133ea565b92505060206136d9858286016133ea565b9150509250929050565b60006060820190506136f8600083018661344b565b613705602083018561344b565b613712604083018461344b565b949350505050565b600060c08201905061372f6000830189613475565b61373c6020830188613475565b6137496040830187613475565b6137566060830186613475565b6137636080830185613475565b61377060a0830184613475565b979650505050505050565b600060408201905061379060008301856135f9565b61379d60208301846135f9565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137da6020836132fa565b91506137e5826137a4565b602082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061384a82613279565b915061385583613279565b925082820190508082111561386d5761386c613810565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006138cf6028836132fa565b91506138da82613873565b604082019050919050565b600060208201905081810360008301526138fe816138c2565b9050919050565b600060608201905061391a6000830186613475565b6139276020830185613475565b6139346040830184613475565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061398357607f821691505b6020821081036139965761399561393c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006139f86028836132fa565b9150613a038261399c565b604082019050919050565b60006020820190508181036000830152613a27816139eb565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a8a6039836132fa565b9150613a9582613a2e565b604082019050919050565b60006020820190508181036000830152613ab981613a7d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b1c6025836132fa565b9150613b2782613ac0565b604082019050919050565b60006020820190508181036000830152613b4b81613b0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613bae6034836132fa565b9150613bb982613b52565b604082019050919050565b60006020820190508181036000830152613bdd81613ba1565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613c40602a836132fa565b9150613c4b82613be4565b604082019050919050565b60006020820190508181036000830152613c6f81613c33565b9050919050565b6000613c8182613279565b9150613c8c83613279565b9250828202613c9a81613279565b91508282048414831517613cb157613cb0613810565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cf282613279565b9150613cfd83613279565b925082613d0d57613d0c613cb8565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613d746024836132fa565b9150613d7f82613d18565b604082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613e066029836132fa565b9150613e1182613daa565b604082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613e726020836132fa565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f046026836132fa565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f966024836132fa565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140286022836132fa565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140ba6025836132fa565b91506140c58261405e565b604082019050919050565b600060208201905081810360008301526140e9816140ad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061414c6023836132fa565b9150614157826140f0565b604082019050919050565b6000602082019050818103600083015261417b8161413f565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141de6022836132fa565b91506141e982614182565b604082019050919050565b6000602082019050818103600083015261420d816141d1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006142706026836132fa565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142dc6013836132fa565b91506142e7826142a6565b602082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b600061436e6027836132fa565b915061437982614312565b604082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b60006143af82613279565b91506143ba83613279565b92508282039050818111156143d2576143d1613810565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144346026836132fa565b915061443f826143d8565b604082019050919050565b6000602082019050818103600083015261446381614427565b9050919050565b600081905092915050565b50565b600061448560008361446a565b915061449082614475565b600082019050919050565b60006144a682614478565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061451d816133d3565b92915050565b60006020828403121561453957614538613274565b5b60006145478482850161450e565b91505092915050565b6000819050919050565b6000819050919050565b600061457f61457a61457584614550565b61455a565b613279565b9050919050565b61458f81614564565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ca816133c1565b82525050565b60006145dc83836145c1565b60208301905092915050565b6000602082019050919050565b600061460082614595565b61460a81856145a0565b9350614615836145b1565b8060005b8381101561464657815161462d88826145d0565b9750614638836145e8565b925050600181019050614619565b5085935050505092915050565b600060a0820190506146686000830188613475565b6146756020830187614586565b818103604083015261468781866145f5565b905061469660608301856135f9565b6146a36080830184613475565b969550505050505056fea26469706673582212201cbc42966a50d939452d59a35b22db4b8e87393a87b0bf77c37c343ca3ba281364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806399e5b5c81161010d578063d404a657116100a0578063ea334fa51161006f578063ea334fa5146106fa578063f242ab4114610723578063f2fde38b1461074e578063f3dc390214610777578063fab82a8e146107a7576101f9565b8063d404a6571461062c578063dd62ed3e14610655578063e13b200714610692578063e50eb7b4146106d1576101f9565b8063b45fa0a0116100dc578063b45fa0a01461059a578063bb85c6d1146105c3578063c4d48695146105ec578063c9567bf914610615576101f9565b806399e5b5c8146104ce5780639a7a23d6146104f7578063a457c2d714610520578063a9059cbb1461055d576101f9565b80634ada218b1161018557806377b5312c1161015457806377b5312c146104345780638da5cb5b14610461578063953288741461048c57806395d89b41146104a3576101f9565b80634ada218b1461038c5780635a44b93c146103b757806370a08231146103e0578063715018a61461041d576101f9565b806323b872dd116101c157806323b872dd146102ba578063313ce567146102f757806331f8151114610322578063395093511461034f576101f9565b806305397b1d146101fe57806306fdde0314610227578063095ea7b31461025257806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610225600480360381019061022091906132af565b6107d3565b005b34801561023357600080fd5b5061023c6108fe565b604051610249919061337f565b60405180910390f35b34801561025e57600080fd5b50610279600480360381019061027491906133ff565b610990565b604051610286919061345a565b60405180910390f35b34801561029b57600080fd5b506102a46109ae565b6040516102b19190613484565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc919061349f565b6109b8565b6040516102ee919061345a565b60405180910390f35b34801561030357600080fd5b5061030c610ab0565b604051610319919061350e565b60405180910390f35b34801561032e57600080fd5b50610337610ab9565b60405161034693929190613529565b60405180910390f35b34801561035b57600080fd5b50610376600480360381019061037191906133ff565b610adf565b604051610383919061345a565b60405180910390f35b34801561039857600080fd5b506103a1610b8b565b6040516103ae919061345a565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d9919061358c565b610b9e565b005b3480156103ec57600080fd5b50610407600480360381019061040291906135cc565b610cc3565b6040516104149190613484565b60405180910390f35b34801561042957600080fd5b50610432610d0b565b005b34801561044057600080fd5b50610449610d93565b60405161045893929190613529565b60405180910390f35b34801561046d57600080fd5b50610476610db9565b6040516104839190613608565b60405180910390f35b34801561049857600080fd5b506104a1610de3565b005b3480156104af57600080fd5b506104b8610ea9565b6040516104c5919061337f565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f091906135cc565b610f3b565b005b34801561050357600080fd5b5061051e6004803603810190610519919061358c565b611077565b005b34801561052c57600080fd5b50610547600480360381019061054291906133ff565b61118f565b604051610554919061345a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906133ff565b61127a565b604051610591919061345a565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613623565b611298565b005b3480156105cf57600080fd5b506105ea60048036038101906105e591906135cc565b611441565b005b3480156105f857600080fd5b50610613600480360381019061060e9190613676565b61157d565b005b34801561062157600080fd5b5061062a61169f565b005b34801561063857600080fd5b50610653600480360381019061064e91906132af565b611780565b005b34801561066157600080fd5b5061067c600480360381019061067791906136a3565b6118ab565b6040516106899190613484565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906135cc565b611932565b6040516106c8939291906136e3565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190613676565b611a2b565b005b34801561070657600080fd5b50610721600480360381019061071c919061358c565b611b4d565b005b34801561072f57600080fd5b50610738611c72565b6040516107459190613608565b60405180910390f35b34801561075a57600080fd5b50610775600480360381019061077091906135cc565b611c96565b005b34801561078357600080fd5b5061078c611d8d565b60405161079e9695949392919061371a565b60405180910390f35b3480156107b357600080fd5b506107bc611dbc565b6040516107ca92919061377b565b60405180910390f35b6107db611e0d565b73ffffffffffffffffffffffffffffffffffffffff166107f9610db9565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906137f0565b60405180910390fd5b81600f8190555080601081905550601054600f5461086d919061383f565b600e819055506064600e5411156108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b0906138e5565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f546010546040516108f293929190613905565b60405180910390a15050565b60606003805461090d9061396b565b80601f01602080910402602001604051908101604052809291908181526020018280546109399061396b565b80156109865780601f1061095b57610100808354040283529160200191610986565b820191906000526020600020905b81548152906001019060200180831161096957829003601f168201915b5050505050905090565b60006109a461099d611e0d565b8484611e15565b6001905092915050565b6000600254905090565b60006109c5848484611fde565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a10611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8790613a0e565b60405180910390fd5b610aa485610a9c611e0d565b858403611e15565b60019150509392505050565b60006012905090565b6000806000600860009054906101000a900460ff1692506009549150600a549050909192565b6000610b81610aec611e0d565b848460016000610afa611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b7c919061383f565b611e15565b6001905092915050565b600c60009054906101000a900460ff1681565b610ba6611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610bc4610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c11906137f0565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610cb7919061345a565b60405180910390a25050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d13611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610d31610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906137f0565b60405180910390fd5b610d916000612a47565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610deb611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610e09610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e56906137f0565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b606060048054610eb89061396b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee49061396b565b8015610f315780601f10610f0657610100808354040283529160200191610f31565b820191906000526020600020905b815481529060010190602001808311610f1457829003601f168201915b5050505050905090565b610f43611e0d565b73ffffffffffffffffffffffffffffffffffffffff16610f61610db9565b73ffffffffffffffffffffffffffffffffffffffff1614610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae906137f0565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61107f611e0d565b73ffffffffffffffffffffffffffffffffffffffff1661109d610db9565b73ffffffffffffffffffffffffffffffffffffffff16146110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea906137f0565b60405180910390fd5b7f000000000000000000000000ff116227a4fab036b2256e33f34a4f1254f6939073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613aa0565b60405180910390fd5b61118b8282612b0d565b5050565b6000806001600061119e611e0d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561125b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125290613b32565b60405180910390fd5b61126f611266611e0d565b85858403611e15565b600191505092915050565b600061128e611287611e0d565b8484611fde565b6001905092915050565b6112a0611e0d565b73ffffffffffffffffffffffffffffffffffffffff166112be610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906137f0565b60405180910390fd5b6001821015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f90613bc4565b60405180910390fd5b8181101561139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613c56565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826113c16109ae565b6113cb9190613c76565b6113d59190613ce7565b600681905550612710816113e76109ae565b6113f19190613c76565b6113fb9190613ce7565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161143493929190613529565b60405180910390a1505050565b611449611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611467610db9565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906137f0565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611585611e0d565b73ffffffffffffffffffffffffffffffffffffffff166115a3610db9565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f0906137f0565b60405180910390fd5b600581101561163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163490613d8a565b60405180910390fd5b6103e86116486109ae565b826116539190613c76565b61165d9190613ce7565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516116949190613484565b60405180910390a150565b6116a7611e0d565b73ffffffffffffffffffffffffffffffffffffffff166116c5610db9565b73ffffffffffffffffffffffffffffffffffffffff161461171b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611712906137f0565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611788611e0d565b73ffffffffffffffffffffffffffffffffffffffff166117a6610db9565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f3906137f0565b60405180910390fd5b816012819055508060138190555060135460125461181a919061383f565b60118190555060646011541115611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90613e1c565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160115460125460135460405161189f93929190613905565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611a33611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611a51610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e906137f0565b60405180910390fd5b6002811015611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613e88565b60405180910390fd5b6103e8611af66109ae565b82611b019190613c76565b611b0b9190613ce7565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051611b429190613484565b60405180910390a150565b611b55611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611b73610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc0906137f0565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611c66919061345a565b60405180910390a25050565b7f000000000000000000000000ff116227a4fab036b2256e33f34a4f1254f6939081565b611c9e611e0d565b73ffffffffffffffffffffffffffffffffffffffff16611cbc610db9565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d09906137f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890613f1a565b60405180910390fd5b611d8a81612a47565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7b90613fac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea9061403e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fd19190613484565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361204d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612044906140d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b390614162565b60405180910390fd5b600081036120d5576120d083836000612bae565b612a42565b600860009054906101000a900460ff16156125d0576120f2610db9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121605750612130610db9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121995750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121d3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121ec5750600560149054906101000a900460ff16155b156125cf57600c60009054906101000a900460ff166122e657601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122a65750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dc906141f4565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123895750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561243057600a548111156123d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ca90614286565b60405180910390fd5b6009546123df83610cc3565b826123ea919061383f565b111561242b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612422906142f2565b60405180910390fd5b6125ce565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124d35750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561252257600a5481111561251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614384565b60405180910390fd5b6125cd565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125cc5760095461257f83610cc3565b8261258a919061383f565b11156125cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c2906142f2565b60405180910390fd5b5b5b5b5b5b60006125db30610cc3565b9050600060065482101590508080156126005750600560159054906101000a900460ff165b80156126195750600560149054906101000a900460ff16155b801561266f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c55750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561271b5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561275f576001600560146101000a81548160ff021916908315150217905550612743612e2d565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128155750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561281f57600090505b60008115612a3257601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561288257506000601154115b1561291c576128af60646128a160115488612feb90919063ffffffff16565b61300190919063ffffffff16565b9050601154601354826128c29190613c76565b6128cc9190613ce7565b601560008282546128dd919061383f565b92505081905550601154601254826128f59190613c76565b6128ff9190613ce7565b60146000828254612910919061383f565b92505081905550612a0e565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297757506000600e54115b15612a0d576129a46064612996600e5488612feb90919063ffffffff16565b61300190919063ffffffff16565b9050600e54601054826129b79190613c76565b6129c19190613ce7565b601560008282546129d2919061383f565b92505081905550600e54600f54826129ea9190613c76565b6129f49190613ce7565b60146000828254612a05919061383f565b925050819055505b5b6000811115612a2357612a22873083612bae565b5b8085612a2f91906143a4565b94505b612a3d878787612bae565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c14906140d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8390614162565b60405180910390fd5b612c97838383613017565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d149061444a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db0919061383f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e149190613484565b60405180910390a3612e2784848461301c565b50505050565b6000612e3830610cc3565b905060008190506000808303612e5057505050612fe9565b600754831115612e605760075492505b60008390506000479050612e7382613021565b6000612e88824761325e90919063ffffffff16565b90506000612eb386612ea560155485612feb90919063ffffffff16565b61300190919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612f0b9061449b565b60006040518083038185875af1925050503d8060008114612f48576040519150601f19603f3d011682016040523d82523d6000602084013e612f4d565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f999061449b565b60006040518083038185875af1925050503d8060008114612fd6576040519150601f19603f3d011682016040523d82523d6000602084013e612fdb565b606091505b505080955050505050505050505b565b60008183612ff99190613c76565b905092915050565b6000818361300f9190613ce7565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561303e5761303d6144b0565b5b60405190808252806020026020018201604052801561306c5781602001602082028036833780820191505090505b5090503081600081518110613084576130836144df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314d9190614523565b81600181518110613161576131606144df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506131c6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e15565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613228959493929190614653565b600060405180830381600087803b15801561324257600080fd5b505af1158015613256573d6000803e3d6000fd5b505050505050565b6000818361326c91906143a4565b905092915050565b600080fd5b6000819050919050565b61328c81613279565b811461329757600080fd5b50565b6000813590506132a981613283565b92915050565b600080604083850312156132c6576132c5613274565b5b60006132d48582860161329a565b92505060206132e58582860161329a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561332957808201518184015260208101905061330e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613351826132ef565b61335b81856132fa565b935061336b81856020860161330b565b61337481613335565b840191505092915050565b600060208201905081810360008301526133998184613346565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133cc826133a1565b9050919050565b6133dc816133c1565b81146133e757600080fd5b50565b6000813590506133f9816133d3565b92915050565b6000806040838503121561341657613415613274565b5b6000613424858286016133ea565b92505060206134358582860161329a565b9150509250929050565b60008115159050919050565b6134548161343f565b82525050565b600060208201905061346f600083018461344b565b92915050565b61347e81613279565b82525050565b60006020820190506134996000830184613475565b92915050565b6000806000606084860312156134b8576134b7613274565b5b60006134c6868287016133ea565b93505060206134d7868287016133ea565b92505060406134e88682870161329a565b9150509250925092565b600060ff82169050919050565b613508816134f2565b82525050565b600060208201905061352360008301846134ff565b92915050565b600060608201905061353e600083018661344b565b61354b6020830185613475565b6135586040830184613475565b949350505050565b6135698161343f565b811461357457600080fd5b50565b60008135905061358681613560565b92915050565b600080604083850312156135a3576135a2613274565b5b60006135b1858286016133ea565b92505060206135c285828601613577565b9150509250929050565b6000602082840312156135e2576135e1613274565b5b60006135f0848285016133ea565b91505092915050565b613602816133c1565b82525050565b600060208201905061361d60008301846135f9565b92915050565b60008060006060848603121561363c5761363b613274565b5b600061364a86828701613577565b935050602061365b8682870161329a565b925050604061366c8682870161329a565b9150509250925092565b60006020828403121561368c5761368b613274565b5b600061369a8482850161329a565b91505092915050565b600080604083850312156136ba576136b9613274565b5b60006136c8858286016133ea565b92505060206136d9858286016133ea565b9150509250929050565b60006060820190506136f8600083018661344b565b613705602083018561344b565b613712604083018461344b565b949350505050565b600060c08201905061372f6000830189613475565b61373c6020830188613475565b6137496040830187613475565b6137566060830186613475565b6137636080830185613475565b61377060a0830184613475565b979650505050505050565b600060408201905061379060008301856135f9565b61379d60208301846135f9565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137da6020836132fa565b91506137e5826137a4565b602082019050919050565b60006020820190508181036000830152613809816137cd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061384a82613279565b915061385583613279565b925082820190508082111561386d5761386c613810565b5b92915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006138cf6028836132fa565b91506138da82613873565b604082019050919050565b600060208201905081810360008301526138fe816138c2565b9050919050565b600060608201905061391a6000830186613475565b6139276020830185613475565b6139346040830184613475565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061398357607f821691505b6020821081036139965761399561393c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006139f86028836132fa565b9150613a038261399c565b604082019050919050565b60006020820190508181036000830152613a27816139eb565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a8a6039836132fa565b9150613a9582613a2e565b604082019050919050565b60006020820190508181036000830152613ab981613a7d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b1c6025836132fa565b9150613b2782613ac0565b604082019050919050565b60006020820190508181036000830152613b4b81613b0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613bae6034836132fa565b9150613bb982613b52565b604082019050919050565b60006020820190508181036000830152613bdd81613ba1565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613c40602a836132fa565b9150613c4b82613be4565b604082019050919050565b60006020820190508181036000830152613c6f81613c33565b9050919050565b6000613c8182613279565b9150613c8c83613279565b9250828202613c9a81613279565b91508282048414831517613cb157613cb0613810565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cf282613279565b9150613cfd83613279565b925082613d0d57613d0c613cb8565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613d746024836132fa565b9150613d7f82613d18565b604082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613e066029836132fa565b9150613e1182613daa565b604082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613e726020836132fa565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f046026836132fa565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f966024836132fa565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140286022836132fa565b915061403382613fcc565b604082019050919050565b600060208201905081810360008301526140578161401b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140ba6025836132fa565b91506140c58261405e565b604082019050919050565b600060208201905081810360008301526140e9816140ad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061414c6023836132fa565b9150614157826140f0565b604082019050919050565b6000602082019050818103600083015261417b8161413f565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141de6022836132fa565b91506141e982614182565b604082019050919050565b6000602082019050818103600083015261420d816141d1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006142706026836132fa565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006142dc6013836132fa565b91506142e7826142a6565b602082019050919050565b6000602082019050818103600083015261430b816142cf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b600061436e6027836132fa565b915061437982614312565b604082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b60006143af82613279565b91506143ba83613279565b92508282039050818111156143d2576143d1613810565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144346026836132fa565b915061443f826143d8565b604082019050919050565b6000602082019050818103600083015261446381614427565b9050919050565b600081905092915050565b50565b600061448560008361446a565b915061449082614475565b600082019050919050565b60006144a682614478565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061451d816133d3565b92915050565b60006020828403121561453957614538613274565b5b60006145478482850161450e565b91505092915050565b6000819050919050565b6000819050919050565b600061457f61457a61457584614550565b61455a565b613279565b9050919050565b61458f81614564565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145ca816133c1565b82525050565b60006145dc83836145c1565b60208301905092915050565b6000602082019050919050565b600061460082614595565b61460a81856145a0565b9350614615836145b1565b8060005b8381101561464657815161462d88826145d0565b9750614638836145e8565b925050600181019050614619565b5085935050505092915050565b600060a0820190506146686000830188613475565b6146756020830187614586565b818103604083015261468781866145f5565b905061469660608301856135f9565b6146a36080830184613475565b969550505050505056fea26469706673582212201cbc42966a50d939452d59a35b22db4b8e87393a87b0bf77c37c343ca3ba281364736f6c63430008130033

Deployed Bytecode Sourcemap

25421:20077:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33461:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11019:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13252:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12139:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13924:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11981:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37616:292;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14858:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25996:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32980:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12310:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22358:103;;;;;;;;;;;;;:::i;:::-;;36914:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21707:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30596:133;;;;;;;;;;;;;:::i;:::-;;11238:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36382:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35335:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15647:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12666:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31194:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36021:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32444:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30279:162;;;;;;;;;;;;;:::i;:::-;;34149:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12929:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39846:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31990:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34846:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25542:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22616:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38814:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38140:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33461:399;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33593:13:::1;33575:15;:31;;;;33633:7;33617:13;:23;;;;33683:13;;33665:15;;:31;;;;:::i;:::-;33651:11;:45;;;;33730:3;33715:11;;:18;;33707:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33794:58;33808:11;;33821:15;;33838:13;;33794:58;;;;;;;;:::i;:::-;;;;;;;;33461:399:::0;;:::o;11019:100::-;11073:13;11106:5;11099:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11019:100;:::o;13252:194::-;13360:4;13377:39;13386:12;:10;:12::i;:::-;13400:7;13409:6;13377:8;:39::i;:::-;13434:4;13427:11;;13252:194;;;;:::o;12139:108::-;12200:7;12227:12;;12220:19;;12139:108;:::o;13924:529::-;14064:4;14081:36;14091:6;14099:9;14110:6;14081:9;:36::i;:::-;14130:24;14157:11;:19;14169:6;14157:19;;;;;;;;;;;;;;;:33;14177:12;:10;:12::i;:::-;14157:33;;;;;;;;;;;;;;;;14130:60;;14243:6;14223:16;:26;;14201:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14353:57;14362:6;14370:12;:10;:12::i;:::-;14403:6;14384:16;:25;14353:8;:57::i;:::-;14441:4;14434:11;;;13924:529;;;;;:::o;11981:93::-;12039:5;12064:2;12057:9;;11981:93;:::o;37616:292::-;37703:19;37737:18;37770:14;37829:13;;;;;;;;;;;37812:30;;37866:9;;37853:22;;37895:5;;37886:14;;37616:292;;;:::o;14858:290::-;14971:4;14988:130;15011:12;:10;:12::i;:::-;15038:7;15097:10;15060:11;:25;15072:12;:10;:12::i;:::-;15060:25;;;;;;;;;;;;;;;:34;15086:7;15060:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14988:8;:130::i;:::-;15136:4;15129:11;;14858:290;;;;:::o;25996:34::-;;;;;;;;;;;;;:::o;32980:194::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33115:4:::1;33085:19;:27;33105:6;33085:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33153:6;33135:31;;;33161:4;33135:31;;;;;;:::i;:::-;;;;;;;;32980:194:::0;;:::o;12310:143::-;12400:7;12427:9;:18;12437:7;12427:18;;;;;;;;;;;;;;;;12420:25;;12310:143;;;:::o;22358:103::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22423:30:::1;22450:1;22423:18;:30::i;:::-;22358:103::o:0;36914:355::-;37004:21;37040:25;37080;37152:15;;;;;;;;;;;37133:34;;37198:16;;37178:36;;37245:16;;37225:36;;36914:355;;;:::o;21707:87::-;21753:7;21780:6;;;;;;;;;;;21773:13;;21707:87;:::o;30596:133::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30670:5:::1;30654:13;;:21;;;;;;;;;;;;;;;;;;30705:15;30691:30;;;;;;;;;;30596:133::o:0;11238:104::-;11294:13;11327:7;11320:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11238:104;:::o;36382:173::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36497:13:::1;;;;;;;;;;;36465:46;;36486:9;36465:46;;;;;;;;;;;;36538:9;36522:13;;:25;;;;;;;;;;;;;;;;;;36382:173:::0;:::o;35335:300::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35481:7:::1;35473:15;;:4;:15;;::::0;35451:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35586:41;35615:4;35621:5;35586:28;:41::i;:::-;35335:300:::0;;:::o;15647:475::-;15765:4;15782:24;15809:11;:25;15821:12;:10;:12::i;:::-;15809:25;;;;;;;;;;;;;;;:34;15835:7;15809:34;;;;;;;;;;;;;;;;15782:61;;15896:15;15876:16;:35;;15854:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16012:67;16021:12;:10;:12::i;:::-;16035:7;16063:15;16044:16;:34;16012:8;:67::i;:::-;16110:4;16103:11;;;15647:475;;;;:::o;12666:200::-;12777:4;12794:42;12804:12;:10;:12::i;:::-;12818:9;12829:6;12794:9;:42::i;:::-;12854:4;12847:11;;12666:200;;;;:::o;31194:553::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31360:1:::1;31352:4;:9;;31330:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31468:4;31460;:12;;31452:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31550:8;31532:15;;:26;;;;;;;;;;;;;;;;;;31613:5;31605:4;31589:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31588:30;;;;:::i;:::-;31569:16;:49;;;;31673:5;31665:4;31649:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31648:30;;;;:::i;:::-;31629:16;:49;;;;31694:45;31718:8;31728:4;31734;31694:45;;;;;;;;:::i;:::-;;;;;;;;31194:553:::0;;;:::o;36021:181::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36140:15:::1;;;;;;;;;;;36106:50;;36129:9;36106:50;;;;;;;;;;;;36185:9;36167:15;;:27;;;;;;;;;;;;;;;;;;36021:181:::0;:::o;32444:268::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32554:1:::1;32533:17;:22;;32525:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32657:4;32640:13;:11;:13::i;:::-;32620:17;:33;;;;:::i;:::-;32619:42;;;;:::i;:::-;32607:9;:54;;;;32677:27;32694:9;;32677:27;;;;;;:::i;:::-;;;;;;;;32444:268:::0;:::o;30279:162::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30349:4:::1;30332:14;;:21;;;;;;;;;;;;;;;;;;30382:4;30364:15;;:22;;;;;;;;;;;;;;;;;;30417:15;30402:31;;;;;;;;;;30279:162::o:0;34149:448::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34283:13:::1;34264:16;:32;;;;34324:7;34307:14;:24;;;;34376:14;;34357:16;;:33;;;;:::i;:::-;34342:12;:48;;;;34439:3;34423:12;;:19;;34401:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34527:62;34542:12;;34556:16;;34574:14;;34527:62;;;;;;;;:::i;:::-;;;;;;;;34149:448:::0;;:::o;12929:176::-;13043:7;13070:11;:18;13082:5;13070:18;;;;;;;;;;;;;;;:27;13089:7;13070:27;;;;;;;;;;;;;;;;13063:34;;12929:176;;;;:::o;39846:448::-;39966:23;40004:25;40044:31;40124:17;:26;40142:7;40124:26;;;;;;;;;;;;;;;;;;;;;;;;;40103:47;;40184:19;:28;40204:7;40184:28;;;;;;;;;;;;;;;;;;;;;;;;;40161:51;;40252:25;:34;40278:7;40252:34;;;;;;;;;;;;;;;;;;;;;;;;;40223:63;;39846:448;;;;;:::o;31990:236::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32088:1:::1;32071:13;:18;;32063:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;32179:4;32162:13;:11;:13::i;:::-;32146;:29;;;;:::i;:::-;32145:38;;;;:::i;:::-;32137:5;:46;;;;32199:19;32212:5;;32199:19;;;;;;:::i;:::-;;;;;;;;31990:236:::0;:::o;34846:178::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34958:8:::1;34929:17;:26;34947:7;34929:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34998:7;34982:34;;;35007:8;34982:34;;;;;;:::i;:::-;;;;;;;;34846:178:::0;;:::o;25542:32::-;;;:::o;22616:238::-;21938:12;:10;:12::i;:::-;21927:23;;:7;:5;:7::i;:::-;:23;;;21919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22739:1:::1;22719:22;;:8;:22;;::::0;22697:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22818:28;22837:8;22818:18;:28::i;:::-;22616:238:::0;:::o;38814:572::-;38899:20;38934:24;38973:22;39010:21;39046:25;39086:23;39152:11;;39137:26;;39193:15;;39174:34;;39236:13;;39219:30;;39276:12;;39260:28;;39319:16;;39299:36;;39364:14;;39346:32;;38814:572;;;;;;:::o;38140:190::-;38217:24;38243:22;38291:15;;;;;;;;;;;38308:13;;;;;;;;;;;38283:39;;;;38140:190;;:::o;10025:98::-;10078:7;10105:10;10098:17;;10025:98;:::o;19430:380::-;19583:1;19566:19;;:5;:19;;;19558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19664:1;19645:21;;:7;:21;;;19637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19748:6;19718:11;:18;19730:5;19718:18;;;;;;;;;;;;;;;:27;19737:7;19718:27;;;;;;;;;;;;;;;:36;;;;19786:7;19770:32;;19779:5;19770:32;;;19795:6;19770:32;;;;;;:::i;:::-;;;;;;;;19430:380;;;:::o;40302:3634::-;40450:1;40434:18;;:4;:18;;;40426:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40527:1;40513:16;;:2;:16;;;40505:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40596:1;40586:6;:11;40582:93;;40614:28;40630:4;40636:2;40640:1;40614:15;:28::i;:::-;40657:7;;40582:93;40691:13;;;;;;;;;;;40687:1564;;;40751:7;:5;:7::i;:::-;40743:15;;:4;:15;;;;:49;;;;;40785:7;:5;:7::i;:::-;40779:13;;:2;:13;;;;40743:49;:86;;;;;40827:1;40813:16;;:2;:16;;;;40743:86;:128;;;;;40864:6;40850:21;;:2;:21;;;;40743:128;:158;;;;;40893:8;;;;;;;;;;;40892:9;40743:158;40721:1519;;;40941:14;;;;;;;;;;;40936:232;;41014:17;:23;41032:4;41014:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41041:17;:21;41059:2;41041:21;;;;;;;;;;;;;;;;;;;;;;;;;41014:48;40980:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;40936:232;41242:25;:31;41268:4;41242:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41278:19;:23;41298:2;41278:23;;;;;;;;;;;;;;;;;;;;;;;;;41277:24;41242:59;41216:1009;;;41388:5;;41378:6;:15;;41344:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;41566:9;;41549:13;41559:2;41549:9;:13::i;:::-;41540:6;:22;;;;:::i;:::-;:35;;41506:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41216:1009;;;41744:25;:29;41770:2;41744:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;41778:19;:25;41798:4;41778:25;;;;;;;;;;;;;;;;;;;;;;;;;41777:26;41744:59;41718:507;;;41890:5;;41880:6;:15;;41846:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41718:507;;;42017:19;:23;42037:2;42017:23;;;;;;;;;;;;;;;;;;;;;;;;;42012:213;;42125:9;;42108:13;42118:2;42108:9;:13::i;:::-;42099:6;:22;;;;:::i;:::-;:35;;42065:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42012:213;41718:507;41216:1009;40721:1519;40687:1564;42263:28;42294:24;42312:4;42294:9;:24::i;:::-;42263:55;;42331:12;42370:16;;42346:20;:40;;42331:55;;42417:7;:39;;;;;42441:15;;;;;;;;;;;42417:39;:65;;;;;42474:8;;;;;;;;;;;42473:9;42417:65;:114;;;;;42500:25;:31;42526:4;42500:31;;;;;;;;;;;;;;;;;;;;;;;;;42499:32;42417:114;:155;;;;;42549:17;:23;42567:4;42549:23;;;;;;;;;;;;;;;;;;;;;;;;;42548:24;42417:155;:194;;;;;42590:17;:21;42608:2;42590:21;;;;;;;;;;;;;;;;;;;;;;;;;42589:22;42417:194;42399:326;;;42649:4;42638:8;;:15;;;;;;;;;;;;;;;;;;42670:10;:8;:10::i;:::-;42708:5;42697:8;;:16;;;;;;;;;;;;;;;;;;42399:326;42737:12;42753:8;;;;;;;;;;;42752:9;42737:24;;42863:17;:23;42881:4;42863:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;42890:17;:21;42908:2;42890:21;;;;;;;;;;;;;;;;;;;;;;;;;42863:48;42859:96;;;42938:5;42928:15;;42859:96;42967:12;43072:7;43068:815;;;43124:25;:29;43150:2;43124:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;43172:1;43157:12;;:16;43124:49;43120:614;;;43201:33;43230:3;43201:24;43212:12;;43201:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43194:40;;43299:12;;43281:14;;43274:4;:21;;;;:::i;:::-;43273:38;;;;:::i;:::-;43253:16;;:58;;;;;;;:::i;:::-;;;;;;;;43380:12;;43360:16;;43353:4;:23;;;;:::i;:::-;43352:40;;;;:::i;:::-;43330:18;;:62;;;;;;;:::i;:::-;;;;;;;;43120:614;;;43454:25;:31;43480:4;43454:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43503:1;43489:11;;:15;43454:50;43450:284;;;43532:32;43560:3;43532:23;43543:11;;43532:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;43525:39;;43628:11;;43611:13;;43604:4;:20;;;;:::i;:::-;43603:36;;;;:::i;:::-;43583:16;;:56;;;;;;;:::i;:::-;;;;;;;;43707:11;;43688:15;;43681:4;:22;;;;:::i;:::-;43680:38;;;;:::i;:::-;43658:18;;:60;;;;;;;:::i;:::-;;;;;;;;43450:284;43120:614;43761:1;43754:4;:8;43750:91;;;43783:42;43799:4;43813;43820;43783:15;:42::i;:::-;43750:91;43867:4;43857:14;;;;;:::i;:::-;;;43068:815;43895:33;43911:4;43917:2;43921:6;43895:15;:33::i;:::-;40415:3521;;;;40302:3634;;;;:::o;23014:191::-;23088:16;23107:6;;;;;;;;;;;23088:25;;23133:8;23124:6;;:17;;;;;;;;;;;;;;;;;;23188:8;23157:40;;23178:8;23157:40;;;;;;;;;;;;23077:128;23014:191;:::o;35643:188::-;35760:5;35726:25;:31;35752:4;35726:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35817:5;35783:40;;35811:4;35783:40;;;;;;;;;;;;35643:188;;:::o;16612:770::-;16770:1;16752:20;;:6;:20;;;16744:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16854:1;16833:23;;:9;:23;;;16825:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16909:47;16930:6;16938:9;16949:6;16909:20;:47::i;:::-;16969:21;16993:9;:17;17003:6;16993:17;;;;;;;;;;;;;;;;16969:41;;17060:6;17043:13;:23;;17021:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17204:6;17188:13;:22;17168:9;:17;17178:6;17168:17;;;;;;;;;;;;;;;:42;;;;17256:6;17232:9;:20;17242:9;17232:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17297:9;17280:35;;17289:6;17280:35;;;17308:6;17280:35;;;;;;:::i;:::-;;;;;;;;17328:46;17348:6;17356:9;17367:6;17328:19;:46::i;:::-;16733:649;16612:770;;;:::o;44523:972::-;44562:23;44588:24;44606:4;44588:9;:24::i;:::-;44562:50;;44623:25;44651:15;44623:43;;44677:12;44725:1;44706:15;:20;44702:59;;44743:7;;;;;44702:59;44795:16;;44777:15;:34;44773:101;;;44846:16;;44828:34;;44773:101;44886:26;44915:15;44886:44;;44943:25;44971:21;44943:49;;45005:36;45022:18;45005:16;:36::i;:::-;45054:18;45075:44;45101:17;45075:21;:25;;:44;;;;:::i;:::-;45054:65;;45132:17;45152:79;45203:17;45152:32;45167:16;;45152:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;45132:99;;45265:1;45244:18;:22;;;;45296:1;45277:16;:20;;;;45332:13;;;;;;;;;;;45324:27;;45359:9;45324:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45310:63;;;;;45408:15;;;;;;;;;;;45400:29;;45451:21;45400:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45386:101;;;;;44551:944;;;;;;;44523:972;:::o;3384:98::-;3442:7;3473:1;3469;:5;;;;:::i;:::-;3462:12;;3384:98;;;;:::o;3783:::-;3841:7;3872:1;3868;:5;;;;:::i;:::-;3861:12;;3783:98;;;;:::o;20410:125::-;;;;:::o;21139:124::-;;;;:::o;43944:571::-;44070:21;44108:1;44094:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44070:40;;44139:4;44121;44126:1;44121:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44165:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44155:4;44160:1;44155:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;44194:56;44211:4;44226:9;44238:11;44194:8;:56::i;:::-;44289:9;:60;;;44364:11;44390:1;44434:4;44461;44481:15;44289:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43999:516;43944:571;:::o;3027:98::-;3085:7;3116:1;3112;:5;;;;:::i;:::-;3105:12;;3027:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:118::-;4013:24;4031:5;4013:24;:::i;:::-;4008:3;4001:37;3926:118;;:::o;4050:222::-;4143:4;4181:2;4170:9;4166:18;4158:26;;4194:71;4262:1;4251:9;4247:17;4238:6;4194:71;:::i;:::-;4050:222;;;;:::o;4278:619::-;4355:6;4363;4371;4420:2;4408:9;4399:7;4395:23;4391:32;4388:119;;;4426:79;;:::i;:::-;4388:119;4546:1;4571:53;4616:7;4607:6;4596:9;4592:22;4571:53;:::i;:::-;4561:63;;4517:117;4673:2;4699:53;4744:7;4735:6;4724:9;4720:22;4699:53;:::i;:::-;4689:63;;4644:118;4801:2;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4772:118;4278:619;;;;;:::o;4903:86::-;4938:7;4978:4;4971:5;4967:16;4956:27;;4903:86;;;:::o;4995:112::-;5078:22;5094:5;5078:22;:::i;:::-;5073:3;5066:35;4995:112;;:::o;5113:214::-;5202:4;5240:2;5229:9;5225:18;5217:26;;5253:67;5317:1;5306:9;5302:17;5293:6;5253:67;:::i;:::-;5113:214;;;;:::o;5333:430::-;5476:4;5514:2;5503:9;5499:18;5491:26;;5527:65;5589:1;5578:9;5574:17;5565:6;5527:65;:::i;:::-;5602:72;5670:2;5659:9;5655:18;5646:6;5602:72;:::i;:::-;5684;5752:2;5741:9;5737:18;5728:6;5684:72;:::i;:::-;5333:430;;;;;;:::o;5769:116::-;5839:21;5854:5;5839:21;:::i;:::-;5832:5;5829:32;5819:60;;5875:1;5872;5865:12;5819:60;5769:116;:::o;5891:133::-;5934:5;5972:6;5959:20;5950:29;;5988:30;6012:5;5988:30;:::i;:::-;5891:133;;;;:::o;6030:468::-;6095:6;6103;6152:2;6140:9;6131:7;6127:23;6123:32;6120:119;;;6158:79;;:::i;:::-;6120:119;6278:1;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6249:117;6405:2;6431:50;6473:7;6464:6;6453:9;6449:22;6431:50;:::i;:::-;6421:60;;6376:115;6030:468;;;;;:::o;6504:329::-;6563:6;6612:2;6600:9;6591:7;6587:23;6583:32;6580:119;;;6618:79;;:::i;:::-;6580:119;6738:1;6763:53;6808:7;6799:6;6788:9;6784:22;6763:53;:::i;:::-;6753:63;;6709:117;6504:329;;;;:::o;6839:118::-;6926:24;6944:5;6926:24;:::i;:::-;6921:3;6914:37;6839:118;;:::o;6963:222::-;7056:4;7094:2;7083:9;7079:18;7071:26;;7107:71;7175:1;7164:9;7160:17;7151:6;7107:71;:::i;:::-;6963:222;;;;:::o;7191:613::-;7265:6;7273;7281;7330:2;7318:9;7309:7;7305:23;7301:32;7298:119;;;7336:79;;:::i;:::-;7298:119;7456:1;7481:50;7523:7;7514:6;7503:9;7499:22;7481:50;:::i;:::-;7471:60;;7427:114;7580:2;7606:53;7651:7;7642:6;7631:9;7627:22;7606:53;:::i;:::-;7596:63;;7551:118;7708:2;7734:53;7779:7;7770:6;7759:9;7755:22;7734:53;:::i;:::-;7724:63;;7679:118;7191:613;;;;;:::o;7810:329::-;7869:6;7918:2;7906:9;7897:7;7893:23;7889:32;7886:119;;;7924:79;;:::i;:::-;7886:119;8044:1;8069:53;8114:7;8105:6;8094:9;8090:22;8069:53;:::i;:::-;8059:63;;8015:117;7810:329;;;;:::o;8145:474::-;8213:6;8221;8270:2;8258:9;8249:7;8245:23;8241:32;8238:119;;;8276:79;;:::i;:::-;8238:119;8396:1;8421:53;8466:7;8457:6;8446:9;8442:22;8421:53;:::i;:::-;8411:63;;8367:117;8523:2;8549:53;8594:7;8585:6;8574:9;8570:22;8549:53;:::i;:::-;8539:63;;8494:118;8145:474;;;;;:::o;8625:406::-;8756:4;8794:2;8783:9;8779:18;8771:26;;8807:65;8869:1;8858:9;8854:17;8845:6;8807:65;:::i;:::-;8882:66;8944:2;8933:9;8929:18;8920:6;8882:66;:::i;:::-;8958;9020:2;9009:9;9005:18;8996:6;8958:66;:::i;:::-;8625:406;;;;;;:::o;9037:775::-;9270:4;9308:3;9297:9;9293:19;9285:27;;9322:71;9390:1;9379:9;9375:17;9366:6;9322:71;:::i;:::-;9403:72;9471:2;9460:9;9456:18;9447:6;9403:72;:::i;:::-;9485;9553:2;9542:9;9538:18;9529:6;9485:72;:::i;:::-;9567;9635:2;9624:9;9620:18;9611:6;9567:72;:::i;:::-;9649:73;9717:3;9706:9;9702:19;9693:6;9649:73;:::i;:::-;9732;9800:3;9789:9;9785:19;9776:6;9732:73;:::i;:::-;9037:775;;;;;;;;;:::o;9818:332::-;9939:4;9977:2;9966:9;9962:18;9954:26;;9990:71;10058:1;10047:9;10043:17;10034:6;9990:71;:::i;:::-;10071:72;10139:2;10128:9;10124:18;10115:6;10071:72;:::i;:::-;9818:332;;;;;:::o;10156:182::-;10296:34;10292:1;10284:6;10280:14;10273:58;10156:182;:::o;10344:366::-;10486:3;10507:67;10571:2;10566:3;10507:67;:::i;:::-;10500:74;;10583:93;10672:3;10583:93;:::i;:::-;10701:2;10696:3;10692:12;10685:19;;10344:366;;;:::o;10716:419::-;10882:4;10920:2;10909:9;10905:18;10897:26;;10969:9;10963:4;10959:20;10955:1;10944:9;10940:17;10933:47;10997:131;11123:4;10997:131;:::i;:::-;10989:139;;10716:419;;;:::o;11141:180::-;11189:77;11186:1;11179:88;11286:4;11283:1;11276:15;11310:4;11307:1;11300:15;11327:191;11367:3;11386:20;11404:1;11386:20;:::i;:::-;11381:25;;11420:20;11438:1;11420:20;:::i;:::-;11415:25;;11463:1;11460;11456:9;11449:16;;11484:3;11481:1;11478:10;11475:36;;;11491:18;;:::i;:::-;11475:36;11327:191;;;;:::o;11524:227::-;11664:34;11660:1;11652:6;11648:14;11641:58;11733:10;11728:2;11720:6;11716:15;11709:35;11524:227;:::o;11757:366::-;11899:3;11920:67;11984:2;11979:3;11920:67;:::i;:::-;11913:74;;11996:93;12085:3;11996:93;:::i;:::-;12114:2;12109:3;12105:12;12098:19;;11757:366;;;:::o;12129:419::-;12295:4;12333:2;12322:9;12318:18;12310:26;;12382:9;12376:4;12372:20;12368:1;12357:9;12353:17;12346:47;12410:131;12536:4;12410:131;:::i;:::-;12402:139;;12129:419;;;:::o;12554:442::-;12703:4;12741:2;12730:9;12726:18;12718:26;;12754:71;12822:1;12811:9;12807:17;12798:6;12754:71;:::i;:::-;12835:72;12903:2;12892:9;12888:18;12879:6;12835:72;:::i;:::-;12917;12985:2;12974:9;12970:18;12961:6;12917:72;:::i;:::-;12554:442;;;;;;:::o;13002:180::-;13050:77;13047:1;13040:88;13147:4;13144:1;13137:15;13171:4;13168:1;13161:15;13188:320;13232:6;13269:1;13263:4;13259:12;13249:22;;13316:1;13310:4;13306:12;13337:18;13327:81;;13393:4;13385:6;13381:17;13371:27;;13327:81;13455:2;13447:6;13444:14;13424:18;13421:38;13418:84;;13474:18;;:::i;:::-;13418:84;13239:269;13188:320;;;:::o;13514:227::-;13654:34;13650:1;13642:6;13638:14;13631:58;13723:10;13718:2;13710:6;13706:15;13699:35;13514:227;:::o;13747:366::-;13889:3;13910:67;13974:2;13969:3;13910:67;:::i;:::-;13903:74;;13986:93;14075:3;13986:93;:::i;:::-;14104:2;14099:3;14095:12;14088:19;;13747:366;;;:::o;14119:419::-;14285:4;14323:2;14312:9;14308:18;14300:26;;14372:9;14366:4;14362:20;14358:1;14347:9;14343:17;14336:47;14400:131;14526:4;14400:131;:::i;:::-;14392:139;;14119:419;;;:::o;14544:244::-;14684:34;14680:1;14672:6;14668:14;14661:58;14753:27;14748:2;14740:6;14736:15;14729:52;14544:244;:::o;14794:366::-;14936:3;14957:67;15021:2;15016:3;14957:67;:::i;:::-;14950:74;;15033:93;15122:3;15033:93;:::i;:::-;15151:2;15146:3;15142:12;15135:19;;14794:366;;;:::o;15166:419::-;15332:4;15370:2;15359:9;15355:18;15347:26;;15419:9;15413:4;15409:20;15405:1;15394:9;15390:17;15383:47;15447:131;15573:4;15447:131;:::i;:::-;15439:139;;15166:419;;;:::o;15591:224::-;15731:34;15727:1;15719:6;15715:14;15708:58;15800:7;15795:2;15787:6;15783:15;15776:32;15591:224;:::o;15821:366::-;15963:3;15984:67;16048:2;16043:3;15984:67;:::i;:::-;15977:74;;16060:93;16149:3;16060:93;:::i;:::-;16178:2;16173:3;16169:12;16162:19;;15821:366;;;:::o;16193:419::-;16359:4;16397:2;16386:9;16382:18;16374:26;;16446:9;16440:4;16436:20;16432:1;16421:9;16417:17;16410:47;16474:131;16600:4;16474:131;:::i;:::-;16466:139;;16193:419;;;:::o;16618:239::-;16758:34;16754:1;16746:6;16742:14;16735:58;16827:22;16822:2;16814:6;16810:15;16803:47;16618:239;:::o;16863:366::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:419::-;17401:4;17439:2;17428:9;17424:18;17416:26;;17488:9;17482:4;17478:20;17474:1;17463:9;17459:17;17452:47;17516:131;17642:4;17516:131;:::i;:::-;17508:139;;17235:419;;;:::o;17660:229::-;17800:34;17796:1;17788:6;17784:14;17777:58;17869:12;17864:2;17856:6;17852:15;17845:37;17660:229;:::o;17895:366::-;18037:3;18058:67;18122:2;18117:3;18058:67;:::i;:::-;18051:74;;18134:93;18223:3;18134:93;:::i;:::-;18252:2;18247:3;18243:12;18236:19;;17895:366;;;:::o;18267:419::-;18433:4;18471:2;18460:9;18456:18;18448:26;;18520:9;18514:4;18510:20;18506:1;18495:9;18491:17;18484:47;18548:131;18674:4;18548:131;:::i;:::-;18540:139;;18267:419;;;:::o;18692:410::-;18732:7;18755:20;18773:1;18755:20;:::i;:::-;18750:25;;18789:20;18807:1;18789:20;:::i;:::-;18784:25;;18844:1;18841;18837:9;18866:30;18884:11;18866:30;:::i;:::-;18855:41;;19045:1;19036:7;19032:15;19029:1;19026:22;19006:1;18999:9;18979:83;18956:139;;19075:18;;:::i;:::-;18956:139;18740:362;18692:410;;;;:::o;19108:180::-;19156:77;19153:1;19146:88;19253:4;19250:1;19243:15;19277:4;19274:1;19267:15;19294:185;19334:1;19351:20;19369:1;19351:20;:::i;:::-;19346:25;;19385:20;19403:1;19385:20;:::i;:::-;19380:25;;19424:1;19414:35;;19429:18;;:::i;:::-;19414:35;19471:1;19468;19464:9;19459:14;;19294:185;;;;:::o;19485:223::-;19625:34;19621:1;19613:6;19609:14;19602:58;19694:6;19689:2;19681:6;19677:15;19670:31;19485:223;:::o;19714:366::-;19856:3;19877:67;19941:2;19936:3;19877:67;:::i;:::-;19870:74;;19953:93;20042:3;19953:93;:::i;:::-;20071:2;20066:3;20062:12;20055:19;;19714:366;;;:::o;20086:419::-;20252:4;20290:2;20279:9;20275:18;20267:26;;20339:9;20333:4;20329:20;20325:1;20314:9;20310:17;20303:47;20367:131;20493:4;20367:131;:::i;:::-;20359:139;;20086:419;;;:::o;20511:228::-;20651:34;20647:1;20639:6;20635:14;20628:58;20720:11;20715:2;20707:6;20703:15;20696:36;20511:228;:::o;20745:366::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:419::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21370:9;21364:4;21360:20;21356:1;21345:9;21341:17;21334:47;21398:131;21524:4;21398:131;:::i;:::-;21390:139;;21117:419;;;:::o;21542:182::-;21682:34;21678:1;21670:6;21666:14;21659:58;21542:182;:::o;21730:366::-;21872:3;21893:67;21957:2;21952:3;21893:67;:::i;:::-;21886:74;;21969:93;22058:3;21969:93;:::i;:::-;22087:2;22082:3;22078:12;22071:19;;21730:366;;;:::o;22102:419::-;22268:4;22306:2;22295:9;22291:18;22283:26;;22355:9;22349:4;22345:20;22341:1;22330:9;22326:17;22319:47;22383:131;22509:4;22383:131;:::i;:::-;22375:139;;22102:419;;;:::o;22527:225::-;22667:34;22663:1;22655:6;22651:14;22644:58;22736:8;22731:2;22723:6;22719:15;22712:33;22527:225;:::o;22758:366::-;22900:3;22921:67;22985:2;22980:3;22921:67;:::i;:::-;22914:74;;22997:93;23086:3;22997:93;:::i;:::-;23115:2;23110:3;23106:12;23099:19;;22758:366;;;:::o;23130:419::-;23296:4;23334:2;23323:9;23319:18;23311:26;;23383:9;23377:4;23373:20;23369:1;23358:9;23354:17;23347:47;23411:131;23537:4;23411:131;:::i;:::-;23403:139;;23130:419;;;:::o;23555:223::-;23695:34;23691:1;23683:6;23679:14;23672:58;23764:6;23759:2;23751:6;23747:15;23740:31;23555:223;:::o;23784:366::-;23926:3;23947:67;24011:2;24006:3;23947:67;:::i;:::-;23940:74;;24023:93;24112:3;24023:93;:::i;:::-;24141:2;24136:3;24132:12;24125:19;;23784:366;;;:::o;24156:419::-;24322:4;24360:2;24349:9;24345:18;24337:26;;24409:9;24403:4;24399:20;24395:1;24384:9;24380:17;24373:47;24437:131;24563:4;24437:131;:::i;:::-;24429:139;;24156:419;;;:::o;24581:221::-;24721:34;24717:1;24709:6;24705:14;24698:58;24790:4;24785:2;24777:6;24773:15;24766:29;24581:221;:::o;24808:366::-;24950:3;24971:67;25035:2;25030:3;24971:67;:::i;:::-;24964:74;;25047:93;25136:3;25047:93;:::i;:::-;25165:2;25160:3;25156:12;25149:19;;24808:366;;;:::o;25180:419::-;25346:4;25384:2;25373:9;25369:18;25361:26;;25433:9;25427:4;25423:20;25419:1;25408:9;25404:17;25397:47;25461:131;25587:4;25461:131;:::i;:::-;25453:139;;25180:419;;;:::o;25605:224::-;25745:34;25741:1;25733:6;25729:14;25722:58;25814:7;25809:2;25801:6;25797:15;25790:32;25605:224;:::o;25835:366::-;25977:3;25998:67;26062:2;26057:3;25998:67;:::i;:::-;25991:74;;26074:93;26163:3;26074:93;:::i;:::-;26192:2;26187:3;26183:12;26176:19;;25835:366;;;:::o;26207:419::-;26373:4;26411:2;26400:9;26396:18;26388:26;;26460:9;26454:4;26450:20;26446:1;26435:9;26431:17;26424:47;26488:131;26614:4;26488:131;:::i;:::-;26480:139;;26207:419;;;:::o;26632:222::-;26772:34;26768:1;26760:6;26756:14;26749:58;26841:5;26836:2;26828:6;26824:15;26817:30;26632:222;:::o;26860:366::-;27002:3;27023:67;27087:2;27082:3;27023:67;:::i;:::-;27016:74;;27099:93;27188:3;27099:93;:::i;:::-;27217:2;27212:3;27208:12;27201:19;;26860:366;;;:::o;27232:419::-;27398:4;27436:2;27425:9;27421:18;27413:26;;27485:9;27479:4;27475:20;27471:1;27460:9;27456:17;27449:47;27513:131;27639:4;27513:131;:::i;:::-;27505:139;;27232:419;;;:::o;27657:221::-;27797:34;27793:1;27785:6;27781:14;27774:58;27866:4;27861:2;27853:6;27849:15;27842:29;27657:221;:::o;27884:366::-;28026:3;28047:67;28111:2;28106:3;28047:67;:::i;:::-;28040:74;;28123:93;28212:3;28123:93;:::i;:::-;28241:2;28236:3;28232:12;28225:19;;27884:366;;;:::o;28256:419::-;28422:4;28460:2;28449:9;28445:18;28437:26;;28509:9;28503:4;28499:20;28495:1;28484:9;28480:17;28473:47;28537:131;28663:4;28537:131;:::i;:::-;28529:139;;28256:419;;;:::o;28681:225::-;28821:34;28817:1;28809:6;28805:14;28798:58;28890:8;28885:2;28877:6;28873:15;28866:33;28681:225;:::o;28912:366::-;29054:3;29075:67;29139:2;29134:3;29075:67;:::i;:::-;29068:74;;29151:93;29240:3;29151:93;:::i;:::-;29269:2;29264:3;29260:12;29253:19;;28912:366;;;:::o;29284:419::-;29450:4;29488:2;29477:9;29473:18;29465:26;;29537:9;29531:4;29527:20;29523:1;29512:9;29508:17;29501:47;29565:131;29691:4;29565:131;:::i;:::-;29557:139;;29284:419;;;:::o;29709:169::-;29849:21;29845:1;29837:6;29833:14;29826:45;29709:169;:::o;29884:366::-;30026:3;30047:67;30111:2;30106:3;30047:67;:::i;:::-;30040:74;;30123:93;30212:3;30123:93;:::i;:::-;30241:2;30236:3;30232:12;30225:19;;29884:366;;;:::o;30256:419::-;30422:4;30460:2;30449:9;30445:18;30437:26;;30509:9;30503:4;30499:20;30495:1;30484:9;30480:17;30473:47;30537:131;30663:4;30537:131;:::i;:::-;30529:139;;30256:419;;;:::o;30681:226::-;30821:34;30817:1;30809:6;30805:14;30798:58;30890:9;30885:2;30877:6;30873:15;30866:34;30681:226;:::o;30913:366::-;31055:3;31076:67;31140:2;31135:3;31076:67;:::i;:::-;31069:74;;31152:93;31241:3;31152:93;:::i;:::-;31270:2;31265:3;31261:12;31254:19;;30913:366;;;:::o;31285:419::-;31451:4;31489:2;31478:9;31474:18;31466:26;;31538:9;31532:4;31528:20;31524:1;31513:9;31509:17;31502:47;31566:131;31692:4;31566:131;:::i;:::-;31558:139;;31285:419;;;:::o;31710:194::-;31750:4;31770:20;31788:1;31770:20;:::i;:::-;31765:25;;31804:20;31822:1;31804:20;:::i;:::-;31799:25;;31848:1;31845;31841:9;31833:17;;31872:1;31866:4;31863:11;31860:37;;;31877:18;;:::i;:::-;31860:37;31710:194;;;;:::o;31910:225::-;32050:34;32046:1;32038:6;32034:14;32027:58;32119:8;32114:2;32106:6;32102:15;32095:33;31910:225;:::o;32141:366::-;32283:3;32304:67;32368:2;32363:3;32304:67;:::i;:::-;32297:74;;32380:93;32469:3;32380:93;:::i;:::-;32498:2;32493:3;32489:12;32482:19;;32141:366;;;:::o;32513:419::-;32679:4;32717:2;32706:9;32702:18;32694:26;;32766:9;32760:4;32756:20;32752:1;32741:9;32737:17;32730:47;32794:131;32920:4;32794:131;:::i;:::-;32786:139;;32513:419;;;:::o;32938:147::-;33039:11;33076:3;33061:18;;32938:147;;;;:::o;33091:114::-;;:::o;33211:398::-;33370:3;33391:83;33472:1;33467:3;33391:83;:::i;:::-;33384:90;;33483:93;33572:3;33483:93;:::i;:::-;33601:1;33596:3;33592:11;33585:18;;33211:398;;;:::o;33615:379::-;33799:3;33821:147;33964:3;33821:147;:::i;:::-;33814:154;;33985:3;33978:10;;33615:379;;;:::o;34000:180::-;34048:77;34045:1;34038:88;34145:4;34142:1;34135:15;34169:4;34166:1;34159:15;34186:180;34234:77;34231:1;34224:88;34331:4;34328:1;34321:15;34355:4;34352:1;34345:15;34372:143;34429:5;34460:6;34454:13;34445:22;;34476:33;34503:5;34476:33;:::i;:::-;34372:143;;;;:::o;34521:351::-;34591:6;34640:2;34628:9;34619:7;34615:23;34611:32;34608:119;;;34646:79;;:::i;:::-;34608:119;34766:1;34791:64;34847:7;34838:6;34827:9;34823:22;34791:64;:::i;:::-;34781:74;;34737:128;34521:351;;;;:::o;34878:85::-;34923:7;34952:5;34941:16;;34878:85;;;:::o;34969:60::-;34997:3;35018:5;35011:12;;34969:60;;;:::o;35035:158::-;35093:9;35126:61;35144:42;35153:32;35179:5;35153:32;:::i;:::-;35144:42;:::i;:::-;35126:61;:::i;:::-;35113:74;;35035:158;;;:::o;35199:147::-;35294:45;35333:5;35294:45;:::i;:::-;35289:3;35282:58;35199:147;;:::o;35352:114::-;35419:6;35453:5;35447:12;35437:22;;35352:114;;;:::o;35472:184::-;35571:11;35605:6;35600:3;35593:19;35645:4;35640:3;35636:14;35621:29;;35472:184;;;;:::o;35662:132::-;35729:4;35752:3;35744:11;;35782:4;35777:3;35773:14;35765:22;;35662:132;;;:::o;35800:108::-;35877:24;35895:5;35877:24;:::i;:::-;35872:3;35865:37;35800:108;;:::o;35914:179::-;35983:10;36004:46;36046:3;36038:6;36004:46;:::i;:::-;36082:4;36077:3;36073:14;36059:28;;35914:179;;;;:::o;36099:113::-;36169:4;36201;36196:3;36192:14;36184:22;;36099:113;;;:::o;36248:732::-;36367:3;36396:54;36444:5;36396:54;:::i;:::-;36466:86;36545:6;36540:3;36466:86;:::i;:::-;36459:93;;36576:56;36626:5;36576:56;:::i;:::-;36655:7;36686:1;36671:284;36696:6;36693:1;36690:13;36671:284;;;36772:6;36766:13;36799:63;36858:3;36843:13;36799:63;:::i;:::-;36792:70;;36885:60;36938:6;36885:60;:::i;:::-;36875:70;;36731:224;36718:1;36715;36711:9;36706:14;;36671:284;;;36675:14;36971:3;36964:10;;36372:608;;;36248:732;;;;:::o;36986:831::-;37249:4;37287:3;37276:9;37272:19;37264:27;;37301:71;37369:1;37358:9;37354:17;37345:6;37301:71;:::i;:::-;37382:80;37458:2;37447:9;37443:18;37434:6;37382:80;:::i;:::-;37509:9;37503:4;37499:20;37494:2;37483:9;37479:18;37472:48;37537:108;37640:4;37631:6;37537:108;:::i;:::-;37529:116;;37655:72;37723:2;37712:9;37708:18;37699:6;37655:72;:::i;:::-;37737:73;37805:3;37794:9;37790:19;37781:6;37737:73;:::i;:::-;36986:831;;;;;;;;:::o

Swarm Source

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