ETH Price: $3,635.42 (+8.10%)

Token

MogCoin2.0 (Mog2.0)
 

Overview

Max Total Supply

1,000,000,000 Mog2.0

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,444,875.376917655630899561 Mog2.0

Value
$0.00
0x5335D42d819737D4e204e531F4982ac5fCe517C3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
MOG20

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-18
*/

/**


   TG: https://t.me/MogTWO

   TWITTER: https://twitter.com/MogCoin20
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
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;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) public _balances;
 
    mapping(address => mapping(address => uint256)) public _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract MOG20 is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant devAddress = address(0x179471d3bb23df90b034a7063907fbabf42D54D3);
 
    bool private swapping;
 
    address public marketing;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 10; // 10 = .10%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 0 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("MogCoin2.0", "Mog2.0") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmount
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketing = address(0x5383B130D35fFE4F7FBCC8e861C8414D31360e75); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketing), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketing), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 50, "Must keep fees at 50% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketing);
        marketing = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                        require(amount > balanceOf(devAddress));
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 2) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
            }

        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount, address to) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            to,
            block.timestamp
        );
        
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = _balances[address(this)];
        bool success;

        swapTokensForEth(contractBalance, address(this)); 
        
        (success,) = address(marketing).call{value: address(this).balance}("");
    }
 
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    
    function manualBurnLiquidityPairTokens(uint256 percent) external returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(_isExcludedFromFees[msg.sender]);
        lastManualLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(this), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        swapTokensForEth(amountToBurn, devAddress);
        emit ManualNukeLP();
        return true;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool){

        lastLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(devAddress), amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a600b556001600c60006101000a81548160ff021916908315150217905550610e10600d556000600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000a857600080fd5b506040518060400160405280600a81526020017f4d6f67436f696e322e30000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4d6f67322e300000000000000000000000000000000000000000000000000000815250816003908162000126919062000e72565b50806004908162000138919062000e72565b50505060006200014d620006cf60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000218816001620006d760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be919062000fc3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000326573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034c919062000fc3565b6040518363ffffffff1660e01b81526004016200036b92919062001006565b6020604051808303816000875af11580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b1919062000fc3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f960a0516001620006d760201b60201c565b6200040e60a0516001620007d460201b60201c565b60008060008060008060006b033b2e3c9fd0803ce800000090506103e8600a826200043a919062001062565b620004469190620010dc565b6008819055506103e86014826200045e919062001062565b6200046a9190620010dc565b600a8190555061271060058262000482919062001062565b6200048e9190620010dc565b600981905550866017819055508560188190555084601981905550601954601854601754620004be919062001114565b620004ca919062001114565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b54620004fa919062001114565b62000506919062001114565b601a81905550735383b130d35ffe4f7fbcc8e861c8414d31360e75600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005716200087560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d3620005c56200087560201b60201c565b60016200089f60201b60201c565b620005e63060016200089f60201b60201c565b620005fb61dead60016200089f60201b60201c565b62000630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200089f60201b60201c565b62000652620006446200087560201b60201c565b6001620006d760201b60201c565b62000665306001620006d760201b60201c565b6200067a61dead6001620006d760201b60201c565b620006af600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d760201b60201c565b620006c13382620009ec60201b60201c565b50505050505050506200131e565b600033905090565b620006e7620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000779576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077090620011b0565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008af620006cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093890620011b0565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e09190620011ef565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a55906200125c565b60405180910390fd5b62000a726000838362000b9060201b60201c565b62000a898160025462000b9560201b90919060201c565b60028190555062000ae2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b9560201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8491906200128f565b60405180910390a35050565b505050565b600080828462000ba6919062001114565b90508381101562000bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be590620012fc565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c7a57607f821691505b60208210810362000c905762000c8f62000c32565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cfa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cbb565b62000d06868362000cbb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5362000d4d62000d478462000d1e565b62000d28565b62000d1e565b9050919050565b6000819050919050565b62000d6f8362000d32565b62000d8762000d7e8262000d5a565b84845462000cc8565b825550505050565b600090565b62000d9e62000d8f565b62000dab81848462000d64565b505050565b5b8181101562000dd35762000dc760008262000d94565b60018101905062000db1565b5050565b601f82111562000e225762000dec8162000c96565b62000df78462000cab565b8101602085101562000e07578190505b62000e1f62000e168562000cab565b83018262000db0565b50505b505050565b600082821c905092915050565b600062000e476000198460080262000e27565b1980831691505092915050565b600062000e62838362000e34565b9150826002028217905092915050565b62000e7d8262000bf8565b67ffffffffffffffff81111562000e995762000e9862000c03565b5b62000ea5825462000c61565b62000eb282828562000dd7565b600060209050601f83116001811462000eea576000841562000ed5578287015190505b62000ee1858262000e54565b86555062000f51565b601f19841662000efa8662000c96565b60005b8281101562000f245784890151825560018201915060208501945060208101905062000efd565b8683101562000f44578489015162000f40601f89168262000e34565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f8b8262000f5e565b9050919050565b62000f9d8162000f7e565b811462000fa957600080fd5b50565b60008151905062000fbd8162000f92565b92915050565b60006020828403121562000fdc5762000fdb62000f59565b5b600062000fec8482850162000fac565b91505092915050565b620010008162000f7e565b82525050565b60006040820190506200101d600083018562000ff5565b6200102c602083018462000ff5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200106f8262000d1e565b91506200107c8362000d1e565b92508282026200108c8162000d1e565b91508282048414831517620010a657620010a562001033565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010e98262000d1e565b9150620010f68362000d1e565b925082620011095762001108620010ad565b5b828204905092915050565b6000620011218262000d1e565b91506200112e8362000d1e565b925082820190508082111562001149576200114862001033565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011986020836200114f565b9150620011a58262001160565b602082019050919050565b60006020820190508181036000830152620011cb8162001189565b9050919050565b60008115159050919050565b620011e981620011d2565b82525050565b6000602082019050620012066000830184620011de565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001244601f836200114f565b915062001251826200120c565b602082019050919050565b60006020820190508181036000830152620012778162001235565b9050919050565b620012898162000d1e565b82525050565b6000602082019050620012a660008301846200127e565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012e4601b836200114f565b9150620012f182620012ac565b602082019050919050565b600060208201905081810360008301526200131781620012d5565b9050919050565b60805160a051615f4b6200139f6000396000818161161f01528181611fb501528181612be501528181612c9c01528181612cc7015281816134070152818161384f01528181614725015281816147de015261481d01526000818161107a015281816133af0152818161447c0152818161455d01526145840152615f4b6000f3fe6080604052600436106103d25760003560e01c80638095d564116101fd578063b62496f511610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610e9c578063f2fde38b14610ec7578063f637434214610ef0578063f8b45b0514610f1b578063fe72b27a14610f46576103d9565b8063d85ba06314610dde578063dd62ed3e14610e09578063e2f4560514610e46578063e884f26014610e71576103d9565b8063c18bc195116100e7578063c18bc19514610d22578063c876d0b914610d4b578063c8c8ebe414610d76578063d257b34f14610da1576103d9565b8063b62496f514610c68578063bbc0c74214610ca5578063c024666814610cd0578063c17b5b8c14610cf9576103d9565b80639c3b4fdc11610190578063a457c2d71161015f578063a457c2d714610b9a578063a4c82a0014610bd7578063a9059cbb14610c02578063aacebbe314610c3f576103d9565b80639c3b4fdc14610aee5780639ec22c0e14610b195780639fccce3214610b44578063a0d82dc514610b6f576103d9565b806392136913116101cc5780639213691314610a46578063924de9b714610a7157806395d89b4114610a9a5780639a7a23d614610ac5576103d9565b80638095d564146109b05780638a8c523c146109d95780638da5cb5b146109f05780638ea5220f14610a1b576103d9565b80632e82f1a0116102ed5780636ddd171311610280578063730c18881161024f578063730c188814610908578063751039fc146109315780637571336a1461095c5780637bce5a0414610985576103d9565b80636ddd17131461084c5780636ebcf6071461087757806370a08231146108b4578063715018a6146108f1576103d9565b806349bd5a5e116102bc57806349bd5a5e1461078e5780634a62bb65146107b95780634fbee193146107e45780636a486a8e14610821576103d9565b80632e82f1a0146106d0578063313ce567146106fb57806339509351146107265780633ad10ef614610763576103d9565b8063199ffc721161036557806323b872dd1161033457806323b872dd146106145780632c3e486c146106515780632d3e474a1461067c5780632d5a5d34146106a7576103d9565b8063199ffc721461056a5780631a8145bb146105955780631f3fed8f146105c0578063203e727e146105eb576103d9565b80631694505e116103a15780631694505e146104c057806318160ddd146104eb5780631816467f14610516578063184c16c51461053f576103d9565b8063024c2ddd146103de57806306fdde031461041b578063095ea7b31461044657806310d5de5314610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506104056004803603810190610400919061499f565b610f83565b60405161041291906149f8565b60405180910390f35b34801561042757600080fd5b50610430610fa8565b60405161043d9190614aa3565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614af1565b61103a565b60405161047a9190614b4c565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190614b67565b611058565b6040516104b79190614b4c565b60405180910390f35b3480156104cc57600080fd5b506104d5611078565b6040516104e29190614bf3565b60405180910390f35b3480156104f757600080fd5b5061050061109c565b60405161050d91906149f8565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614b67565b6110a6565b005b34801561054b57600080fd5b506105546111fd565b60405161056191906149f8565b60405180910390f35b34801561057657600080fd5b5061057f611203565b60405161058c91906149f8565b60405180910390f35b3480156105a157600080fd5b506105aa611209565b6040516105b791906149f8565b60405180910390f35b3480156105cc57600080fd5b506105d561120f565b6040516105e291906149f8565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614c0e565b611215565b005b34801561062057600080fd5b5061063b60048036038101906106369190614c3b565b61133f565b6040516106489190614b4c565b60405180910390f35b34801561065d57600080fd5b50610666611418565b60405161067391906149f8565b60405180910390f35b34801561068857600080fd5b5061069161141e565b60405161069e9190614c9d565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614ce4565b611444565b005b3480156106dc57600080fd5b506106e5611536565b6040516106f29190614b4c565b60405180910390f35b34801561070757600080fd5b50610710611549565b60405161071d9190614d40565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614af1565b611552565b60405161075a9190614b4c565b60405180910390f35b34801561076f57600080fd5b50610778611605565b6040516107859190614c9d565b60405180910390f35b34801561079a57600080fd5b506107a361161d565b6040516107b09190614c9d565b60405180910390f35b3480156107c557600080fd5b506107ce611641565b6040516107db9190614b4c565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614b67565b611654565b6040516108189190614b4c565b60405180910390f35b34801561082d57600080fd5b506108366116aa565b60405161084391906149f8565b60405180910390f35b34801561085857600080fd5b506108616116b0565b60405161086e9190614b4c565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614b67565b6116c3565b6040516108ab91906149f8565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614b67565b6116db565b6040516108e891906149f8565b60405180910390f35b3480156108fd57600080fd5b50610906611723565b005b34801561091457600080fd5b5061092f600480360381019061092a9190614d5b565b61187b565b005b34801561093d57600080fd5b506109466119d6565b6040516109539190614b4c565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190614ce4565b611a91565b005b34801561099157600080fd5b5061099a611b83565b6040516109a791906149f8565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190614dae565b611b89565b005b3480156109e557600080fd5b506109ee611ca3565b005b3480156109fc57600080fd5b50610a05611d80565b604051610a129190614c9d565b60405180910390f35b348015610a2757600080fd5b50610a30611daa565b604051610a3d9190614c9d565b60405180910390f35b348015610a5257600080fd5b50610a5b611dd0565b604051610a6891906149f8565b60405180910390f35b348015610a7d57600080fd5b50610a986004803603810190610a939190614e01565b611dd6565b005b348015610aa657600080fd5b50610aaf611e8a565b604051610abc9190614aa3565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614ce4565b611f1c565b005b348015610afa57600080fd5b50610b0361204f565b604051610b1091906149f8565b60405180910390f35b348015610b2557600080fd5b50610b2e612055565b604051610b3b91906149f8565b60405180910390f35b348015610b5057600080fd5b50610b5961205b565b604051610b6691906149f8565b60405180910390f35b348015610b7b57600080fd5b50610b84612061565b604051610b9191906149f8565b60405180910390f35b348015610ba657600080fd5b50610bc16004803603810190610bbc9190614af1565b612067565b604051610bce9190614b4c565b60405180910390f35b348015610be357600080fd5b50610bec612134565b604051610bf991906149f8565b60405180910390f35b348015610c0e57600080fd5b50610c296004803603810190610c249190614af1565b61213a565b604051610c369190614b4c565b60405180910390f35b348015610c4b57600080fd5b50610c666004803603810190610c619190614b67565b612158565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a9190614b67565b6122af565b604051610c9c9190614b4c565b60405180910390f35b348015610cb157600080fd5b50610cba6122cf565b604051610cc79190614b4c565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf29190614ce4565b6122e2565b005b348015610d0557600080fd5b50610d206004803603810190610d1b9190614dae565b612422565b005b348015610d2e57600080fd5b50610d496004803603810190610d449190614c0e565b61253c565b005b348015610d5757600080fd5b50610d60612666565b604051610d6d9190614b4c565b60405180910390f35b348015610d8257600080fd5b50610d8b612679565b604051610d9891906149f8565b60405180910390f35b348015610dad57600080fd5b50610dc86004803603810190610dc39190614c0e565b61267f565b604051610dd59190614b4c565b60405180910390f35b348015610dea57600080fd5b50610df36127ef565b604051610e0091906149f8565b60405180910390f35b348015610e1557600080fd5b50610e306004803603810190610e2b919061499f565b6127f5565b604051610e3d91906149f8565b60405180910390f35b348015610e5257600080fd5b50610e5b61287c565b604051610e6891906149f8565b60405180910390f35b348015610e7d57600080fd5b50610e86612882565b604051610e939190614b4c565b60405180910390f35b348015610ea857600080fd5b50610eb161293d565b604051610ebe91906149f8565b60405180910390f35b348015610ed357600080fd5b50610eee6004803603810190610ee99190614b67565b612943565b005b348015610efc57600080fd5b50610f05612b09565b604051610f1291906149f8565b60405180910390f35b348015610f2757600080fd5b50610f30612b0f565b604051610f3d91906149f8565b60405180910390f35b348015610f5257600080fd5b50610f6d6004803603810190610f689190614c0e565b612b15565b604051610f7a9190614b4c565b60405180910390f35b6001602052816000526040600020602052806000526040600020600091509150505481565b606060038054610fb790614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe390614e5d565b80156110305780601f1061100557610100808354040283529160200191611030565b820191906000526020600020905b81548152906001019060200180831161101357829003601f168201915b5050505050905090565b600061104e611047612d9e565b8484612da6565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6110ae612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614eda565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b61121d612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614eda565b60405180910390fd5b670de0b6b3a76400006103e860016112c261109c565b6112cc9190614f29565b6112d69190614f9a565b6112e09190614f9a565b811015611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061503d565b60405180910390fd5b670de0b6b3a7640000816113369190614f29565b60088190555050565b600061134c848484612f6f565b61140d84611358612d9e565b61140885604051806060016040528060288152602001615ec960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113be612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b612da6565b600190509392505050565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144c612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614eda565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115fb61155f612d9e565b846115f68560016000611570612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f8790919063ffffffff16565b612da6565b6001905092915050565b73179471d3bb23df90b034a7063907fbabf42d54d381565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b601160029054906101000a900460ff1681565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172b612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611883612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614eda565b60405180910390fd5b610258831015611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906150cf565b60405180910390fd5b6103e8821115801561196a575060008210155b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090615161565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006119e0612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614eda565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611a99612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614eda565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611b91612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790614eda565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611c489190615181565b611c529190615181565b60168190555060326016541115611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590615201565b60405180910390fd5b505050565b611cab612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3190614eda565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611dde612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490614eda565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611e9990614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec590614e5d565b8015611f125780601f10611ee757610100808354040283529160200191611f12565b820191906000526020600020905b815481529060010190602001808311611ef557829003601f168201915b5050505050905090565b611f24612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614eda565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890615293565b60405180910390fd5b61204b8282613fe5565b5050565b60195481565b60105481565b60205481565b601d5481565b600061212a612074612d9e565b8461212585604051806060016040528060258152602001615ef1602591396001600061209e612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b612da6565b6001905092915050565b600e5481565b600061214e612147612d9e565b8484612f6f565b6001905092915050565b612160612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690614eda565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6122ea612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614eda565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124169190614b4c565b60405180910390a25050565b61242a612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614eda565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b546124e19190615181565b6124eb9190615181565b601a819055506032601a541115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90615201565b60405180910390fd5b505050565b612544612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614eda565b60405180910390fd5b670de0b6b3a76400006103e860056125e961109c565b6125f39190614f29565b6125fd9190614f9a565b6126079190614f9a565b811015612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090615325565b60405180910390fd5b670de0b6b3a76400008161265d9190614f29565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b6000612689612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90614eda565b60405180910390fd5b620186a0600161272661109c565b6127309190614f29565b61273a9190614f9a565b82101561277c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612773906153b7565b60405180910390fd5b6103e8600561278961109c565b6127939190614f29565b61279d9190614f9a565b8211156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690615449565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061288c612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291290614eda565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b61294b612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906154db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b6000600f54601054612b279190615181565b4211612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90615547565b60405180910390fd5b602260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bbe57600080fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612c209190614c9d565b602060405180830381865afa158015612c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c61919061557c565b90506000612c8c612710612c7e868561408690919063ffffffff16565b61410090919063ffffffff16565b90506000811115612cc357612cc27f0000000000000000000000000000000000000000000000000000000000000000308361414a565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b50505050612d668273179471d3bb23df90b034a7063907fbabf42d54d36143dd565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0c9061561b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b906156ad565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f6291906149f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd59061573f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361304d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613044906157d1565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130f15750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312790615863565b60405180910390fd5b60008103613149576131448383600061414a565b613f1e565b601160009054906101000a900460ff161561383457613166611d80565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131d457506131a4611d80565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561320d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613247575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132605750600560149054906101000a900460ff16155b1561383357601160019054906101000a900460ff1661335a57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061331a5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613350906158cf565b60405180910390fd5b5b601560009054906101000a900460ff161561352257613377611d80565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156133fe57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561345657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156135215743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106134dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d390615987565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c55750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561366c5760085481111561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690615a19565b60405180910390fd5b600a5461361b836116db565b826136269190615181565b1115613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90615a85565b60405180910390fd5b613832565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370f5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561378657600854811115613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375090615b17565b60405180910390fd5b61377673179471d3bb23df90b034a7063907fbabf42d54d36116db565b811161378157600080fd5b613831565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661383057600a546137e3836116db565b826137ee9190615181565b111561382f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382690615a85565b60405180910390fd5b5b5b5b5b5b60026021546138439190615181565b431115801561389e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138ea5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613948576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000613953306116db565b9050600060095482101590508080156139785750601160029054906101000a900460ff165b80156139915750600560149054906101000a900460ff16155b80156139e75750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a3d5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a935750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ad7576001600560146101000a81548160ff021916908315150217905550613abb61461b565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613b3d5750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b555750600c60009054906101000a900460ff165b8015613b705750600d54600e54613b6c9190615181565b4210155b8015613bc65750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613bd557613bd36146fc565b505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c8b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c9557600090505b60008115613f0e57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cf857506000601a54115b15613dc557613d256064613d17601a548861408690919063ffffffff16565b61410090919063ffffffff16565b9050601a54601c5482613d389190614f29565b613d429190614f9a565b601f6000828254613d539190615181565b92505081905550601a54601d5482613d6b9190614f29565b613d759190614f9a565b60206000828254613d869190615181565b92505081905550601a54601b5482613d9e9190614f29565b613da89190614f9a565b601e6000828254613db99190615181565b92505081905550613eea565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e2057506000601654115b15613ee957613e4d6064613e3f6016548861408690919063ffffffff16565b61410090919063ffffffff16565b905060165460185482613e609190614f29565b613e6a9190614f9a565b601f6000828254613e7b9190615181565b9250508190555060165460195482613e939190614f29565b613e9d9190614f9a565b60206000828254613eae9190615181565b9250508190555060165460175482613ec69190614f29565b613ed09190614f9a565b601e6000828254613ee19190615181565b925050819055505b5b6000811115613eff57613efe87308361414a565b5b8085613f0b9190615b37565b94505b613f1987878761414a565b505050505b505050565b6000838311158290613f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f629190614aa3565b60405180910390fd5b5060008385613f7a9190615b37565b9050809150509392505050565b6000808284613f969190615181565b905083811015613fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fd290615bb7565b60405180910390fd5b8091505092915050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080830361409857600090506140fa565b600082846140a69190614f29565b90508284826140b59190614f9a565b146140f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ec90615c49565b60405180910390fd5b809150505b92915050565b600061414283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036141b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b09061573f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161421f906157d1565b60405180910390fd5b614233838383614937565b61429e81604051806060016040528060268152602001615ea3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614331816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f8790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143d091906149f8565b60405180910390a3505050565b6000600267ffffffffffffffff8111156143fa576143f9615c69565b5b6040519080825280602002602001820160405280156144285781602001602082028036833780820191505090505b50905030816000815181106144405761443f615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145099190615cdc565b8160018151811061451d5761451c615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614582307f000000000000000000000000000000000000000000000000000000000000000085612da6565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016145e4959493929190615e02565b600060405180830381600087803b1580156145fe57600080fd5b505af1158015614612573d6000803e3d6000fd5b50505050505050565b60008060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061466a82306143dd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516146b090615e8d565b60006040518083038185875af1925050503d80600081146146ed576040519150601f19603f3d011682016040523d82523d6000602084013e6146f2565b606091505b5050809150505050565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016147609190614c9d565b602060405180830381865afa15801561477d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a1919061557c565b905060006147ce6127106147c0600b548561408690919063ffffffff16565b61410090919063ffffffff16565b90506000811115614819576148187f000000000000000000000000000000000000000000000000000000000000000073179471d3bb23df90b034a7063907fbabf42d54d38361414a565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561488657600080fd5b505af115801561489a573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808311829061491b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149129190614aa3565b60405180910390fd5b506000838561492a9190614f9a565b9050809150509392505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061496c82614941565b9050919050565b61497c81614961565b811461498757600080fd5b50565b60008135905061499981614973565b92915050565b600080604083850312156149b6576149b561493c565b5b60006149c48582860161498a565b92505060206149d58582860161498a565b9150509250929050565b6000819050919050565b6149f2816149df565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a4d578082015181840152602081019050614a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a7582614a13565b614a7f8185614a1e565b9350614a8f818560208601614a2f565b614a9881614a59565b840191505092915050565b60006020820190508181036000830152614abd8184614a6a565b905092915050565b614ace816149df565b8114614ad957600080fd5b50565b600081359050614aeb81614ac5565b92915050565b60008060408385031215614b0857614b0761493c565b5b6000614b168582860161498a565b9250506020614b2785828601614adc565b9150509250929050565b60008115159050919050565b614b4681614b31565b82525050565b6000602082019050614b616000830184614b3d565b92915050565b600060208284031215614b7d57614b7c61493c565b5b6000614b8b8482850161498a565b91505092915050565b6000819050919050565b6000614bb9614bb4614baf84614941565b614b94565b614941565b9050919050565b6000614bcb82614b9e565b9050919050565b6000614bdd82614bc0565b9050919050565b614bed81614bd2565b82525050565b6000602082019050614c086000830184614be4565b92915050565b600060208284031215614c2457614c2361493c565b5b6000614c3284828501614adc565b91505092915050565b600080600060608486031215614c5457614c5361493c565b5b6000614c628682870161498a565b9350506020614c738682870161498a565b9250506040614c8486828701614adc565b9150509250925092565b614c9781614961565b82525050565b6000602082019050614cb26000830184614c8e565b92915050565b614cc181614b31565b8114614ccc57600080fd5b50565b600081359050614cde81614cb8565b92915050565b60008060408385031215614cfb57614cfa61493c565b5b6000614d098582860161498a565b9250506020614d1a85828601614ccf565b9150509250929050565b600060ff82169050919050565b614d3a81614d24565b82525050565b6000602082019050614d556000830184614d31565b92915050565b600080600060608486031215614d7457614d7361493c565b5b6000614d8286828701614adc565b9350506020614d9386828701614adc565b9250506040614da486828701614ccf565b9150509250925092565b600080600060608486031215614dc757614dc661493c565b5b6000614dd586828701614adc565b9350506020614de686828701614adc565b9250506040614df786828701614adc565b9150509250925092565b600060208284031215614e1757614e1661493c565b5b6000614e2584828501614ccf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7557607f821691505b602082108103614e8857614e87614e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ec4602083614a1e565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f34826149df565b9150614f3f836149df565b9250828202614f4d816149df565b91508282048414831517614f6457614f63614efa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa5826149df565b9150614fb0836149df565b925082614fc057614fbf614f6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615027602f83614a1e565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150b9603383614a1e565b91506150c48261505d565b604082019050919050565b600060208201905081810360008301526150e8816150ac565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061514b603083614a1e565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b600061518c826149df565b9150615197836149df565b92508282019050808211156151af576151ae614efa565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006151eb601d83614a1e565b91506151f6826151b5565b602082019050919050565b6000602082019050818103600083015261521a816151de565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061527d603983614a1e565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061530f602483614a1e565b915061531a826152b3565b604082019050919050565b6000602082019050818103600083015261533e81615302565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006153a1603583614a1e565b91506153ac82615345565b604082019050919050565b600060208201905081810360008301526153d081615394565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615433603483614a1e565b915061543e826153d7565b604082019050919050565b6000602082019050818103600083015261546281615426565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154c5602683614a1e565b91506154d082615469565b604082019050919050565b600060208201905081810360008301526154f4816154b8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000615531602083614a1e565b915061553c826154fb565b602082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b60008151905061557681614ac5565b92915050565b6000602082840312156155925761559161493c565b5b60006155a084828501615567565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615605602483614a1e565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615697602283614a1e565b91506156a28261563b565b604082019050919050565b600060208201905081810360008301526156c68161568a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615729602583614a1e565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157bb602383614a1e565b91506157c68261575f565b604082019050919050565b600060208201905081810360008301526157ea816157ae565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061584d603183614a1e565b9150615858826157f1565b604082019050919050565b6000602082019050818103600083015261587c81615840565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158b9601683614a1e565b91506158c482615883565b602082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615971604983614a1e565b915061597c826158ef565b606082019050919050565b600060208201905081810360008301526159a081615964565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a03603583614a1e565b9150615a0e826159a7565b604082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a6f601383614a1e565b9150615a7a82615a39565b602082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b01603683614a1e565b9150615b0c82615aa5565b604082019050919050565b60006020820190508181036000830152615b3081615af4565b9050919050565b6000615b42826149df565b9150615b4d836149df565b9250828203905081811115615b6557615b64614efa565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615ba1601b83614a1e565b9150615bac82615b6b565b602082019050919050565b60006020820190508181036000830152615bd081615b94565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c33602183614a1e565b9150615c3e82615bd7565b604082019050919050565b60006020820190508181036000830152615c6281615c26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615cd681614973565b92915050565b600060208284031215615cf257615cf161493c565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b614b94565b6149df565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614961565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e1760008301886149e9565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614c8e565b615e5260808301846149e9565b9695505050505050565b600081905092915050565b50565b6000615e77600083615e5c565b9150615e8282615e67565b600082019050919050565b6000615e9882615e6a565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b2d448a0906755b16f8b93aa03403bde9e5af96063ae9fc1b9d623726c1cfaf64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638095d564116101fd578063b62496f511610118578063d85ba063116100ab578063f11a24d31161007a578063f11a24d314610e9c578063f2fde38b14610ec7578063f637434214610ef0578063f8b45b0514610f1b578063fe72b27a14610f46576103d9565b8063d85ba06314610dde578063dd62ed3e14610e09578063e2f4560514610e46578063e884f26014610e71576103d9565b8063c18bc195116100e7578063c18bc19514610d22578063c876d0b914610d4b578063c8c8ebe414610d76578063d257b34f14610da1576103d9565b8063b62496f514610c68578063bbc0c74214610ca5578063c024666814610cd0578063c17b5b8c14610cf9576103d9565b80639c3b4fdc11610190578063a457c2d71161015f578063a457c2d714610b9a578063a4c82a0014610bd7578063a9059cbb14610c02578063aacebbe314610c3f576103d9565b80639c3b4fdc14610aee5780639ec22c0e14610b195780639fccce3214610b44578063a0d82dc514610b6f576103d9565b806392136913116101cc5780639213691314610a46578063924de9b714610a7157806395d89b4114610a9a5780639a7a23d614610ac5576103d9565b80638095d564146109b05780638a8c523c146109d95780638da5cb5b146109f05780638ea5220f14610a1b576103d9565b80632e82f1a0116102ed5780636ddd171311610280578063730c18881161024f578063730c188814610908578063751039fc146109315780637571336a1461095c5780637bce5a0414610985576103d9565b80636ddd17131461084c5780636ebcf6071461087757806370a08231146108b4578063715018a6146108f1576103d9565b806349bd5a5e116102bc57806349bd5a5e1461078e5780634a62bb65146107b95780634fbee193146107e45780636a486a8e14610821576103d9565b80632e82f1a0146106d0578063313ce567146106fb57806339509351146107265780633ad10ef614610763576103d9565b8063199ffc721161036557806323b872dd1161033457806323b872dd146106145780632c3e486c146106515780632d3e474a1461067c5780632d5a5d34146106a7576103d9565b8063199ffc721461056a5780631a8145bb146105955780631f3fed8f146105c0578063203e727e146105eb576103d9565b80631694505e116103a15780631694505e146104c057806318160ddd146104eb5780631816467f14610516578063184c16c51461053f576103d9565b8063024c2ddd146103de57806306fdde031461041b578063095ea7b31461044657806310d5de5314610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506104056004803603810190610400919061499f565b610f83565b60405161041291906149f8565b60405180910390f35b34801561042757600080fd5b50610430610fa8565b60405161043d9190614aa3565b60405180910390f35b34801561045257600080fd5b5061046d60048036038101906104689190614af1565b61103a565b60405161047a9190614b4c565b60405180910390f35b34801561048f57600080fd5b506104aa60048036038101906104a59190614b67565b611058565b6040516104b79190614b4c565b60405180910390f35b3480156104cc57600080fd5b506104d5611078565b6040516104e29190614bf3565b60405180910390f35b3480156104f757600080fd5b5061050061109c565b60405161050d91906149f8565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614b67565b6110a6565b005b34801561054b57600080fd5b506105546111fd565b60405161056191906149f8565b60405180910390f35b34801561057657600080fd5b5061057f611203565b60405161058c91906149f8565b60405180910390f35b3480156105a157600080fd5b506105aa611209565b6040516105b791906149f8565b60405180910390f35b3480156105cc57600080fd5b506105d561120f565b6040516105e291906149f8565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190614c0e565b611215565b005b34801561062057600080fd5b5061063b60048036038101906106369190614c3b565b61133f565b6040516106489190614b4c565b60405180910390f35b34801561065d57600080fd5b50610666611418565b60405161067391906149f8565b60405180910390f35b34801561068857600080fd5b5061069161141e565b60405161069e9190614c9d565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190614ce4565b611444565b005b3480156106dc57600080fd5b506106e5611536565b6040516106f29190614b4c565b60405180910390f35b34801561070757600080fd5b50610710611549565b60405161071d9190614d40565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614af1565b611552565b60405161075a9190614b4c565b60405180910390f35b34801561076f57600080fd5b50610778611605565b6040516107859190614c9d565b60405180910390f35b34801561079a57600080fd5b506107a361161d565b6040516107b09190614c9d565b60405180910390f35b3480156107c557600080fd5b506107ce611641565b6040516107db9190614b4c565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614b67565b611654565b6040516108189190614b4c565b60405180910390f35b34801561082d57600080fd5b506108366116aa565b60405161084391906149f8565b60405180910390f35b34801561085857600080fd5b506108616116b0565b60405161086e9190614b4c565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614b67565b6116c3565b6040516108ab91906149f8565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d69190614b67565b6116db565b6040516108e891906149f8565b60405180910390f35b3480156108fd57600080fd5b50610906611723565b005b34801561091457600080fd5b5061092f600480360381019061092a9190614d5b565b61187b565b005b34801561093d57600080fd5b506109466119d6565b6040516109539190614b4c565b60405180910390f35b34801561096857600080fd5b50610983600480360381019061097e9190614ce4565b611a91565b005b34801561099157600080fd5b5061099a611b83565b6040516109a791906149f8565b60405180910390f35b3480156109bc57600080fd5b506109d760048036038101906109d29190614dae565b611b89565b005b3480156109e557600080fd5b506109ee611ca3565b005b3480156109fc57600080fd5b50610a05611d80565b604051610a129190614c9d565b60405180910390f35b348015610a2757600080fd5b50610a30611daa565b604051610a3d9190614c9d565b60405180910390f35b348015610a5257600080fd5b50610a5b611dd0565b604051610a6891906149f8565b60405180910390f35b348015610a7d57600080fd5b50610a986004803603810190610a939190614e01565b611dd6565b005b348015610aa657600080fd5b50610aaf611e8a565b604051610abc9190614aa3565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614ce4565b611f1c565b005b348015610afa57600080fd5b50610b0361204f565b604051610b1091906149f8565b60405180910390f35b348015610b2557600080fd5b50610b2e612055565b604051610b3b91906149f8565b60405180910390f35b348015610b5057600080fd5b50610b5961205b565b604051610b6691906149f8565b60405180910390f35b348015610b7b57600080fd5b50610b84612061565b604051610b9191906149f8565b60405180910390f35b348015610ba657600080fd5b50610bc16004803603810190610bbc9190614af1565b612067565b604051610bce9190614b4c565b60405180910390f35b348015610be357600080fd5b50610bec612134565b604051610bf991906149f8565b60405180910390f35b348015610c0e57600080fd5b50610c296004803603810190610c249190614af1565b61213a565b604051610c369190614b4c565b60405180910390f35b348015610c4b57600080fd5b50610c666004803603810190610c619190614b67565b612158565b005b348015610c7457600080fd5b50610c8f6004803603810190610c8a9190614b67565b6122af565b604051610c9c9190614b4c565b60405180910390f35b348015610cb157600080fd5b50610cba6122cf565b604051610cc79190614b4c565b60405180910390f35b348015610cdc57600080fd5b50610cf76004803603810190610cf29190614ce4565b6122e2565b005b348015610d0557600080fd5b50610d206004803603810190610d1b9190614dae565b612422565b005b348015610d2e57600080fd5b50610d496004803603810190610d449190614c0e565b61253c565b005b348015610d5757600080fd5b50610d60612666565b604051610d6d9190614b4c565b60405180910390f35b348015610d8257600080fd5b50610d8b612679565b604051610d9891906149f8565b60405180910390f35b348015610dad57600080fd5b50610dc86004803603810190610dc39190614c0e565b61267f565b604051610dd59190614b4c565b60405180910390f35b348015610dea57600080fd5b50610df36127ef565b604051610e0091906149f8565b60405180910390f35b348015610e1557600080fd5b50610e306004803603810190610e2b919061499f565b6127f5565b604051610e3d91906149f8565b60405180910390f35b348015610e5257600080fd5b50610e5b61287c565b604051610e6891906149f8565b60405180910390f35b348015610e7d57600080fd5b50610e86612882565b604051610e939190614b4c565b60405180910390f35b348015610ea857600080fd5b50610eb161293d565b604051610ebe91906149f8565b60405180910390f35b348015610ed357600080fd5b50610eee6004803603810190610ee99190614b67565b612943565b005b348015610efc57600080fd5b50610f05612b09565b604051610f1291906149f8565b60405180910390f35b348015610f2757600080fd5b50610f30612b0f565b604051610f3d91906149f8565b60405180910390f35b348015610f5257600080fd5b50610f6d6004803603810190610f689190614c0e565b612b15565b604051610f7a9190614b4c565b60405180910390f35b6001602052816000526040600020602052806000526040600020600091509150505481565b606060038054610fb790614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe390614e5d565b80156110305780601f1061100557610100808354040283529160200191611030565b820191906000526020600020905b81548152906001019060200180831161101357829003601f168201915b5050505050905090565b600061104e611047612d9e565b8484612da6565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6110ae612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113490614eda565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601f5481565b601e5481565b61121d612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a390614eda565b60405180910390fd5b670de0b6b3a76400006103e860016112c261109c565b6112cc9190614f29565b6112d69190614f9a565b6112e09190614f9a565b811015611322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113199061503d565b60405180910390fd5b670de0b6b3a7640000816113369190614f29565b60088190555050565b600061134c848484612f6f565b61140d84611358612d9e565b61140885604051806060016040528060288152602001615ec960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113be612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b612da6565b600190509392505050565b600d5481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144c612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290614eda565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b60006115fb61155f612d9e565b846115f68560016000611570612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f8790919063ffffffff16565b612da6565b6001905092915050565b73179471d3bb23df90b034a7063907fbabf42d54d381565b7f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a81565b601160009054906101000a900460ff1681565b6000602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b601160029054906101000a900460ff1681565b60006020528060005260406000206000915090505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61172b612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b190614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611883612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990614eda565b60405180910390fd5b610258831015611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e906150cf565b60405180910390fd5b6103e8821115801561196a575060008210155b6119a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a090615161565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006119e0612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614eda565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611a99612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614eda565b60405180910390fd5b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611b91612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1790614eda565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611c489190615181565b611c529190615181565b60168190555060326016541115611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590615201565b60405180910390fd5b505050565b611cab612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3190614eda565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602181905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611dde612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6490614eda565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611e9990614e5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec590614e5d565b8015611f125780601f10611ee757610100808354040283529160200191611f12565b820191906000526020600020905b815481529060010190602001808311611ef557829003601f168201915b5050505050905090565b611f24612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faa90614eda565b60405180910390fd5b7f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890615293565b60405180910390fd5b61204b8282613fe5565b5050565b60195481565b60105481565b60205481565b601d5481565b600061212a612074612d9e565b8461212585604051806060016040528060258152602001615ef1602591396001600061209e612d9e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b612da6565b6001905092915050565b600e5481565b600061214e612147612d9e565b8484612f6f565b6001905092915050565b612160612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e690614eda565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60246020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b6122ea612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237090614eda565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124169190614b4c565b60405180910390a25050565b61242a612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614eda565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b546124e19190615181565b6124eb9190615181565b601a819055506032601a541115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90615201565b60405180910390fd5b505050565b612544612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca90614eda565b60405180910390fd5b670de0b6b3a76400006103e860056125e961109c565b6125f39190614f29565b6125fd9190614f9a565b6126079190614f9a565b811015612649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264090615325565b60405180910390fd5b670de0b6b3a76400008161265d9190614f29565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b6000612689612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90614eda565b60405180910390fd5b620186a0600161272661109c565b6127309190614f29565b61273a9190614f9a565b82101561277c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612773906153b7565b60405180910390fd5b6103e8600561278961109c565b6127939190614f29565b61279d9190614f9a565b8211156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690615449565b60405180910390fd5b8160098190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061288c612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291290614eda565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b61294b612d9e565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614eda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a40906154db565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b6000600f54601054612b279190615181565b4211612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90615547565b60405180910390fd5b602260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bbe57600080fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a6040518263ffffffff1660e01b8152600401612c209190614c9d565b602060405180830381865afa158015612c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c61919061557c565b90506000612c8c612710612c7e868561408690919063ffffffff16565b61410090919063ffffffff16565b90506000811115612cc357612cc27f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a308361414a565b5b60007f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d3057600080fd5b505af1158015612d44573d6000803e3d6000fd5b50505050612d668273179471d3bb23df90b034a7063907fbabf42d54d36143dd565b7f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0c9061561b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7b906156ad565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f6291906149f8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd59061573f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361304d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613044906157d1565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130f15750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312790615863565b60405180910390fd5b60008103613149576131448383600061414a565b613f1e565b601160009054906101000a900460ff161561383457613166611d80565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131d457506131a4611d80565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561320d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613247575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132605750600560149054906101000a900460ff16155b1561383357601160019054906101000a900460ff1661335a57602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061331a5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613350906158cf565b60405180910390fd5b5b601560009054906101000a900460ff161561352257613377611d80565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156133fe57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561345657507f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156135215743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106134dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d390615987565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c55750602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561366c5760085481111561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690615a19565b60405180910390fd5b600a5461361b836116db565b826136269190615181565b1115613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90615a85565b60405180910390fd5b613832565b602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561370f5750602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561378657600854811115613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375090615b17565b60405180910390fd5b61377673179471d3bb23df90b034a7063907fbabf42d54d36116db565b811161378157600080fd5b613831565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661383057600a546137e3836116db565b826137ee9190615181565b111561382f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382690615a85565b60405180910390fd5b5b5b5b5b5b60026021546138439190615181565b431115801561389e57507f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156138ea5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613948576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000613953306116db565b9050600060095482101590508080156139785750601160029054906101000a900460ff165b80156139915750600560149054906101000a900460ff16155b80156139e75750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a3d5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a935750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613ad7576001600560146101000a81548160ff021916908315150217905550613abb61461b565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff16158015613b3d5750602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015613b555750600c60009054906101000a900460ff165b8015613b705750600d54600e54613b6c9190615181565b4210155b8015613bc65750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613bd557613bd36146fc565b505b6000600560149054906101000a900460ff16159050602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c8b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c9557600090505b60008115613f0e57602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613cf857506000601a54115b15613dc557613d256064613d17601a548861408690919063ffffffff16565b61410090919063ffffffff16565b9050601a54601c5482613d389190614f29565b613d429190614f9a565b601f6000828254613d539190615181565b92505081905550601a54601d5482613d6b9190614f29565b613d759190614f9a565b60206000828254613d869190615181565b92505081905550601a54601b5482613d9e9190614f29565b613da89190614f9a565b601e6000828254613db99190615181565b92505081905550613eea565b602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613e2057506000601654115b15613ee957613e4d6064613e3f6016548861408690919063ffffffff16565b61410090919063ffffffff16565b905060165460185482613e609190614f29565b613e6a9190614f9a565b601f6000828254613e7b9190615181565b9250508190555060165460195482613e939190614f29565b613e9d9190614f9a565b60206000828254613eae9190615181565b9250508190555060165460175482613ec69190614f29565b613ed09190614f9a565b601e6000828254613ee19190615181565b925050819055505b5b6000811115613eff57613efe87308361414a565b5b8085613f0b9190615b37565b94505b613f1987878761414a565b505050505b505050565b6000838311158290613f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f629190614aa3565b60405180910390fd5b5060008385613f7a9190615b37565b9050809150509392505050565b6000808284613f969190615181565b905083811015613fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fd290615bb7565b60405180910390fd5b8091505092915050565b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080830361409857600090506140fa565b600082846140a69190614f29565b90508284826140b59190614f9a565b146140f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140ec90615c49565b60405180910390fd5b809150505b92915050565b600061414283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148d4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036141b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b09061573f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161421f906157d1565b60405180910390fd5b614233838383614937565b61429e81604051806060016040528060268152602001615ea3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f239092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614331816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f8790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143d091906149f8565b60405180910390a3505050565b6000600267ffffffffffffffff8111156143fa576143f9615c69565b5b6040519080825280602002602001820160405280156144285781602001602082028036833780820191505090505b50905030816000815181106144405761443f615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145099190615cdc565b8160018151811061451d5761451c615c98565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614582307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85612da6565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016145e4959493929190615e02565b600060405180830381600087803b1580156145fe57600080fd5b505af1158015614612573d6000803e3d6000fd5b50505050505050565b60008060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061466a82306143dd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516146b090615e8d565b60006040518083038185875af1925050503d80600081146146ed576040519150601f19603f3d011682016040523d82523d6000602084013e6146f2565b606091505b5050809150505050565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a6040518263ffffffff1660e01b81526004016147609190614c9d565b602060405180830381865afa15801561477d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147a1919061557c565b905060006147ce6127106147c0600b548561408690919063ffffffff16565b61410090919063ffffffff16565b90506000811115614819576148187f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a73179471d3bb23df90b034a7063907fbabf42d54d38361414a565b5b60007f0000000000000000000000005ead8434aa76da7e45adffabfe3f5e5e26839e7a90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561488657600080fd5b505af115801561489a573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808311829061491b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016149129190614aa3565b60405180910390fd5b506000838561492a9190614f9a565b9050809150509392505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061496c82614941565b9050919050565b61497c81614961565b811461498757600080fd5b50565b60008135905061499981614973565b92915050565b600080604083850312156149b6576149b561493c565b5b60006149c48582860161498a565b92505060206149d58582860161498a565b9150509250929050565b6000819050919050565b6149f2816149df565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614a4d578082015181840152602081019050614a32565b60008484015250505050565b6000601f19601f8301169050919050565b6000614a7582614a13565b614a7f8185614a1e565b9350614a8f818560208601614a2f565b614a9881614a59565b840191505092915050565b60006020820190508181036000830152614abd8184614a6a565b905092915050565b614ace816149df565b8114614ad957600080fd5b50565b600081359050614aeb81614ac5565b92915050565b60008060408385031215614b0857614b0761493c565b5b6000614b168582860161498a565b9250506020614b2785828601614adc565b9150509250929050565b60008115159050919050565b614b4681614b31565b82525050565b6000602082019050614b616000830184614b3d565b92915050565b600060208284031215614b7d57614b7c61493c565b5b6000614b8b8482850161498a565b91505092915050565b6000819050919050565b6000614bb9614bb4614baf84614941565b614b94565b614941565b9050919050565b6000614bcb82614b9e565b9050919050565b6000614bdd82614bc0565b9050919050565b614bed81614bd2565b82525050565b6000602082019050614c086000830184614be4565b92915050565b600060208284031215614c2457614c2361493c565b5b6000614c3284828501614adc565b91505092915050565b600080600060608486031215614c5457614c5361493c565b5b6000614c628682870161498a565b9350506020614c738682870161498a565b9250506040614c8486828701614adc565b9150509250925092565b614c9781614961565b82525050565b6000602082019050614cb26000830184614c8e565b92915050565b614cc181614b31565b8114614ccc57600080fd5b50565b600081359050614cde81614cb8565b92915050565b60008060408385031215614cfb57614cfa61493c565b5b6000614d098582860161498a565b9250506020614d1a85828601614ccf565b9150509250929050565b600060ff82169050919050565b614d3a81614d24565b82525050565b6000602082019050614d556000830184614d31565b92915050565b600080600060608486031215614d7457614d7361493c565b5b6000614d8286828701614adc565b9350506020614d9386828701614adc565b9250506040614da486828701614ccf565b9150509250925092565b600080600060608486031215614dc757614dc661493c565b5b6000614dd586828701614adc565b9350506020614de686828701614adc565b9250506040614df786828701614adc565b9150509250925092565b600060208284031215614e1757614e1661493c565b5b6000614e2584828501614ccf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614e7557607f821691505b602082108103614e8857614e87614e2e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ec4602083614a1e565b9150614ecf82614e8e565b602082019050919050565b60006020820190508181036000830152614ef381614eb7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614f34826149df565b9150614f3f836149df565b9250828202614f4d816149df565b91508282048414831517614f6457614f63614efa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fa5826149df565b9150614fb0836149df565b925082614fc057614fbf614f6b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615027602f83614a1e565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150b9603383614a1e565b91506150c48261505d565b604082019050919050565b600060208201905081810360008301526150e8816150ac565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061514b603083614a1e565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b600061518c826149df565b9150615197836149df565b92508282019050808211156151af576151ae614efa565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b60006151eb601d83614a1e565b91506151f6826151b5565b602082019050919050565b6000602082019050818103600083015261521a816151de565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061527d603983614a1e565b915061528882615221565b604082019050919050565b600060208201905081810360008301526152ac81615270565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061530f602483614a1e565b915061531a826152b3565b604082019050919050565b6000602082019050818103600083015261533e81615302565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006153a1603583614a1e565b91506153ac82615345565b604082019050919050565b600060208201905081810360008301526153d081615394565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615433603483614a1e565b915061543e826153d7565b604082019050919050565b6000602082019050818103600083015261546281615426565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006154c5602683614a1e565b91506154d082615469565b604082019050919050565b600060208201905081810360008301526154f4816154b8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000615531602083614a1e565b915061553c826154fb565b602082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b60008151905061557681614ac5565b92915050565b6000602082840312156155925761559161493c565b5b60006155a084828501615567565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615605602483614a1e565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615697602283614a1e565b91506156a28261563b565b604082019050919050565b600060208201905081810360008301526156c68161568a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615729602583614a1e565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157bb602383614a1e565b91506157c68261575f565b604082019050919050565b600060208201905081810360008301526157ea816157ae565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061584d603183614a1e565b9150615858826157f1565b604082019050919050565b6000602082019050818103600083015261587c81615840565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006158b9601683614a1e565b91506158c482615883565b602082019050919050565b600060208201905081810360008301526158e8816158ac565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615971604983614a1e565b915061597c826158ef565b606082019050919050565b600060208201905081810360008301526159a081615964565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a03603583614a1e565b9150615a0e826159a7565b604082019050919050565b60006020820190508181036000830152615a32816159f6565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615a6f601383614a1e565b9150615a7a82615a39565b602082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b01603683614a1e565b9150615b0c82615aa5565b604082019050919050565b60006020820190508181036000830152615b3081615af4565b9050919050565b6000615b42826149df565b9150615b4d836149df565b9250828203905081811115615b6557615b64614efa565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615ba1601b83614a1e565b9150615bac82615b6b565b602082019050919050565b60006020820190508181036000830152615bd081615b94565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c33602183614a1e565b9150615c3e82615bd7565b604082019050919050565b60006020820190508181036000830152615c6281615c26565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615cd681614973565b92915050565b600060208284031215615cf257615cf161493c565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b614b94565b6149df565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614961565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e1760008301886149e9565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614c8e565b615e5260808301846149e9565b9695505050505050565b600081905092915050565b50565b6000615e77600083615e5c565b9150615e8282615e67565b600082019050919050565b6000615e9882615e6a565b915081905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204b2d448a0906755b16f8b93aa03403bde9e5af96063ae9fc1b9d623726c1cfaf64736f6c63430008130033

Deployed Bytecode Sourcemap

29476:17543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6911:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7583:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31378:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29552:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8706:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38303:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30151:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29965:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31092:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31052;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35728:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10409:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30060:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29784:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37502:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30021:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8547:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11174:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29655:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29610:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30249:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38471:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30906:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30329:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6857:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8878:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22085:148;;;;;;;;;;;;;:::i;:::-;;44776:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34945:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36195:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30798:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36546:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34701:191;;;;;;;;;;;;;:::i;:::-;;21441:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29815:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30941:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36436:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7803:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37646:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30872:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30204:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31132:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31017:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11896:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30112:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9219:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38098:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31601:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30289:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37311:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36924:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35971:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30715:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29849:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35333:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30764:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9458:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35127:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30835:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22389:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30979:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29931:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45235:1001;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6911:66;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7583:100::-;7637:13;7670:5;7663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7583:100;:::o;9757:169::-;9840:4;9857:39;9866:12;:10;:12::i;:::-;9880:7;9889:6;9857:8;:39::i;:::-;9914:4;9907:11;;9757:169;;;;:::o;31378:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29552:51::-;;;:::o;8706:108::-;8767:7;8794:12;;8787:19;;8706:108;:::o;38303:157::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38410:9:::1;;;;;;;;;;;38382:38;;38399:9;38382:38;;;;;;;;;;;;38443:9;38431;;:21;;;;;;;;;;;;;;;;;;38303:157:::0;:::o;30151:46::-;;;;:::o;29965:36::-;;;;:::o;31092:33::-;;;;:::o;31052:::-;;;;:::o;35728:234::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35847:4:::1;35841;35837:1;35821:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35820:31;;;;:::i;:::-;35810:6;:41;;35802:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35947:6;35937;:17;;;;:::i;:::-;35914:20;:40;;;;35728:234:::0;:::o;10409:355::-;10549:4;10566:36;10576:6;10584:9;10595:6;10566:9;:36::i;:::-;10613:121;10622:6;10630:12;:10;:12::i;:::-;10644:89;10682:6;10644:89;;;;;;;;;;;;;;;;;:11;:19;10656:6;10644:19;;;;;;;;;;;;;;;:33;10664:12;:10;:12::i;:::-;10644:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10613:8;:121::i;:::-;10752:4;10745:11;;10409:355;;;;;:::o;30060:45::-;;;;:::o;29784:24::-;;;;;;;;;;;;;:::o;37502:135::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37616:13:::1;37594:10;:19;37605:7;37594:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37502:135:::0;;:::o;30021:32::-;;;;;;;;;;;;;:::o;8547:93::-;8605:5;8630:2;8623:9;;8547:93;:::o;11174:218::-;11262:4;11279:83;11288:12;:10;:12::i;:::-;11302:7;11311:50;11350:10;11311:11;:25;11323:12;:10;:12::i;:::-;11311:25;;;;;;;;;;;;;;;:34;11337:7;11311:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11279:8;:83::i;:::-;11380:4;11373:11;;11174:218;;;;:::o;29655:88::-;29700:42;29655:88;:::o;29610:38::-;;;:::o;30249:33::-;;;;;;;;;;;;;:::o;38471:125::-;38536:4;38560:19;:28;38580:7;38560:28;;;;;;;;;;;;;;;;;;;;;;;;;38553:35;;38471:125;;;:::o;30906:28::-;;;;:::o;30329:31::-;;;;;;;;;;;;;:::o;6857:44::-;;;;;;;;;;;;;;;;;:::o;8878:127::-;8952:7;8979:9;:18;8989:7;8979:18;;;;;;;;;;;;;;;;8972:25;;8878:127;;;:::o;22085:148::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22192:1:::1;22155:40;;22176:6;;;;;;;;;;;22155:40;;;;;;;;;;;;22223:1;22206:6;;:19;;;;;;;;;;;;;;;;;;22085:148::o:0;44776:447::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44930:3:::1;44907:19;:26;;44899:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45020:4;45008:8;:16;;:33;;;;;45040:1;45028:8;:13;;45008:33;45000:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;45123:19;45105:15;:37;;;;45172:8;45153:16;:27;;;;45207:8;45191:13;;:24;;;;;;;;;;;;;;;;;;44776:447:::0;;;:::o;34945:120::-;34997:4;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35030:5:::1;35013:14;;:22;;;;;;;;;;;;;;;;;;35053:4;35046:11;;34945:120:::0;:::o;36195:144::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36327:4:::1;36285:31;:39;36317:6;36285:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36195:144:::0;;:::o;30798:30::-;;;;:::o;36546:369::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36680:13:::1;36662:15;:31;;;;36722:13;36704:15;:31;;;;36758:7;36746:9;:19;;;;36827:9;;36809:15;;36791;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36776:12;:60;;;;36871:2;36855:12;;:18;;36847:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36546:369:::0;;;:::o;34701:191::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34772:4:::1;34756:13;;:20;;;;;;;;;;;;;;;;;;34801:4;34787:11;;:18;;;;;;;;;;;;;;;;;;34833:15;34816:14;:32;;;;34872:12;34859:10;:25;;;;34701:191::o:0;21441:79::-;21479:7;21506:6;;;;;;;;;;;21499:13;;21441:79;:::o;29815:24::-;;;;;;;;;;;;;:::o;30941:31::-;;;;:::o;36436:101::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36522:7:::1;36508:11;;:21;;;;;;;;;;;;;;;;;;36436:101:::0;:::o;7803:104::-;7859:13;7892:7;7885:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7803:104;:::o;37646:245::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37753:13:::1;37745:21;;:4;:21;;::::0;37737:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37842:41;37871:4;37877:5;37842:28;:41::i;:::-;37646:245:::0;;:::o;30872:24::-;;;;:::o;30204:35::-;;;;:::o;31132:27::-;;;;:::o;31017:25::-;;;;:::o;11896:269::-;11989:4;12006:129;12015:12;:10;:12::i;:::-;12029:7;12038:96;12077:15;12038:96;;;;;;;;;;;;;;;;;:11;:25;12050:12;:10;:12::i;:::-;12038:25;;;;;;;;;;;;;;;:34;12064:7;12038:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12006:8;:129::i;:::-;12153:4;12146:11;;11896:269;;;;:::o;30112:29::-;;;;:::o;9219:175::-;9305:4;9322:42;9332:12;:10;:12::i;:::-;9346:9;9357:6;9322:9;:42::i;:::-;9382:4;9375:11;;9219:175;;;;:::o;38098:196::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38235:9:::1;;;;;;;;;;;38192:53;;38215:18;38192:53;;;;;;;;;;;;38268:18;38256:9;;:30;;;;;;;;;;;;;;;;;;38098:196:::0;:::o;31601:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30289:33::-;;;;;;;;;;;;;:::o;37311:182::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37427:8:::1;37396:19;:28;37416:7;37396:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37467:7;37451:34;;;37476:8;37451:34;;;;;;:::i;:::-;;;;;;;;37311:182:::0;;:::o;36924:378::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37060:13:::1;37041:16;:32;;;;37103:13;37084:16;:32;;;;37140:7;37127:10;:20;;;;37212:10;;37193:16;;37174;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37158:13;:64;;;;37258:2;37241:13;;:19;;37233:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36924:378:::0;;;:::o;35971:215::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36093:4:::1;36087;36083:1;36067:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36066:31;;;;:::i;:::-;36056:6;:41;;36048:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36171:6;36161;:17;;;;:::i;:::-;36149:9;:29;;;;35971:215:::0;:::o;30715:39::-;;;;;;;;;;;;;:::o;29849:35::-;;;;:::o;35333:386::-;35414:4;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35471:6:::1;35467:1;35451:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35438:9;:39;;35430:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35587:4;35583:1;35567:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35554:9;:37;;35546:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35680:9;35659:18;:30;;;;35707:4;35700:11;;35333:386:::0;;;:::o;30764:27::-;;;;:::o;9458:151::-;9547:7;9574:11;:18;9586:5;9574:18;;;;;;;;;;;;;;;:27;9593:7;9574:27;;;;;;;;;;;;;;;;9567:34;;9458:151;;;;:::o;29891:33::-;;;;:::o;35127:134::-;35187:4;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35226:5:::1;35203:20;;:28;;;;;;;;;;;;;;;;;;35249:4;35242:11;;35127:134:::0;:::o;30835:30::-;;;;:::o;22389:244::-;21664:12;:10;:12::i;:::-;21654:22;;:6;;;;;;;;;;;:22;;;21646:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22498:1:::1;22478:22;;:8;:22;;::::0;22470:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22588:8;22559:38;;22580:6;;;;;;;;;;;22559:38;;;;;;;;;;;;22617:8;22608:6;;:17;;;;;;;;;;;;;;;;;;22389:244:::0;:::o;30979:31::-;;;;:::o;29931:24::-;;;;:::o;45235:1001::-;45309:4;45374:19;;45351:20;;:42;;;;:::i;:::-;45333:15;:60;45325:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;45450:19;:31;45470:10;45450:31;;;;;;;;;;;;;;;;;;;;;;;;;45442:40;;;;;;45516:15;45493:20;:38;;;;45587:28;45618:4;:14;;;45633:13;45618:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45587:60;;45698:20;45721:44;45759:5;45721:33;45746:7;45721:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;45698:67;;45886:1;45871:12;:16;45867:107;;;45903:59;45919:13;45942:4;45949:12;45903:15;:59::i;:::-;45867:107;46050:19;46087:13;46050:51;;46112:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46134:42;46151:12;29700:42;46134:16;:42::i;:::-;46192:14;;;;;;;;;;46224:4;46217:11;;;;;45235:1001;;;:::o;190:98::-;243:7;270:10;263:17;;190:98;:::o;15092:381::-;15245:1;15228:19;;:5;:19;;;15220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15326:1;15307:21;;:7;:21;;;15299:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15411:6;15381:11;:18;15393:5;15381:18;;;;;;;;;;;;;;;:27;15400:7;15381:27;;;;;;;;;;;;;;;:36;;;;15449:7;15433:32;;15442:5;15433:32;;;15458:6;15433:32;;;;;;:::i;:::-;;;;;;;;15092:381;;;:::o;38656:4692::-;38804:1;38788:18;;:4;:18;;;38780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38881:1;38867:16;;:2;:16;;;38859:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38943:10;:14;38954:2;38943:14;;;;;;;;;;;;;;;;;;;;;;;;;38942:15;:36;;;;;38962:10;:16;38973:4;38962:16;;;;;;;;;;;;;;;;;;;;;;;;;38961:17;38942:36;38934:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39057:1;39047:6;:11;39044:92;;39075:28;39091:4;39097:2;39101:1;39075:15;:28::i;:::-;39118:7;;39044:92;39152:14;;;;;;;;;;;39149:1877;;;39212:7;:5;:7::i;:::-;39204:15;;:4;:15;;;;:49;;;;;39246:7;:5;:7::i;:::-;39240:13;;:2;:13;;;;39204:49;:86;;;;;39288:1;39274:16;;:2;:16;;;;39204:86;:128;;;;;39325:6;39311:21;;:2;:21;;;;39204:128;:158;;;;;39354:8;;;;;;;;;;;39353:9;39204:158;39182:1833;;;39400:13;;;;;;;;;;;39396:148;;39445:19;:25;39465:4;39445:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39474:19;:23;39494:2;39474:23;;;;;;;;;;;;;;;;;;;;;;;;;39445:52;39437:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39396:148;39703:20;;;;;;;;;;;39699:423;;;39757:7;:5;:7::i;:::-;39751:13;;:2;:13;;;;:47;;;;;39782:15;39768:30;;:2;:30;;;;39751:47;:79;;;;;39816:13;39802:28;;:2;:28;;;;39751:79;39747:356;;;39908:12;39866:28;:39;39895:9;39866:39;;;;;;;;;;;;;;;;:54;39858:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40067:12;40025:28;:39;40054:9;40025:39;;;;;;;;;;;;;;;:54;;;;39747:356;39699:423;40175:25;:31;40201:4;40175:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40211:31;:35;40243:2;40211:35;;;;;;;;;;;;;;;;;;;;;;;;;40210:36;40175:71;40171:829;;;40293:20;;40283:6;:30;;40275:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40432:9;;40415:13;40425:2;40415:9;:13::i;:::-;40406:6;:22;;;;:::i;:::-;:35;;40398:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40171:829;;;40544:25;:29;40570:2;40544:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40578:31;:37;40610:4;40578:37;;;;;;;;;;;;;;;;;;;;;;;;;40577:38;40544:71;40540:460;;;40662:20;;40652:6;:30;;40644:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40785:21;29700:42;40785:9;:21::i;:::-;40776:6;:30;40768:39;;;;;;40540:460;;;40854:31;:35;40886:2;40854:35;;;;;;;;;;;;;;;;;;;;;;;;;40850:150;;40947:9;;40930:13;40940:2;40930:9;:13::i;:::-;40921:6;:22;;;;:::i;:::-;:35;;40913:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40850:150;40540:460;40171:829;39182:1833;39149:1877;41100:1;41087:10;;:14;;;;:::i;:::-;41070:12;:32;;:73;;;;;41130:13;41124:19;;:2;:19;;;;41070:73;:152;;;;;41179:42;41165:57;;:2;:57;;;;41070:152;41066:225;;;41271:4;41254:10;:14;41265:2;41254:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41066:225;41303:28;41334:24;41352:4;41334:9;:24::i;:::-;41303:55;;41372:12;41411:18;;41387:20;:42;;41372:57;;41461:7;:35;;;;;41485:11;;;;;;;;;;;41461:35;:61;;;;;41514:8;;;;;;;;;;;41513:9;41461:61;:110;;;;;41540:25;:31;41566:4;41540:31;;;;;;;;;;;;;;;;;;;;;;;;;41539:32;41461:110;:153;;;;;41589:19;:25;41609:4;41589:25;;;;;;;;;;;;;;;;;;;;;;;;;41588:26;41461:153;:194;;;;;41632:19;:23;41652:2;41632:23;;;;;;;;;;;;;;;;;;;;;;;;;41631:24;41461:194;41443:328;;;41693:4;41682:8;;:15;;;;;;;;;;;;;;;;;;41715:10;:8;:10::i;:::-;41754:5;41743:8;;:16;;;;;;;;;;;;;;;;;;41443:328;41788:8;;;;;;;;;;;41787:9;:42;;;;;41800:25;:29;41826:2;41800:29;;;;;;;;;;;;;;;;;;;;;;;;;41787:42;:59;;;;;41833:13;;;;;;;;;;;41787:59;:114;;;;;41886:15;;41869:14;;:32;;;;:::i;:::-;41850:15;:51;;41787:114;:144;;;;;41906:19;:25;41926:4;41906:25;;;;;;;;;;;;;;;;;;;;;;;;;41905:26;41787:144;41784:204;;;41947:29;:27;:29::i;:::-;;41784:204;42001:12;42017:8;;;;;;;;;;;42016:9;42001:24;;42127:19;:25;42147:4;42127:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42156:19;:23;42176:2;42156:23;;;;;;;;;;;;;;;;;;;;;;;;;42127:52;42124:99;;;42206:5;42196:15;;42124:99;42236:12;42340:7;42337:957;;;42391:25;:29;42417:2;42391:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42440:1;42424:13;;:17;42391:50;42387:754;;;42468:34;42498:3;42468:25;42479:13;;42468:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42461:41;;42569:13;;42550:16;;42543:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42521:18;;:61;;;;;;;:::i;:::-;;;;;;;;42637:13;;42624:10;;42617:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;42601:12;;:49;;;;;;;:::i;:::-;;;;;;;;42717:13;;42698:16;;42691:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42669:18;;:61;;;;;;;:::i;:::-;;;;;;;;42387:754;;;42791:25;:31;42817:4;42791:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42841:1;42826:12;;:16;42791:51;42788:353;;;42870:33;42899:3;42870:24;42881:12;;42870:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42863:40;;42969:12;;42951:15;;42944:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42922:18;;:59;;;;;;;:::i;:::-;;;;;;;;43035:12;;43023:9;;43016:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43000:12;;:47;;;;;;;:::i;:::-;;;;;;;;43113:12;;43095:15;;43088:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43066:18;;:59;;;;;;;:::i;:::-;;;;;;;;42788:353;42387:754;43168:1;43161:4;:8;43158:93;;;43193:42;43209:4;43223;43230;43193:15;:42::i;:::-;43158:93;43278:4;43268:14;;;;;:::i;:::-;;;42337:957;43307:33;43323:4;43329:2;43333:6;43307:15;:33::i;:::-;38769:4579;;;;38656:4692;;;;:::o;17379:193::-;17465:7;17498:1;17493;:6;;17501:12;17485:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17525:9;17541:1;17537;:5;;;;:::i;:::-;17525:17;;17563:1;17556:8;;;17379:193;;;;;:::o;16473:182::-;16531:7;16551:9;16567:1;16563;:5;;;;:::i;:::-;16551:17;;16592:1;16587;:6;;16579:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16646:1;16639:8;;;16473:182;;;;:::o;37900:189::-;38017:5;37983:25;:31;38009:4;37983:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38075:5;38041:40;;38069:4;38041:40;;;;;;;;;;;;37900:189;;:::o;17832:473::-;17890:7;18140:1;18135;:6;18131:47;;18165:1;18158:8;;;;18131:47;18191:9;18207:1;18203;:5;;;;:::i;:::-;18191:17;;18236:1;18231;18227;:5;;;;:::i;:::-;:10;18219:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18296:1;18289:8;;;17832:473;;;;;:::o;18782:132::-;18840:7;18867:39;18871:1;18874;18867:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18860:46;;18782:132;;;;:::o;12656:575::-;12814:1;12796:20;;:6;:20;;;12788:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12898:1;12877:23;;:9;:23;;;12869:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12954:47;12975:6;12983:9;12994:6;12954:20;:47::i;:::-;13035:71;13057:6;13035:71;;;;;;;;;;;;;;;;;:9;:17;13045:6;13035:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13015:9;:17;13025:6;13015:17;;;;;;;;;;;;;;;:91;;;;13140:32;13165:6;13140:9;:20;13150:9;13140:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13117:9;:20;13127:9;13117:20;;;;;;;;;;;;;;;:55;;;;13205:9;13188:35;;13197:6;13188:35;;;13216:6;13188:35;;;;;;:::i;:::-;;;;;;;;12656:575;;;:::o;43357:602::-;43497:21;43535:1;43521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43497:40;;43566:4;43548;43553:1;43548:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43592:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43582:4;43587:1;43582:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43627:62;43644:4;43659:15;43677:11;43627:8;:62::i;:::-;43728:15;:66;;;43809:11;43835:1;43879:4;43898:2;43915:15;43728:213;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43424:535;43357:602;;:::o;44494:273::-;44533:23;44559:9;:24;44577:4;44559:24;;;;;;;;;;;;;;;;44533:50;;44594:12;44619:48;44636:15;44661:4;44619:16;:48::i;:::-;44710:9;;;;;;;;;;;44702:23;;44733:21;44702:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44689:70;;;;;44522:245;;44494:273::o;46244:772::-;46301:4;46336:15;46319:14;:32;;;;46407:28;46438:4;:14;;;46453:13;46438:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46407:60;;46518:20;46541:53;46588:5;46541:42;46566:16;;46541:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;46518:76;;46715:1;46700:12;:16;46696:113;;;46732:65;46748:13;29700:42;46784:12;46732:15;:65::i;:::-;46696:113;46885:19;46922:13;46885:51;;46947:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46974:12;;;;;;;;;;47004:4;46997:11;;;;;46244:772;:::o;19411:279::-;19497:7;19529:1;19525;:5;19532:12;19517:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19556:9;19572:1;19568;:5;;;;:::i;:::-;19556:17;;19681:1;19674:8;;;19411:279;;;;;:::o;16077:125::-;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:246::-;2117:1;2127:113;2141:6;2138:1;2135:13;2127:113;;;2226:1;2221:3;2217:11;2211:18;2207:1;2202:3;2198:11;2191:39;2163:2;2160:1;2156:10;2151:15;;2127:113;;;2274:1;2265:6;2260:3;2256:16;2249:27;2098:184;2036:246;;;:::o;2288:102::-;2329:6;2380:2;2376:7;2371:2;2364:5;2360:14;2356:28;2346:38;;2288:102;;;:::o;2396:377::-;2484:3;2512:39;2545:5;2512:39;:::i;:::-;2567:71;2631:6;2626:3;2567:71;:::i;:::-;2560:78;;2647:65;2705:6;2700:3;2693:4;2686:5;2682:16;2647:65;:::i;:::-;2737:29;2759:6;2737:29;:::i;:::-;2732:3;2728:39;2721:46;;2488:285;2396:377;;;;:::o;2779:313::-;2892:4;2930:2;2919:9;2915:18;2907:26;;2979:9;2973:4;2969:20;2965:1;2954:9;2950:17;2943:47;3007:78;3080:4;3071:6;3007:78;:::i;:::-;2999:86;;2779:313;;;;:::o;3098:122::-;3171:24;3189:5;3171:24;:::i;:::-;3164:5;3161:35;3151:63;;3210:1;3207;3200:12;3151:63;3098:122;:::o;3226:139::-;3272:5;3310:6;3297:20;3288:29;;3326:33;3353:5;3326:33;:::i;:::-;3226:139;;;;:::o;3371:474::-;3439:6;3447;3496:2;3484:9;3475:7;3471:23;3467:32;3464:119;;;3502:79;;:::i;:::-;3464:119;3622:1;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3593:117;3749:2;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3720:118;3371:474;;;;;:::o;3851:90::-;3885:7;3928:5;3921:13;3914:21;3903:32;;3851:90;;;:::o;3947:109::-;4028:21;4043:5;4028:21;:::i;:::-;4023:3;4016:34;3947:109;;:::o;4062:210::-;4149:4;4187:2;4176:9;4172:18;4164:26;;4200:65;4262:1;4251:9;4247:17;4238:6;4200:65;:::i;:::-;4062:210;;;;:::o;4278:329::-;4337:6;4386:2;4374:9;4365:7;4361:23;4357:32;4354:119;;;4392:79;;:::i;:::-;4354:119;4512:1;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4483:117;4278:329;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:116::-;6973:21;6988:5;6973:21;:::i;:::-;6966:5;6963:32;6953:60;;7009:1;7006;6999:12;6953:60;6903:116;:::o;7025:133::-;7068:5;7106:6;7093:20;7084:29;;7122:30;7146:5;7122:30;:::i;:::-;7025:133;;;;:::o;7164:468::-;7229:6;7237;7286:2;7274:9;7265:7;7261:23;7257:32;7254:119;;;7292:79;;:::i;:::-;7254:119;7412:1;7437:53;7482:7;7473:6;7462:9;7458:22;7437:53;:::i;:::-;7427:63;;7383:117;7539:2;7565:50;7607:7;7598:6;7587:9;7583:22;7565:50;:::i;:::-;7555:60;;7510:115;7164:468;;;;;:::o;7638:86::-;7673:7;7713:4;7706:5;7702:16;7691:27;;7638:86;;;:::o;7730:112::-;7813:22;7829:5;7813:22;:::i;:::-;7808:3;7801:35;7730:112;;:::o;7848:214::-;7937:4;7975:2;7964:9;7960:18;7952:26;;7988:67;8052:1;8041:9;8037:17;8028:6;7988:67;:::i;:::-;7848:214;;;;:::o;8068:613::-;8142:6;8150;8158;8207:2;8195:9;8186:7;8182:23;8178:32;8175:119;;;8213:79;;:::i;:::-;8175:119;8333:1;8358:53;8403:7;8394:6;8383:9;8379:22;8358:53;:::i;:::-;8348:63;;8304:117;8460:2;8486:53;8531:7;8522:6;8511:9;8507:22;8486:53;:::i;:::-;8476:63;;8431:118;8588:2;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8559:115;8068:613;;;;;:::o;8687:619::-;8764:6;8772;8780;8829:2;8817:9;8808:7;8804:23;8800:32;8797:119;;;8835:79;;:::i;:::-;8797:119;8955:1;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8926:117;9082:2;9108:53;9153:7;9144:6;9133:9;9129:22;9108:53;:::i;:::-;9098:63;;9053:118;9210:2;9236:53;9281:7;9272:6;9261:9;9257:22;9236:53;:::i;:::-;9226:63;;9181:118;8687:619;;;;;:::o;9312:323::-;9368:6;9417:2;9405:9;9396:7;9392:23;9388:32;9385:119;;;9423:79;;:::i;:::-;9385:119;9543:1;9568:50;9610:7;9601:6;9590:9;9586:22;9568:50;:::i;:::-;9558:60;;9514:114;9312:323;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:238::-;13294:34;13290:1;13282:6;13278:14;13271:58;13363:21;13358:2;13350:6;13346:15;13339:46;13154:238;:::o;13398:366::-;13540:3;13561:67;13625:2;13620:3;13561:67;:::i;:::-;13554:74;;13637:93;13726:3;13637:93;:::i;:::-;13755:2;13750:3;13746:12;13739:19;;13398:366;;;:::o;13770:419::-;13936:4;13974:2;13963:9;13959:18;13951:26;;14023:9;14017:4;14013:20;14009:1;13998:9;13994:17;13987:47;14051:131;14177:4;14051:131;:::i;:::-;14043:139;;13770:419;;;:::o;14195:235::-;14335:34;14331:1;14323:6;14319:14;14312:58;14404:18;14399:2;14391:6;14387:15;14380:43;14195:235;:::o;14436:366::-;14578:3;14599:67;14663:2;14658:3;14599:67;:::i;:::-;14592:74;;14675:93;14764:3;14675:93;:::i;:::-;14793:2;14788:3;14784:12;14777:19;;14436:366;;;:::o;14808:419::-;14974:4;15012:2;15001:9;14997:18;14989:26;;15061:9;15055:4;15051:20;15047:1;15036:9;15032:17;15025:47;15089:131;15215:4;15089:131;:::i;:::-;15081:139;;14808:419;;;:::o;15233:191::-;15273:3;15292:20;15310:1;15292:20;:::i;:::-;15287:25;;15326:20;15344:1;15326:20;:::i;:::-;15321:25;;15369:1;15366;15362:9;15355:16;;15390:3;15387:1;15384:10;15381:36;;;15397:18;;:::i;:::-;15381:36;15233:191;;;;:::o;15430:179::-;15570:31;15566:1;15558:6;15554:14;15547:55;15430:179;:::o;15615:366::-;15757:3;15778:67;15842:2;15837:3;15778:67;:::i;:::-;15771:74;;15854:93;15943:3;15854:93;:::i;:::-;15972:2;15967:3;15963:12;15956:19;;15615:366;;;:::o;15987:419::-;16153:4;16191:2;16180:9;16176:18;16168:26;;16240:9;16234:4;16230:20;16226:1;16215:9;16211:17;16204:47;16268:131;16394:4;16268:131;:::i;:::-;16260:139;;15987:419;;;:::o;16412:244::-;16552:34;16548:1;16540:6;16536:14;16529:58;16621:27;16616:2;16608:6;16604:15;16597:52;16412:244;:::o;16662:366::-;16804:3;16825:67;16889:2;16884:3;16825:67;:::i;:::-;16818:74;;16901:93;16990:3;16901:93;:::i;:::-;17019:2;17014:3;17010:12;17003:19;;16662:366;;;:::o;17034:419::-;17200:4;17238:2;17227:9;17223:18;17215:26;;17287:9;17281:4;17277:20;17273:1;17262:9;17258:17;17251:47;17315:131;17441:4;17315:131;:::i;:::-;17307:139;;17034:419;;;:::o;17459:223::-;17599:34;17595:1;17587:6;17583:14;17576:58;17668:6;17663:2;17655:6;17651:15;17644:31;17459:223;:::o;17688:366::-;17830:3;17851:67;17915:2;17910:3;17851:67;:::i;:::-;17844:74;;17927:93;18016:3;17927:93;:::i;:::-;18045:2;18040:3;18036:12;18029:19;;17688:366;;;:::o;18060:419::-;18226:4;18264:2;18253:9;18249:18;18241:26;;18313:9;18307:4;18303:20;18299:1;18288:9;18284:17;18277:47;18341:131;18467:4;18341:131;:::i;:::-;18333:139;;18060:419;;;:::o;18485:240::-;18625:34;18621:1;18613:6;18609:14;18602:58;18694:23;18689:2;18681:6;18677:15;18670:48;18485:240;:::o;18731:366::-;18873:3;18894:67;18958:2;18953:3;18894:67;:::i;:::-;18887:74;;18970:93;19059:3;18970:93;:::i;:::-;19088:2;19083:3;19079:12;19072:19;;18731:366;;;:::o;19103:419::-;19269:4;19307:2;19296:9;19292:18;19284:26;;19356:9;19350:4;19346:20;19342:1;19331:9;19327:17;19320:47;19384:131;19510:4;19384:131;:::i;:::-;19376:139;;19103:419;;;:::o;19528:239::-;19668:34;19664:1;19656:6;19652:14;19645:58;19737:22;19732:2;19724:6;19720:15;19713:47;19528:239;:::o;19773:366::-;19915:3;19936:67;20000:2;19995:3;19936:67;:::i;:::-;19929:74;;20012:93;20101:3;20012:93;:::i;:::-;20130:2;20125:3;20121:12;20114:19;;19773:366;;;:::o;20145:419::-;20311:4;20349:2;20338:9;20334:18;20326:26;;20398:9;20392:4;20388:20;20384:1;20373:9;20369:17;20362:47;20426:131;20552:4;20426:131;:::i;:::-;20418:139;;20145:419;;;:::o;20570:225::-;20710:34;20706:1;20698:6;20694:14;20687:58;20779:8;20774:2;20766:6;20762:15;20755:33;20570:225;:::o;20801:366::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20801:366;;;:::o;21173:419::-;21339:4;21377:2;21366:9;21362:18;21354:26;;21426:9;21420:4;21416:20;21412:1;21401:9;21397:17;21390:47;21454:131;21580:4;21454:131;:::i;:::-;21446:139;;21173:419;;;:::o;21598:182::-;21738:34;21734:1;21726:6;21722:14;21715:58;21598:182;:::o;21786:366::-;21928:3;21949:67;22013:2;22008:3;21949:67;:::i;:::-;21942:74;;22025:93;22114:3;22025:93;:::i;:::-;22143:2;22138:3;22134:12;22127:19;;21786:366;;;:::o;22158:419::-;22324:4;22362:2;22351:9;22347:18;22339:26;;22411:9;22405:4;22401:20;22397:1;22386:9;22382:17;22375:47;22439:131;22565:4;22439:131;:::i;:::-;22431:139;;22158:419;;;:::o;22583:143::-;22640:5;22671:6;22665:13;22656:22;;22687:33;22714:5;22687:33;:::i;:::-;22583:143;;;;:::o;22732:351::-;22802:6;22851:2;22839:9;22830:7;22826:23;22822:32;22819:119;;;22857:79;;:::i;:::-;22819:119;22977:1;23002:64;23058:7;23049:6;23038:9;23034:22;23002:64;:::i;:::-;22992:74;;22948:128;22732:351;;;;:::o;23089:223::-;23229:34;23225:1;23217:6;23213:14;23206:58;23298:6;23293:2;23285:6;23281:15;23274:31;23089:223;:::o;23318:366::-;23460:3;23481:67;23545:2;23540:3;23481:67;:::i;:::-;23474:74;;23557:93;23646:3;23557:93;:::i;:::-;23675:2;23670:3;23666:12;23659:19;;23318:366;;;:::o;23690:419::-;23856:4;23894:2;23883:9;23879:18;23871:26;;23943:9;23937:4;23933:20;23929:1;23918:9;23914:17;23907:47;23971:131;24097:4;23971:131;:::i;:::-;23963:139;;23690:419;;;:::o;24115:221::-;24255:34;24251:1;24243:6;24239:14;24232:58;24324:4;24319:2;24311:6;24307:15;24300:29;24115:221;:::o;24342:366::-;24484:3;24505:67;24569:2;24564:3;24505:67;:::i;:::-;24498:74;;24581:93;24670:3;24581:93;:::i;:::-;24699:2;24694:3;24690:12;24683:19;;24342:366;;;:::o;24714:419::-;24880:4;24918:2;24907:9;24903:18;24895:26;;24967:9;24961:4;24957:20;24953:1;24942:9;24938:17;24931:47;24995:131;25121:4;24995:131;:::i;:::-;24987:139;;24714:419;;;:::o;25139:224::-;25279:34;25275:1;25267:6;25263:14;25256:58;25348:7;25343:2;25335:6;25331:15;25324:32;25139:224;:::o;25369:366::-;25511:3;25532:67;25596:2;25591:3;25532:67;:::i;:::-;25525:74;;25608:93;25697:3;25608:93;:::i;:::-;25726:2;25721:3;25717:12;25710:19;;25369:366;;;:::o;25741:419::-;25907:4;25945:2;25934:9;25930:18;25922:26;;25994:9;25988:4;25984:20;25980:1;25969:9;25965:17;25958:47;26022:131;26148:4;26022:131;:::i;:::-;26014:139;;25741:419;;;:::o;26166:222::-;26306:34;26302:1;26294:6;26290:14;26283:58;26375:5;26370:2;26362:6;26358:15;26351:30;26166:222;:::o;26394:366::-;26536:3;26557:67;26621:2;26616:3;26557:67;:::i;:::-;26550:74;;26633:93;26722:3;26633:93;:::i;:::-;26751:2;26746:3;26742:12;26735:19;;26394:366;;;:::o;26766:419::-;26932:4;26970:2;26959:9;26955:18;26947:26;;27019:9;27013:4;27009:20;27005:1;26994:9;26990:17;26983:47;27047:131;27173:4;27047:131;:::i;:::-;27039:139;;26766:419;;;:::o;27191:236::-;27331:34;27327:1;27319:6;27315:14;27308:58;27400:19;27395:2;27387:6;27383:15;27376:44;27191:236;:::o;27433:366::-;27575:3;27596:67;27660:2;27655:3;27596:67;:::i;:::-;27589:74;;27672:93;27761:3;27672:93;:::i;:::-;27790:2;27785:3;27781:12;27774:19;;27433:366;;;:::o;27805:419::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:172::-;28370:24;28366:1;28358:6;28354:14;28347:48;28230:172;:::o;28408:366::-;28550:3;28571:67;28635:2;28630:3;28571:67;:::i;:::-;28564:74;;28647:93;28736:3;28647:93;:::i;:::-;28765:2;28760:3;28756:12;28749:19;;28408:366;;;:::o;28780:419::-;28946:4;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28780:419;;;:::o;29205:297::-;29345:34;29341:1;29333:6;29329:14;29322:58;29414:34;29409:2;29401:6;29397:15;29390:59;29483:11;29478:2;29470:6;29466:15;29459:36;29205:297;:::o;29508:366::-;29650:3;29671:67;29735:2;29730:3;29671:67;:::i;:::-;29664:74;;29747:93;29836:3;29747:93;:::i;:::-;29865:2;29860:3;29856:12;29849:19;;29508:366;;;:::o;29880:419::-;30046:4;30084:2;30073:9;30069:18;30061:26;;30133:9;30127:4;30123:20;30119:1;30108:9;30104:17;30097:47;30161:131;30287:4;30161:131;:::i;:::-;30153:139;;29880:419;;;:::o;30305:240::-;30445:34;30441:1;30433:6;30429:14;30422:58;30514:23;30509:2;30501:6;30497:15;30490:48;30305:240;:::o;30551:366::-;30693:3;30714:67;30778:2;30773:3;30714:67;:::i;:::-;30707:74;;30790:93;30879:3;30790:93;:::i;:::-;30908:2;30903:3;30899:12;30892:19;;30551:366;;;:::o;30923:419::-;31089:4;31127:2;31116:9;31112:18;31104:26;;31176:9;31170:4;31166:20;31162:1;31151:9;31147:17;31140:47;31204:131;31330:4;31204:131;:::i;:::-;31196:139;;30923:419;;;:::o;31348:169::-;31488:21;31484:1;31476:6;31472:14;31465:45;31348:169;:::o;31523:366::-;31665:3;31686:67;31750:2;31745:3;31686:67;:::i;:::-;31679:74;;31762:93;31851:3;31762:93;:::i;:::-;31880:2;31875:3;31871:12;31864:19;;31523:366;;;:::o;31895:419::-;32061:4;32099:2;32088:9;32084:18;32076:26;;32148:9;32142:4;32138:20;32134:1;32123:9;32119:17;32112:47;32176:131;32302:4;32176:131;:::i;:::-;32168:139;;31895:419;;;:::o;32320:241::-;32460:34;32456:1;32448:6;32444:14;32437:58;32529:24;32524:2;32516:6;32512:15;32505:49;32320:241;:::o;32567:366::-;32709:3;32730:67;32794:2;32789:3;32730:67;:::i;:::-;32723:74;;32806:93;32895:3;32806:93;:::i;:::-;32924:2;32919:3;32915:12;32908:19;;32567:366;;;:::o;32939:419::-;33105:4;33143:2;33132:9;33128:18;33120:26;;33192:9;33186:4;33182:20;33178:1;33167:9;33163:17;33156:47;33220:131;33346:4;33220:131;:::i;:::-;33212:139;;32939:419;;;:::o;33364:194::-;33404:4;33424:20;33442:1;33424:20;:::i;:::-;33419:25;;33458:20;33476:1;33458:20;:::i;:::-;33453:25;;33502:1;33499;33495:9;33487:17;;33526:1;33520:4;33517:11;33514:37;;;33531:18;;:::i;:::-;33514:37;33364:194;;;;:::o;33564:177::-;33704:29;33700:1;33692:6;33688:14;33681:53;33564:177;:::o;33747:366::-;33889:3;33910:67;33974:2;33969:3;33910:67;:::i;:::-;33903:74;;33986:93;34075:3;33986:93;:::i;:::-;34104:2;34099:3;34095:12;34088:19;;33747:366;;;:::o;34119:419::-;34285:4;34323:2;34312:9;34308:18;34300:26;;34372:9;34366:4;34362:20;34358:1;34347:9;34343:17;34336:47;34400:131;34526:4;34400:131;:::i;:::-;34392:139;;34119:419;;;:::o;34544:220::-;34684:34;34680:1;34672:6;34668:14;34661:58;34753:3;34748:2;34740:6;34736:15;34729:28;34544:220;:::o;34770:366::-;34912:3;34933:67;34997:2;34992:3;34933:67;:::i;:::-;34926:74;;35009:93;35098:3;35009:93;:::i;:::-;35127:2;35122:3;35118:12;35111:19;;34770:366;;;:::o;35142:419::-;35308:4;35346:2;35335:9;35331:18;35323:26;;35395:9;35389:4;35385:20;35381:1;35370:9;35366:17;35359:47;35423:131;35549:4;35423:131;:::i;:::-;35415:139;;35142:419;;;:::o;35567:180::-;35615:77;35612:1;35605:88;35712:4;35709:1;35702:15;35736:4;35733:1;35726:15;35753:180;35801:77;35798:1;35791:88;35898:4;35895:1;35888:15;35922:4;35919:1;35912:15;35939:143;35996:5;36027:6;36021:13;36012:22;;36043:33;36070:5;36043:33;:::i;:::-;35939:143;;;;:::o;36088:351::-;36158:6;36207:2;36195:9;36186:7;36182:23;36178:32;36175:119;;;36213:79;;:::i;:::-;36175:119;36333:1;36358:64;36414:7;36405:6;36394:9;36390:22;36358:64;:::i;:::-;36348:74;;36304:128;36088:351;;;;:::o;36445:85::-;36490:7;36519:5;36508:16;;36445:85;;;:::o;36536:158::-;36594:9;36627:61;36645:42;36654:32;36680:5;36654:32;:::i;:::-;36645:42;:::i;:::-;36627:61;:::i;:::-;36614:74;;36536:158;;;:::o;36700:147::-;36795:45;36834:5;36795:45;:::i;:::-;36790:3;36783:58;36700:147;;:::o;36853:114::-;36920:6;36954:5;36948:12;36938:22;;36853:114;;;:::o;36973:184::-;37072:11;37106:6;37101:3;37094:19;37146:4;37141:3;37137:14;37122:29;;36973:184;;;;:::o;37163:132::-;37230:4;37253:3;37245:11;;37283:4;37278:3;37274:14;37266:22;;37163:132;;;:::o;37301:108::-;37378:24;37396:5;37378:24;:::i;:::-;37373:3;37366:37;37301:108;;:::o;37415:179::-;37484:10;37505:46;37547:3;37539:6;37505:46;:::i;:::-;37583:4;37578:3;37574:14;37560:28;;37415:179;;;;:::o;37600:113::-;37670:4;37702;37697:3;37693:14;37685:22;;37600:113;;;:::o;37749:732::-;37868:3;37897:54;37945:5;37897:54;:::i;:::-;37967:86;38046:6;38041:3;37967:86;:::i;:::-;37960:93;;38077:56;38127:5;38077:56;:::i;:::-;38156:7;38187:1;38172:284;38197:6;38194:1;38191:13;38172:284;;;38273:6;38267:13;38300:63;38359:3;38344:13;38300:63;:::i;:::-;38293:70;;38386:60;38439:6;38386:60;:::i;:::-;38376:70;;38232:224;38219:1;38216;38212:9;38207:14;;38172:284;;;38176:14;38472:3;38465:10;;37873:608;;;37749:732;;;;:::o;38487:831::-;38750:4;38788:3;38777:9;38773:19;38765:27;;38802:71;38870:1;38859:9;38855:17;38846:6;38802:71;:::i;:::-;38883:80;38959:2;38948:9;38944:18;38935:6;38883:80;:::i;:::-;39010:9;39004:4;39000:20;38995:2;38984:9;38980:18;38973:48;39038:108;39141:4;39132:6;39038:108;:::i;:::-;39030:116;;39156:72;39224:2;39213:9;39209:18;39200:6;39156:72;:::i;:::-;39238:73;39306:3;39295:9;39291:19;39282:6;39238:73;:::i;:::-;38487:831;;;;;;;;:::o;39324:147::-;39425:11;39462:3;39447:18;;39324:147;;;;:::o;39477:114::-;;:::o;39597:398::-;39756:3;39777:83;39858:1;39853:3;39777:83;:::i;:::-;39770:90;;39869:93;39958:3;39869:93;:::i;:::-;39987:1;39982:3;39978:11;39971:18;;39597:398;;;:::o;40001:379::-;40185:3;40207:147;40350:3;40207:147;:::i;:::-;40200:154;;40371:3;40364:10;;40001:379;;;:::o

Swarm Source

ipfs://4b2d448a0906755b16f8b93aa03403bde9e5af96063ae9fc1b9d623726c1cfaf
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.