ETH Price: $3,446.78 (-0.08%)
Gas: 6 Gwei

Token

Evolution Dao ($EVO)
 

Overview

Max Total Supply

100,000,000,000 $EVO

Holders

94

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.000000869743126599 $EVO

Value
$0.00
0x47F75fD9463723f9af8bBc0194430d9e303833E7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EvolutionDao

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.17;

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) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the 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 EvolutionDao is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public DevWallet;
    address public DAOWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDAOFee;
    
    uint256 public sellTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDAOFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBuyBack;
    
    /******************/

    // exlcude 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 DevWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event DAOWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event BuyBackTriggered(uint256 amount);

    constructor() ERC20("Evolution Dao", "$EVO") {

        address newOwner = address(msg.sender);
        
        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 _buyDevFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDAOFee = 2;

        // 30% sell tax to start, will be reduced over time.
        
        uint256 _sellDevFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDAOFee = 2;
        
        uint256 totalSupply = 100000000000 * 1e18;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
        maxWallet = totalSupply * 2 / 100; // 2% max wallet

        buyDevFee = _buyDevFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDAOFee = _buyDAOFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyDAOFee;
        
        sellDevFee = _sellDevFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDAOFee = _sellDAOFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellDAOFee;
        
    	DevWallet = address(0xFf3859CB95FAAe4E36900831c3cA4960F856D63b); // set as Dev wallet
    	DAOWallet = address(0xCb2665851361fFE163cE3d0FA41EFd7CF953a838); // set as DAO wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(DAOWallet, true);
        excludeFromFees(DevWallet, true);
        
        excludeFromMaxTransaction(newOwner, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(DAOWallet, true);
        excludeFromMaxTransaction(DevWallet, true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(newOwner, totalSupply);
        transferOwnership(newOwner);
    }

    receive() external payable {

  	}
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    swapTokensAtAmount = newAmount * (10**18) ;
  	    return true;
  	}
    
    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);

    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount 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 _devFee, uint256 _liquidityFee, uint256 _DAOFee) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyDAOFee = _DAOFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyDAOFee;
        require(buyTotalFees <= 15, "Must keep fees at 15% or less");
    }
    
    function updateSellFees(uint256 _devFee, uint256 _liquidityFee, uint256 _DAOFee) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellDAOFee = _DAOFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellDAOFee;
        require(sellTotalFees <= 15, "Must keep fees at 15% or less");
    }

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

    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 updateDevWallet(address newDevWallet) external onlyOwner {
        emit DevWalletUpdated(newDevWallet, DevWallet);
        DevWallet = newDevWallet;
    }
    
    function updateDAOWallet(address newWallet) external onlyOwner {
        emit DAOWalletUpdated(newWallet, DAOWallet);
        DAOWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                 
                //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.");
                }
                else {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        
        
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if 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;
                tokensForBuyBack += fees * sellDAOFee / sellTotalFees;
                tokensForMarketing += fees * sellDevFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForBuyBack += fees * buyDAOFee / buyTotalFees;
                tokensForMarketing += fees * buyDevFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            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
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForBuyBack;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForBuyBack = ethBalance.mul(tokensForBuyBack).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyBack;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBuyBack = 0;
        
        (bool success,) = address(DevWallet).call{value: ethForMarketing}("");
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        // keep leftover ETH for buyback
        (success,) = address(DAOWallet).call{value: address(this).balance}("");
    }

    function withdrawStuckEth() external onlyOwner{
        require (address(this).balance > 0, "Can't withdraw negative or zero");
        payable(owner()).transfer(address(this).balance);
    }

    function removeStuckToken(address _address) external onlyOwner {
        require(_address != address(this), "Can't withdraw tokens destined for liquidity");
        require(IERC20(_address).balanceOf(address(this)) > 0, "Can't withdraw 0");

        IERC20(_address).transfer(owner(), IERC20(_address).balanceOf(address(this)));
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DAOWalletUpdated","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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"},{"inputs":[],"name":"DAOWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"buyDAOFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDAOFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tokensForBuyBack","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DAOFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDAOWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DAOFee","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"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600d81526020017f45766f6c7574696f6e2044616f000000000000000000000000000000000000008152506040518060400160405280600481526020017f2445564f000000000000000000000000000000000000000000000000000000008152508160039081620000aa91906200102c565b508060049081620000bc91906200102c565b5050506000620000d1620006d560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a1816001620006dd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024791906200117d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d591906200117d565b6040518363ffffffff1660e01b8152600401620002f4929190620011c0565b6020604051808303816000875af115801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200117d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200038260a0516001620006dd60201b60201c565b6200039760a0516001620007da60201b60201c565b60006002905060006001905060006002905060006002905060006001905060006002905060006c01431e0fae6d7217caa000000090506064600182620003de91906200121c565b620003ea919062001296565b6008819055506127106005826200040291906200121c565b6200040e919062001296565b60098190555060646002826200042591906200121c565b62000431919062001296565b600a8190555086600d8190555085600e8190555084600f81905550600f54600e54600d54620004619190620012ce565b6200046d9190620012ce565b600c819055508360118190555082601281905550816013819055506013546012546011546200049d9190620012ce565b620004a99190620012ce565b60108190555073ff3859cb95faae4e36900831c3ca4960f856d63b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cb2665851361ffe163ce3d0fa41efd7cf953a838600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056c8960016200087b60201b60201c565b6200057f3060016200087b60201b60201c565b6200059461dead60016200087b60201b60201c565b620005c9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087b60201b60201c565b620005fe600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087b60201b60201c565b62000611896001620006dd60201b60201c565b62000624306001620006dd60201b60201c565b62000659600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006dd60201b60201c565b6200068e600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006dd60201b60201c565b620006a361dead6001620006dd60201b60201c565b620006b58982620009c860201b60201c565b620006c68962000b7660201b60201c565b50505050505050505062001570565b600033905090565b620006ed620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000776906200136a565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6200088b620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200091d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000914906200136a565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009bc9190620013a9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a319062001416565b60405180910390fd5b62000a4e6000838362000d4a60201b60201c565b62000a6a8160025462000d4f60201b620025371790919060201c565b60028190555062000ac8816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d4f60201b620025371790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b6a919062001449565b60405180910390a35050565b62000b86620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0f906200136a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c8190620014dc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b505050565b600080828462000d609190620012ce565b90508381101562000da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9f906200154e565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3457607f821691505b60208210810362000e4a5762000e4962000dec565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000eb47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e75565b62000ec0868362000e75565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f0d62000f0762000f018462000ed8565b62000ee2565b62000ed8565b9050919050565b6000819050919050565b62000f298362000eec565b62000f4162000f388262000f14565b84845462000e82565b825550505050565b600090565b62000f5862000f49565b62000f6581848462000f1e565b505050565b5b8181101562000f8d5762000f8160008262000f4e565b60018101905062000f6b565b5050565b601f82111562000fdc5762000fa68162000e50565b62000fb18462000e65565b8101602085101562000fc1578190505b62000fd962000fd08562000e65565b83018262000f6a565b50505b505050565b600082821c905092915050565b6000620010016000198460080262000fe1565b1980831691505092915050565b60006200101c838362000fee565b9150826002028217905092915050565b620010378262000db2565b67ffffffffffffffff81111562001053576200105262000dbd565b5b6200105f825462000e1b565b6200106c82828562000f91565b600060209050601f831160018114620010a457600084156200108f578287015190505b6200109b85826200100e565b8655506200110b565b601f198416620010b48662000e50565b60005b82811015620010de57848901518255600182019150602085019450602081019050620010b7565b86831015620010fe5784890151620010fa601f89168262000fee565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011458262001118565b9050919050565b620011578162001138565b81146200116357600080fd5b50565b60008151905062001177816200114c565b92915050565b60006020828403121562001196576200119562001113565b5b6000620011a68482850162001166565b91505092915050565b620011ba8162001138565b82525050565b6000604082019050620011d76000830185620011af565b620011e66020830184620011af565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012298262000ed8565b9150620012368362000ed8565b9250828202620012468162000ed8565b9150828204841483151762001260576200125f620011ed565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012a38262000ed8565b9150620012b08362000ed8565b925082620012c357620012c262001267565b5b828204905092915050565b6000620012db8262000ed8565b9150620012e88362000ed8565b9250828201905080821115620013035762001302620011ed565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200135260208362001309565b91506200135f826200131a565b602082019050919050565b60006020820190508181036000830152620013858162001343565b9050919050565b60008115159050919050565b620013a3816200138c565b82525050565b6000602082019050620013c0600083018462001398565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013fe601f8362001309565b91506200140b82620013c6565b602082019050919050565b600060208201905081810360008301526200143181620013ef565b9050919050565b620014438162000ed8565b82525050565b600060208201905062001460600083018462001438565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014c460268362001309565b9150620014d18262001466565b604082019050919050565b60006020820190508181036000830152620014f781620014b5565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001536601b8362001309565b91506200154382620014fe565b602082019050919050565b60006020820190508181036000830152620015698162001527565b9050919050565b60805160a051614f3c620015c0600039600081816112230152611aea015260008181610dc7015281816138df015281816139c0015281816139e701528181613a830152613aaa0152614f3c6000f3fe6080604052600436106102cd5760003560e01c8063865efdc811610175578063c17b5b8c116100dc578063dfdb5ae411610095578063f11a24d31161006f578063f11a24d314610b1b578063f2fde38b14610b46578063f637434214610b6f578063f8b45b0514610b9a576102d4565b8063dfdb5ae414610a9c578063e083e92214610ac7578063e2f4560514610af0576102d4565b8063c17b5b8c14610978578063c616403f146109a1578063c8c8ebe4146109cc578063d257b34f146109f7578063d85ba06314610a34578063dd62ed3e14610a5f576102d4565b8063a0d82dc51161012e578063a0d82dc514610842578063a457c2d71461086d578063a9059cbb146108aa578063b115e4df146108e7578063b62496f514610912578063c02466681461094f576102d4565b8063865efdc8146107465780638da5cb5b1461076f578063924de9b71461079a57806395d89b41146107c35780639a7a23d6146107ee5780639c3b4fdc14610817576102d4565b806327c8f835116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106c65780637571336a146106dd5780637fa787ba146107065780638095d5641461071d576102d4565b80636a486a8e146106335780636ddd17131461065e57806370a0823114610689576102d4565b806327c8f8351461050d578063313ce56714610538578063382b185f14610563578063395093511461058e57806349bd5a5e146105cb5780634fbee193146105f6576102d4565b806318160ddd1161028657806318160ddd146103fd5780631816467f146104285780631a8145bb146104515780631c499ab01461047c5780631f3fed8f146104a557806323b872dd146104d0576102d4565b806306fdde03146102d9578063095ea7b3146103045780630b166d5014610341578063106b5da11461036c57806310d5de53146103955780631694505e146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bc5565b6040516102fb9190613c4c565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613d07565b610c57565b6040516103389190613d62565b60405180910390f35b34801561034d57600080fd5b50610356610c75565b6040516103639190613d8c565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190613da7565b610c7b565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613dd4565b610da5565b6040516103c99190613d62565b60405180910390f35b3480156103de57600080fd5b506103e7610dc5565b6040516103f49190613e60565b60405180910390f35b34801561040957600080fd5b50610412610de9565b60405161041f9190613d8c565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613dd4565b610df3565b005b34801561045d57600080fd5b50610466610f4a565b6040516104739190613d8c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190613da7565b610f50565b005b3480156104b157600080fd5b506104ba61107a565b6040516104c79190613d8c565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613e7b565b611080565b6040516105049190613d62565b60405180910390f35b34801561051957600080fd5b50610522611159565b60405161052f9190613edd565b60405180910390f35b34801561054457600080fd5b5061054d61115f565b60405161055a9190613f14565b60405180910390f35b34801561056f57600080fd5b50610578611168565b6040516105859190613d8c565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613d07565b61116e565b6040516105c29190613d62565b60405180910390f35b3480156105d757600080fd5b506105e0611221565b6040516105ed9190613edd565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613dd4565b611245565b60405161062a9190613d62565b60405180910390f35b34801561063f57600080fd5b5061064861129b565b6040516106559190613d8c565b60405180910390f35b34801561066a57600080fd5b506106736112a1565b6040516106809190613d62565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613dd4565b6112b4565b6040516106bd9190613d8c565b60405180910390f35b3480156106d257600080fd5b506106db6112fc565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613f5b565b611454565b005b34801561071257600080fd5b5061071b611546565b005b34801561072957600080fd5b50610744600480360381019061073f9190613f9b565b611670565b005b34801561075257600080fd5b5061076d60048036038101906107689190613dd4565b61178a565b005b34801561077b57600080fd5b506107846118e1565b6040516107919190613edd565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613fee565b61190b565b005b3480156107cf57600080fd5b506107d86119bf565b6040516107e59190613c4c565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613f5b565b611a51565b005b34801561082357600080fd5b5061082c611b84565b6040516108399190613d8c565b60405180910390f35b34801561084e57600080fd5b50610857611b8a565b6040516108649190613d8c565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613d07565b611b90565b6040516108a19190613d62565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613d07565b611c5d565b6040516108de9190613d62565b60405180910390f35b3480156108f357600080fd5b506108fc611c7b565b6040516109099190613edd565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613dd4565b611ca1565b6040516109469190613d62565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613f5b565b611cc1565b005b34801561098457600080fd5b5061099f600480360381019061099a9190613f9b565b611e01565b005b3480156109ad57600080fd5b506109b6611f1b565b6040516109c39190613d8c565b60405180910390f35b3480156109d857600080fd5b506109e1611f21565b6040516109ee9190613d8c565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613da7565b611f27565b604051610a2b9190613d62565b60405180910390f35b348015610a4057600080fd5b50610a49611fe3565b604051610a569190613d8c565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a81919061401b565b611fe9565b604051610a939190613d8c565b60405180910390f35b348015610aa857600080fd5b50610ab1612070565b604051610abe9190613edd565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190613dd4565b612096565b005b348015610afc57600080fd5b50610b05612359565b604051610b129190613d8c565b60405180910390f35b348015610b2757600080fd5b50610b3061235f565b604051610b3d9190613d8c565b60405180910390f35b348015610b5257600080fd5b50610b6d6004803603810190610b689190613dd4565b612365565b005b348015610b7b57600080fd5b50610b8461252b565b604051610b919190613d8c565b60405180910390f35b348015610ba657600080fd5b50610baf612531565b604051610bbc9190613d8c565b60405180910390f35b606060038054610bd49061408a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c009061408a565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6b610c64612595565b848461259d565b6001905092915050565b60165481565b610c83612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990614107565b60405180910390fd5b670de0b6b3a76400006103e86005610d28610de9565b610d329190614156565b610d3c91906141c7565b610d4691906141c7565b811015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061426a565b60405180910390fd5b670de0b6b3a764000081610d9c9190614156565b60088190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610dfb612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190614107565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610f58612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614107565b60405180910390fd5b670de0b6b3a76400006103e86005610ffd610de9565b6110079190614156565b61101191906141c7565b61101b91906141c7565b81101561105d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110549061426a565b60405180910390fd5b670de0b6b3a7640000816110719190614156565b600a8190555050565b60145481565b600061108d848484612766565b61114e84611099612595565b61114985604051806060016040528060288152602001614eba60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110ff612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b61259d565b600190509392505050565b61dead81565b60006012905090565b60135481565b600061121761117b612595565b84611212856001600061118c612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253790919063ffffffff16565b61259d565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611304612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61145c612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290614107565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61154e612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614107565b60405180910390fd5b60004711611620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611617906142d6565b60405180910390fd5b6116286118e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561166d573d6000803e3d6000fd5b50565b611678612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614107565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d5461172f91906142f6565b61173991906142f6565b600c81905550600f600c541115611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90614376565b60405180910390fd5b505050565b611792612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614107565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f32a7ddcee9d75ed9d43e0e669a5fffd673082cfbba1727d3f8d682e9b24decd560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611913612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614107565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600480546119ce9061408a565b80601f01602080910402602001604051908101604052809291908181526020018280546119fa9061408a565b8015611a475780601f10611a1c57610100808354040283529160200191611a47565b820191906000526020600020905b815481529060010190602001808311611a2a57829003601f168201915b5050505050905090565b611a59612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614107565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614408565b60405180910390fd5b611b80828261313c565b5050565b600d5481565b60115481565b6000611c53611b9d612595565b84611c4e85604051806060016040528060258152602001614ee26025913960016000611bc7612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b61259d565b6001905092915050565b6000611c71611c6a612595565b8484612766565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b611cc9612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90614107565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df59190613d62565b60405180910390a25050565b611e09612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614107565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611ec091906142f6565b611eca91906142f6565b601081905550600f6010541115611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614376565b60405180910390fd5b505050565b600f5481565b60085481565b6000611f31612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614107565b60405180910390fd5b670de0b6b3a764000082611fd49190614156565b60098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61209e612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490614107565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361219b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121929061449a565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121d69190613edd565b602060405180830381865afa1580156121f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221791906144cf565b11612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614548565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61227b6118e1565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122b49190613edd565b602060405180830381865afa1580156122d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f591906144cf565b6040518363ffffffff1660e01b8152600401612312929190614568565b6020604051808303816000875af1158015612331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235591906145a6565b5050565b60095481565b600e5481565b61236d612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390614107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614645565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461254691906142f6565b90508381101561258b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612582906146b1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614743565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361267b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612672906147d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127599190613d8c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc90614867565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906148f9565b60405180910390fd5b6000810361285d57612858838360006131dd565b6130d3565b6128656118e1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d357506128a36118e1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612946575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f5750600560149054906101000a900460ff16155b15612bfb57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a075750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aae57600854811115612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a489061498b565b60405180910390fd5b600a54612a5d836112b4565b82612a6891906142f6565b1115612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149f7565b60405180910390fd5b612bfa565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b515750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba057600854811115612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614a89565b60405180910390fd5b612bf9565b600a54612bac836112b4565b82612bb791906142f6565b1115612bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bef906149f7565b60405180910390fd5b5b5b5b6000612c06306112b4565b905060006009548210159050808015612c2b5750600b60009054906101000a900460ff165b8015612c445750600560149054906101000a900460ff16155b8015612c9a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf05750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d465750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8a576001600560146101000a81548160ff021916908315150217905550612d6e613470565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e405750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e4a57600090505b600081156130c357601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ead57506000601054115b15612f7a57612eda6064612ecc6010548861372d90919063ffffffff16565b6137a790919063ffffffff16565b905060105460125482612eed9190614156565b612ef791906141c7565b60156000828254612f0891906142f6565b9250508190555060105460135482612f209190614156565b612f2a91906141c7565b60166000828254612f3b91906142f6565b9250508190555060105460115482612f539190614156565b612f5d91906141c7565b60146000828254612f6e91906142f6565b9250508190555061309f565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fd557506000600c54115b1561309e576130026064612ff4600c548861372d90919063ffffffff16565b6137a790919063ffffffff16565b9050600c54600e54826130159190614156565b61301f91906141c7565b6015600082825461303091906142f6565b92505081905550600c54600f54826130489190614156565b61305291906141c7565b6016600082825461306391906142f6565b92505081905550600c54600d548261307b9190614156565b61308591906141c7565b6014600082825461309691906142f6565b925050819055505b5b60008111156130b4576130b38730836131dd565b5b80856130c09190614aa9565b94505b6130ce8787876131dd565b505050505b505050565b6000838311158290613120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131179190613c4c565b60405180910390fd5b506000838561312f9190614aa9565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361324c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324390614867565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b2906148f9565b60405180910390fd5b6132c68383836137f1565b61333181604051806060016040528060268152602001614e94602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133c4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134639190613d8c565b60405180910390a3505050565b600061347b306112b4565b9050600060165460145460155461349291906142f6565b61349c91906142f6565b905060008214806134ad5750600081145b156134b957505061372b565b6000600282601554856134cc9190614156565b6134d691906141c7565b6134e091906141c7565b905060006134f782856137f690919063ffffffff16565b9050600047905061350782613840565b600061351c82476137f690919063ffffffff16565b90506000613547866135396014548561372d90919063ffffffff16565b6137a790919063ffffffff16565b90506000613572876135646016548661372d90919063ffffffff16565b6137a790919063ffffffff16565b905060008183856135839190614aa9565b61358d9190614aa9565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516135ef90614b0e565b60006040518083038185875af1925050503d806000811461362c576040519150601f19603f3d011682016040523d82523d6000602084013e613631565b606091505b505090506000881180156136455750600082115b15613692576136548883613a7d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360155460405161368993929190614b23565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136d890614b0e565b60006040518083038185875af1925050503d8060008114613715576040519150601f19603f3d011682016040523d82523d6000602084013e61371a565b606091505b505080915050505050505050505050505b565b600080830361373f57600090506137a1565b6000828461374d9190614156565b905082848261375c91906141c7565b1461379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614bcc565b60405180910390fd5b809150505b92915050565b60006137e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b59565b905092915050565b505050565b600061383883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130d8565b905092915050565b6000600267ffffffffffffffff81111561385d5761385c614bec565b5b60405190808252806020026020018201604052801561388b5781602001602082028036833780820191505090505b50905030816000815181106138a3576138a2614c1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396c9190614c5f565b816001815181106139805761397f614c1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e5307f00000000000000000000000000000000000000000000000000000000000000008461259d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a47959493929190614d85565b600060405180830381600087803b158015613a6157600080fd5b505af1158015613a75573d6000803e3d6000fd5b505050505050565b613aa8307f00000000000000000000000000000000000000000000000000000000000000008461259d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b0f96959493929190614ddf565b60606040518083038185885af1158015613b2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b529190614e40565b5050505050565b60008083118290613ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b979190613c4c565b60405180910390fd5b5060008385613baf91906141c7565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bf6578082015181840152602081019050613bdb565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c1e82613bbc565b613c288185613bc7565b9350613c38818560208601613bd8565b613c4181613c02565b840191505092915050565b60006020820190508181036000830152613c668184613c13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c9e82613c73565b9050919050565b613cae81613c93565b8114613cb957600080fd5b50565b600081359050613ccb81613ca5565b92915050565b6000819050919050565b613ce481613cd1565b8114613cef57600080fd5b50565b600081359050613d0181613cdb565b92915050565b60008060408385031215613d1e57613d1d613c6e565b5b6000613d2c85828601613cbc565b9250506020613d3d85828601613cf2565b9150509250929050565b60008115159050919050565b613d5c81613d47565b82525050565b6000602082019050613d776000830184613d53565b92915050565b613d8681613cd1565b82525050565b6000602082019050613da16000830184613d7d565b92915050565b600060208284031215613dbd57613dbc613c6e565b5b6000613dcb84828501613cf2565b91505092915050565b600060208284031215613dea57613de9613c6e565b5b6000613df884828501613cbc565b91505092915050565b6000819050919050565b6000613e26613e21613e1c84613c73565b613e01565b613c73565b9050919050565b6000613e3882613e0b565b9050919050565b6000613e4a82613e2d565b9050919050565b613e5a81613e3f565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600080600060608486031215613e9457613e93613c6e565b5b6000613ea286828701613cbc565b9350506020613eb386828701613cbc565b9250506040613ec486828701613cf2565b9150509250925092565b613ed781613c93565b82525050565b6000602082019050613ef26000830184613ece565b92915050565b600060ff82169050919050565b613f0e81613ef8565b82525050565b6000602082019050613f296000830184613f05565b92915050565b613f3881613d47565b8114613f4357600080fd5b50565b600081359050613f5581613f2f565b92915050565b60008060408385031215613f7257613f71613c6e565b5b6000613f8085828601613cbc565b9250506020613f9185828601613f46565b9150509250929050565b600080600060608486031215613fb457613fb3613c6e565b5b6000613fc286828701613cf2565b9350506020613fd386828701613cf2565b9250506040613fe486828701613cf2565b9150509250925092565b60006020828403121561400457614003613c6e565b5b600061401284828501613f46565b91505092915050565b6000806040838503121561403257614031613c6e565b5b600061404085828601613cbc565b925050602061405185828601613cbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a257607f821691505b6020821081036140b5576140b461405b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140f1602083613bc7565b91506140fc826140bb565b602082019050919050565b60006020820190508181036000830152614120816140e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416182613cd1565b915061416c83613cd1565b925082820261417a81613cd1565b9150828204841483151761419157614190614127565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d282613cd1565b91506141dd83613cd1565b9250826141ed576141ec614198565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614254602f83613bc7565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006142c0601f83613bc7565b91506142cb8261428a565b602082019050919050565b600060208201905081810360008301526142ef816142b3565b9050919050565b600061430182613cd1565b915061430c83613cd1565b925082820190508082111561432457614323614127565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614360601d83613bc7565b915061436b8261432a565b602082019050919050565b6000602082019050818103600083015261438f81614353565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006143f2603983613bc7565b91506143fd82614396565b604082019050919050565b60006020820190508181036000830152614421816143e5565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000614484602c83613bc7565b915061448f82614428565b604082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b6000815190506144c981613cdb565b92915050565b6000602082840312156144e5576144e4613c6e565b5b60006144f3848285016144ba565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000614532601083613bc7565b915061453d826144fc565b602082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b600060408201905061457d6000830185613ece565b61458a6020830184613d7d565b9392505050565b6000815190506145a081613f2f565b92915050565b6000602082840312156145bc576145bb613c6e565b5b60006145ca84828501614591565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061462f602683613bc7565b915061463a826145d3565b604082019050919050565b6000602082019050818103600083015261465e81614622565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061469b601b83613bc7565b91506146a682614665565b602082019050919050565b600060208201905081810360008301526146ca8161468e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061472d602483613bc7565b9150614738826146d1565b604082019050919050565b6000602082019050818103600083015261475c81614720565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147bf602283613bc7565b91506147ca82614763565b604082019050919050565b600060208201905081810360008301526147ee816147b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614851602583613bc7565b915061485c826147f5565b604082019050919050565b6000602082019050818103600083015261488081614844565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148e3602383613bc7565b91506148ee82614887565b604082019050919050565b60006020820190508181036000830152614912816148d6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614975603583613bc7565b915061498082614919565b604082019050919050565b600060208201905081810360008301526149a481614968565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149e1601383613bc7565b91506149ec826149ab565b602082019050919050565b60006020820190508181036000830152614a10816149d4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a73603683613bc7565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b6000614ab482613cd1565b9150614abf83613cd1565b9250828203905081811115614ad757614ad6614127565b5b92915050565b600081905092915050565b50565b6000614af8600083614add565b9150614b0382614ae8565b600082019050919050565b6000614b1982614aeb565b9150819050919050565b6000606082019050614b386000830186613d7d565b614b456020830185613d7d565b614b526040830184613d7d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb6602183613bc7565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c5981613ca5565b92915050565b600060208284031215614c7557614c74613c6e565b5b6000614c8384828501614c4a565b91505092915050565b6000819050919050565b6000614cb1614cac614ca784614c8c565b613e01565b613cd1565b9050919050565b614cc181614c96565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cfc81613c93565b82525050565b6000614d0e8383614cf3565b60208301905092915050565b6000602082019050919050565b6000614d3282614cc7565b614d3c8185614cd2565b9350614d4783614ce3565b8060005b83811015614d78578151614d5f8882614d02565b9750614d6a83614d1a565b925050600181019050614d4b565b5085935050505092915050565b600060a082019050614d9a6000830188613d7d565b614da76020830187614cb8565b8181036040830152614db98186614d27565b9050614dc86060830185613ece565b614dd56080830184613d7d565b9695505050505050565b600060c082019050614df46000830189613ece565b614e016020830188613d7d565b614e0e6040830187614cb8565b614e1b6060830186614cb8565b614e286080830185613ece565b614e3560a0830184613d7d565b979650505050505050565b600080600060608486031215614e5957614e58613c6e565b5b6000614e67868287016144ba565b9350506020614e78868287016144ba565b9250506040614e89868287016144ba565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e08e31a74db67c7f3ceae700205050f2985cb6db243a63bb4ba854eb02d61ed64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063865efdc811610175578063c17b5b8c116100dc578063dfdb5ae411610095578063f11a24d31161006f578063f11a24d314610b1b578063f2fde38b14610b46578063f637434214610b6f578063f8b45b0514610b9a576102d4565b8063dfdb5ae414610a9c578063e083e92214610ac7578063e2f4560514610af0576102d4565b8063c17b5b8c14610978578063c616403f146109a1578063c8c8ebe4146109cc578063d257b34f146109f7578063d85ba06314610a34578063dd62ed3e14610a5f576102d4565b8063a0d82dc51161012e578063a0d82dc514610842578063a457c2d71461086d578063a9059cbb146108aa578063b115e4df146108e7578063b62496f514610912578063c02466681461094f576102d4565b8063865efdc8146107465780638da5cb5b1461076f578063924de9b71461079a57806395d89b41146107c35780639a7a23d6146107ee5780639c3b4fdc14610817576102d4565b806327c8f835116102345780636a486a8e116101ed578063715018a6116101c7578063715018a6146106c65780637571336a146106dd5780637fa787ba146107065780638095d5641461071d576102d4565b80636a486a8e146106335780636ddd17131461065e57806370a0823114610689576102d4565b806327c8f8351461050d578063313ce56714610538578063382b185f14610563578063395093511461058e57806349bd5a5e146105cb5780634fbee193146105f6576102d4565b806318160ddd1161028657806318160ddd146103fd5780631816467f146104285780631a8145bb146104515780631c499ab01461047c5780631f3fed8f146104a557806323b872dd146104d0576102d4565b806306fdde03146102d9578063095ea7b3146103045780630b166d5014610341578063106b5da11461036c57806310d5de53146103955780631694505e146103d2576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610bc5565b6040516102fb9190613c4c565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613d07565b610c57565b6040516103389190613d62565b60405180910390f35b34801561034d57600080fd5b50610356610c75565b6040516103639190613d8c565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190613da7565b610c7b565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190613dd4565b610da5565b6040516103c99190613d62565b60405180910390f35b3480156103de57600080fd5b506103e7610dc5565b6040516103f49190613e60565b60405180910390f35b34801561040957600080fd5b50610412610de9565b60405161041f9190613d8c565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613dd4565b610df3565b005b34801561045d57600080fd5b50610466610f4a565b6040516104739190613d8c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190613da7565b610f50565b005b3480156104b157600080fd5b506104ba61107a565b6040516104c79190613d8c565b60405180910390f35b3480156104dc57600080fd5b506104f760048036038101906104f29190613e7b565b611080565b6040516105049190613d62565b60405180910390f35b34801561051957600080fd5b50610522611159565b60405161052f9190613edd565b60405180910390f35b34801561054457600080fd5b5061054d61115f565b60405161055a9190613f14565b60405180910390f35b34801561056f57600080fd5b50610578611168565b6040516105859190613d8c565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613d07565b61116e565b6040516105c29190613d62565b60405180910390f35b3480156105d757600080fd5b506105e0611221565b6040516105ed9190613edd565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613dd4565b611245565b60405161062a9190613d62565b60405180910390f35b34801561063f57600080fd5b5061064861129b565b6040516106559190613d8c565b60405180910390f35b34801561066a57600080fd5b506106736112a1565b6040516106809190613d62565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190613dd4565b6112b4565b6040516106bd9190613d8c565b60405180910390f35b3480156106d257600080fd5b506106db6112fc565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613f5b565b611454565b005b34801561071257600080fd5b5061071b611546565b005b34801561072957600080fd5b50610744600480360381019061073f9190613f9b565b611670565b005b34801561075257600080fd5b5061076d60048036038101906107689190613dd4565b61178a565b005b34801561077b57600080fd5b506107846118e1565b6040516107919190613edd565b60405180910390f35b3480156107a657600080fd5b506107c160048036038101906107bc9190613fee565b61190b565b005b3480156107cf57600080fd5b506107d86119bf565b6040516107e59190613c4c565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613f5b565b611a51565b005b34801561082357600080fd5b5061082c611b84565b6040516108399190613d8c565b60405180910390f35b34801561084e57600080fd5b50610857611b8a565b6040516108649190613d8c565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613d07565b611b90565b6040516108a19190613d62565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc9190613d07565b611c5d565b6040516108de9190613d62565b60405180910390f35b3480156108f357600080fd5b506108fc611c7b565b6040516109099190613edd565b60405180910390f35b34801561091e57600080fd5b5061093960048036038101906109349190613dd4565b611ca1565b6040516109469190613d62565b60405180910390f35b34801561095b57600080fd5b5061097660048036038101906109719190613f5b565b611cc1565b005b34801561098457600080fd5b5061099f600480360381019061099a9190613f9b565b611e01565b005b3480156109ad57600080fd5b506109b6611f1b565b6040516109c39190613d8c565b60405180910390f35b3480156109d857600080fd5b506109e1611f21565b6040516109ee9190613d8c565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613da7565b611f27565b604051610a2b9190613d62565b60405180910390f35b348015610a4057600080fd5b50610a49611fe3565b604051610a569190613d8c565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a81919061401b565b611fe9565b604051610a939190613d8c565b60405180910390f35b348015610aa857600080fd5b50610ab1612070565b604051610abe9190613edd565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190613dd4565b612096565b005b348015610afc57600080fd5b50610b05612359565b604051610b129190613d8c565b60405180910390f35b348015610b2757600080fd5b50610b3061235f565b604051610b3d9190613d8c565b60405180910390f35b348015610b5257600080fd5b50610b6d6004803603810190610b689190613dd4565b612365565b005b348015610b7b57600080fd5b50610b8461252b565b604051610b919190613d8c565b60405180910390f35b348015610ba657600080fd5b50610baf612531565b604051610bbc9190613d8c565b60405180910390f35b606060038054610bd49061408a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c009061408a565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b5050505050905090565b6000610c6b610c64612595565b848461259d565b6001905092915050565b60165481565b610c83612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990614107565b60405180910390fd5b670de0b6b3a76400006103e86005610d28610de9565b610d329190614156565b610d3c91906141c7565b610d4691906141c7565b811015610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f9061426a565b60405180910390fd5b670de0b6b3a764000081610d9c9190614156565b60088190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610dfb612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8190614107565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610f58612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614107565b60405180910390fd5b670de0b6b3a76400006103e86005610ffd610de9565b6110079190614156565b61101191906141c7565b61101b91906141c7565b81101561105d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110549061426a565b60405180910390fd5b670de0b6b3a7640000816110719190614156565b600a8190555050565b60145481565b600061108d848484612766565b61114e84611099612595565b61114985604051806060016040528060288152602001614eba60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110ff612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b61259d565b600190509392505050565b61dead81565b60006012905090565b60135481565b600061121761117b612595565b84611212856001600061118c612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253790919063ffffffff16565b61259d565b6001905092915050565b7f00000000000000000000000016e42c6f4884d3898599a2f5e8b93dfce3916fab81565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611304612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61145c612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e290614107565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61154e612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614107565b60405180910390fd5b60004711611620576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611617906142d6565b60405180910390fd5b6116286118e1565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561166d573d6000803e3d6000fd5b50565b611678612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fe90614107565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d5461172f91906142f6565b61173991906142f6565b600c81905550600f600c541115611785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177c90614376565b60405180910390fd5b505050565b611792612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890614107565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f32a7ddcee9d75ed9d43e0e669a5fffd673082cfbba1727d3f8d682e9b24decd560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611913612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614107565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6060600480546119ce9061408a565b80601f01602080910402602001604051908101604052809291908181526020018280546119fa9061408a565b8015611a475780601f10611a1c57610100808354040283529160200191611a47565b820191906000526020600020905b815481529060010190602001808311611a2a57829003601f168201915b5050505050905090565b611a59612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90614107565b60405180910390fd5b7f00000000000000000000000016e42c6f4884d3898599a2f5e8b93dfce3916fab73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614408565b60405180910390fd5b611b80828261313c565b5050565b600d5481565b60115481565b6000611c53611b9d612595565b84611c4e85604051806060016040528060258152602001614ee26025913960016000611bc7612595565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b61259d565b6001905092915050565b6000611c71611c6a612595565b8484612766565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b611cc9612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f90614107565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611df59190613d62565b60405180910390a25050565b611e09612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90614107565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611ec091906142f6565b611eca91906142f6565b601081905550600f6010541115611f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0d90614376565b60405180910390fd5b505050565b600f5481565b60085481565b6000611f31612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790614107565b60405180910390fd5b670de0b6b3a764000082611fd49190614156565b60098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61209e612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490614107565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361219b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121929061449a565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121d69190613edd565b602060405180830381865afa1580156121f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221791906144cf565b11612257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224e90614548565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61227b6118e1565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122b49190613edd565b602060405180830381865afa1580156122d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f591906144cf565b6040518363ffffffff1660e01b8152600401612312929190614568565b6020604051808303816000875af1158015612331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235591906145a6565b5050565b60095481565b600e5481565b61236d612595565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f390614107565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614645565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461254691906142f6565b90508381101561258b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612582906146b1565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614743565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361267b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612672906147d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127599190613d8c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc90614867565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283b906148f9565b60405180910390fd5b6000810361285d57612858838360006131dd565b6130d3565b6128656118e1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128d357506128a36118e1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561290c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612946575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f5750600560149054906101000a900460ff16155b15612bfb57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a075750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612aae57600854811115612a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a489061498b565b60405180910390fd5b600a54612a5d836112b4565b82612a6891906142f6565b1115612aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa0906149f7565b60405180910390fd5b612bfa565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b515750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ba057600854811115612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614a89565b60405180910390fd5b612bf9565b600a54612bac836112b4565b82612bb791906142f6565b1115612bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bef906149f7565b60405180910390fd5b5b5b5b6000612c06306112b4565b905060006009548210159050808015612c2b5750600b60009054906101000a900460ff165b8015612c445750600560149054906101000a900460ff16155b8015612c9a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf05750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d465750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8a576001600560146101000a81548160ff021916908315150217905550612d6e613470565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e405750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e4a57600090505b600081156130c357601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ead57506000601054115b15612f7a57612eda6064612ecc6010548861372d90919063ffffffff16565b6137a790919063ffffffff16565b905060105460125482612eed9190614156565b612ef791906141c7565b60156000828254612f0891906142f6565b9250508190555060105460135482612f209190614156565b612f2a91906141c7565b60166000828254612f3b91906142f6565b9250508190555060105460115482612f539190614156565b612f5d91906141c7565b60146000828254612f6e91906142f6565b9250508190555061309f565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fd557506000600c54115b1561309e576130026064612ff4600c548861372d90919063ffffffff16565b6137a790919063ffffffff16565b9050600c54600e54826130159190614156565b61301f91906141c7565b6015600082825461303091906142f6565b92505081905550600c54600f54826130489190614156565b61305291906141c7565b6016600082825461306391906142f6565b92505081905550600c54600d548261307b9190614156565b61308591906141c7565b6014600082825461309691906142f6565b925050819055505b5b60008111156130b4576130b38730836131dd565b5b80856130c09190614aa9565b94505b6130ce8787876131dd565b505050505b505050565b6000838311158290613120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131179190613c4c565b60405180910390fd5b506000838561312f9190614aa9565b9050809150509392505050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361324c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324390614867565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b2906148f9565b60405180910390fd5b6132c68383836137f1565b61333181604051806060016040528060268152602001614e94602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130d89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133c4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134639190613d8c565b60405180910390a3505050565b600061347b306112b4565b9050600060165460145460155461349291906142f6565b61349c91906142f6565b905060008214806134ad5750600081145b156134b957505061372b565b6000600282601554856134cc9190614156565b6134d691906141c7565b6134e091906141c7565b905060006134f782856137f690919063ffffffff16565b9050600047905061350782613840565b600061351c82476137f690919063ffffffff16565b90506000613547866135396014548561372d90919063ffffffff16565b6137a790919063ffffffff16565b90506000613572876135646016548661372d90919063ffffffff16565b6137a790919063ffffffff16565b905060008183856135839190614aa9565b61358d9190614aa9565b90506000601581905550600060148190555060006016819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516135ef90614b0e565b60006040518083038185875af1925050503d806000811461362c576040519150601f19603f3d011682016040523d82523d6000602084013e613631565b606091505b505090506000881180156136455750600082115b15613692576136548883613a7d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878360155460405161368993929190614b23565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516136d890614b0e565b60006040518083038185875af1925050503d8060008114613715576040519150601f19603f3d011682016040523d82523d6000602084013e61371a565b606091505b505080915050505050505050505050505b565b600080830361373f57600090506137a1565b6000828461374d9190614156565b905082848261375c91906141c7565b1461379c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379390614bcc565b60405180910390fd5b809150505b92915050565b60006137e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b59565b905092915050565b505050565b600061383883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130d8565b905092915050565b6000600267ffffffffffffffff81111561385d5761385c614bec565b5b60405190808252806020026020018201604052801561388b5781602001602082028036833780820191505090505b50905030816000815181106138a3576138a2614c1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061396c9190614c5f565b816001815181106139805761397f614c1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461259d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613a47959493929190614d85565b600060405180830381600087803b158015613a6157600080fd5b505af1158015613a75573d6000803e3d6000fd5b505050505050565b613aa8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461259d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613b0f96959493929190614ddf565b60606040518083038185885af1158015613b2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b529190614e40565b5050505050565b60008083118290613ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b979190613c4c565b60405180910390fd5b5060008385613baf91906141c7565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bf6578082015181840152602081019050613bdb565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c1e82613bbc565b613c288185613bc7565b9350613c38818560208601613bd8565b613c4181613c02565b840191505092915050565b60006020820190508181036000830152613c668184613c13565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c9e82613c73565b9050919050565b613cae81613c93565b8114613cb957600080fd5b50565b600081359050613ccb81613ca5565b92915050565b6000819050919050565b613ce481613cd1565b8114613cef57600080fd5b50565b600081359050613d0181613cdb565b92915050565b60008060408385031215613d1e57613d1d613c6e565b5b6000613d2c85828601613cbc565b9250506020613d3d85828601613cf2565b9150509250929050565b60008115159050919050565b613d5c81613d47565b82525050565b6000602082019050613d776000830184613d53565b92915050565b613d8681613cd1565b82525050565b6000602082019050613da16000830184613d7d565b92915050565b600060208284031215613dbd57613dbc613c6e565b5b6000613dcb84828501613cf2565b91505092915050565b600060208284031215613dea57613de9613c6e565b5b6000613df884828501613cbc565b91505092915050565b6000819050919050565b6000613e26613e21613e1c84613c73565b613e01565b613c73565b9050919050565b6000613e3882613e0b565b9050919050565b6000613e4a82613e2d565b9050919050565b613e5a81613e3f565b82525050565b6000602082019050613e756000830184613e51565b92915050565b600080600060608486031215613e9457613e93613c6e565b5b6000613ea286828701613cbc565b9350506020613eb386828701613cbc565b9250506040613ec486828701613cf2565b9150509250925092565b613ed781613c93565b82525050565b6000602082019050613ef26000830184613ece565b92915050565b600060ff82169050919050565b613f0e81613ef8565b82525050565b6000602082019050613f296000830184613f05565b92915050565b613f3881613d47565b8114613f4357600080fd5b50565b600081359050613f5581613f2f565b92915050565b60008060408385031215613f7257613f71613c6e565b5b6000613f8085828601613cbc565b9250506020613f9185828601613f46565b9150509250929050565b600080600060608486031215613fb457613fb3613c6e565b5b6000613fc286828701613cf2565b9350506020613fd386828701613cf2565b9250506040613fe486828701613cf2565b9150509250925092565b60006020828403121561400457614003613c6e565b5b600061401284828501613f46565b91505092915050565b6000806040838503121561403257614031613c6e565b5b600061404085828601613cbc565b925050602061405185828601613cbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140a257607f821691505b6020821081036140b5576140b461405b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006140f1602083613bc7565b91506140fc826140bb565b602082019050919050565b60006020820190508181036000830152614120816140e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416182613cd1565b915061416c83613cd1565b925082820261417a81613cd1565b9150828204841483151761419157614190614127565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d282613cd1565b91506141dd83613cd1565b9250826141ed576141ec614198565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614254602f83613bc7565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b7f43616e2774207769746864726177206e65676174697665206f72207a65726f00600082015250565b60006142c0601f83613bc7565b91506142cb8261428a565b602082019050919050565b600060208201905081810360008301526142ef816142b3565b9050919050565b600061430182613cd1565b915061430c83613cd1565b925082820190508082111561432457614323614127565b5b92915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614360601d83613bc7565b915061436b8261432a565b602082019050919050565b6000602082019050818103600083015261438f81614353565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006143f2603983613bc7565b91506143fd82614396565b604082019050919050565b60006020820190508181036000830152614421816143e5565b9050919050565b7f43616e277420776974686472617720746f6b656e732064657374696e6564206660008201527f6f72206c69717569646974790000000000000000000000000000000000000000602082015250565b6000614484602c83613bc7565b915061448f82614428565b604082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b6000815190506144c981613cdb565b92915050565b6000602082840312156144e5576144e4613c6e565b5b60006144f3848285016144ba565b91505092915050565b7f43616e2774207769746864726177203000000000000000000000000000000000600082015250565b6000614532601083613bc7565b915061453d826144fc565b602082019050919050565b6000602082019050818103600083015261456181614525565b9050919050565b600060408201905061457d6000830185613ece565b61458a6020830184613d7d565b9392505050565b6000815190506145a081613f2f565b92915050565b6000602082840312156145bc576145bb613c6e565b5b60006145ca84828501614591565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061462f602683613bc7565b915061463a826145d3565b604082019050919050565b6000602082019050818103600083015261465e81614622565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061469b601b83613bc7565b91506146a682614665565b602082019050919050565b600060208201905081810360008301526146ca8161468e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061472d602483613bc7565b9150614738826146d1565b604082019050919050565b6000602082019050818103600083015261475c81614720565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147bf602283613bc7565b91506147ca82614763565b604082019050919050565b600060208201905081810360008301526147ee816147b2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614851602583613bc7565b915061485c826147f5565b604082019050919050565b6000602082019050818103600083015261488081614844565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148e3602383613bc7565b91506148ee82614887565b604082019050919050565b60006020820190508181036000830152614912816148d6565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614975603583613bc7565b915061498082614919565b604082019050919050565b600060208201905081810360008301526149a481614968565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149e1601383613bc7565b91506149ec826149ab565b602082019050919050565b60006020820190508181036000830152614a10816149d4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a73603683613bc7565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b6000614ab482613cd1565b9150614abf83613cd1565b9250828203905081811115614ad757614ad6614127565b5b92915050565b600081905092915050565b50565b6000614af8600083614add565b9150614b0382614ae8565b600082019050919050565b6000614b1982614aeb565b9150819050919050565b6000606082019050614b386000830186613d7d565b614b456020830185613d7d565b614b526040830184613d7d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bb6602183613bc7565b9150614bc182614b5a565b604082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c5981613ca5565b92915050565b600060208284031215614c7557614c74613c6e565b5b6000614c8384828501614c4a565b91505092915050565b6000819050919050565b6000614cb1614cac614ca784614c8c565b613e01565b613cd1565b9050919050565b614cc181614c96565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cfc81613c93565b82525050565b6000614d0e8383614cf3565b60208301905092915050565b6000602082019050919050565b6000614d3282614cc7565b614d3c8185614cd2565b9350614d4783614ce3565b8060005b83811015614d78578151614d5f8882614d02565b9750614d6a83614d1a565b925050600181019050614d4b565b5085935050505092915050565b600060a082019050614d9a6000830188613d7d565b614da76020830187614cb8565b8181036040830152614db98186614d27565b9050614dc86060830185613ece565b614dd56080830184613d7d565b9695505050505050565b600060c082019050614df46000830189613ece565b614e016020830188613d7d565b614e0e6040830187614cb8565b614e1b6060830186614cb8565b614e286080830185613ece565b614e3560a0830184613d7d565b979650505050505050565b600080600060608486031215614e5957614e58613c6e565b5b6000614e67868287016144ba565b9350506020614e78868287016144ba565b9250506040614e89868287016144ba565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e08e31a74db67c7f3ceae700205050f2985cb6db243a63bb4ba854eb02d61ed64736f6c63430008110033

Deployed Bytecode Sourcemap

29434:14112:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9757:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30295:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34265:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30480:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29516:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8710:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36454:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34506:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30215:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10408:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29619:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8552:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30177:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11172:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29574:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36803:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30072:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8881:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:148;;;;;;;;;;;;;:::i;:::-;;34740:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42996:194;;;;;;;;;;;;;:::i;:::-;;35097:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36632:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21413:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34984:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7809:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36006:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29967:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30107:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11893:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9221:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30702:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35816:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35454:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30035:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29779:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34087:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29933:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9459:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29742:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43198:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29821:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29998:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22358:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30139:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29861:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:100;7644:13;7677:5;7670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7590: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;30295:31::-;;;;:::o;34265:233::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34381:4:::1;34375;34371:1;34355:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34354:31;;;;:::i;:::-;34344:6;:41;;34336:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34481:6;34471;:17;;;;:::i;:::-;34448:20;:40;;;;34265:233:::0;:::o;30480:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29516:51::-;;;:::o;8710:108::-;8771:7;8798:12;;8791:19;;8710:108;:::o;36454:166::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36567:9:::1;;;;;;;;;;;36536:41;;36553:12;36536:41;;;;;;;;;;;;36600:12;36588:9;;:24;;;;;;;;;;;;;;;;;;36454:166:::0;:::o;30255:33::-;;;;:::o;34506:222::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34622:4:::1;34616;34612:1;34596:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34595:31;;;;:::i;:::-;34585:6;:41;;34577:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34711:6;34701;:17;;;;:::i;:::-;34689:9;:29;;;;34506:222:::0;:::o;30215:33::-;;;;:::o;10408:355::-;10548:4;10565:36;10575:6;10583:9;10594:6;10565:9;:36::i;:::-;10612:121;10621:6;10629:12;:10;:12::i;:::-;10643:89;10681:6;10643:89;;;;;;;;;;;;;;;;;:11;:19;10655:6;10643:19;;;;;;;;;;;;;;;:33;10663:12;:10;:12::i;:::-;10643:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10612:8;:121::i;:::-;10751:4;10744:11;;10408:355;;;;;:::o;29619:53::-;29665:6;29619:53;:::o;8552:93::-;8610:5;8635:2;8628:9;;8552:93;:::o;30177:25::-;;;;:::o;11172:218::-;11260:4;11277:83;11286:12;:10;:12::i;:::-;11300:7;11309:50;11348:10;11309:11;:25;11321:12;:10;:12::i;:::-;11309:25;;;;;;;;;;;;;;;:34;11335:7;11309:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11277:8;:83::i;:::-;11378:4;11371:11;;11172:218;;;;:::o;29574:38::-;;;:::o;36803:125::-;36868:4;36892:19;:28;36912:7;36892:28;;;;;;;;;;;;;;;;;;;;;;;;;36885:35;;36803:125;;;:::o;30072:28::-;;;;:::o;29894:30::-;;;;;;;;;;;;;:::o;8881:127::-;8955:7;8982:9;:18;8992:7;8982:18;;;;;;;;;;;;;;;;8975:25;;8881:127;;;:::o;22055:148::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22162:1:::1;22125:40;;22146:6;;;;;;;;;;;22125:40;;;;;;;;;;;;22193:1;22176:6;;:19;;;;;;;;;;;;;;;;;;22055:148::o:0;34740:144::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34872:4:::1;34830:31;:39;34862:6;34830:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34740:144:::0;;:::o;42996:194::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43086:1:::1;43062:21;:25;43053:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43142:7;:5;:7::i;:::-;43134:25;;:48;43160:21;43134:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42996:194::o:0;35097:345::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35219:7:::1;35207:9;:19;;;;35255:13;35237:15;:31;;;;35291:7;35279:9;:19;;;;35354:9;;35336:15;;35324:9;;:27;;;;:::i;:::-;:39;;;;:::i;:::-;35309:12;:54;;;;35398:2;35382:12;;:18;;35374:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35097:345:::0;;;:::o;36632:157::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36739:9:::1;;;;;;;;;;;36711:38;;36728:9;36711:38;;;;;;;;;;;;36772:9;36760;;:21;;;;;;;;;;;;;;;;;;36632:157:::0;:::o;21413:79::-;21451:7;21478:6;;;;;;;;;;;21471:13;;21413:79;:::o;34984:101::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35070:7:::1;35056:11;;:21;;;;;;;;;;;;;;;;;;34984:101:::0;:::o;7809:104::-;7865:13;7898:7;7891:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7809:104;:::o;36006:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36113:13:::1;36105:21;;:4;:21;;::::0;36097:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36201:41;36230:4;36236:5;36201:28;:41::i;:::-;36006:244:::0;;:::o;29967:24::-;;;;:::o;30107:25::-;;;;:::o;11893:269::-;11986:4;12003:129;12012:12;:10;:12::i;:::-;12026:7;12035:96;12074:15;12035:96;;;;;;;;;;;;;;;;;:11;:25;12047:12;:10;:12::i;:::-;12035:25;;;;;;;;;;;;;;;:34;12061:7;12035:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12003:8;:129::i;:::-;12150:4;12143:11;;11893:269;;;;:::o;9221:175::-;9307:4;9324:42;9334:12;:10;:12::i;:::-;9348:9;9359:6;9324:9;:42::i;:::-;9384:4;9377:11;;9221:175;;;;:::o;29711:24::-;;;;;;;;;;;;;:::o;30702:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;35816:182::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35932:8:::1;35901:19;:28;35921:7;35901:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35972:7;35956:34;;;35981:8;35956:34;;;;;;:::i;:::-;;;;;;;;35816:182:::0;;:::o;35454:354::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35578:7:::1;35565:10;:20;;;;35615:13;35596:16;:32;;;;35652:7;35639:10;:20;;;;35718:10;;35699:16;;35686:10;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;35670:13;:58;;;;35764:2;35747:13;;:19;;35739:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35454:354:::0;;;:::o;30035:24::-;;;;:::o;29779:35::-;;;;:::o;34087:166::-;34168:4;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34217:6:::1;34204:9;:20;;;;:::i;:::-;34183:18;:41;;;;34242:4;34235:11;;34087:166:::0;;;:::o;29933:27::-;;;;:::o;9459:151::-;9548:7;9575:11;:18;9587:5;9575:18;;;;;;;;;;;;;;;:27;9594:7;9575:27;;;;;;;;;;;;;;;;9568:34;;9459:151;;;;:::o;29742:24::-;;;;;;;;;;;;;:::o;43198:339::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43300:4:::1;43280:25;;:8;:25;;::::0;43272:82:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43417:1;43380:8;43373:26;;;43408:4;43373:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;43365:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;43459:8;43452:25;;;43478:7;:5;:7::i;:::-;43494:8;43487:26;;;43522:4;43487:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43452:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43198:339:::0;:::o;29821:33::-;;;;:::o;29998:30::-;;;;:::o;22358:244::-;21635:12;:10;:12::i;:::-;21625:22;;:6;;;;;;;;;;;:22;;;21617:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22467:1:::1;22447:22;;:8;:22;;::::0;22439:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:8;22528:38;;22549:6;;;;;;;;;;;22528:38;;;;;;;;;;;;22586:8;22577:6;;:17;;;;;;;;;;;;;;;;;;22358:244:::0;:::o;30139:31::-;;;;:::o;29861:24::-;;;;:::o;16457:181::-;16515:7;16535:9;16551:1;16547;:5;;;;:::i;:::-;16535:17;;16576:1;16571;:6;;16563:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16629:1;16622:8;;;16457:181;;;;:::o;226:98::-;279:7;306:10;299:17;;226:98;:::o;15079:380::-;15232:1;15215:19;;:5;:19;;;15207:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15313:1;15294:21;;:7;:21;;;15286:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15397:6;15367:11;:18;15379:5;15367:18;;;;;;;;;;;;;;;:27;15386:7;15367:27;;;;;;;;;;;;;;;:36;;;;15435:7;15419:32;;15428:5;15419:32;;;15444:6;15419:32;;;;;;:::i;:::-;;;;;;;;15079:380;;;:::o;36936:3327::-;37084:1;37068:18;;:4;:18;;;37060:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37161:1;37147:16;;:2;:16;;;37139:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37238:1;37228:6;:11;37225:92;;37256:28;37272:4;37278:2;37282:1;37256:15;:28::i;:::-;37299:7;;37225:92;37381:7;:5;:7::i;:::-;37373:15;;:4;:15;;;;:49;;;;;37415:7;:5;:7::i;:::-;37409:13;;:2;:13;;;;37373:49;:86;;;;;37457:1;37443:16;;:2;:16;;;;37373:86;:128;;;;;37494:6;37480:21;;:2;:21;;;;37373:128;:158;;;;;37523:8;;;;;;;;;;;37522:9;37373:158;37351:1014;;;37616:25;:31;37642:4;37616:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37652:31;:35;37684:2;37652:35;;;;;;;;;;;;;;;;;;;;;;;;;37651:36;37616:71;37612:738;;;37734:20;;37724:6;:30;;37716:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37873:9;;37856:13;37866:2;37856:9;:13::i;:::-;37847:6;:22;;;;:::i;:::-;:35;;37839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37612:738;;;38000:25;:29;38026:2;38000:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38034:31;:37;38066:4;38034:37;;;;;;;;;;;;;;;;;;;;;;;;;38033:38;38000:71;37996:354;;;38118:20;;38108:6;:30;;38100:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37996:354;;;38297:9;;38280:13;38290:2;38280:9;:13::i;:::-;38271:6;:22;;;;:::i;:::-;:35;;38263:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37996:354;37612:738;37351:1014;38399:28;38430:24;38448:4;38430:9;:24::i;:::-;38399:55;;38475:12;38514:18;;38490:20;:42;;38475:57;;38563:7;:35;;;;;38587:11;;;;;;;;;;;38563:35;:61;;;;;38616:8;;;;;;;;;;;38615:9;38563:61;:110;;;;;38642:25;:31;38668:4;38642:31;;;;;;;;;;;;;;;;;;;;;;;;;38641:32;38563:110;:153;;;;;38691:19;:25;38711:4;38691:25;;;;;;;;;;;;;;;;;;;;;;;;;38690:26;38563:153;:194;;;;;38734:19;:23;38754:2;38734:23;;;;;;;;;;;;;;;;;;;;;;;;;38733:24;38563:194;38545:338;;;38795:4;38784:8;;:15;;;;;;;;;;;;;;;;;;38828:10;:8;:10::i;:::-;38866:5;38855:8;;:16;;;;;;;;;;;;;;;;;;38545:338;38903:12;38919:8;;;;;;;;;;;38918:9;38903:24;;39028:19;:25;39048:4;39028:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39057:19;:23;39077:2;39057:23;;;;;;;;;;;;;;;;;;;;;;;;;39028:52;39025:99;;;39107:5;39097:15;;39025:99;39144:12;39248:7;39245:965;;;39301:25;:29;39327:2;39301:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39350:1;39334:13;;:17;39301:50;39297:744;;;39378:34;39408:3;39378:25;39389:13;;39378:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39371:41;;39479:13;;39460:16;;39453:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39431:18;;:61;;;;;;;:::i;:::-;;;;;;;;39551:13;;39538:10;;39531:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39511:16;;:53;;;;;;;:::i;:::-;;;;;;;;39625:13;;39612:10;;39605:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39583:18;;:55;;;;;;;:::i;:::-;;;;;;;;39297:744;;;39699:25;:31;39725:4;39699:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39749:1;39734:12;;:16;39699:51;39696:345;;;39775:33;39804:3;39775:24;39786:12;;39775:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39768:40;;39871:12;;39853:15;;39846:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39824:18;;:59;;;;;;;:::i;:::-;;;;;;;;39941:12;;39929:9;;39922:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39902:16;;:51;;;;;;;:::i;:::-;;;;;;;;40013:12;;40001:9;;39994:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39972:18;;:53;;;;;;;:::i;:::-;;;;;;;;39696:345;39297:744;40079:1;40072:4;:8;40069:93;;;40104:42;40120:4;40134;40141;40104:15;:42::i;:::-;40069:93;40194:4;40184:14;;;;;:::i;:::-;;;39245:965;40222:33;40238:4;40244:2;40248:6;40222:15;:33::i;:::-;37049:3214;;;;36936:3327;;;;:::o;17360:192::-;17446:7;17479:1;17474;:6;;17482:12;17466:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17506:9;17522:1;17518;:5;;;;:::i;:::-;17506:17;;17543:1;17536:8;;;17360:192;;;;;:::o;36258:188::-;36375:5;36341:25;:31;36367:4;36341:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36432:5;36398:40;;36426:4;36398:40;;;;;;;;;;;;36258:188;;:::o;12652:573::-;12810:1;12792:20;;:6;:20;;;12784:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12894:1;12873:23;;:9;:23;;;12865:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:47;12970:6;12978:9;12989:6;12949:20;:47::i;:::-;13029:71;13051:6;13029:71;;;;;;;;;;;;;;;;;:9;:17;13039:6;13029:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13009:9;:17;13019:6;13009:17;;;;;;;;;;;;;;;:91;;;;13134:32;13159:6;13134:9;:20;13144:9;13134:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13111:9;:20;13121:9;13111:20;;;;;;;;;;;;;;;:55;;;;13199:9;13182:35;;13191:6;13182:35;;;13210:6;13182:35;;;;;;:::i;:::-;;;;;;;;12652:573;;;:::o;41421:1567::-;41460:23;41486:24;41504:4;41486:9;:24::i;:::-;41460:50;;41521:25;41591:16;;41570:18;;41549;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;41521:86;;41650:1;41631:15;:20;:46;;;;41676:1;41655:17;:22;41631:46;41628:60;;;41680:7;;;;41628:60;41757:23;41842:1;41822:17;41801:18;;41783:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41757:86;;41854:26;41883:36;41903:15;41883;:19;;:36;;;;:::i;:::-;41854:65;;41940:25;41968:21;41940:49;;42002:36;42019:18;42002:16;:36::i;:::-;42060:18;42081:44;42107:17;42081:21;:25;;:44;;;;:::i;:::-;42060:65;;42146:23;42172:57;42211:17;42172:34;42187:18;;42172:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42146:83;;42240:21;42264:55;42301:17;42264:32;42279:16;;42264:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;42240:79;;42350:23;42407:13;42389:15;42376:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;42350:70;;42472:1;42451:18;:22;;;;42505:1;42484:18;:22;;;;42536:1;42517:16;:20;;;;42559:12;42584:9;;;;;;;;;;;42576:23;;42607:15;42576:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42558:69;;;42659:1;42641:15;:19;:42;;;;;42682:1;42664:15;:19;42641:42;42638:210;;;42699:46;42712:15;42729;42699:12;:46::i;:::-;42765:71;42780:18;42800:15;42817:18;;42765:71;;;;;;;;:::i;:::-;;;;;;;;42638:210;42931:9;;;;;;;;;;;42923:23;;42954:21;42923:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42910:70;;;;;41449:1539;;;;;;;;;;41421:1567;:::o;17811:471::-;17869:7;18119:1;18114;:6;18110:47;;18144:1;18137:8;;;;18110:47;18169:9;18185:1;18181;:5;;;;:::i;:::-;18169:17;;18214:1;18209;18205;:5;;;;:::i;:::-;:10;18197:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18273:1;18266:8;;;17811:471;;;;;:::o;18758:132::-;18816:7;18843:39;18847:1;18850;18843:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18836:46;;18758:132;;;;:::o;16062:125::-;;;;:::o;16921:136::-;16979:7;17006:43;17010:1;17013;17006:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16999:50;;16921:136;;;;:::o;40271:601::-;40399:21;40437:1;40423:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40399:40;;40468:4;40450;40455:1;40450:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40494:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40484:4;40489:1;40484:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40529:62;40546:4;40561:15;40579:11;40529:8;:62::i;:::-;40630:15;:66;;;40711:11;40737:1;40781:4;40808;40828:15;40630:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40326:546;40271:601;:::o;40896:517::-;41044:62;41061:4;41076:15;41094:11;41044:8;:62::i;:::-;41149:15;:31;;;41188:9;41221:4;41241:11;41267:1;41310;29665:6;41379:15;41149:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40896:517;;:::o;19386:278::-;19472:7;19504:1;19500;:5;19507:12;19492:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19531:9;19547:1;19543;:5;;;;:::i;:::-;19531:17;;19655:1;19648:8;;;19386:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:60::-;4496:3;4517:5;4510:12;;4468:60;;;:::o;4534:142::-;4584:9;4617:53;4635:34;4644:24;4662:5;4644:24;:::i;:::-;4635:34;:::i;:::-;4617:53;:::i;:::-;4604:66;;4534:142;;;:::o;4682:126::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4682:126;;;:::o;4814:153::-;4891:9;4924:37;4955:5;4924:37;:::i;:::-;4911:50;;4814:153;;;:::o;4973:185::-;5087:64;5145:5;5087:64;:::i;:::-;5082:3;5075:77;4973:185;;:::o;5164:276::-;5284:4;5322:2;5311:9;5307:18;5299:26;;5335:98;5430:1;5419:9;5415:17;5406:6;5335:98;:::i;:::-;5164:276;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:181::-;12675:33;12671:1;12663:6;12659:14;12652:57;12535:181;:::o;12722:366::-;12864:3;12885:67;12949:2;12944:3;12885:67;:::i;:::-;12878:74;;12961:93;13050:3;12961:93;:::i;:::-;13079:2;13074:3;13070:12;13063:19;;12722:366;;;:::o;13094:419::-;13260:4;13298:2;13287:9;13283:18;13275:26;;13347:9;13341:4;13337:20;13333:1;13322:9;13318:17;13311:47;13375:131;13501:4;13375:131;:::i;:::-;13367:139;;13094:419;;;:::o;13519:191::-;13559:3;13578:20;13596:1;13578:20;:::i;:::-;13573:25;;13612:20;13630:1;13612:20;:::i;:::-;13607:25;;13655:1;13652;13648:9;13641:16;;13676:3;13673:1;13670:10;13667:36;;;13683:18;;:::i;:::-;13667:36;13519:191;;;;:::o;13716:179::-;13856:31;13852:1;13844:6;13840:14;13833:55;13716:179;:::o;13901:366::-;14043:3;14064:67;14128:2;14123:3;14064:67;:::i;:::-;14057:74;;14140:93;14229:3;14140:93;:::i;:::-;14258:2;14253:3;14249:12;14242:19;;13901:366;;;:::o;14273:419::-;14439:4;14477:2;14466:9;14462:18;14454:26;;14526:9;14520:4;14516:20;14512:1;14501:9;14497:17;14490:47;14554:131;14680:4;14554:131;:::i;:::-;14546:139;;14273:419;;;:::o;14698:244::-;14838:34;14834:1;14826:6;14822:14;14815:58;14907:27;14902:2;14894:6;14890:15;14883:52;14698:244;:::o;14948:366::-;15090:3;15111:67;15175:2;15170:3;15111:67;:::i;:::-;15104:74;;15187:93;15276:3;15187:93;:::i;:::-;15305:2;15300:3;15296:12;15289:19;;14948:366;;;:::o;15320:419::-;15486:4;15524:2;15513:9;15509:18;15501:26;;15573:9;15567:4;15563:20;15559:1;15548:9;15544:17;15537:47;15601:131;15727:4;15601:131;:::i;:::-;15593:139;;15320:419;;;:::o;15745:231::-;15885:34;15881:1;15873:6;15869:14;15862:58;15954:14;15949:2;15941:6;15937:15;15930:39;15745:231;:::o;15982:366::-;16124:3;16145:67;16209:2;16204:3;16145:67;:::i;:::-;16138:74;;16221:93;16310:3;16221:93;:::i;:::-;16339:2;16334:3;16330:12;16323:19;;15982:366;;;:::o;16354:419::-;16520:4;16558:2;16547:9;16543:18;16535:26;;16607:9;16601:4;16597:20;16593:1;16582:9;16578:17;16571:47;16635:131;16761:4;16635:131;:::i;:::-;16627:139;;16354:419;;;:::o;16779:143::-;16836:5;16867:6;16861:13;16852:22;;16883:33;16910:5;16883:33;:::i;:::-;16779:143;;;;:::o;16928:351::-;16998:6;17047:2;17035:9;17026:7;17022:23;17018:32;17015:119;;;17053:79;;:::i;:::-;17015:119;17173:1;17198:64;17254:7;17245:6;17234:9;17230:22;17198:64;:::i;:::-;17188:74;;17144:128;16928:351;;;;:::o;17285:166::-;17425:18;17421:1;17413:6;17409:14;17402:42;17285:166;:::o;17457:366::-;17599:3;17620:67;17684:2;17679:3;17620:67;:::i;:::-;17613:74;;17696:93;17785:3;17696:93;:::i;:::-;17814:2;17809:3;17805:12;17798:19;;17457:366;;;:::o;17829:419::-;17995:4;18033:2;18022:9;18018:18;18010:26;;18082:9;18076:4;18072:20;18068:1;18057:9;18053:17;18046:47;18110:131;18236:4;18110:131;:::i;:::-;18102:139;;17829:419;;;:::o;18254:332::-;18375:4;18413:2;18402:9;18398:18;18390:26;;18426:71;18494:1;18483:9;18479:17;18470:6;18426:71;:::i;:::-;18507:72;18575:2;18564:9;18560:18;18551:6;18507:72;:::i;:::-;18254:332;;;;;:::o;18592:137::-;18646:5;18677:6;18671:13;18662:22;;18693:30;18717:5;18693:30;:::i;:::-;18592:137;;;;:::o;18735:345::-;18802:6;18851:2;18839:9;18830:7;18826:23;18822:32;18819:119;;;18857:79;;:::i;:::-;18819:119;18977:1;19002:61;19055:7;19046:6;19035:9;19031:22;19002:61;:::i;:::-;18992:71;;18948:125;18735:345;;;;:::o;19086:225::-;19226:34;19222:1;19214:6;19210:14;19203:58;19295:8;19290:2;19282:6;19278:15;19271:33;19086:225;:::o;19317:366::-;19459:3;19480:67;19544:2;19539:3;19480:67;:::i;:::-;19473:74;;19556:93;19645:3;19556:93;:::i;:::-;19674:2;19669:3;19665:12;19658:19;;19317:366;;;:::o;19689:419::-;19855:4;19893:2;19882:9;19878:18;19870:26;;19942:9;19936:4;19932:20;19928:1;19917:9;19913:17;19906:47;19970:131;20096:4;19970:131;:::i;:::-;19962:139;;19689:419;;;:::o;20114:177::-;20254:29;20250:1;20242:6;20238:14;20231:53;20114:177;:::o;20297:366::-;20439:3;20460:67;20524:2;20519:3;20460:67;:::i;:::-;20453:74;;20536:93;20625:3;20536:93;:::i;:::-;20654:2;20649:3;20645:12;20638:19;;20297:366;;;:::o;20669:419::-;20835:4;20873:2;20862:9;20858:18;20850:26;;20922:9;20916:4;20912:20;20908:1;20897:9;20893:17;20886:47;20950:131;21076:4;20950:131;:::i;:::-;20942:139;;20669:419;;;:::o;21094:223::-;21234:34;21230:1;21222:6;21218:14;21211:58;21303:6;21298:2;21290:6;21286:15;21279:31;21094:223;:::o;21323:366::-;21465:3;21486:67;21550:2;21545:3;21486:67;:::i;:::-;21479:74;;21562:93;21651:3;21562:93;:::i;:::-;21680:2;21675:3;21671:12;21664:19;;21323:366;;;:::o;21695:419::-;21861:4;21899:2;21888:9;21884:18;21876:26;;21948:9;21942:4;21938:20;21934:1;21923:9;21919:17;21912:47;21976:131;22102:4;21976:131;:::i;:::-;21968:139;;21695:419;;;:::o;22120:221::-;22260:34;22256:1;22248:6;22244:14;22237:58;22329:4;22324:2;22316:6;22312:15;22305:29;22120:221;:::o;22347:366::-;22489:3;22510:67;22574:2;22569:3;22510:67;:::i;:::-;22503:74;;22586:93;22675:3;22586:93;:::i;:::-;22704:2;22699:3;22695:12;22688:19;;22347:366;;;:::o;22719:419::-;22885:4;22923:2;22912:9;22908:18;22900:26;;22972:9;22966:4;22962:20;22958:1;22947:9;22943:17;22936:47;23000:131;23126:4;23000:131;:::i;:::-;22992:139;;22719:419;;;:::o;23144:224::-;23284:34;23280:1;23272:6;23268:14;23261:58;23353:7;23348:2;23340:6;23336:15;23329:32;23144:224;:::o;23374:366::-;23516:3;23537:67;23601:2;23596:3;23537:67;:::i;:::-;23530:74;;23613:93;23702:3;23613:93;:::i;:::-;23731:2;23726:3;23722:12;23715:19;;23374:366;;;:::o;23746:419::-;23912:4;23950:2;23939:9;23935:18;23927:26;;23999:9;23993:4;23989:20;23985:1;23974:9;23970:17;23963:47;24027:131;24153:4;24027:131;:::i;:::-;24019:139;;23746:419;;;:::o;24171:222::-;24311:34;24307:1;24299:6;24295:14;24288:58;24380:5;24375:2;24367:6;24363:15;24356:30;24171:222;:::o;24399:366::-;24541:3;24562:67;24626:2;24621:3;24562:67;:::i;:::-;24555:74;;24638:93;24727:3;24638:93;:::i;:::-;24756:2;24751:3;24747:12;24740:19;;24399:366;;;:::o;24771:419::-;24937:4;24975:2;24964:9;24960:18;24952:26;;25024:9;25018:4;25014:20;25010:1;24999:9;24995:17;24988:47;25052:131;25178:4;25052:131;:::i;:::-;25044:139;;24771:419;;;:::o;25196:240::-;25336:34;25332:1;25324:6;25320:14;25313:58;25405:23;25400:2;25392:6;25388:15;25381:48;25196:240;:::o;25442:366::-;25584:3;25605:67;25669:2;25664:3;25605:67;:::i;:::-;25598:74;;25681:93;25770:3;25681:93;:::i;:::-;25799:2;25794:3;25790:12;25783:19;;25442:366;;;:::o;25814:419::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:169::-;26379:21;26375:1;26367:6;26363:14;26356:45;26239:169;:::o;26414:366::-;26556:3;26577:67;26641:2;26636:3;26577:67;:::i;:::-;26570:74;;26653:93;26742:3;26653:93;:::i;:::-;26771:2;26766:3;26762:12;26755:19;;26414:366;;;:::o;26786:419::-;26952:4;26990:2;26979:9;26975:18;26967:26;;27039:9;27033:4;27029:20;27025:1;27014:9;27010:17;27003:47;27067:131;27193:4;27067:131;:::i;:::-;27059:139;;26786:419;;;:::o;27211:241::-;27351:34;27347:1;27339:6;27335:14;27328:58;27420:24;27415:2;27407:6;27403:15;27396:49;27211:241;:::o;27458:366::-;27600:3;27621:67;27685:2;27680:3;27621:67;:::i;:::-;27614:74;;27697:93;27786:3;27697:93;:::i;:::-;27815:2;27810:3;27806:12;27799:19;;27458:366;;;:::o;27830:419::-;27996:4;28034:2;28023:9;28019:18;28011:26;;28083:9;28077:4;28073:20;28069:1;28058:9;28054:17;28047:47;28111:131;28237:4;28111:131;:::i;:::-;28103:139;;27830:419;;;:::o;28255:194::-;28295:4;28315:20;28333:1;28315:20;:::i;:::-;28310:25;;28349:20;28367:1;28349:20;:::i;:::-;28344:25;;28393:1;28390;28386:9;28378:17;;28417:1;28411:4;28408:11;28405:37;;;28422:18;;:::i;:::-;28405:37;28255:194;;;;:::o;28455:147::-;28556:11;28593:3;28578:18;;28455:147;;;;:::o;28608:114::-;;:::o;28728:398::-;28887:3;28908:83;28989:1;28984:3;28908:83;:::i;:::-;28901:90;;29000:93;29089:3;29000:93;:::i;:::-;29118:1;29113:3;29109:11;29102:18;;28728:398;;;:::o;29132:379::-;29316:3;29338:147;29481:3;29338:147;:::i;:::-;29331:154;;29502:3;29495:10;;29132:379;;;:::o;29517:442::-;29666:4;29704:2;29693:9;29689:18;29681:26;;29717:71;29785:1;29774:9;29770:17;29761:6;29717:71;:::i;:::-;29798:72;29866:2;29855:9;29851:18;29842:6;29798:72;:::i;:::-;29880;29948:2;29937:9;29933:18;29924:6;29880:72;:::i;:::-;29517:442;;;;;;:::o;29965:220::-;30105:34;30101:1;30093:6;30089:14;30082:58;30174:3;30169:2;30161:6;30157:15;30150:28;29965:220;:::o;30191:366::-;30333:3;30354:67;30418:2;30413:3;30354:67;:::i;:::-;30347:74;;30430:93;30519:3;30430:93;:::i;:::-;30548:2;30543:3;30539:12;30532:19;;30191:366;;;:::o;30563:419::-;30729:4;30767:2;30756:9;30752:18;30744:26;;30816:9;30810:4;30806:20;30802:1;30791:9;30787:17;30780:47;30844:131;30970:4;30844:131;:::i;:::-;30836:139;;30563:419;;;:::o;30988:180::-;31036:77;31033:1;31026:88;31133:4;31130:1;31123:15;31157:4;31154:1;31147:15;31174:180;31222:77;31219:1;31212:88;31319:4;31316:1;31309:15;31343:4;31340:1;31333:15;31360:143;31417:5;31448:6;31442:13;31433:22;;31464:33;31491:5;31464:33;:::i;:::-;31360:143;;;;:::o;31509:351::-;31579:6;31628:2;31616:9;31607:7;31603:23;31599:32;31596:119;;;31634:79;;:::i;:::-;31596:119;31754:1;31779:64;31835:7;31826:6;31815:9;31811:22;31779:64;:::i;:::-;31769:74;;31725:128;31509:351;;;;:::o;31866:85::-;31911:7;31940:5;31929:16;;31866:85;;;:::o;31957:158::-;32015:9;32048:61;32066:42;32075:32;32101:5;32075:32;:::i;:::-;32066:42;:::i;:::-;32048:61;:::i;:::-;32035:74;;31957:158;;;:::o;32121:147::-;32216:45;32255:5;32216:45;:::i;:::-;32211:3;32204:58;32121:147;;:::o;32274:114::-;32341:6;32375:5;32369:12;32359:22;;32274:114;;;:::o;32394:184::-;32493:11;32527:6;32522:3;32515:19;32567:4;32562:3;32558:14;32543:29;;32394:184;;;;:::o;32584:132::-;32651:4;32674:3;32666:11;;32704:4;32699:3;32695:14;32687:22;;32584:132;;;:::o;32722:108::-;32799:24;32817:5;32799:24;:::i;:::-;32794:3;32787:37;32722:108;;:::o;32836:179::-;32905:10;32926:46;32968:3;32960:6;32926:46;:::i;:::-;33004:4;32999:3;32995:14;32981:28;;32836:179;;;;:::o;33021:113::-;33091:4;33123;33118:3;33114:14;33106:22;;33021:113;;;:::o;33170:732::-;33289:3;33318:54;33366:5;33318:54;:::i;:::-;33388:86;33467:6;33462:3;33388:86;:::i;:::-;33381:93;;33498:56;33548:5;33498:56;:::i;:::-;33577:7;33608:1;33593:284;33618:6;33615:1;33612:13;33593:284;;;33694:6;33688:13;33721:63;33780:3;33765:13;33721:63;:::i;:::-;33714:70;;33807:60;33860:6;33807:60;:::i;:::-;33797:70;;33653:224;33640:1;33637;33633:9;33628:14;;33593:284;;;33597:14;33893:3;33886:10;;33294:608;;;33170:732;;;;:::o;33908:831::-;34171:4;34209:3;34198:9;34194:19;34186:27;;34223:71;34291:1;34280:9;34276:17;34267:6;34223:71;:::i;:::-;34304:80;34380:2;34369:9;34365:18;34356:6;34304:80;:::i;:::-;34431:9;34425:4;34421:20;34416:2;34405:9;34401:18;34394:48;34459:108;34562:4;34553:6;34459:108;:::i;:::-;34451:116;;34577:72;34645:2;34634:9;34630:18;34621:6;34577:72;:::i;:::-;34659:73;34727:3;34716:9;34712:19;34703:6;34659:73;:::i;:::-;33908:831;;;;;;;;:::o;34745:807::-;34994:4;35032:3;35021:9;35017:19;35009:27;;35046:71;35114:1;35103:9;35099:17;35090:6;35046:71;:::i;:::-;35127:72;35195:2;35184:9;35180:18;35171:6;35127:72;:::i;:::-;35209:80;35285:2;35274:9;35270:18;35261:6;35209:80;:::i;:::-;35299;35375:2;35364:9;35360:18;35351:6;35299:80;:::i;:::-;35389:73;35457:3;35446:9;35442:19;35433:6;35389:73;:::i;:::-;35472;35540:3;35529:9;35525:19;35516:6;35472:73;:::i;:::-;34745:807;;;;;;;;;:::o;35558:663::-;35646:6;35654;35662;35711:2;35699:9;35690:7;35686:23;35682:32;35679:119;;;35717:79;;:::i;:::-;35679:119;35837:1;35862:64;35918:7;35909:6;35898:9;35894:22;35862:64;:::i;:::-;35852:74;;35808:128;35975:2;36001:64;36057:7;36048:6;36037:9;36033:22;36001:64;:::i;:::-;35991:74;;35946:129;36114:2;36140:64;36196:7;36187:6;36176:9;36172:22;36140:64;:::i;:::-;36130:74;;36085:129;35558:663;;;;;:::o

Swarm Source

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