ETH Price: $3,400.96 (-1.27%)
Gas: 4 Gwei

Token

Drink Pee (DRINKP)
 

Overview

Max Total Supply

100,000,000 DRINKP

Holders

200

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 DRINKP

Value
$0.00
0x2bb5eed4149e226372a3c052786e2bf73c891357
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:
DrinkPee

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-04
*/

// SPDX-License-Identifier: No License

/*

#####################################
DRINK PEE TOKEN
INNOVATIVE DRINK TO EARN OF THE FUTURE

WEB: WWW.DRINKP.LOL
DISCORD: https://discord.gg/HexbbKERxY
#####################################

*/

pragma solidity 0.8.19;

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

contract DrinkPee is ERC20, ERC20Burnable, Ownable {
    
    uint256 public swapThreshold;
    
    uint256 private _bountyPending;

    address public bountyAddress;
    uint16[3] public bountyFees;

    mapping (address => bool) public isExcludedFromFees;

    uint16[3] public totalFees;
    bool private _swapping;

    IUniswapV2Router02 public routerV2;
    address public pairV2;
    mapping (address => bool) public AMMPairs;

    mapping (address => bool) public isExcludedFromLimits;

    uint256 public maxWalletAmount;

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
 
    event SwapThresholdUpdated(uint256 swapThreshold);

    event bountyAddressUpdated(address bountyAddress);
    event bountyFeesUpdated(uint16 buyFee, uint16 sellFee, uint16 transferFee);
    event bountyFeeSent(address recipient, uint256 amount);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event RouterV2Updated(address indexed routerV2);
    event AMMPairsUpdated(address indexed AMMPair, bool isPair);

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event MaxWalletAmountUpdated(uint256 maxWalletAmount);

    event MaxBuyAmountUpdated(uint256 maxBuyAmount);
    event MaxSellAmountUpdated(uint256 maxSellAmount);
 
    constructor()
        ERC20(unicode"Drink Pee", unicode"DRINKP") 
    {
        address supplyRecipient = 0x78e124422F76A26763c0cB675Ac9cECB2bF976C1;
        
        updateSwapThreshold(500000 * (10 ** decimals()) / 10);

        bountyAddressSetup(0xEb2E71503312dB5fDB82C5d4F2405B287c1C2f96);
        bountyFeesSetup(9500, 9500, 0);

        excludeFromFees(supplyRecipient, true);
        excludeFromFees(address(this), true); 

        _updateRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromLimits(supplyRecipient, true);
        excludeFromLimits(address(this), true);
        excludeFromLimits(address(0), true); 
        excludeFromLimits(bountyAddress, true);

        updateMaxWalletAmount(20000000 * (10 ** decimals()) / 10);

        updateMaxBuyAmount(20000000 * (10 ** decimals()) / 10);
        updateMaxSellAmount(20000000 * (10 ** decimals()) / 10);

        _mint(supplyRecipient, 1000000000 * (10 ** decimals()) / 10);
        _transferOwnership(0x78e124422F76A26763c0cB675Ac9cECB2bF976C1);
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 18;
    }
    
    function _swapTokensForCoin(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = routerV2.WETH();

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

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

    function updateSwapThreshold(uint256 _swapThreshold) public onlyOwner {
        swapThreshold = _swapThreshold;
        
        emit SwapThresholdUpdated(_swapThreshold);
    }

    function getAllPending() public view returns (uint256) {
        return 0 + _bountyPending;
    }

    function bountyAddressSetup(address _newAddress) public onlyOwner {
        bountyAddress = _newAddress;

        excludeFromFees(_newAddress, true);

        emit bountyAddressUpdated(_newAddress);
    }

    function bountyFeesSetup(uint16 _buyFee, uint16 _sellFee, uint16 _transferFee) public onlyOwner {
        bountyFees = [_buyFee, _sellFee, _transferFee];

        totalFees[0] = 0 + bountyFees[0];
        totalFees[1] = 0 + bountyFees[1];
        totalFees[2] = 0 + bountyFees[2];

        emit bountyFeesUpdated(_buyFee, _sellFee, _transferFee);
    }

    function excludeFromFees(address account, bool isExcluded) public onlyOwner {
        isExcludedFromFees[account] = isExcluded;
        
        emit ExcludeFromFees(account, isExcluded);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        
        bool canSwap = getAllPending() >= swapThreshold;
        
        if (!_swapping && !AMMPairs[from] && canSwap) {
            _swapping = true;
            
            if (false || _bountyPending > 0) {
                uint256 token2Swap = 0 + _bountyPending;
                bool success = false;

                _swapTokensForCoin(token2Swap);
                uint256 coinsReceived = address(this).balance;
                
                uint256 bountyPortion = coinsReceived * _bountyPending / token2Swap;
                if (bountyPortion > 0) {
                    (success,) = payable(address(bountyAddress)).call{value: bountyPortion}("");
                    require(success, "TaxesDefaultRouterWalletCoin: Fee transfer error");
                    emit bountyFeeSent(bountyAddress, bountyPortion);
                }
                _bountyPending = 0;

            }

            _swapping = false;
        }

        if (!_swapping && amount > 0 && to != address(routerV2) && !isExcludedFromFees[from] && !isExcludedFromFees[to]) {
            uint256 fees = 0;
            uint8 txType = 3;
            
            if (AMMPairs[from]) {
                if (totalFees[0] > 0) txType = 0;
            }
            else if (AMMPairs[to]) {
                if (totalFees[1] > 0) txType = 1;
            }
            else if (totalFees[2] > 0) txType = 2;
            
            if (txType < 3) {
                
                fees = amount * totalFees[txType] / 10000;
                amount -= fees;
                
                _bountyPending += fees * bountyFees[txType] / totalFees[txType];

                
            }

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

    function _updateRouterV2(address router) private {
        routerV2 = IUniswapV2Router02(router);
        pairV2 = IUniswapV2Factory(routerV2.factory()).createPair(address(this), routerV2.WETH());
        
        excludeFromLimits(router, true);

        _setAMMPair(pairV2, true);

        emit RouterV2Updated(router);
    }

    function setAMMPair(address pair, bool isPair) public onlyOwner {
        require(pair != pairV2, "DefaultRouter: Cannot remove initial pair from list");

        _setAMMPair(pair, isPair);
    }

    function _setAMMPair(address pair, bool isPair) private {
        AMMPairs[pair] = isPair;

        if (isPair) { 
            excludeFromLimits(pair, true);

        }

        emit AMMPairsUpdated(pair, isPair);
    }

    function excludeFromLimits(address account, bool isExcluded) public onlyOwner {
        isExcludedFromLimits[account] = isExcluded;

        emit ExcludeFromLimits(account, isExcluded);
    }

    function updateMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner {
        maxWalletAmount = _maxWalletAmount;
        
        emit MaxWalletAmountUpdated(_maxWalletAmount);
    }

    function updateMaxBuyAmount(uint256 _maxBuyAmount) public onlyOwner {
        maxBuyAmount = _maxBuyAmount;
        
        emit MaxBuyAmountUpdated(_maxBuyAmount);
    }

    function updateMaxSellAmount(uint256 _maxSellAmount) public onlyOwner {
        maxSellAmount = _maxSellAmount;
        
        emit MaxSellAmountUpdated(_maxSellAmount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        if (AMMPairs[from] && !isExcludedFromLimits[to]) { // BUY
            require(amount <= maxBuyAmount, "MaxTx: Cannot exceed max buy limit");
        }
    
        if (AMMPairs[to] && !isExcludedFromLimits[from]) { // SELL
            require(amount <= maxSellAmount, "MaxTx: Cannot exceed max sell limit");
        }
    
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(address from, address to, uint256 amount)
        internal
        override
    {
        if (!isExcludedFromLimits[to]) {
            require(balanceOf(to) <= maxWalletAmount, "MaxWallet: Cannot exceed max wallet limit");
        }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"AMMPair","type":"address"},{"indexed":false,"internalType":"bool","name":"isPair","type":"bool"}],"name":"AMMPairsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"MaxBuyAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxSellAmount","type":"uint256"}],"name":"MaxSellAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"routerV2","type":"address"}],"name":"RouterV2Updated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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":false,"internalType":"address","name":"bountyAddress","type":"address"}],"name":"bountyAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bountyFeeSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"buyFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"sellFee","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"bountyFeesUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"AMMPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bountyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"bountyAddressSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bountyFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_buyFee","type":"uint16"},{"internalType":"uint16","name":"_sellFee","type":"uint16"},{"internalType":"uint16","name":"_transferFee","type":"uint16"}],"name":"bountyFeesSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairV2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerV2","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"isPair","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalFees","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600981526020017f4472696e6b2050656500000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4452494e4b50000000000000000000000000000000000000000000000000000081525081600390816200008f9190620015bd565b508060049081620000a19190620015bd565b505050620000c4620000b86200037f60201b60201c565b6200038760201b60201c565b60007378e124422f76a26763c0cb675ac9cecb2bf976c1905062000129600a620000f36200044d60201b60201c565b600a62000101919062001834565b6207a12062000111919062001885565b6200011d9190620018ff565b6200045660201b60201c565b6200014e73eb2e71503312db5fdb82c5d4f2405b287c1c2f96620004a960201b60201c565b6200016461251c8060006200054960201b60201c565b620001778160016200075860201b60201c565b6200018a3060016200075860201b60201c565b620001af737a250d5630b4cf539739df2c5dacb4c659f2488d6200081360201b60201c565b620001c281600162000acb60201b60201c565b620001d530600162000acb60201b60201c565b620001e96000600162000acb60201b60201c565b6200021e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000acb60201b60201c565b6200026b600a620002346200044d60201b60201c565b600a62000242919062001834565b6301312d0062000253919062001885565b6200025f9190620018ff565b62000b8660201b60201c565b620002b8600a620002816200044d60201b60201c565b600a6200028f919062001834565b6301312d00620002a0919062001885565b620002ac9190620018ff565b62000bd960201b60201c565b62000305600a620002ce6200044d60201b60201c565b600a620002dc919062001834565b6301312d00620002ed919062001885565b620002f99190620018ff565b62000c2c60201b60201c565b6200035381600a6200031c6200044d60201b60201c565b600a6200032a919062001834565b633b9aca006200033b919062001885565b620003479190620018ff565b62000c7f60201b60201c565b620003787378e124422f76a26763c0cb675ac9cecb2bf976c16200038760201b60201c565b5062001e56565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b6200046662000dec60201b60201c565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516200049e919062001948565b60405180910390a150565b620004b962000dec60201b60201c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050d8160016200075860201b60201c565b7fb4b5a556fb2c099dc83b9950b221c4358a5ad59f91a74d31937ea8bc6ade8048816040516200053e9190620019aa565b60405180910390a150565b6200055962000dec60201b60201c565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff1681525060099060036200059e92919062001280565b506009600060038110620005b757620005b6620019c7565b5b601091828204019190066002029054906101000a900461ffff166000620005df919062001a04565b600b600060038110620005f757620005f6620019c7565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600160038110620006345762000633620019c7565b5b601091828204019190066002029054906101000a900461ffff1660006200065c919062001a04565b600b600160038110620006745762000673620019c7565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600260038110620006b157620006b0620019c7565b5b601091828204019190066002029054906101000a900461ffff166000620006d9919062001a04565b600b600260038110620006f157620006f0620019c7565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055507f6a99ba20871846f19e811c7958e2b61f2c88f2c1cc3b36e6e7afdaa5b9beca0d8383836040516200074b9392919062001a52565b60405180910390a1505050565b6200076862000dec60201b60201c565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000807919062001aac565b60405180910390a25050565b80600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e8919062001aff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000972573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000998919062001aff565b6040518363ffffffff1660e01b8152600401620009b792919062001b31565b6020604051808303816000875af1158015620009d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009fd919062001aff565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a5081600162000acb60201b60201c565b62000a85600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000e7d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff167fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b60260405160405180910390a250565b62000adb62000dec60201b60201c565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405162000b7a919062001aac565b60405180910390a25050565b62000b9662000dec60201b60201c565b806010819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e0018160405162000bce919062001948565b60405180910390a150565b62000be962000dec60201b60201c565b806011819055507fd0459d371e1defb856088ceda9d33bfed2a31a105e0bae2113cdc7dcc9e77e9d8160405162000c21919062001948565b60405180910390a150565b62000c3c62000dec60201b60201c565b806012819055507fa0dff8a4e8bcaa27b5a2b64bc312f8b338e362bd6cad89f5fe2ae6b8389fb38a8160405162000c74919062001948565b60405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ce89062001bbf565b60405180910390fd5b62000d056000838362000f4360201b60201c565b806002600082825462000d19919062001be1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000dcc919062001948565b60405180910390a362000de8600083836200114160201b60201c565b5050565b62000dfc6200037f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000e226200120460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e729062001c6c565b60405180910390fd5b565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000eef5762000eee82600162000acb60201b60201c565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84558260405162000f37919062001aac565b60405180910390a25050565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801562000fe75750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620010365760115481111562001035576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200102c9062001d04565b60405180910390fd5b5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015620010da5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15620011295760125481111562001128576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200111f9062001d9c565b60405180910390fd5b5b6200113c8383836200122e60201b60201c565b505050565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620011ec57601054620011a7836200123360201b60201c565b1115620011eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011e29062001e34565b60405180910390fd5b5b620011ff8383836200127b60201b60201c565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b505050565b826003600f01601090048101928215620013115791602002820160005b83821115620012df57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026200129d565b80156200130f5782816101000a81549061ffff0219169055600201602081600101049283019260010302620012df565b505b50905062001320919062001324565b5090565b5b808211156200133f57600081600090555060010162001325565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013c557607f821691505b602082108103620013db57620013da6200137d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620014457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001406565b62001451868362001406565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200149e62001498620014928462001469565b62001473565b62001469565b9050919050565b6000819050919050565b620014ba836200147d565b620014d2620014c982620014a5565b84845462001413565b825550505050565b600090565b620014e9620014da565b620014f6818484620014af565b505050565b5b818110156200151e5762001512600082620014df565b600181019050620014fc565b5050565b601f8211156200156d576200153781620013e1565b6200154284620013f6565b8101602085101562001552578190505b6200156a6200156185620013f6565b830182620014fb565b50505b505050565b600082821c905092915050565b6000620015926000198460080262001572565b1980831691505092915050565b6000620015ad83836200157f565b9150826002028217905092915050565b620015c88262001343565b67ffffffffffffffff811115620015e457620015e36200134e565b5b620015f08254620013ac565b620015fd82828562001522565b600060209050601f83116001811462001635576000841562001620578287015190505b6200162c85826200159f565b8655506200169c565b601f1984166200164586620013e1565b60005b828110156200166f5784890151825560018201915060208501945060208101905062001648565b868310156200168f57848901516200168b601f8916826200157f565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562001732578086048111156200170a5762001709620016a4565b5b60018516156200171a5780820291505b80810290506200172a85620016d3565b9450620016ea565b94509492505050565b6000826200174d576001905062001820565b816200175d576000905062001820565b81600181146200177657600281146200178157620017b7565b600191505062001820565b60ff841115620017965762001795620016a4565b5b8360020a915084821115620017b057620017af620016a4565b5b5062001820565b5060208310610133831016604e8410600b8410161715620017f15782820a905083811115620017eb57620017ea620016a4565b5b62001820565b620018008484846001620016e0565b925090508184048111156200181a5762001819620016a4565b5b81810290505b9392505050565b600060ff82169050919050565b6000620018418262001469565b91506200184e8362001827565b92506200187d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200173b565b905092915050565b6000620018928262001469565b91506200189f8362001469565b9250828202620018af8162001469565b91508282048414831517620018c957620018c8620016a4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200190c8262001469565b9150620019198362001469565b9250826200192c576200192b620018d0565b5b828204905092915050565b620019428162001469565b82525050565b60006020820190506200195f600083018462001937565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620019928262001965565b9050919050565b620019a48162001985565b82525050565b6000602082019050620019c1600083018462001999565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061ffff82169050919050565b600062001a1182620019f6565b915062001a1e83620019f6565b9250828201905061ffff81111562001a3b5762001a3a620016a4565b5b92915050565b62001a4c81620019f6565b82525050565b600060608201905062001a69600083018662001a41565b62001a78602083018562001a41565b62001a87604083018462001a41565b949350505050565b60008115159050919050565b62001aa68162001a8f565b82525050565b600060208201905062001ac3600083018462001a9b565b92915050565b600080fd5b62001ad98162001985565b811462001ae557600080fd5b50565b60008151905062001af98162001ace565b92915050565b60006020828403121562001b185762001b1762001ac9565b5b600062001b288482850162001ae8565b91505092915050565b600060408201905062001b48600083018562001999565b62001b57602083018462001999565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001ba7601f8362001b5e565b915062001bb48262001b6f565b602082019050919050565b6000602082019050818103600083015262001bda8162001b98565b9050919050565b600062001bee8262001469565b915062001bfb8362001469565b925082820190508082111562001c165762001c15620016a4565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001c5460208362001b5e565b915062001c618262001c1c565b602082019050919050565b6000602082019050818103600083015262001c878162001c45565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d617820627579206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b600062001cec60228362001b5e565b915062001cf98262001c8e565b604082019050919050565b6000602082019050818103600083015262001d1f8162001cdd565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d61782073656c6c206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b600062001d8460238362001b5e565b915062001d918262001d26565b604082019050919050565b6000602082019050818103600083015262001db78162001d75565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b600062001e1c60298362001b5e565b915062001e298262001dbe565b604082019050919050565b6000602082019050818103600083015262001e4f8162001e0d565b9050919050565b613b058062001e666000396000f3fe6080604052600436106102295760003560e01c806379cc679011610123578063c0246668116100ab578063dc3f0d0f1161006f578063dc3f0d0f14610860578063dd62ed3e14610889578063e0b23320146108c6578063f112ba72146108ef578063f2fde38b1461091a57610230565b8063c024666814610791578063c0a904a2146107ba578063c18bc195146107e3578063c516358f1461080c578063cc274b291461083757610230565b806395d89b41116100f257806395d89b4114610698578063a457c2d7146106c3578063a9059cbb14610700578063aa4bde281461073d578063ae1026e71461076857610230565b806379cc6790146105ee57806388e765ff146106175780638da5cb5b146106425780638fffabed1461066d57610230565b806339509351116101b15780635cce86cd116101755780635cce86cd146104f557806366d602ae1461053257806370a082311461055d578063715018a61461059a57806376856557146105b157610230565b806339509351146103ea578063408ccbdf1461042757806342966c68146104645780634fbee1931461048d578063502f7446146104ca57610230565b806323b872dd116101f857806323b872dd146102f357806328026580146103305780632be32b611461036d5780632d99d32e14610396578063313ce567146103bf57610230565b80630445b6671461023557806306fdde0314610260578063095ea7b31461028b57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610943565b60405161025791906128d6565b60405180910390f35b34801561026c57600080fd5b50610275610949565b6040516102829190612981565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190612a32565b6109db565b6040516102bf9190612a8d565b60405180910390f35b3480156102d457600080fd5b506102dd6109fe565b6040516102ea91906128d6565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612aa8565b610a08565b6040516103279190612a8d565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612afb565b610a37565b6040516103649190612b45565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190612afb565b610a65565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612b8c565b610aae565b005b3480156103cb57600080fd5b506103d4610b54565b6040516103e19190612be8565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612a32565b610b5d565b60405161041e9190612a8d565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612afb565b610b94565b60405161045b9190612b45565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612afb565b610bc2565b005b34801561049957600080fd5b506104b460048036038101906104af9190612c03565b610bd6565b6040516104c19190612a8d565b60405180910390f35b3480156104d657600080fd5b506104df610bf6565b6040516104ec9190612c8f565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612c03565b610c1c565b6040516105299190612a8d565b60405180910390f35b34801561053e57600080fd5b50610547610c3c565b60405161055491906128d6565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612c03565b610c42565b60405161059191906128d6565b60405180910390f35b3480156105a657600080fd5b506105af610c8a565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612c03565b610c9e565b6040516105e59190612a8d565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612a32565b610cbe565b005b34801561062357600080fd5b5061062c610cde565b60405161063991906128d6565b60405180910390f35b34801561064e57600080fd5b50610657610ce4565b6040516106649190612cb9565b60405180910390f35b34801561067957600080fd5b50610682610d0e565b60405161068f9190612cb9565b60405180910390f35b3480156106a457600080fd5b506106ad610d34565b6040516106ba9190612981565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190612a32565b610dc6565b6040516106f79190612a8d565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612a32565b610e3d565b6040516107349190612a8d565b60405180910390f35b34801561074957600080fd5b50610752610e60565b60405161075f91906128d6565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190612d00565b610e66565b005b34801561079d57600080fd5b506107b860048036038101906107b39190612b8c565b611051565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190612b8c565b611102565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190612afb565b6111b3565b005b34801561081857600080fd5b506108216111fc565b60405161082e9190612cb9565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612afb565b611222565b005b34801561086c57600080fd5b5061088760048036038101906108829190612afb565b61126b565b005b34801561089557600080fd5b506108b060048036038101906108ab9190612d53565b6112b4565b6040516108bd91906128d6565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190612c03565b61133b565b005b3480156108fb57600080fd5b506109046113c9565b60405161091191906128d6565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c9190612c03565b6113df565b005b60065481565b60606003805461095890612dc2565b80601f016020809104026020016040519081016040528092919081815260200182805461098490612dc2565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b6000806109e6611462565b90506109f381858561146a565b600191505092915050565b6000600254905090565b600080610a13611462565b9050610a20858285611633565b610a2b8585856116bf565b60019150509392505050565b60098160038110610a4757600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610a6d611cd9565b806011819055507fd0459d371e1defb856088ceda9d33bfed2a31a105e0bae2113cdc7dcc9e77e9d81604051610aa391906128d6565b60405180910390a150565b610ab6611cd9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90612e65565b60405180910390fd5b610b508282611d57565b5050565b60006012905090565b600080610b68611462565b9050610b89818585610b7a85896112b4565b610b849190612eb4565b61146a565b600191505092915050565b600b8160038110610ba457600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610bd3610bcd611462565b82611e12565b50565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b60125481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c92611cd9565b610c9c6000611fdf565b565b600e6020528060005260406000206000915054906101000a900460ff1681565b610cd082610cca611462565b83611633565b610cda8282611e12565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610d4390612dc2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6f90612dc2565b8015610dbc5780601f10610d9157610100808354040283529160200191610dbc565b820191906000526020600020905b815481529060010190602001808311610d9f57829003601f168201915b5050505050905090565b600080610dd1611462565b90506000610ddf82866112b4565b905083811015610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612f5a565b60405180910390fd5b610e31828686840361146a565b60019250505092915050565b600080610e48611462565b9050610e558185856116bf565b600191505092915050565b60105481565b610e6e611cd9565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152506009906003610eb1929190612803565b506009600060038110610ec757610ec6612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610eed9190612fa9565b600b600060038110610f0257610f01612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600160038110610f3c57610f3b612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610f629190612fa9565b600b600160038110610f7757610f76612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600260038110610fb157610fb0612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610fd79190612fa9565b600b600260038110610fec57610feb612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055507f6a99ba20871846f19e811c7958e2b61f2c88f2c1cc3b36e6e7afdaa5b9beca0d83838360405161104493929190612fdf565b60405180910390a1505050565b611059611cd9565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110f69190612a8d565b60405180910390a25050565b61110a611cd9565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516111a79190612a8d565b60405180910390a25050565b6111bb611cd9565b806010819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001816040516111f191906128d6565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122a611cd9565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd064768160405161126091906128d6565b60405180910390a150565b611273611cd9565b806012819055507fa0dff8a4e8bcaa27b5a2b64bc312f8b338e362bd6cad89f5fe2ae6b8389fb38a816040516112a991906128d6565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611343611cd9565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061138f816001611051565b7fb4b5a556fb2c099dc83b9950b221c4358a5ad59f91a74d31937ea8bc6ade8048816040516113be9190612cb9565b60405180910390a150565b600060075460006113da9190612eb4565b905090565b6113e7611cd9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90613088565b60405180910390fd5b61145f81611fdf565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d09061311a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906131ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161162691906128d6565b60405180910390a3505050565b600061163f84846112b4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b957818110156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613218565b60405180910390fd5b6116b8848484840361146a565b5b50505050565b60006006546116cc6113c9565b10159050600c60009054906101000a900460ff161580156117375750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117405750805b15611910576001600c60006101000a81548160ff02191690831515021790555060008061176f57506000600754115b156118f457600060075460006117859190612eb4565b90506000611792826120a5565b6000479050600083600754836117a89190613238565b6117b291906132a9565b905060008111156118e757600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516118039061330b565b60006040518083038185875af1925050503d8060008114611840576040519150601f19603f3d011682016040523d82523d6000602084013e611845565b606091505b5050809350508261188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613392565b60405180910390fd5b7fe7a356967b313db84460538dc11e9709a3b363491fb59871577b751fc04b43a5600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118de9291906133b2565b60405180910390a15b6000600781905550505050505b6000600c60006101000a81548160ff0219169083151502179055505b600c60009054906101000a900460ff1615801561192d5750600082115b80156119875750600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156119dd5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a335750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cc85760008060039050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ad6576000600b600060038110611aa857611aa7612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611ad157600090505b611baf565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b6d576000600b600160038110611b3f57611b3e612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611b6857600190505b611bae565b6000600b600260038110611b8457611b83612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611bad57600290505b5b5b60038160ff161015611cb057612710600b8260ff1660038110611bd557611bd4612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611bfe9190613238565b611c0891906132a9565b91508184611c1691906133db565b9350600b8160ff1660038110611c2f57611c2e612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff1660038110611c6457611c63612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611c8d9190613238565b611c9791906132a9565b60076000828254611ca89190612eb4565b925050819055505b6000821115611cc557611cc48630846122e8565b5b50505b611cd38484846122e8565b50505050565b611ce1611462565b73ffffffffffffffffffffffffffffffffffffffff16611cff610ce4565b73ffffffffffffffffffffffffffffffffffffffff1614611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c9061345b565b60405180910390fd5b565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611dc057611dbf826001611102565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051611e069190612a8d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906134ed565b60405180910390fd5b611e8d8260008361255e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061357f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc691906128d6565b60405180910390a3611fda8360008461274a565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156120c2576120c161359f565b5b6040519080825280602002602001820160405280156120f05781602001602082028036833780820191505090505b509050308160008151811061210857612107612f7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d391906135e3565b816001815181106121e7576121e6612f7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061224e30600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461146a565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122b2959493929190613709565b600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906137d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90613867565b60405180910390fd5b6123d183838361255e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906138f9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161254591906128d6565b60405180910390a361255884848461274a565b50505050565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126015750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561264c5760115481111561264b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126429061398b565b60405180910390fd5b5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126ef5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561273a57601254811115612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613a1d565b60405180910390fd5b5b6127458383836127f9565b505050565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127e9576010546127a783610c42565b11156127e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127df90613aaf565b60405180910390fd5b5b6127f48383836127fe565b505050565b505050565b505050565b826003600f0160109004810192821561288f5791602002820160005b8382111561285f57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261281f565b801561288d5782816101000a81549061ffff021916905560020160208160010104928301926001030261285f565b505b50905061289c91906128a0565b5090565b5b808211156128b95760008160009055506001016128a1565b5090565b6000819050919050565b6128d0816128bd565b82525050565b60006020820190506128eb60008301846128c7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561292b578082015181840152602081019050612910565b60008484015250505050565b6000601f19601f8301169050919050565b6000612953826128f1565b61295d81856128fc565b935061296d81856020860161290d565b61297681612937565b840191505092915050565b6000602082019050818103600083015261299b8184612948565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129d3826129a8565b9050919050565b6129e3816129c8565b81146129ee57600080fd5b50565b600081359050612a00816129da565b92915050565b612a0f816128bd565b8114612a1a57600080fd5b50565b600081359050612a2c81612a06565b92915050565b60008060408385031215612a4957612a486129a3565b5b6000612a57858286016129f1565b9250506020612a6885828601612a1d565b9150509250929050565b60008115159050919050565b612a8781612a72565b82525050565b6000602082019050612aa26000830184612a7e565b92915050565b600080600060608486031215612ac157612ac06129a3565b5b6000612acf868287016129f1565b9350506020612ae0868287016129f1565b9250506040612af186828701612a1d565b9150509250925092565b600060208284031215612b1157612b106129a3565b5b6000612b1f84828501612a1d565b91505092915050565b600061ffff82169050919050565b612b3f81612b28565b82525050565b6000602082019050612b5a6000830184612b36565b92915050565b612b6981612a72565b8114612b7457600080fd5b50565b600081359050612b8681612b60565b92915050565b60008060408385031215612ba357612ba26129a3565b5b6000612bb1858286016129f1565b9250506020612bc285828601612b77565b9150509250929050565b600060ff82169050919050565b612be281612bcc565b82525050565b6000602082019050612bfd6000830184612bd9565b92915050565b600060208284031215612c1957612c186129a3565b5b6000612c27848285016129f1565b91505092915050565b6000819050919050565b6000612c55612c50612c4b846129a8565b612c30565b6129a8565b9050919050565b6000612c6782612c3a565b9050919050565b6000612c7982612c5c565b9050919050565b612c8981612c6e565b82525050565b6000602082019050612ca46000830184612c80565b92915050565b612cb3816129c8565b82525050565b6000602082019050612cce6000830184612caa565b92915050565b612cdd81612b28565b8114612ce857600080fd5b50565b600081359050612cfa81612cd4565b92915050565b600080600060608486031215612d1957612d186129a3565b5b6000612d2786828701612ceb565b9350506020612d3886828701612ceb565b9250506040612d4986828701612ceb565b9150509250925092565b60008060408385031215612d6a57612d696129a3565b5b6000612d78858286016129f1565b9250506020612d89858286016129f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dda57607f821691505b602082108103612ded57612dec612d93565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b6000612e4f6033836128fc565b9150612e5a82612df3565b604082019050919050565b60006020820190508181036000830152612e7e81612e42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ebf826128bd565b9150612eca836128bd565b9250828201905080821115612ee257612ee1612e85565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f446025836128fc565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612fb482612b28565b9150612fbf83612b28565b9250828201905061ffff811115612fd957612fd8612e85565b5b92915050565b6000606082019050612ff46000830186612b36565b6130016020830185612b36565b61300e6040830184612b36565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130726026836128fc565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131046024836128fc565b915061310f826130a8565b604082019050919050565b60006020820190508181036000830152613133816130f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131966022836128fc565b91506131a18261313a565b604082019050919050565b600060208201905081810360008301526131c581613189565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613202601d836128fc565b915061320d826131cc565b602082019050919050565b60006020820190508181036000830152613231816131f5565b9050919050565b6000613243826128bd565b915061324e836128bd565b925082820261325c816128bd565b9150828204841483151761327357613272612e85565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132b4826128bd565b91506132bf836128bd565b9250826132cf576132ce61327a565b5b828204905092915050565b600081905092915050565b50565b60006132f56000836132da565b9150613300826132e5565b600082019050919050565b6000613316826132e8565b9150819050919050565b7f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560008201527f65207472616e73666572206572726f7200000000000000000000000000000000602082015250565b600061337c6030836128fc565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b60006040820190506133c76000830185612caa565b6133d460208301846128c7565b9392505050565b60006133e6826128bd565b91506133f1836128bd565b925082820390508181111561340957613408612e85565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134456020836128fc565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006134d76021836128fc565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135696022836128fc565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135dd816129da565b92915050565b6000602082840312156135f9576135f86129a3565b5b6000613607848285016135ce565b91505092915050565b6000819050919050565b600061363561363061362b84613610565b612c30565b6128bd565b9050919050565b6136458161361a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613680816129c8565b82525050565b60006136928383613677565b60208301905092915050565b6000602082019050919050565b60006136b68261364b565b6136c08185613656565b93506136cb83613667565b8060005b838110156136fc5781516136e38882613686565b97506136ee8361369e565b9250506001810190506136cf565b5085935050505092915050565b600060a08201905061371e60008301886128c7565b61372b602083018761363c565b818103604083015261373d81866136ab565b905061374c6060830185612caa565b61375960808301846128c7565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137bf6025836128fc565b91506137ca82613763565b604082019050919050565b600060208201905081810360008301526137ee816137b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138516023836128fc565b915061385c826137f5565b604082019050919050565b6000602082019050818103600083015261388081613844565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138e36026836128fc565b91506138ee82613887565b604082019050919050565b60006020820190508181036000830152613912816138d6565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d617820627579206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006139756022836128fc565b915061398082613919565b604082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d61782073656c6c206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000613a076023836128fc565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b6000613a996029836128fc565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b905091905056fea2646970667358221220b4b5a58bc6a009bb2d1dc3dee020814cc484fcdf7d234db8c70650f26a94082964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102295760003560e01c806379cc679011610123578063c0246668116100ab578063dc3f0d0f1161006f578063dc3f0d0f14610860578063dd62ed3e14610889578063e0b23320146108c6578063f112ba72146108ef578063f2fde38b1461091a57610230565b8063c024666814610791578063c0a904a2146107ba578063c18bc195146107e3578063c516358f1461080c578063cc274b291461083757610230565b806395d89b41116100f257806395d89b4114610698578063a457c2d7146106c3578063a9059cbb14610700578063aa4bde281461073d578063ae1026e71461076857610230565b806379cc6790146105ee57806388e765ff146106175780638da5cb5b146106425780638fffabed1461066d57610230565b806339509351116101b15780635cce86cd116101755780635cce86cd146104f557806366d602ae1461053257806370a082311461055d578063715018a61461059a57806376856557146105b157610230565b806339509351146103ea578063408ccbdf1461042757806342966c68146104645780634fbee1931461048d578063502f7446146104ca57610230565b806323b872dd116101f857806323b872dd146102f357806328026580146103305780632be32b611461036d5780632d99d32e14610396578063313ce567146103bf57610230565b80630445b6671461023557806306fdde0314610260578063095ea7b31461028b57806318160ddd146102c857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610943565b60405161025791906128d6565b60405180910390f35b34801561026c57600080fd5b50610275610949565b6040516102829190612981565b60405180910390f35b34801561029757600080fd5b506102b260048036038101906102ad9190612a32565b6109db565b6040516102bf9190612a8d565b60405180910390f35b3480156102d457600080fd5b506102dd6109fe565b6040516102ea91906128d6565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190612aa8565b610a08565b6040516103279190612a8d565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190612afb565b610a37565b6040516103649190612b45565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190612afb565b610a65565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190612b8c565b610aae565b005b3480156103cb57600080fd5b506103d4610b54565b6040516103e19190612be8565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612a32565b610b5d565b60405161041e9190612a8d565b60405180910390f35b34801561043357600080fd5b5061044e60048036038101906104499190612afb565b610b94565b60405161045b9190612b45565b60405180910390f35b34801561047057600080fd5b5061048b60048036038101906104869190612afb565b610bc2565b005b34801561049957600080fd5b506104b460048036038101906104af9190612c03565b610bd6565b6040516104c19190612a8d565b60405180910390f35b3480156104d657600080fd5b506104df610bf6565b6040516104ec9190612c8f565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612c03565b610c1c565b6040516105299190612a8d565b60405180910390f35b34801561053e57600080fd5b50610547610c3c565b60405161055491906128d6565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190612c03565b610c42565b60405161059191906128d6565b60405180910390f35b3480156105a657600080fd5b506105af610c8a565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612c03565b610c9e565b6040516105e59190612a8d565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190612a32565b610cbe565b005b34801561062357600080fd5b5061062c610cde565b60405161063991906128d6565b60405180910390f35b34801561064e57600080fd5b50610657610ce4565b6040516106649190612cb9565b60405180910390f35b34801561067957600080fd5b50610682610d0e565b60405161068f9190612cb9565b60405180910390f35b3480156106a457600080fd5b506106ad610d34565b6040516106ba9190612981565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190612a32565b610dc6565b6040516106f79190612a8d565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612a32565b610e3d565b6040516107349190612a8d565b60405180910390f35b34801561074957600080fd5b50610752610e60565b60405161075f91906128d6565b60405180910390f35b34801561077457600080fd5b5061078f600480360381019061078a9190612d00565b610e66565b005b34801561079d57600080fd5b506107b860048036038101906107b39190612b8c565b611051565b005b3480156107c657600080fd5b506107e160048036038101906107dc9190612b8c565b611102565b005b3480156107ef57600080fd5b5061080a60048036038101906108059190612afb565b6111b3565b005b34801561081857600080fd5b506108216111fc565b60405161082e9190612cb9565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612afb565b611222565b005b34801561086c57600080fd5b5061088760048036038101906108829190612afb565b61126b565b005b34801561089557600080fd5b506108b060048036038101906108ab9190612d53565b6112b4565b6040516108bd91906128d6565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190612c03565b61133b565b005b3480156108fb57600080fd5b506109046113c9565b60405161091191906128d6565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c9190612c03565b6113df565b005b60065481565b60606003805461095890612dc2565b80601f016020809104026020016040519081016040528092919081815260200182805461098490612dc2565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b6000806109e6611462565b90506109f381858561146a565b600191505092915050565b6000600254905090565b600080610a13611462565b9050610a20858285611633565b610a2b8585856116bf565b60019150509392505050565b60098160038110610a4757600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610a6d611cd9565b806011819055507fd0459d371e1defb856088ceda9d33bfed2a31a105e0bae2113cdc7dcc9e77e9d81604051610aa391906128d6565b60405180910390a150565b610ab6611cd9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90612e65565b60405180910390fd5b610b508282611d57565b5050565b60006012905090565b600080610b68611462565b9050610b89818585610b7a85896112b4565b610b849190612eb4565b61146a565b600191505092915050565b600b8160038110610ba457600080fd5b60109182820401919006600202915054906101000a900461ffff1681565b610bd3610bcd611462565b82611e12565b50565b600a6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b60125481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c92611cd9565b610c9c6000611fdf565b565b600e6020528060005260406000206000915054906101000a900460ff1681565b610cd082610cca611462565b83611633565b610cda8282611e12565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610d4390612dc2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6f90612dc2565b8015610dbc5780601f10610d9157610100808354040283529160200191610dbc565b820191906000526020600020905b815481529060010190602001808311610d9f57829003601f168201915b5050505050905090565b600080610dd1611462565b90506000610ddf82866112b4565b905083811015610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612f5a565b60405180910390fd5b610e31828686840361146a565b60019250505092915050565b600080610e48611462565b9050610e558185856116bf565b600191505092915050565b60105481565b610e6e611cd9565b60405180606001604052808461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152506009906003610eb1929190612803565b506009600060038110610ec757610ec6612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610eed9190612fa9565b600b600060038110610f0257610f01612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600160038110610f3c57610f3b612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610f629190612fa9565b600b600160038110610f7757610f76612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055506009600260038110610fb157610fb0612f7a565b5b601091828204019190066002029054906101000a900461ffff166000610fd79190612fa9565b600b600260038110610fec57610feb612f7a565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055507f6a99ba20871846f19e811c7958e2b61f2c88f2c1cc3b36e6e7afdaa5b9beca0d83838360405161104493929190612fdf565b60405180910390a1505050565b611059611cd9565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516110f69190612a8d565b60405180910390a25050565b61110a611cd9565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516111a79190612a8d565b60405180910390a25050565b6111bb611cd9565b806010819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001816040516111f191906128d6565b60405180910390a150565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61122a611cd9565b806006819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd064768160405161126091906128d6565b60405180910390a150565b611273611cd9565b806012819055507fa0dff8a4e8bcaa27b5a2b64bc312f8b338e362bd6cad89f5fe2ae6b8389fb38a816040516112a991906128d6565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611343611cd9565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061138f816001611051565b7fb4b5a556fb2c099dc83b9950b221c4358a5ad59f91a74d31937ea8bc6ade8048816040516113be9190612cb9565b60405180910390a150565b600060075460006113da9190612eb4565b905090565b6113e7611cd9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90613088565b60405180910390fd5b61145f81611fdf565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d09061311a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611548576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153f906131ac565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161162691906128d6565b60405180910390a3505050565b600061163f84846112b4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116b957818110156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290613218565b60405180910390fd5b6116b8848484840361146a565b5b50505050565b60006006546116cc6113c9565b10159050600c60009054906101000a900460ff161580156117375750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117405750805b15611910576001600c60006101000a81548160ff02191690831515021790555060008061176f57506000600754115b156118f457600060075460006117859190612eb4565b90506000611792826120a5565b6000479050600083600754836117a89190613238565b6117b291906132a9565b905060008111156118e757600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516118039061330b565b60006040518083038185875af1925050503d8060008114611840576040519150601f19603f3d011682016040523d82523d6000602084013e611845565b606091505b5050809350508261188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613392565b60405180910390fd5b7fe7a356967b313db84460538dc11e9709a3b363491fb59871577b751fc04b43a5600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516118de9291906133b2565b60405180910390a15b6000600781905550505050505b6000600c60006101000a81548160ff0219169083151502179055505b600c60009054906101000a900460ff1615801561192d5750600082115b80156119875750600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156119dd5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611a335750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cc85760008060039050600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ad6576000600b600060038110611aa857611aa7612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611ad157600090505b611baf565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b6d576000600b600160038110611b3f57611b3e612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611b6857600190505b611bae565b6000600b600260038110611b8457611b83612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff161115611bad57600290505b5b5b60038160ff161015611cb057612710600b8260ff1660038110611bd557611bd4612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1685611bfe9190613238565b611c0891906132a9565b91508184611c1691906133db565b9350600b8160ff1660038110611c2f57611c2e612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1660098260ff1660038110611c6457611c63612f7a565b5b601091828204019190066002029054906101000a900461ffff1661ffff1683611c8d9190613238565b611c9791906132a9565b60076000828254611ca89190612eb4565b925050819055505b6000821115611cc557611cc48630846122e8565b5b50505b611cd38484846122e8565b50505050565b611ce1611462565b73ffffffffffffffffffffffffffffffffffffffff16611cff610ce4565b73ffffffffffffffffffffffffffffffffffffffff1614611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c9061345b565b60405180910390fd5b565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611dc057611dbf826001611102565b5b8173ffffffffffffffffffffffffffffffffffffffff167f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a845582604051611e069190612a8d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906134ed565b60405180910390fd5b611e8d8260008361255e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0a9061357f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc691906128d6565b60405180910390a3611fda8360008461274a565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff8111156120c2576120c161359f565b5b6040519080825280602002602001820160405280156120f05781602001602082028036833780820191505090505b509050308160008151811061210857612107612f7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d391906135e3565b816001815181106121e7576121e6612f7a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061224e30600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461146a565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122b2959493929190613709565b600060405180830381600087803b1580156122cc57600080fd5b505af11580156122e0573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e906137d5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90613867565b60405180910390fd5b6123d183838361255e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244e906138f9565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161254591906128d6565b60405180910390a361255884848461274a565b50505050565b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126015750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561264c5760115481111561264b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126429061398b565b60405180910390fd5b5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126ef5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561273a57601254811115612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613a1d565b60405180910390fd5b5b6127458383836127f9565b505050565b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127e9576010546127a783610c42565b11156127e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127df90613aaf565b60405180910390fd5b5b6127f48383836127fe565b505050565b505050565b505050565b826003600f0160109004810192821561288f5791602002820160005b8382111561285f57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261281f565b801561288d5782816101000a81549061ffff021916905560020160208160010104928301926001030261285f565b505b50905061289c91906128a0565b5090565b5b808211156128b95760008160009055506001016128a1565b5090565b6000819050919050565b6128d0816128bd565b82525050565b60006020820190506128eb60008301846128c7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561292b578082015181840152602081019050612910565b60008484015250505050565b6000601f19601f8301169050919050565b6000612953826128f1565b61295d81856128fc565b935061296d81856020860161290d565b61297681612937565b840191505092915050565b6000602082019050818103600083015261299b8184612948565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006129d3826129a8565b9050919050565b6129e3816129c8565b81146129ee57600080fd5b50565b600081359050612a00816129da565b92915050565b612a0f816128bd565b8114612a1a57600080fd5b50565b600081359050612a2c81612a06565b92915050565b60008060408385031215612a4957612a486129a3565b5b6000612a57858286016129f1565b9250506020612a6885828601612a1d565b9150509250929050565b60008115159050919050565b612a8781612a72565b82525050565b6000602082019050612aa26000830184612a7e565b92915050565b600080600060608486031215612ac157612ac06129a3565b5b6000612acf868287016129f1565b9350506020612ae0868287016129f1565b9250506040612af186828701612a1d565b9150509250925092565b600060208284031215612b1157612b106129a3565b5b6000612b1f84828501612a1d565b91505092915050565b600061ffff82169050919050565b612b3f81612b28565b82525050565b6000602082019050612b5a6000830184612b36565b92915050565b612b6981612a72565b8114612b7457600080fd5b50565b600081359050612b8681612b60565b92915050565b60008060408385031215612ba357612ba26129a3565b5b6000612bb1858286016129f1565b9250506020612bc285828601612b77565b9150509250929050565b600060ff82169050919050565b612be281612bcc565b82525050565b6000602082019050612bfd6000830184612bd9565b92915050565b600060208284031215612c1957612c186129a3565b5b6000612c27848285016129f1565b91505092915050565b6000819050919050565b6000612c55612c50612c4b846129a8565b612c30565b6129a8565b9050919050565b6000612c6782612c3a565b9050919050565b6000612c7982612c5c565b9050919050565b612c8981612c6e565b82525050565b6000602082019050612ca46000830184612c80565b92915050565b612cb3816129c8565b82525050565b6000602082019050612cce6000830184612caa565b92915050565b612cdd81612b28565b8114612ce857600080fd5b50565b600081359050612cfa81612cd4565b92915050565b600080600060608486031215612d1957612d186129a3565b5b6000612d2786828701612ceb565b9350506020612d3886828701612ceb565b9250506040612d4986828701612ceb565b9150509250925092565b60008060408385031215612d6a57612d696129a3565b5b6000612d78858286016129f1565b9250506020612d89858286016129f1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dda57607f821691505b602082108103612ded57612dec612d93565b5b50919050565b7f44656661756c74526f757465723a2043616e6e6f742072656d6f766520696e6960008201527f7469616c20706169722066726f6d206c69737400000000000000000000000000602082015250565b6000612e4f6033836128fc565b9150612e5a82612df3565b604082019050919050565b60006020820190508181036000830152612e7e81612e42565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612ebf826128bd565b9150612eca836128bd565b9250828201905080821115612ee257612ee1612e85565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f446025836128fc565b9150612f4f82612ee8565b604082019050919050565b60006020820190508181036000830152612f7381612f37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612fb482612b28565b9150612fbf83612b28565b9250828201905061ffff811115612fd957612fd8612e85565b5b92915050565b6000606082019050612ff46000830186612b36565b6130016020830185612b36565b61300e6040830184612b36565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130726026836128fc565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131046024836128fc565b915061310f826130a8565b604082019050919050565b60006020820190508181036000830152613133816130f7565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006131966022836128fc565b91506131a18261313a565b604082019050919050565b600060208201905081810360008301526131c581613189565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613202601d836128fc565b915061320d826131cc565b602082019050919050565b60006020820190508181036000830152613231816131f5565b9050919050565b6000613243826128bd565b915061324e836128bd565b925082820261325c816128bd565b9150828204841483151761327357613272612e85565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132b4826128bd565b91506132bf836128bd565b9250826132cf576132ce61327a565b5b828204905092915050565b600081905092915050565b50565b60006132f56000836132da565b9150613300826132e5565b600082019050919050565b6000613316826132e8565b9150819050919050565b7f546178657344656661756c74526f7574657257616c6c6574436f696e3a20466560008201527f65207472616e73666572206572726f7200000000000000000000000000000000602082015250565b600061337c6030836128fc565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b60006040820190506133c76000830185612caa565b6133d460208301846128c7565b9392505050565b60006133e6826128bd565b91506133f1836128bd565b925082820390508181111561340957613408612e85565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134456020836128fc565b91506134508261340f565b602082019050919050565b6000602082019050818103600083015261347481613438565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006134d76021836128fc565b91506134e28261347b565b604082019050919050565b60006020820190508181036000830152613506816134ca565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006135696022836128fc565b91506135748261350d565b604082019050919050565b600060208201905081810360008301526135988161355c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506135dd816129da565b92915050565b6000602082840312156135f9576135f86129a3565b5b6000613607848285016135ce565b91505092915050565b6000819050919050565b600061363561363061362b84613610565b612c30565b6128bd565b9050919050565b6136458161361a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613680816129c8565b82525050565b60006136928383613677565b60208301905092915050565b6000602082019050919050565b60006136b68261364b565b6136c08185613656565b93506136cb83613667565b8060005b838110156136fc5781516136e38882613686565b97506136ee8361369e565b9250506001810190506136cf565b5085935050505092915050565b600060a08201905061371e60008301886128c7565b61372b602083018761363c565b818103604083015261373d81866136ab565b905061374c6060830185612caa565b61375960808301846128c7565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006137bf6025836128fc565b91506137ca82613763565b604082019050919050565b600060208201905081810360008301526137ee816137b2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006138516023836128fc565b915061385c826137f5565b604082019050919050565b6000602082019050818103600083015261388081613844565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138e36026836128fc565b91506138ee82613887565b604082019050919050565b60006020820190508181036000830152613912816138d6565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d617820627579206c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006139756022836128fc565b915061398082613919565b604082019050919050565b600060208201905081810360008301526139a481613968565b9050919050565b7f4d617854783a2043616e6e6f7420657863656564206d61782073656c6c206c6960008201527f6d69740000000000000000000000000000000000000000000000000000000000602082015250565b6000613a076023836128fc565b9150613a12826139ab565b604082019050919050565b60006020820190508181036000830152613a36816139fa565b9050919050565b7f4d617857616c6c65743a2043616e6e6f7420657863656564206d61782077616c60008201527f6c6574206c696d69740000000000000000000000000000000000000000000000602082015250565b6000613a996029836128fc565b9150613aa482613a3d565b604082019050919050565b60006020820190508181036000830152613ac881613a8c565b905091905056fea2646970667358221220b4b5a58bc6a009bb2d1dc3dee020814cc484fcdf7d234db8c70650f26a94082964736f6c63430008130033

Deployed Bytecode Sourcemap

28693:8460:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28757:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16740:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19100:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17869:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19881:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28872:27;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35925:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35078:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31137:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20551:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28968:26;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28112:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28908:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29032:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29151:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29286:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18040:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10716:103;;;;;;;;;;;;;:::i;:::-;;29101:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28522:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29252:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29073:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16959:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21292:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18373:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29213:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32136:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32504:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35521:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35724:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28837:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31622:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18629:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31918:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31811:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10974:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28757:28;;;;:::o;16740:100::-;16794:13;16827:5;16820:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16740:100;:::o;19100:201::-;19183:4;19200:13;19216:12;:10;:12::i;:::-;19200:28;;19239:32;19248:5;19255:7;19264:6;19239:8;:32::i;:::-;19289:4;19282:11;;;19100:201;;;;:::o;17869:108::-;17930:7;17957:12;;17950:19;;17869:108;:::o;19881:261::-;19978:4;19995:15;20013:12;:10;:12::i;:::-;19995:30;;20036:38;20052:4;20058:7;20067:6;20036:15;:38::i;:::-;20085:27;20095:4;20101:2;20105:6;20085:9;:27::i;:::-;20130:4;20123:11;;;19881:261;;;;;:::o;28872:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35925:175::-;9961:13;:11;:13::i;:::-;36019::::1;36004:12;:28;;;;36058:34;36078:13;36058:34;;;;;;:::i;:::-;;;;;;;;35925:175:::0;:::o;35078:199::-;9961:13;:11;:13::i;:::-;35169:6:::1;;;;;;;;;;;35161:14;;:4;:14;;::::0;35153:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35244:25;35256:4;35262:6;35244:11;:25::i;:::-;35078:199:::0;;:::o;31137:85::-;31187:5;31212:2;31205:9;;31137:85;:::o;20551:238::-;20639:4;20656:13;20672:12;:10;:12::i;:::-;20656:28;;20695:64;20704:5;20711:7;20748:10;20720:25;20730:5;20737:7;20720:9;:25::i;:::-;:38;;;;:::i;:::-;20695:8;:64::i;:::-;20777:4;20770:11;;;20551:238;;;;:::o;28968:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28112:91::-;28168:27;28174:12;:10;:12::i;:::-;28188:6;28168:5;:27::i;:::-;28112:91;:::o;28908:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;29032:34::-;;;;;;;;;;;;;:::o;29151:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;29286:28::-;;;;:::o;18040:127::-;18114:7;18141:9;:18;18151:7;18141:18;;;;;;;;;;;;;;;;18134:25;;18040:127;;;:::o;10716:103::-;9961:13;:11;:13::i;:::-;10781:30:::1;10808:1;10781:18;:30::i;:::-;10716:103::o:0;29101:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;28522:164::-;28599:46;28615:7;28624:12;:10;:12::i;:::-;28638:6;28599:15;:46::i;:::-;28656:22;28662:7;28671:6;28656:5;:22::i;:::-;28522:164;;:::o;29252:27::-;;;;:::o;10075:87::-;10121:7;10148:6;;;;;;;;;;;10141:13;;10075:87;:::o;29073:21::-;;;;;;;;;;;;;:::o;16959:104::-;17015:13;17048:7;17041:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16959:104;:::o;21292:436::-;21385:4;21402:13;21418:12;:10;:12::i;:::-;21402:28;;21441:24;21468:25;21478:5;21485:7;21468:9;:25::i;:::-;21441:52;;21532:15;21512:16;:35;;21504:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21625:60;21634:5;21641:7;21669:15;21650:16;:34;21625:8;:60::i;:::-;21716:4;21709:11;;;;21292:436;;;;:::o;18373:193::-;18452:4;18469:13;18485:12;:10;:12::i;:::-;18469:28;;18508;18518:5;18525:2;18529:6;18508:9;:28::i;:::-;18554:4;18547:11;;;18373:193;;;;:::o;29213:30::-;;;;:::o;32136:360::-;9961:13;:11;:13::i;:::-;32243:46:::1;;;;;;;;32257:7;32243:46;;;;;;;;32266:8;32243:46;;;;;;;;32276:12;32243:46;;;;;;::::0;:10:::1;:46;;;;;;;:::i;:::-;;32321:10;32332:1;32321:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;32317:1;:17;;;;:::i;:::-;32302:9;32312:1;32302:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32364:10;32375:1;32364:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;32360:1;:17;;;;:::i;:::-;32345:9;32355:1;32345:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32407:10;32418:1;32407:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;32403:1;:17;;;;:::i;:::-;32388:9;32398:1;32388:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;32438:50;32456:7;32465:8;32475:12;32438:50;;;;;;;;:::i;:::-;;;;;;;;32136:360:::0;;;:::o;32504:197::-;9961:13;:11;:13::i;:::-;32621:10:::1;32591:18;:27;32610:7;32591:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;32673:7;32657:36;;;32682:10;32657:36;;;;;;:::i;:::-;;;;;;;;32504:197:::0;;:::o;35521:195::-;9961:13;:11;:13::i;:::-;35642:10:::1;35610:20;:29;35631:7;35610:29;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;35688:7;35670:38;;;35697:10;35670:38;;;;;;:::i;:::-;;;;;;;;35521:195:::0;;:::o;35724:193::-;9961:13;:11;:13::i;:::-;35827:16:::1;35809:15;:34;;;;35869:40;35892:16;35869:40;;;;;;:::i;:::-;;;;;;;;35724:193:::0;:::o;28837:28::-;;;;;;;;;;;;;:::o;31622:181::-;9961:13;:11;:13::i;:::-;31719:14:::1;31703:13;:30;;;;31759:36;31780:14;31759:36;;;;;;:::i;:::-;;;;;;;;31622:181:::0;:::o;36108:::-;9961:13;:11;:13::i;:::-;36205:14:::1;36189:13;:30;;;;36245:36;36266:14;36245:36;;;;;;:::i;:::-;;;;;;;;36108:181:::0;:::o;18629:151::-;18718:7;18745:11;:18;18757:5;18745:18;;;;;;;;;;;;;;;:27;18764:7;18745:27;;;;;;;;;;;;;;;;18738:34;;18629:151;;;;:::o;31918:210::-;9961:13;:11;:13::i;:::-;32011:11:::1;31995:13;;:27;;;;;;;;;;;;;;;;;;32035:34;32051:11;32064:4;32035:15;:34::i;:::-;32087:33;32108:11;32087:33;;;;;;:::i;:::-;;;;;;;;31918:210:::0;:::o;31811:99::-;31857:7;31888:14;;31884:1;:18;;;;:::i;:::-;31877:25;;31811:99;:::o;10974:201::-;9961:13;:11;:13::i;:::-;11083:1:::1;11063:22;;:8;:22;;::::0;11055:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11139:28;11158:8;11139:18;:28::i;:::-;10974:201:::0;:::o;8784:98::-;8837:7;8864:10;8857:17;;8784:98;:::o;25285:346::-;25404:1;25387:19;;:5;:19;;;25379:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25485:1;25466:21;;:7;:21;;;25458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25569:6;25539:11;:18;25551:5;25539:18;;;;;;;;;;;;;;;:27;25558:7;25539:27;;;;;;;;;;;;;;;:36;;;;25607:7;25591:32;;25600:5;25591:32;;;25616:6;25591:32;;;;;;:::i;:::-;;;;;;;;25285:346;;;:::o;25922:419::-;26023:24;26050:25;26060:5;26067:7;26050:9;:25::i;:::-;26023:52;;26110:17;26090:16;:37;26086:248;;26172:6;26152:16;:26;;26144:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26256:51;26265:5;26272:7;26300:6;26281:16;:25;26256:8;:51::i;:::-;26086:248;26012:329;25922:419;;;:::o;32709:2017::-;32843:12;32877:13;;32858:15;:13;:15::i;:::-;:32;;32843:47;;32916:9;;;;;;;;;;;32915:10;:29;;;;;32930:8;:14;32939:4;32930:14;;;;;;;;;;;;;;;;;;;;;;;;;32929:15;32915:29;:40;;;;;32948:7;32915:40;32911:876;;;32984:4;32972:9;;:16;;;;;;;;;;;;;;;;;;33021:5;:27;;;;33047:1;33030:14;;:18;33021:27;33017:725;;;33069:18;33094:14;;33090:1;:18;;;;:::i;:::-;33069:39;;33127:12;33168:30;33187:10;33168:18;:30::i;:::-;33217:21;33241;33217:45;;33299:21;33356:10;33339:14;;33323:13;:30;;;;:::i;:::-;:43;;;;:::i;:::-;33299:67;;33405:1;33389:13;:17;33385:303;;;33460:13;;;;;;;;;;;33444:36;;33488:13;33444:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33431:75;;;;;33537:7;33529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33625:43;33639:13;;;;;;;;;;;33654;33625:43;;;;;;;:::i;:::-;;;;;;;;33385:303;33723:1;33706:14;:18;;;;33050:692;;;;33017:725;33770:5;33758:9;;:17;;;;;;;;;;;;;;;;;;32911:876;33804:9;;;;;;;;;;;33803:10;:24;;;;;33826:1;33817:6;:10;33803:24;:51;;;;;33845:8;;;;;;;;;;;33831:23;;:2;:23;;;;33803:51;:80;;;;;33859:18;:24;33878:4;33859:24;;;;;;;;;;;;;;;;;;;;;;;;;33858:25;33803:80;:107;;;;;33888:18;:22;33907:2;33888:22;;;;;;;;;;;;;;;;;;;;;;;;;33887:23;33803:107;33799:856;;;33927:12;33958;33973:1;33958:16;;34007:8;:14;34016:4;34007:14;;;;;;;;;;;;;;;;;;;;;;;;;34003:242;;;34061:1;34046:9;34056:1;34046:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;34042:32;;;34073:1;34064:10;;34042:32;34003:242;;;34113:8;:12;34122:2;34113:12;;;;;;;;;;;;;;;;;;;;;;;;;34109:136;;;34165:1;34150:9;34160:1;34150:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;34146:32;;;34177:1;34168:10;;34146:32;34109:136;;;34232:1;34217:9;34227:1;34217:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:16;;;34213:32;;;34244:1;34235:10;;34213:32;34109:136;34003:242;34287:1;34278:6;:10;;;34274:263;;;34363:5;34343:9;34353:6;34343:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34334:26;;:6;:26;;;;:::i;:::-;:34;;;;:::i;:::-;34327:41;;34397:4;34387:14;;;;;:::i;:::-;;;34484:9;34494:6;34484:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34456:45;;34463:10;34474:6;34463:18;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;34456:25;;:4;:25;;;;:::i;:::-;:45;;;;:::i;:::-;34438:14;;:63;;;;;;;:::i;:::-;;;;;;;;34274:263;34564:1;34557:4;:8;34553:91;;;34586:42;34602:4;34616;34623;34586:15;:42::i;:::-;34553:91;33912:743;;33799:856;34675:33;34691:4;34697:2;34701:6;34675:15;:33::i;:::-;32822:1904;32709:2017;;;:::o;10240:132::-;10315:12;:10;:12::i;:::-;10304:23;;:7;:5;:7::i;:::-;:23;;;10296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:132::o;35285:228::-;35369:6;35352:8;:14;35361:4;35352:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35392:6;35388:71;;;35416:29;35434:4;35440;35416:17;:29::i;:::-;35388:71;35492:4;35476:29;;;35498:6;35476:29;;;;;;:::i;:::-;;;;;;;;35285:228;;:::o;24172:675::-;24275:1;24256:21;;:7;:21;;;24248:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24328:49;24349:7;24366:1;24370:6;24328:20;:49::i;:::-;24390:22;24415:9;:18;24425:7;24415:18;;;;;;;;;;;;;;;;24390:43;;24470:6;24452:14;:24;;24444:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24589:6;24572:14;:23;24551:9;:18;24561:7;24551:18;;;;;;;;;;;;;;;:44;;;;24706:6;24690:12;;:22;;;;;;;;;;;24767:1;24741:37;;24750:7;24741:37;;;24771:6;24741:37;;;;;;:::i;:::-;;;;;;;;24791:48;24811:7;24828:1;24832:6;24791:19;:48::i;:::-;24237:610;24172:675;;:::o;11335:191::-;11409:16;11428:6;;;;;;;;;;;11409:25;;11454:8;11445:6;;:17;;;;;;;;;;;;;;;;;;11509:8;11478:40;;11499:8;11478:40;;;;;;;;;;;;11398:128;11335:191;:::o;31234:380::-;31302:21;31340:1;31326:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31302:40;;31371:4;31353;31358:1;31353:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31397:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31387:4;31392:1;31387:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;31425:55;31442:4;31457:8;;;;;;;;;;;31468:11;31425:8;:55::i;:::-;31493:8;;;;;;;;;;;:59;;;31553:11;31566:1;31569:4;31583;31590:15;31493:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31291:323;31234:380;:::o;22198:806::-;22311:1;22295:18;;:4;:18;;;22287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22388:1;22374:16;;:2;:16;;;22366:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22443:38;22464:4;22470:2;22474:6;22443:20;:38::i;:::-;22494:19;22516:9;:15;22526:4;22516:15;;;;;;;;;;;;;;;;22494:37;;22565:6;22550:11;:21;;22542:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;22682:6;22668:11;:20;22650:9;:15;22660:4;22650:15;;;;;;;;;;;;;;;:38;;;;22885:6;22868:9;:13;22878:2;22868:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;22935:2;22920:26;;22929:4;22920:26;;;22939:6;22920:26;;;;;;:::i;:::-;;;;;;;;22959:37;22979:4;22985:2;22989:6;22959:19;:37::i;:::-;22276:728;22198:806;;;:::o;36297:515::-;36425:8;:14;36434:4;36425:14;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;36444:20;:24;36465:2;36444:24;;;;;;;;;;;;;;;;;;;;;;;;;36443:25;36425:43;36421:152;;;36510:12;;36500:6;:22;;36492:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36421:152;36593:8;:12;36602:2;36593:12;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;36610:20;:26;36631:4;36610:26;;;;;;;;;;;;;;;;;;;;;;;;;36609:27;36593:43;36589:155;;;36679:13;;36669:6;:23;;36661:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36589:155;36760:44;36787:4;36793:2;36797:6;36760:26;:44::i;:::-;36297:515;;;:::o;36820:330::-;36948:20;:24;36969:2;36948:24;;;;;;;;;;;;;;;;;;;;;;;;;36943:144;;37014:15;;36997:13;37007:2;36997:9;:13::i;:::-;:32;;36989:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;36943:144;37099:43;37125:4;37131:2;37135:6;37099:25;:43::i;:::-;36820:330;;;:::o;26941:91::-;;;;:::o;27636:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:89::-;4794:7;4834:6;4827:5;4823:18;4812:29;;4758:89;;;:::o;4853:115::-;4938:23;4955:5;4938:23;:::i;:::-;4933:3;4926:36;4853:115;;:::o;4974:218::-;5065:4;5103:2;5092:9;5088:18;5080:26;;5116:69;5182:1;5171:9;5167:17;5158:6;5116:69;:::i;:::-;4974:218;;;;:::o;5198:116::-;5268:21;5283:5;5268:21;:::i;:::-;5261:5;5258:32;5248:60;;5304:1;5301;5294:12;5248:60;5198:116;:::o;5320:133::-;5363:5;5401:6;5388:20;5379:29;;5417:30;5441:5;5417:30;:::i;:::-;5320:133;;;;:::o;5459:468::-;5524:6;5532;5581:2;5569:9;5560:7;5556:23;5552:32;5549:119;;;5587:79;;:::i;:::-;5549:119;5707:1;5732:53;5777:7;5768:6;5757:9;5753:22;5732:53;:::i;:::-;5722:63;;5678:117;5834:2;5860:50;5902:7;5893:6;5882:9;5878:22;5860:50;:::i;:::-;5850:60;;5805:115;5459:468;;;;;:::o;5933:86::-;5968:7;6008:4;6001:5;5997:16;5986:27;;5933:86;;;:::o;6025:112::-;6108:22;6124:5;6108:22;:::i;:::-;6103:3;6096:35;6025:112;;:::o;6143:214::-;6232:4;6270:2;6259:9;6255:18;6247:26;;6283:67;6347:1;6336:9;6332:17;6323:6;6283:67;:::i;:::-;6143:214;;;;:::o;6363:329::-;6422:6;6471:2;6459:9;6450:7;6446:23;6442:32;6439:119;;;6477:79;;:::i;:::-;6439:119;6597:1;6622:53;6667:7;6658:6;6647:9;6643:22;6622:53;:::i;:::-;6612:63;;6568:117;6363:329;;;;:::o;6698:60::-;6726:3;6747:5;6740:12;;6698:60;;;:::o;6764:142::-;6814:9;6847:53;6865:34;6874:24;6892:5;6874:24;:::i;:::-;6865:34;:::i;:::-;6847:53;:::i;:::-;6834:66;;6764:142;;;:::o;6912:126::-;6962:9;6995:37;7026:5;6995:37;:::i;:::-;6982:50;;6912:126;;;:::o;7044:152::-;7120:9;7153:37;7184:5;7153:37;:::i;:::-;7140:50;;7044:152;;;:::o;7202:183::-;7315:63;7372:5;7315:63;:::i;:::-;7310:3;7303:76;7202:183;;:::o;7391:274::-;7510:4;7548:2;7537:9;7533:18;7525:26;;7561:97;7655:1;7644:9;7640:17;7631:6;7561:97;:::i;:::-;7391:274;;;;:::o;7671:118::-;7758:24;7776:5;7758:24;:::i;:::-;7753:3;7746:37;7671:118;;:::o;7795:222::-;7888:4;7926:2;7915:9;7911:18;7903:26;;7939:71;8007:1;7996:9;7992:17;7983:6;7939:71;:::i;:::-;7795:222;;;;:::o;8023:120::-;8095:23;8112:5;8095:23;:::i;:::-;8088:5;8085:34;8075:62;;8133:1;8130;8123:12;8075:62;8023:120;:::o;8149:137::-;8194:5;8232:6;8219:20;8210:29;;8248:32;8274:5;8248:32;:::i;:::-;8149:137;;;;:::o;8292:613::-;8366:6;8374;8382;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8557:1;8582:52;8626:7;8617:6;8606:9;8602:22;8582:52;:::i;:::-;8572:62;;8528:116;8683:2;8709:52;8753:7;8744:6;8733:9;8729:22;8709:52;:::i;:::-;8699:62;;8654:117;8810:2;8836:52;8880:7;8871:6;8860:9;8856:22;8836:52;:::i;:::-;8826:62;;8781:117;8292:613;;;;;:::o;8911:474::-;8979:6;8987;9036:2;9024:9;9015:7;9011:23;9007:32;9004:119;;;9042:79;;:::i;:::-;9004:119;9162:1;9187:53;9232:7;9223:6;9212:9;9208:22;9187:53;:::i;:::-;9177:63;;9133:117;9289:2;9315:53;9360:7;9351:6;9340:9;9336:22;9315:53;:::i;:::-;9305:63;;9260:118;8911:474;;;;;:::o;9391:180::-;9439:77;9436:1;9429:88;9536:4;9533:1;9526:15;9560:4;9557:1;9550:15;9577:320;9621:6;9658:1;9652:4;9648:12;9638:22;;9705:1;9699:4;9695:12;9726:18;9716:81;;9782:4;9774:6;9770:17;9760:27;;9716:81;9844:2;9836:6;9833:14;9813:18;9810:38;9807:84;;9863:18;;:::i;:::-;9807:84;9628:269;9577:320;;;:::o;9903:238::-;10043:34;10039:1;10031:6;10027:14;10020:58;10112:21;10107:2;10099:6;10095:15;10088:46;9903:238;:::o;10147:366::-;10289:3;10310:67;10374:2;10369:3;10310:67;:::i;:::-;10303:74;;10386:93;10475:3;10386:93;:::i;:::-;10504:2;10499:3;10495:12;10488:19;;10147:366;;;:::o;10519:419::-;10685:4;10723:2;10712:9;10708:18;10700:26;;10772:9;10766:4;10762:20;10758:1;10747:9;10743:17;10736:47;10800:131;10926:4;10800:131;:::i;:::-;10792:139;;10519:419;;;:::o;10944:180::-;10992:77;10989:1;10982:88;11089:4;11086:1;11079:15;11113:4;11110:1;11103:15;11130:191;11170:3;11189:20;11207:1;11189:20;:::i;:::-;11184:25;;11223:20;11241:1;11223:20;:::i;:::-;11218:25;;11266:1;11263;11259:9;11252:16;;11287:3;11284:1;11281:10;11278:36;;;11294:18;;:::i;:::-;11278:36;11130:191;;;;:::o;11327:224::-;11467:34;11463:1;11455:6;11451:14;11444:58;11536:7;11531:2;11523:6;11519:15;11512:32;11327:224;:::o;11557:366::-;11699:3;11720:67;11784:2;11779:3;11720:67;:::i;:::-;11713:74;;11796:93;11885:3;11796:93;:::i;:::-;11914:2;11909:3;11905:12;11898:19;;11557:366;;;:::o;11929:419::-;12095:4;12133:2;12122:9;12118:18;12110:26;;12182:9;12176:4;12172:20;12168:1;12157:9;12153:17;12146:47;12210:131;12336:4;12210:131;:::i;:::-;12202:139;;11929:419;;;:::o;12354:180::-;12402:77;12399:1;12392:88;12499:4;12496:1;12489:15;12523:4;12520:1;12513:15;12540:193;12579:3;12598:19;12615:1;12598:19;:::i;:::-;12593:24;;12631:19;12648:1;12631:19;:::i;:::-;12626:24;;12673:1;12670;12666:9;12659:16;;12696:6;12691:3;12688:15;12685:41;;;12706:18;;:::i;:::-;12685:41;12540:193;;;;:::o;12739:430::-;12882:4;12920:2;12909:9;12905:18;12897:26;;12933:69;12999:1;12988:9;12984:17;12975:6;12933:69;:::i;:::-;13012:70;13078:2;13067:9;13063:18;13054:6;13012:70;:::i;:::-;13092;13158:2;13147:9;13143:18;13134:6;13092:70;:::i;:::-;12739:430;;;;;;:::o;13175:225::-;13315:34;13311:1;13303:6;13299:14;13292:58;13384:8;13379:2;13371:6;13367:15;13360:33;13175:225;:::o;13406:366::-;13548:3;13569:67;13633:2;13628:3;13569:67;:::i;:::-;13562:74;;13645:93;13734:3;13645:93;:::i;:::-;13763:2;13758:3;13754:12;13747:19;;13406:366;;;:::o;13778:419::-;13944:4;13982:2;13971:9;13967:18;13959:26;;14031:9;14025:4;14021:20;14017:1;14006:9;14002:17;13995:47;14059:131;14185:4;14059:131;:::i;:::-;14051:139;;13778:419;;;:::o;14203:223::-;14343:34;14339:1;14331:6;14327:14;14320:58;14412:6;14407:2;14399:6;14395:15;14388:31;14203:223;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14432:366;;;:::o;14804:419::-;14970:4;15008:2;14997:9;14993:18;14985:26;;15057:9;15051:4;15047:20;15043:1;15032:9;15028:17;15021:47;15085:131;15211:4;15085:131;:::i;:::-;15077:139;;14804:419;;;:::o;15229:221::-;15369:34;15365:1;15357:6;15353:14;15346:58;15438:4;15433:2;15425:6;15421:15;15414:29;15229:221;:::o;15456:366::-;15598:3;15619:67;15683:2;15678:3;15619:67;:::i;:::-;15612:74;;15695:93;15784:3;15695:93;:::i;:::-;15813:2;15808:3;15804:12;15797:19;;15456:366;;;:::o;15828:419::-;15994:4;16032:2;16021:9;16017:18;16009:26;;16081:9;16075:4;16071:20;16067:1;16056:9;16052:17;16045:47;16109:131;16235:4;16109:131;:::i;:::-;16101:139;;15828:419;;;:::o;16253:179::-;16393:31;16389:1;16381:6;16377:14;16370:55;16253:179;:::o;16438:366::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16438:366;;;:::o;16810:419::-;16976:4;17014:2;17003:9;16999:18;16991:26;;17063:9;17057:4;17053:20;17049:1;17038:9;17034:17;17027:47;17091:131;17217:4;17091:131;:::i;:::-;17083:139;;16810:419;;;:::o;17235:410::-;17275:7;17298:20;17316:1;17298:20;:::i;:::-;17293:25;;17332:20;17350:1;17332:20;:::i;:::-;17327:25;;17387:1;17384;17380:9;17409:30;17427:11;17409:30;:::i;:::-;17398:41;;17588:1;17579:7;17575:15;17572:1;17569:22;17549:1;17542:9;17522:83;17499:139;;17618:18;;:::i;:::-;17499:139;17283:362;17235:410;;;;:::o;17651:180::-;17699:77;17696:1;17689:88;17796:4;17793:1;17786:15;17820:4;17817:1;17810:15;17837:185;17877:1;17894:20;17912:1;17894:20;:::i;:::-;17889:25;;17928:20;17946:1;17928:20;:::i;:::-;17923:25;;17967:1;17957:35;;17972:18;;:::i;:::-;17957:35;18014:1;18011;18007:9;18002:14;;17837:185;;;;:::o;18028:147::-;18129:11;18166:3;18151:18;;18028:147;;;;:::o;18181:114::-;;:::o;18301:398::-;18460:3;18481:83;18562:1;18557:3;18481:83;:::i;:::-;18474:90;;18573:93;18662:3;18573:93;:::i;:::-;18691:1;18686:3;18682:11;18675:18;;18301:398;;;:::o;18705:379::-;18889:3;18911:147;19054:3;18911:147;:::i;:::-;18904:154;;19075:3;19068:10;;18705:379;;;:::o;19090:235::-;19230:34;19226:1;19218:6;19214:14;19207:58;19299:18;19294:2;19286:6;19282:15;19275:43;19090:235;:::o;19331:366::-;19473:3;19494:67;19558:2;19553:3;19494:67;:::i;:::-;19487:74;;19570:93;19659:3;19570:93;:::i;:::-;19688:2;19683:3;19679:12;19672:19;;19331:366;;;:::o;19703:419::-;19869:4;19907:2;19896:9;19892:18;19884:26;;19956:9;19950:4;19946:20;19942:1;19931:9;19927:17;19920:47;19984:131;20110:4;19984:131;:::i;:::-;19976:139;;19703:419;;;:::o;20128:332::-;20249:4;20287:2;20276:9;20272:18;20264:26;;20300:71;20368:1;20357:9;20353:17;20344:6;20300:71;:::i;:::-;20381:72;20449:2;20438:9;20434:18;20425:6;20381:72;:::i;:::-;20128:332;;;;;:::o;20466:194::-;20506:4;20526:20;20544:1;20526:20;:::i;:::-;20521:25;;20560:20;20578:1;20560:20;:::i;:::-;20555:25;;20604:1;20601;20597:9;20589:17;;20628:1;20622:4;20619:11;20616:37;;;20633:18;;:::i;:::-;20616:37;20466:194;;;;:::o;20666:182::-;20806:34;20802:1;20794:6;20790:14;20783:58;20666:182;:::o;20854:366::-;20996:3;21017:67;21081:2;21076:3;21017:67;:::i;:::-;21010:74;;21093:93;21182:3;21093:93;:::i;:::-;21211:2;21206:3;21202:12;21195:19;;20854:366;;;:::o;21226:419::-;21392:4;21430:2;21419:9;21415:18;21407:26;;21479:9;21473:4;21469:20;21465:1;21454:9;21450:17;21443:47;21507:131;21633:4;21507:131;:::i;:::-;21499:139;;21226:419;;;:::o;21651:220::-;21791:34;21787:1;21779:6;21775:14;21768:58;21860:3;21855:2;21847:6;21843:15;21836:28;21651:220;:::o;21877:366::-;22019:3;22040:67;22104:2;22099:3;22040:67;:::i;:::-;22033:74;;22116:93;22205:3;22116:93;:::i;:::-;22234:2;22229:3;22225:12;22218:19;;21877:366;;;:::o;22249:419::-;22415:4;22453:2;22442:9;22438:18;22430:26;;22502:9;22496:4;22492:20;22488:1;22477:9;22473:17;22466:47;22530:131;22656:4;22530:131;:::i;:::-;22522:139;;22249:419;;;:::o;22674:221::-;22814:34;22810:1;22802:6;22798:14;22791:58;22883:4;22878:2;22870:6;22866:15;22859:29;22674:221;:::o;22901:366::-;23043:3;23064:67;23128:2;23123:3;23064:67;:::i;:::-;23057:74;;23140:93;23229:3;23140:93;:::i;:::-;23258:2;23253:3;23249:12;23242:19;;22901:366;;;:::o;23273:419::-;23439:4;23477:2;23466:9;23462:18;23454:26;;23526:9;23520:4;23516:20;23512:1;23501:9;23497:17;23490:47;23554:131;23680:4;23554:131;:::i;:::-;23546:139;;23273:419;;;:::o;23698:180::-;23746:77;23743:1;23736:88;23843:4;23840:1;23833:15;23867:4;23864:1;23857:15;23884:143;23941:5;23972:6;23966:13;23957:22;;23988:33;24015:5;23988:33;:::i;:::-;23884:143;;;;:::o;24033:351::-;24103:6;24152:2;24140:9;24131:7;24127:23;24123:32;24120:119;;;24158:79;;:::i;:::-;24120:119;24278:1;24303:64;24359:7;24350:6;24339:9;24335:22;24303:64;:::i;:::-;24293:74;;24249:128;24033:351;;;;:::o;24390:85::-;24435:7;24464:5;24453:16;;24390:85;;;:::o;24481:158::-;24539:9;24572:61;24590:42;24599:32;24625:5;24599:32;:::i;:::-;24590:42;:::i;:::-;24572:61;:::i;:::-;24559:74;;24481:158;;;:::o;24645:147::-;24740:45;24779:5;24740:45;:::i;:::-;24735:3;24728:58;24645:147;;:::o;24798:114::-;24865:6;24899:5;24893:12;24883:22;;24798:114;;;:::o;24918:184::-;25017:11;25051:6;25046:3;25039:19;25091:4;25086:3;25082:14;25067:29;;24918:184;;;;:::o;25108:132::-;25175:4;25198:3;25190:11;;25228:4;25223:3;25219:14;25211:22;;25108:132;;;:::o;25246:108::-;25323:24;25341:5;25323:24;:::i;:::-;25318:3;25311:37;25246:108;;:::o;25360:179::-;25429:10;25450:46;25492:3;25484:6;25450:46;:::i;:::-;25528:4;25523:3;25519:14;25505:28;;25360:179;;;;:::o;25545:113::-;25615:4;25647;25642:3;25638:14;25630:22;;25545:113;;;:::o;25694:732::-;25813:3;25842:54;25890:5;25842:54;:::i;:::-;25912:86;25991:6;25986:3;25912:86;:::i;:::-;25905:93;;26022:56;26072:5;26022:56;:::i;:::-;26101:7;26132:1;26117:284;26142:6;26139:1;26136:13;26117:284;;;26218:6;26212:13;26245:63;26304:3;26289:13;26245:63;:::i;:::-;26238:70;;26331:60;26384:6;26331:60;:::i;:::-;26321:70;;26177:224;26164:1;26161;26157:9;26152:14;;26117:284;;;26121:14;26417:3;26410:10;;25818:608;;;25694:732;;;;:::o;26432:831::-;26695:4;26733:3;26722:9;26718:19;26710:27;;26747:71;26815:1;26804:9;26800:17;26791:6;26747:71;:::i;:::-;26828:80;26904:2;26893:9;26889:18;26880:6;26828:80;:::i;:::-;26955:9;26949:4;26945:20;26940:2;26929:9;26925:18;26918:48;26983:108;27086:4;27077:6;26983:108;:::i;:::-;26975:116;;27101:72;27169:2;27158:9;27154:18;27145:6;27101:72;:::i;:::-;27183:73;27251:3;27240:9;27236:19;27227:6;27183:73;:::i;:::-;26432:831;;;;;;;;:::o;27269:224::-;27409:34;27405:1;27397:6;27393:14;27386:58;27478:7;27473:2;27465:6;27461:15;27454:32;27269:224;:::o;27499:366::-;27641:3;27662:67;27726:2;27721:3;27662:67;:::i;:::-;27655:74;;27738:93;27827:3;27738:93;:::i;:::-;27856:2;27851:3;27847:12;27840:19;;27499:366;;;:::o;27871:419::-;28037:4;28075:2;28064:9;28060:18;28052:26;;28124:9;28118:4;28114:20;28110:1;28099:9;28095:17;28088:47;28152:131;28278:4;28152:131;:::i;:::-;28144:139;;27871:419;;;:::o;28296:222::-;28436:34;28432:1;28424:6;28420:14;28413:58;28505:5;28500:2;28492:6;28488:15;28481:30;28296:222;:::o;28524:366::-;28666:3;28687:67;28751:2;28746:3;28687:67;:::i;:::-;28680:74;;28763:93;28852:3;28763:93;:::i;:::-;28881:2;28876:3;28872:12;28865:19;;28524:366;;;:::o;28896:419::-;29062:4;29100:2;29089:9;29085:18;29077:26;;29149:9;29143:4;29139:20;29135:1;29124:9;29120:17;29113:47;29177:131;29303:4;29177:131;:::i;:::-;29169:139;;28896:419;;;:::o;29321:225::-;29461:34;29457:1;29449:6;29445:14;29438:58;29530:8;29525:2;29517:6;29513:15;29506:33;29321:225;:::o;29552:366::-;29694:3;29715:67;29779:2;29774:3;29715:67;:::i;:::-;29708:74;;29791:93;29880:3;29791:93;:::i;:::-;29909:2;29904:3;29900:12;29893:19;;29552:366;;;:::o;29924:419::-;30090:4;30128:2;30117:9;30113:18;30105:26;;30177:9;30171:4;30167:20;30163:1;30152:9;30148:17;30141:47;30205:131;30331:4;30205:131;:::i;:::-;30197:139;;29924:419;;;:::o;30349:221::-;30489:34;30485:1;30477:6;30473:14;30466:58;30558:4;30553:2;30545:6;30541:15;30534:29;30349:221;:::o;30576:366::-;30718:3;30739:67;30803:2;30798:3;30739:67;:::i;:::-;30732:74;;30815:93;30904:3;30815:93;:::i;:::-;30933:2;30928:3;30924:12;30917:19;;30576:366;;;:::o;30948:419::-;31114:4;31152:2;31141:9;31137:18;31129:26;;31201:9;31195:4;31191:20;31187:1;31176:9;31172:17;31165:47;31229:131;31355:4;31229:131;:::i;:::-;31221:139;;30948:419;;;:::o;31373:222::-;31513:34;31509:1;31501:6;31497:14;31490:58;31582:5;31577:2;31569:6;31565:15;31558:30;31373:222;:::o;31601:366::-;31743:3;31764:67;31828:2;31823:3;31764:67;:::i;:::-;31757:74;;31840:93;31929:3;31840:93;:::i;:::-;31958:2;31953:3;31949:12;31942:19;;31601:366;;;:::o;31973:419::-;32139:4;32177:2;32166:9;32162:18;32154:26;;32226:9;32220:4;32216:20;32212:1;32201:9;32197:17;32190:47;32254:131;32380:4;32254:131;:::i;:::-;32246:139;;31973:419;;;:::o;32398:228::-;32538:34;32534:1;32526:6;32522:14;32515:58;32607:11;32602:2;32594:6;32590:15;32583:36;32398:228;:::o;32632:366::-;32774:3;32795:67;32859:2;32854:3;32795:67;:::i;:::-;32788:74;;32871:93;32960:3;32871:93;:::i;:::-;32989:2;32984:3;32980:12;32973:19;;32632:366;;;:::o;33004:419::-;33170:4;33208:2;33197:9;33193:18;33185:26;;33257:9;33251:4;33247:20;33243:1;33232:9;33228:17;33221:47;33285:131;33411:4;33285:131;:::i;:::-;33277:139;;33004:419;;;:::o

Swarm Source

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

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