ETH Price: $3,627.03 (+6.00%)
Gas: 8.11 Gwei

Token

ElementInu (EINU)
 

Overview

Max Total Supply

60,000,000,000 EINU

Holders

100

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
constitutoor.eth
Balance
52,800,000 EINU

Value
$0.00
0x4d1adf22e6862b48a0bd18a943fda3c121d6866e
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:
ElementInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-03
*/

/***
 *          ___                         ___           ___           ___           ___                                            ___           ___     
 *         /  /\                       /  /\         /__/\         /  /\         /__/\          ___                ___          /__/\         /__/\    
 *        /  /:/_                     /  /:/_       |  |::\       /  /:/_        \  \:\        /  /\              /  /\         \  \:\        \  \:\   
 *       /  /:/ /\    ___     ___    /  /:/ /\      |  |:|:\     /  /:/ /\        \  \:\      /  /:/             /  /:/          \  \:\        \  \:\  
 *      /  /:/ /:/_  /__/\   /  /\  /  /:/ /:/_   __|__|:|\:\   /  /:/ /:/_   _____\__\:\    /  /:/             /__/::\      _____\__\:\   ___  \  \:\ 
 *     /__/:/ /:/ /\ \  \:\ /  /:/ /__/:/ /:/ /\ /__/::::| \:\ /__/:/ /:/ /\ /__/::::::::\  /  /::\             \__\/\:\__  /__/::::::::\ /__/\  \__\:\
 *     \  \:\/:/ /:/  \  \:\  /:/  \  \:\/:/ /:/ \  \:\~~\__\/ \  \:\/:/ /:/ \  \:\~~\~~\/ /__/:/\:\               \  \:\/\ \  \:\~~\~~\/ \  \:\ /  /:/
 *      \  \::/ /:/    \  \:\/:/    \  \::/ /:/   \  \:\        \  \::/ /:/   \  \:\  ~~~  \__\/  \:\               \__\::/  \  \:\  ~~~   \  \:\  /:/ 
 *       \  \:\/:/      \  \::/      \  \:\/:/     \  \:\        \  \:\/:/     \  \:\           \  \:\              /__/:/    \  \:\        \  \:\/:/  
 *        \  \::/        \__\/        \  \::/       \  \:\        \  \::/       \  \:\           \__\/              \__\/      \  \:\        \  \::/   
 *         \__\/                       \__\/         \__\/         \__\/         \__\/                                          \__\/         \__\/    
 *
 */
 
// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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;
    }
} 
 
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 ElementInu is ERC20, Ownable {
    using SafeMath for uint256;

    address public constant DEAD_ADDRESS = address(0xdead);

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    uint256 public buyTreasuryFee = 10;
    uint256 public buyLiquidityFee = 2;
    
    uint256 public initialSellTreasuryFee = 10;
    uint256 public initialSellLiquidityFee = 2;

    uint256 public sellTreasuryFee = 10;
    uint256 public sellLiquidityFee = 2;

    uint256 public earlySellTreasuryFee = 18;
    uint256 public earlySellLiquidityFee = 4;

    uint256 public tokensForLiquidity;
    uint256 public tokensForTreasury;
    
    uint256 public _tTotal = 60 * 10**9 * 10**18;

    uint256 public swapAtAmount = _tTotal;
    uint256 public maxTxLimit = _tTotal;
    uint256 public maxWalletLimit = _tTotal;

    address payable public treasuryAddress;

    address public uniswapV2Pair;

    uint256 public launchBlock;

    bool private swapping;
    bool public isLaunched;
    bool private cooldownEnabled = false;
    bool private useBuyMap = true;
    bool public limitsInEffect = true;

    // exclude from fees
    mapping (address => bool) public isExcludedFromFees;

    // exclude from max transaction amount
    mapping (address => bool) public isExcludedFromTxLimit;

    // exclude from max wallet limit
    mapping (address => bool) public isExcludedFromWalletLimit;

    // if the account is blacklisted from transacting
    mapping (address => bool) public bots;

    // buy map for timed sell tax
    mapping (address => uint256) public _buyMap;

    // mapping for cooldown
    mapping (address => uint) public cooldown;

    constructor() ERC20("ElementInu", "EINU") {

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        treasuryAddress = payable(0x245695F89D484652a44819446033830e51feF12F);

        // exclude from fees, wallet limit and transaction limit
        excludeFromAllLimits(owner(), true);
        excludeFromAllLimits(address(this), true);
        excludeFromAllLimits(treasuryAddress, true);

        excludeFromWalletLimit(uniswapV2Pair, true);

        _mint(owner(), _tTotal);
    }

    function excludeFromFees(address account, bool value) public onlyOwner() {
        require(isExcludedFromFees[account] != value, "Fees: Already set to this value");
        isExcludedFromFees[account] = value;
    }

    function excludeFromTxLimit(address account, bool value) public onlyOwner() {
        require(isExcludedFromTxLimit[account] != value, "TxLimit: Already set to this value");
        isExcludedFromTxLimit[account] = value;
    }

    function excludeFromWalletLimit(address account, bool value) public onlyOwner() {
        require(isExcludedFromWalletLimit[account] != value, "WalletLimit: Already set to this value");
        isExcludedFromWalletLimit[account] = value;
    }

    function excludeFromAllLimits(address account, bool value) public onlyOwner() {
        excludeFromFees(account, value);
        excludeFromTxLimit(account, value);
        excludeFromWalletLimit(account, value);
    }

    function setBuyFee(uint256 liquidityFee, uint256 treasuryFee) external onlyOwner() {
	    require(liquidityFee.add(treasuryFee) <= 12, "Total buy fee can not be more than 12");
        buyLiquidityFee = liquidityFee;
        buyTreasuryFee = treasuryFee;
    }

    function setSellFee(uint256 liquidityFee, uint256 treasuryFee) external onlyOwner() {
        require(liquidityFee.add(treasuryFee) <= 12, "Total sell fee can not be more than 12");
        sellLiquidityFee = liquidityFee;
        sellTreasuryFee = treasuryFee;

        initialSellLiquidityFee = liquidityFee;
        initialSellTreasuryFee = treasuryFee;
    }

    function setEarlySellFee(uint256 liquidityFee, uint256 treasuryFee) external onlyOwner() {
        require(liquidityFee.add(treasuryFee) <= 22, "Total early sell fee can not be more than 22");
        earlySellLiquidityFee = liquidityFee;
        earlySellTreasuryFee = treasuryFee;
    }

    function setCooldownEnabled(bool _enabled) external onlyOwner() {
        cooldownEnabled = _enabled;
    }

   function setUseBuyMap(bool _enabled) external onlyOwner() {
        useBuyMap = _enabled;
    }

    function setMaxTxLimit(uint256 newLimit) external onlyOwner() {
        require(newLimit > 0, "max tx can not be 0");
        maxTxLimit = newLimit * (10**18);
    }

    function setMaxWalletLimit(uint256 newLimit) external onlyOwner() {
        require(newLimit > 0, "max wallet can not be 0");
        maxWalletLimit = newLimit * (10**18);
    }

    function setSwapAtAmount(uint256 amountToSwap) external onlyOwner() {
        swapAtAmount = amountToSwap * (10**18);
    }

    function updateTreasuryWallet(address newWallet) external onlyOwner() {
        treasuryAddress = payable(newWallet);
    }

    function addBot(address account) external onlyOwner() {
        require(!bots[account], "Bot: Already blacklisted");
        require(account != uniswapV2Pair, "Bot: Cannot blacklist pair");
        _setBotState(account, true);
    }

    function addBulkBots(address[] calldata accounts) external onlyOwner() {
        for (uint256 i = 0 ; i < accounts.length; i ++) {
            address account = accounts[i];
            if (bots[account] || account == uniswapV2Pair) {
                continue;
            }

            _setBotState(account, true);
        }
    }

    function removeBot(address account) external onlyOwner() {
        require(bots[account], "Bot: Not blacklisted");
        _setBotState(account, false);
    }

    function removeLimits() external onlyOwner() {
        limitsInEffect = false;
    }
    
    function manualsend() external onlyOwner(){
        uint256 contractETHBalance = address(this).balance;
        payable(address(treasuryAddress)).transfer(contractETHBalance);
    }
    
    function openTrading() external onlyOwner() {
        isLaunched = true;
        launchBlock = block.number;
        cooldownEnabled = true;
        limitsInEffect = true;
        // 0.1% of total supply
        maxTxLimit = _tTotal.mul(10).div(10000);
        // 0.5% of total supply
        maxWalletLimit = _tTotal.mul(50).div(10000);
        // 0.05% of total supply
        swapAtAmount = _tTotal.mul(5).div(10000);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "transfer from the zero address");
        require(to != address(0), "transfer to the zero address");
        require(isLaunched || isExcludedFromFees[from] || isExcludedFromFees[to], "Waiting to go live");
        require(!bots[from] && !bots[to], "Your account is blacklisted");

        if (limitsInEffect) {
            require(amount <= maxTxLimit || isExcludedFromTxLimit[from] || isExcludedFromTxLimit[to], "Tx Amount too large");
            require(balanceOf(to).add(amount) <= maxWalletLimit || isExcludedFromWalletLimit[to], "Transfer will exceed wallet limit");
        }

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

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapAtAmount;

        if(
            from != uniswapV2Pair &&
            canSwap &&
            !swapping
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        } else if(
            from == uniswapV2Pair &&
            to != uniswapV2Pair &&
            block.number < launchBlock + 1 &&
            !isExcludedFromFees[to]
        ) {
            _setBotState(to, true);
        }

        bool takeFee = !swapping;

        if(isExcludedFromFees[from] || isExcludedFromFees[to]) {
            takeFee = false;
        }

        if(takeFee) {
            uint256 fees;
            // on sell
            if (to == uniswapV2Pair) {
                if(useBuyMap){
                    if (_buyMap[from] != 0 &&
                        (_buyMap[from] + (24 hours) >= block.timestamp)) {
                        sellLiquidityFee = earlySellLiquidityFee;
                        sellTreasuryFee = earlySellTreasuryFee;
                        _buyMap[from] = block.timestamp;
                    } else {
                        sellLiquidityFee = initialSellLiquidityFee;
                        sellTreasuryFee = initialSellTreasuryFee;
                    }
                } else {
                    sellLiquidityFee = initialSellLiquidityFee;
                    sellTreasuryFee = initialSellTreasuryFee;
                }
              
                uint256 sellTotalFees = sellLiquidityFee.add(sellTreasuryFee);
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = tokensForLiquidity.add(fees.mul(sellLiquidityFee).div(sellTotalFees));
                tokensForTreasury = tokensForTreasury.add(fees.mul(sellTreasuryFee).div(sellTotalFees));
            }
            // on buy & wallet transfers
            else {
                if(cooldownEnabled){
                    require(cooldown[to] < block.timestamp);
                    cooldown[to] = block.timestamp + (30 seconds);
                }
                if (useBuyMap && _buyMap[to] == 0) {
                    _buyMap[to] = block.timestamp;
                }
                uint256 buyTotalFees = buyLiquidityFee.add(buyTreasuryFee);
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = tokensForLiquidity.add(fees.mul(buyLiquidityFee).div(buyTotalFees));
                tokensForTreasury = tokensForTreasury.add(fees.mul(buyTreasuryFee).div(buyTotalFees));
            }

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

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

    function swapBack() private {
        uint256 totalTokensForFee = tokensForLiquidity + tokensForTreasury;
        uint256 toSwap = balanceOf(address(this));

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = toSwap.mul(tokensForLiquidity).div(totalTokensForFee).div(2);
        uint256 amountToSwapForETH = toSwap.sub(liquidityTokens);

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;
        uint256 ethForTreasury = ethBalance.mul(tokensForTreasury).div(totalTokensForFee);
        uint256 ethForLiquidity = ethBalance.sub(ethForTreasury);

        tokensForLiquidity = 0;
        tokensForTreasury = 0;

        payable(address(treasuryAddress)).transfer(ethForTreasury);
        _addLiquidity(liquidityTokens, ethForLiquidity);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            DEAD_ADDRESS,
            block.timestamp
        );
    }

    function _swapTokensForETH(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

    function _setBotState(address account, bool value) internal {
        bots[account] = value;
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent){
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }
    
    receive() external payable {}
}

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":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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"addBulkBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setEarlySellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToSwap","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setUseBuyMap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtAmount","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a6006556002600755600a6008556002600955600a80556002600b556012600c556004600d556bc1ded63574de0e46600000006010556010546011556010546012556010546013556000601760026101000a81548160ff0219169083151502179055506001601760036101000a81548160ff0219169083151502179055506001601760046101000a81548160ff021916908315150217905550348015620000ab57600080fd5b506040518060400160405280600a81526020017f456c656d656e74496e75000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f45494e550000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013092919062000f0f565b5080600490805190602001906200014992919062000f0f565b50505060006200015e6200055e60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025857600080fd5b505afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062001029565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030a57600080fd5b505afa1580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000345919062001029565b6040518363ffffffff1660e01b8152600401620003649291906200106c565b602060405180830381600087803b1580156200037f57600080fd5b505af115801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba919062001029565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044130737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200056660201b60201c565b73245695f89d484652a44819446033830e51fef12f601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004b8620004aa6200073960201b60201c565b60016200076360201b60201c565b620004cb3060016200076360201b60201c565b62000500601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200076360201b60201c565b62000535601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083f60201b60201c565b62000558620005496200073960201b60201c565b601054620009d260201b60201c565b620015fb565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620005d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d09062001120565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200064c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064390620011b8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516200072c9190620011f5565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007736200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000805576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007fc9062001262565b60405180910390fd5b62000817828262000b8160201b60201c565b62000829828262000d1460201b60201c565b6200083b82826200083f60201b60201c565b5050565b6200084f6200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d89062001262565b60405180910390fd5b801515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096e90620012fa565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a3c906200136c565b60405180910390fd5b62000a596000838362000ea760201b60201c565b62000a758160025462000eac60201b62002f331790919060201c565b60028190555062000ad3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000eac60201b62002f331790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b759190620011f5565b60405180910390a35050565b62000b916200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1a9062001262565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb090620013de565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000d246200055e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dad9062001262565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000e4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e439062001476565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b505050565b600080828462000ebd9190620014c7565b90508381101562000f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000efc9062001574565b60405180910390fd5b8091505092915050565b82805462000f1d90620015c5565b90600052602060002090601f01602090048101928262000f41576000855562000f8d565b82601f1062000f5c57805160ff191683800117855562000f8d565b8280016001018555821562000f8d579182015b8281111562000f8c57825182559160200191906001019062000f6f565b5b50905062000f9c919062000fa0565b5090565b5b8082111562000fbb57600081600090555060010162000fa1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ff18262000fc4565b9050919050565b620010038162000fe4565b81146200100f57600080fd5b50565b600081519050620010238162000ff8565b92915050565b60006020828403121562001042576200104162000fbf565b5b6000620010528482850162001012565b91505092915050565b620010668162000fe4565b82525050565b60006040820190506200108360008301856200105b565b6200109260208301846200105b565b9392505050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200110860248362001099565b91506200111582620010aa565b604082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620011a060228362001099565b9150620011ad8262001142565b604082019050919050565b60006020820190508181036000830152620011d38162001191565b9050919050565b6000819050919050565b620011ef81620011da565b82525050565b60006020820190506200120c6000830184620011e4565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200124a60208362001099565b9150620012578262001212565b602082019050919050565b600060208201905081810360008301526200127d816200123b565b9050919050565b7f57616c6c65744c696d69743a20416c72656164792073657420746f207468697360008201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b6000620012e260268362001099565b9150620012ef8262001284565b604082019050919050565b600060208201905081810360008301526200131581620012d3565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001354601f8362001099565b915062001361826200131c565b602082019050919050565b60006020820190508181036000830152620013878162001345565b9050919050565b7f466565733a20416c72656164792073657420746f20746869732076616c756500600082015250565b6000620013c6601f8362001099565b9150620013d3826200138e565b602082019050919050565b60006020820190508181036000830152620013f981620013b7565b9050919050565b7f54784c696d69743a20416c72656164792073657420746f20746869732076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006200145e60228362001099565b91506200146b8262001400565b604082019050919050565b6000602082019050818103600083015262001491816200144f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620014d482620011da565b9150620014e183620011da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001519576200151862001498565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200155c601b8362001099565b9150620015698262001524565b602082019050919050565b600060208201905081810360008301526200158f816200154d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620015de57607f821691505b60208210811415620015f557620015f462001596565b5b50919050565b615eac806200160b6000396000f3fe6080604052600436106103a65760003560e01c80637f2feddc116101e7578063bfd792841161010d578063dd62ed3e116100a0578063f63743421161006f578063f637434214610dd5578063fb0ecfa414610e00578063fcaf2b5614610e29578063ffecf51614610e52576103ad565b8063dd62ed3e14610d1b578063e16830a814610d58578063f11a24d314610d81578063f2fde38b14610dac576103ad565b8063c9567bf9116100dc578063c9567bf914610c85578063cc2ffe7c14610c9c578063cd49513f14610cc7578063d00efb2f14610cf0576103ad565b8063bfd7928414610bc9578063c024666814610c06578063c14db6c014610c2f578063c5f956af14610c5a576103ad565b8063a1addd9511610185578063b222e0c211610154578063b222e0c214610ae7578063b40f946914610b24578063bb02e9c214610b61578063bf95793d14610b8c576103ad565b8063a1addd9514610a19578063a457c2d714610a42578063a9059cbb14610a7f578063af465a2714610abc576103ad565b80638366e79a116101c15780638366e79a1461095b57806386917524146109985780638da5cb5b146109c357806395d89b41146109ee576103ad565b80637f2feddc146108ca5780638036d59014610907578063809d458d14610932576103ad565b8063541a43cf116102cc5780636ac9a8701161026a578063715018a611610239578063715018a61461084a578063728d41c914610861578063751039fc1461088a578063762aace7146108a1576103ad565b80636ac9a870146107a25780636b2fb124146107cb5780636fc3eaec146107f657806370a082311461080d576103ad565b80635fecd926116102a65780635fecd926146106fc5780636402511e1461072557806364f5a5bb1461074e57806366a88d9614610777576103ad565b8063541a43cf1461067d5780635932ead1146106a85780635c068a8c146106d1576103ad565b8063307aebc91161034457806349bd5a5e1161031357806349bd5a5e146105bf5780634a62bb65146105ea5780634e6fd6c4146106155780634fbee19314610640576103ad565b8063307aebc914610501578063313ce5671461052c57806339509351146105575780633d005e9414610594576103ad565b806318160ddd1161038057806318160ddd146104455780631a8145bb1461047057806323b872dd1461049b57806330280a71146104d8576103ad565b806306fdde03146103b2578063095ea7b3146103dd5780631694505e1461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e7b565b6040516103d491906146e3565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906147a3565b610f0d565b60405161041191906147fe565b60405180910390f35b34801561042657600080fd5b5061042f610f2b565b60405161043c9190614878565b60405180910390f35b34801561045157600080fd5b5061045a610f43565b60405161046791906148a2565b60405180910390f35b34801561047c57600080fd5b50610485610f4d565b60405161049291906148a2565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906148bd565b610f53565b6040516104cf91906147fe565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061493c565b61102c565b005b34801561050d57600080fd5b506105166111b1565b60405161052391906147fe565b60405180910390f35b34801561053857600080fd5b506105416111c4565b60405161054e9190614998565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906147a3565b6111cd565b60405161058b91906147fe565b60405180910390f35b3480156105a057600080fd5b506105a9611280565b6040516105b691906148a2565b60405180910390f35b3480156105cb57600080fd5b506105d4611286565b6040516105e191906149c2565b60405180910390f35b3480156105f657600080fd5b506105ff6112ac565b60405161060c91906147fe565b60405180910390f35b34801561062157600080fd5b5061062a6112bf565b60405161063791906149c2565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906149dd565b6112c5565b60405161067491906147fe565b60405180910390f35b34801561068957600080fd5b506106926112e5565b60405161069f91906148a2565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190614a0a565b6112eb565b005b3480156106dd57600080fd5b506106e661139f565b6040516106f391906148a2565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906149dd565b6113a5565b005b34801561073157600080fd5b5061074c60048036038101906107479190614a37565b6114d6565b005b34801561075a57600080fd5b5061077560048036038101906107709190614a37565b61158a565b005b34801561078357600080fd5b5061078c611681565b60405161079991906148a2565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614a64565b611687565b005b3480156107d757600080fd5b506107e0611794565b6040516107ed91906148a2565b60405180910390f35b34801561080257600080fd5b5061080b61179a565b005b34801561081957600080fd5b50610834600480360381019061082f91906149dd565b6118a2565b60405161084191906148a2565b60405180910390f35b34801561085657600080fd5b5061085f6118ea565b005b34801561086d57600080fd5b5061088860048036038101906108839190614a37565b611a42565b005b34801561089657600080fd5b5061089f611b39565b005b3480156108ad57600080fd5b506108c860048036038101906108c39190614a64565b611bed565b005b3480156108d657600080fd5b506108f160048036038101906108ec91906149dd565b611cec565b6040516108fe91906148a2565b60405180910390f35b34801561091357600080fd5b5061091c611d04565b60405161092991906148a2565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906149dd565b611d0a565b005b34801561096757600080fd5b50610982600480360381019061097d9190614aa4565b611de5565b60405161098f91906147fe565b60405180910390f35b3480156109a457600080fd5b506109ad612010565b6040516109ba91906148a2565b60405180910390f35b3480156109cf57600080fd5b506109d8612016565b6040516109e591906149c2565b60405180910390f35b3480156109fa57600080fd5b50610a03612040565b604051610a1091906146e3565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614a0a565b6120d2565b005b348015610a4e57600080fd5b50610a696004803603810190610a6491906147a3565b612186565b604051610a7691906147fe565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa191906147a3565b612253565b604051610ab391906147fe565b60405180910390f35b348015610ac857600080fd5b50610ad1612271565b604051610ade91906148a2565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906149dd565b612277565b604051610b1b91906148a2565b60405180910390f35b348015610b3057600080fd5b50610b4b6004803603810190610b4691906149dd565b61228f565b604051610b5891906147fe565b60405180910390f35b348015610b6d57600080fd5b50610b766122af565b604051610b8391906148a2565b60405180910390f35b348015610b9857600080fd5b50610bb36004803603810190610bae91906149dd565b6122b5565b604051610bc091906147fe565b60405180910390f35b348015610bd557600080fd5b50610bf06004803603810190610beb91906149dd565b6122d5565b604051610bfd91906147fe565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c28919061493c565b6122f5565b005b348015610c3b57600080fd5b50610c4461247a565b604051610c5191906148a2565b60405180910390f35b348015610c6657600080fd5b50610c6f612480565b604051610c7c9190614b05565b60405180910390f35b348015610c9157600080fd5b50610c9a6124a6565b005b348015610ca857600080fd5b50610cb1612627565b604051610cbe91906148a2565b60405180910390f35b348015610cd357600080fd5b50610cee6004803603810190610ce9919061493c565b61262d565b005b348015610cfc57600080fd5b50610d056126e6565b604051610d1291906148a2565b60405180910390f35b348015610d2757600080fd5b50610d426004803603810190610d3d9190614aa4565b6126ec565b604051610d4f91906148a2565b60405180910390f35b348015610d6457600080fd5b50610d7f6004803603810190610d7a919061493c565b612773565b005b348015610d8d57600080fd5b50610d966128f8565b604051610da391906148a2565b60405180910390f35b348015610db857600080fd5b50610dd36004803603810190610dce91906149dd565b6128fe565b005b348015610de157600080fd5b50610dea612ac5565b604051610df791906148a2565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614a64565b612acb565b005b348015610e3557600080fd5b50610e506004803603810190610e4b9190614b85565b612bca565b005b348015610e5e57600080fd5b50610e796004803603810190610e7491906149dd565b612d70565b005b606060038054610e8a90614c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c01565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612f91565b8484612f99565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600e5481565b6000610f60848484613164565b61102184610f6c612f91565b61101c85604051806060016040528060288152602001615e2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd2612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b612f99565b600190509392505050565b611034612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614c7f565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614d11565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760019054906101000a900460ff1681565b60006012905090565b60006112766111da612f91565b8461127185600160006111eb612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3390919063ffffffff16565b612f99565b6001905092915050565b600c5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760049054906101000a900460ff1681565b61dead81565b60186020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6112f3612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614c7f565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b60065481565b6113ad612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614c7f565b60405180910390fd5b601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90614d7d565b60405180910390fd5b6114d3816000613dd4565b50565b6114de612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614c7f565b60405180910390fd5b670de0b6b3a7640000816115819190614dcc565b60118190555050565b611592612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614c7f565b60405180910390fd5b60008111611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614e72565b60405180910390fd5b670de0b6b3a7640000816116789190614dcc565b60128190555050565b60135481565b61168f612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614c7f565b60405180910390fd5b600c6117338284612f3390919063ffffffff16565b1115611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614f04565b60405180910390fd5b81600b8190555080600a8190555081600981905550806008819055505050565b600a5481565b6117a2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614c7f565b60405180910390fd5b6000479050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561189e573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118f2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890614c7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a4a612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090614c7f565b60405180910390fd5b60008111611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390614f70565b60405180910390fd5b670de0b6b3a764000081611b309190614dcc565b60138190555050565b611b41612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790614c7f565b60405180910390fd5b6000601760046101000a81548160ff021916908315150217905550565b611bf5612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90614c7f565b60405180910390fd5b6016611c998284612f3390919063ffffffff16565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190615002565b60405180910390fd5b81600d8190555080600c819055505050565b601c6020528060005260406000206000915090505481565b60125481565b611d12612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614c7f565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611def612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614c7f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee49061506e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2891906149c2565b60206040518083038186803b158015611f4057600080fd5b505afa158015611f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7891906150a3565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611fb59291906150d0565b602060405180830381600087803b158015611fcf57600080fd5b505af1158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612007919061510e565b91505092915050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461204f90614c01565b80601f016020809104026020016040519081016040528092919081815260200182805461207b90614c01565b80156120c85780601f1061209d576101008083540402835291602001916120c8565b820191906000526020600020905b8154815290600101906020018083116120ab57829003601f168201915b5050505050905090565b6120da612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216090614c7f565b60405180910390fd5b80601760036101000a81548160ff02191690831515021790555050565b6000612249612193612f91565b8461224485604051806060016040528060258152602001615e5260259139600160006121bd612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b612f99565b6001905092915050565b6000612267612260612f91565b8484613164565b6001905092915050565b60105481565b601d6020528060005260406000206000915090505481565b601a6020528060005260406000206000915054906101000a900460ff1681565b60095481565b60196020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6122fd612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614c7f565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561241f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241690615187565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124ae612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490614c7f565b60405180910390fd5b6001601760016101000a81548160ff021916908315150217905550436016819055506001601760026101000a81548160ff0219169083151502179055506001601760046101000a81548160ff0219169083151502179055506125bf6127106125b1600a601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b6012819055506125ef6127106125e16032601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b60138190555061261f6127106126116005601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b601181905550565b600f5481565b612635612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614c7f565b60405180910390fd5b6126ce82826122f5565b6126d8828261102c565b6126e28282612773565b5050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277b612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280190614c7f565b60405180910390fd5b801515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490615219565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b612906612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90614c7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc906152ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b612ad3612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5990614c7f565b60405180910390fd5b600c612b778284612f3390919063ffffffff16565b1115612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf9061533d565b60405180910390fd5b81600781905550806006819055505050565b612bd2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5890614c7f565b60405180910390fd5b60005b82829050811015612d6b576000838383818110612c8457612c8361535d565b5b9050602002016020810190612c9991906149dd565b9050601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d405750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612d4b5750612d58565b612d56816001613dd4565b505b8080612d639061538c565b915050612c64565b505050565b612d78612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90614c7f565b60405180910390fd5b601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90615421565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061548d565b60405180910390fd5b612f30816001613dd4565b50565b6000808284612f4291906154ad565b905083811015612f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7e9061554f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613000906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307090615673565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161315791906148a2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb906156df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b9061574b565b60405180910390fd5b601760019054906101000a900460ff16806132a85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132fc5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61333b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613332906157b7565b60405180910390fd5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133df5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590615823565b60405180910390fd5b601760049054906101000a900460ff16156135d4576012548111158061348d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806134e15750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135179061588f565b60405180910390fd5b60135461353e82613530856118a2565b612f3390919063ffffffff16565b1115806135945750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6135d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ca90615921565b60405180910390fd5b5b60008114156135ee576135e983836000613ef4565b613d6b565b60006135f9306118a2565b905060006011548210159050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136605750805b80156136795750601760009054906101000a900460ff16155b156136c1576001601760006101000a81548160ff0219169083151502179055506136a1614189565b6000601760006101000a81548160ff0219169083151502179055506137ed565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561376c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156137855750600160165461378291906154ad565b43105b80156137db5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137ec576137eb846001613dd4565b5b5b6000601760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a35750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138ad57600090505b8015613d5c576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415613b1357601760039054906101000a900460ff1615613a35576000601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156139bd57504262015180601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba91906154ad565b10155b15613a1d57600d54600b81905550600c54600a8190555042601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a30565b600954600b81905550600854600a819055505b613a48565b600954600b81905550600854600a819055505b6000613a61600a54600b54612f3390919063ffffffff16565b9050613a896064613a7b8389613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9150613ac6613ab582613aa7600b5486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600e54612f3390919063ffffffff16565b600e81905550613b07613af682613ae8600a5486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600f54612f3390919063ffffffff16565b600f8190555050613d30565b601760029054906101000a900460ff1615613bc45742601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613b7357600080fd5b601e42613b8091906154ad565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760039054906101000a900460ff168015613c1f57506000601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613c695742601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000613c82600654600754612f3390919063ffffffff16565b9050613caa6064613c9c8389613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9150613ce7613cd682613cc860075486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600e54612f3390919063ffffffff16565b600e81905550613d28613d1782613d0960065486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600f54612f3390919063ffffffff16565b600f81905550505b6000811115613d5a57613d44873083613ef4565b613d5781866142db90919063ffffffff16565b94505b505b613d67868686613ef4565b5050505b505050565b6000838311158290613db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daf91906146e3565b60405180910390fd5b5060008385613dc79190615941565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080831415613e425760009050613ea4565b60008284613e509190614dcc565b9050828482613e5f91906159a4565b14613e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9690615a47565b60405180910390fd5b809150505b92915050565b6000613eec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614325565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5b90615ad9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fcb90615b6b565b60405180910390fd5b613fdf838383614388565b61404a81604051806060016040528060268152602001615e04602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140dd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161417c91906148a2565b60405180910390a3505050565b6000600f54600e5461419b91906154ad565b905060006141a8306118a2565b905060006141e660026141d8856141ca600e5487613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b613eaa90919063ffffffff16565b905060006141fd82846142db90919063ffffffff16565b90506142088161438d565b6000479050600061423686614228600f5485613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9050600061424d82846142db90919063ffffffff16565b90506000600e819055506000600f81905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156142c7573d6000803e3d6000fd5b506142d28582614596565b50505050505050565b600061431d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d70565b905092915050565b6000808311829061436c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436391906146e3565b60405180910390fd5b506000838561437b91906159a4565b9050809150509392505050565b505050565b6000600267ffffffffffffffff8111156143aa576143a9615b8b565b5b6040519080825280602002602001820160405280156143d85781602001602082028036833780820191505090505b50905030816000815181106143f0576143ef61535d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561448457600080fd5b505afa158015614498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144bc9190615bcf565b816001815181106144d0576144cf61535d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614560959493929190615cf5565b600060405180830381600087803b15801561457a57600080fd5b505af115801561458e573d6000803e3d6000fd5b505050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016145f196959493929190615d4f565b6060604051808303818588803b15801561460a57600080fd5b505af115801561461e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146439190615db0565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614684578082015181840152602081019050614669565b83811115614693576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b58261464a565b6146bf8185614655565b93506146cf818560208601614666565b6146d881614699565b840191505092915050565b600060208201905081810360008301526146fd81846146aa565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061473a8261470f565b9050919050565b61474a8161472f565b811461475557600080fd5b50565b60008135905061476781614741565b92915050565b6000819050919050565b6147808161476d565b811461478b57600080fd5b50565b60008135905061479d81614777565b92915050565b600080604083850312156147ba576147b9614705565b5b60006147c885828601614758565b92505060206147d98582860161478e565b9150509250929050565b60008115159050919050565b6147f8816147e3565b82525050565b600060208201905061481360008301846147ef565b92915050565b6000819050919050565b600061483e6148396148348461470f565b614819565b61470f565b9050919050565b600061485082614823565b9050919050565b600061486282614845565b9050919050565b61487281614857565b82525050565b600060208201905061488d6000830184614869565b92915050565b61489c8161476d565b82525050565b60006020820190506148b76000830184614893565b92915050565b6000806000606084860312156148d6576148d5614705565b5b60006148e486828701614758565b93505060206148f586828701614758565b92505060406149068682870161478e565b9150509250925092565b614919816147e3565b811461492457600080fd5b50565b60008135905061493681614910565b92915050565b6000806040838503121561495357614952614705565b5b600061496185828601614758565b925050602061497285828601614927565b9150509250929050565b600060ff82169050919050565b6149928161497c565b82525050565b60006020820190506149ad6000830184614989565b92915050565b6149bc8161472f565b82525050565b60006020820190506149d760008301846149b3565b92915050565b6000602082840312156149f3576149f2614705565b5b6000614a0184828501614758565b91505092915050565b600060208284031215614a2057614a1f614705565b5b6000614a2e84828501614927565b91505092915050565b600060208284031215614a4d57614a4c614705565b5b6000614a5b8482850161478e565b91505092915050565b60008060408385031215614a7b57614a7a614705565b5b6000614a898582860161478e565b9250506020614a9a8582860161478e565b9150509250929050565b60008060408385031215614abb57614aba614705565b5b6000614ac985828601614758565b9250506020614ada85828601614758565b9150509250929050565b6000614aef8261470f565b9050919050565b614aff81614ae4565b82525050565b6000602082019050614b1a6000830184614af6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b4557614b44614b20565b5b8235905067ffffffffffffffff811115614b6257614b61614b25565b5b602083019150836020820283011115614b7e57614b7d614b2a565b5b9250929050565b60008060208385031215614b9c57614b9b614705565b5b600083013567ffffffffffffffff811115614bba57614bb961470a565b5b614bc685828601614b2f565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c1957607f821691505b60208210811415614c2d57614c2c614bd2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c69602083614655565b9150614c7482614c33565b602082019050919050565b60006020820190508181036000830152614c9881614c5c565b9050919050565b7f54784c696d69743a20416c72656164792073657420746f20746869732076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cfb602283614655565b9150614d0682614c9f565b604082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f426f743a204e6f7420626c61636b6c6973746564000000000000000000000000600082015250565b6000614d67601483614655565b9150614d7282614d31565b602082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dd78261476d565b9150614de28361476d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e1b57614e1a614d9d565b5b828202905092915050565b7f6d61782074782063616e206e6f74206265203000000000000000000000000000600082015250565b6000614e5c601383614655565b9150614e6782614e26565b602082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f546f74616c2073656c6c206665652063616e206e6f74206265206d6f7265207460008201527f68616e2031320000000000000000000000000000000000000000000000000000602082015250565b6000614eee602683614655565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b7f6d61782077616c6c65742063616e206e6f742062652030000000000000000000600082015250565b6000614f5a601783614655565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f546f74616c206561726c792073656c6c206665652063616e206e6f742062652060008201527f6d6f7265207468616e2032320000000000000000000000000000000000000000602082015250565b6000614fec602c83614655565b9150614ff782614f90565b604082019050919050565b6000602082019050818103600083015261501b81614fdf565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000615058601c83614655565b915061506382615022565b602082019050919050565b600060208201905081810360008301526150878161504b565b9050919050565b60008151905061509d81614777565b92915050565b6000602082840312156150b9576150b8614705565b5b60006150c78482850161508e565b91505092915050565b60006040820190506150e560008301856149b3565b6150f26020830184614893565b9392505050565b60008151905061510881614910565b92915050565b60006020828403121561512457615123614705565b5b6000615132848285016150f9565b91505092915050565b7f466565733a20416c72656164792073657420746f20746869732076616c756500600082015250565b6000615171601f83614655565b915061517c8261513b565b602082019050919050565b600060208201905081810360008301526151a081615164565b9050919050565b7f57616c6c65744c696d69743a20416c72656164792073657420746f207468697360008201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b6000615203602683614655565b915061520e826151a7565b604082019050919050565b60006020820190508181036000830152615232816151f6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615295602683614655565b91506152a082615239565b604082019050919050565b600060208201905081810360008301526152c481615288565b9050919050565b7f546f74616c20627579206665652063616e206e6f74206265206d6f726520746860008201527f616e203132000000000000000000000000000000000000000000000000000000602082015250565b6000615327602583614655565b9150615332826152cb565b604082019050919050565b600060208201905081810360008301526153568161531a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153978261476d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ca576153c9614d9d565b5b600182019050919050565b7f426f743a20416c726561647920626c61636b6c69737465640000000000000000600082015250565b600061540b601883614655565b9150615416826153d5565b602082019050919050565b6000602082019050818103600083015261543a816153fe565b9050919050565b7f426f743a2043616e6e6f7420626c61636b6c6973742070616972000000000000600082015250565b6000615477601a83614655565b915061548282615441565b602082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b60006154b88261476d565b91506154c38361476d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f8576154f7614d9d565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615539601b83614655565b915061554482615503565b602082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155cb602483614655565b91506155d68261556f565b604082019050919050565b600060208201905081810360008301526155fa816155be565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061565d602283614655565b915061566882615601565b604082019050919050565b6000602082019050818103600083015261568c81615650565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006156c9601e83614655565b91506156d482615693565b602082019050919050565b600060208201905081810360008301526156f8816156bc565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000615735601c83614655565b9150615740826156ff565b602082019050919050565b6000602082019050818103600083015261576481615728565b9050919050565b7f57616974696e6720746f20676f206c6976650000000000000000000000000000600082015250565b60006157a1601283614655565b91506157ac8261576b565b602082019050919050565b600060208201905081810360008301526157d081615794565b9050919050565b7f596f7572206163636f756e7420697320626c61636b6c69737465640000000000600082015250565b600061580d601b83614655565b9150615818826157d7565b602082019050919050565b6000602082019050818103600083015261583c81615800565b9050919050565b7f547820416d6f756e7420746f6f206c6172676500000000000000000000000000600082015250565b6000615879601383614655565b915061588482615843565b602082019050919050565b600060208201905081810360008301526158a88161586c565b9050919050565b7f5472616e736665722077696c6c206578636565642077616c6c6574206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b600061590b602183614655565b9150615916826158af565b604082019050919050565b6000602082019050818103600083015261593a816158fe565b9050919050565b600061594c8261476d565b91506159578361476d565b92508282101561596a57615969614d9d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159af8261476d565b91506159ba8361476d565b9250826159ca576159c9615975565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a31602183614655565b9150615a3c826159d5565b604082019050919050565b60006020820190508181036000830152615a6081615a24565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615ac3602583614655565b9150615ace82615a67565b604082019050919050565b60006020820190508181036000830152615af281615ab6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b55602383614655565b9150615b6082615af9565b604082019050919050565b60006020820190508181036000830152615b8481615b48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc981614741565b92915050565b600060208284031215615be557615be4614705565b5b6000615bf384828501615bba565b91505092915050565b6000819050919050565b6000615c21615c1c615c1784615bfc565b614819565b61476d565b9050919050565b615c3181615c06565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6c8161472f565b82525050565b6000615c7e8383615c63565b60208301905092915050565b6000602082019050919050565b6000615ca282615c37565b615cac8185615c42565b9350615cb783615c53565b8060005b83811015615ce8578151615ccf8882615c72565b9750615cda83615c8a565b925050600181019050615cbb565b5085935050505092915050565b600060a082019050615d0a6000830188614893565b615d176020830187615c28565b8181036040830152615d298186615c97565b9050615d3860608301856149b3565b615d456080830184614893565b9695505050505050565b600060c082019050615d6460008301896149b3565b615d716020830188614893565b615d7e6040830187615c28565b615d8b6060830186615c28565b615d9860808301856149b3565b615da560a0830184614893565b979650505050505050565b600080600060608486031215615dc957615dc8614705565b5b6000615dd78682870161508e565b9350506020615de88682870161508e565b9250506040615df98682870161508e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a1ecb34e324447b1866a717c0447ff7b1b3d53668ec734c60b015e6bccc58dbc64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637f2feddc116101e7578063bfd792841161010d578063dd62ed3e116100a0578063f63743421161006f578063f637434214610dd5578063fb0ecfa414610e00578063fcaf2b5614610e29578063ffecf51614610e52576103ad565b8063dd62ed3e14610d1b578063e16830a814610d58578063f11a24d314610d81578063f2fde38b14610dac576103ad565b8063c9567bf9116100dc578063c9567bf914610c85578063cc2ffe7c14610c9c578063cd49513f14610cc7578063d00efb2f14610cf0576103ad565b8063bfd7928414610bc9578063c024666814610c06578063c14db6c014610c2f578063c5f956af14610c5a576103ad565b8063a1addd9511610185578063b222e0c211610154578063b222e0c214610ae7578063b40f946914610b24578063bb02e9c214610b61578063bf95793d14610b8c576103ad565b8063a1addd9514610a19578063a457c2d714610a42578063a9059cbb14610a7f578063af465a2714610abc576103ad565b80638366e79a116101c15780638366e79a1461095b57806386917524146109985780638da5cb5b146109c357806395d89b41146109ee576103ad565b80637f2feddc146108ca5780638036d59014610907578063809d458d14610932576103ad565b8063541a43cf116102cc5780636ac9a8701161026a578063715018a611610239578063715018a61461084a578063728d41c914610861578063751039fc1461088a578063762aace7146108a1576103ad565b80636ac9a870146107a25780636b2fb124146107cb5780636fc3eaec146107f657806370a082311461080d576103ad565b80635fecd926116102a65780635fecd926146106fc5780636402511e1461072557806364f5a5bb1461074e57806366a88d9614610777576103ad565b8063541a43cf1461067d5780635932ead1146106a85780635c068a8c146106d1576103ad565b8063307aebc91161034457806349bd5a5e1161031357806349bd5a5e146105bf5780634a62bb65146105ea5780634e6fd6c4146106155780634fbee19314610640576103ad565b8063307aebc914610501578063313ce5671461052c57806339509351146105575780633d005e9414610594576103ad565b806318160ddd1161038057806318160ddd146104455780631a8145bb1461047057806323b872dd1461049b57806330280a71146104d8576103ad565b806306fdde03146103b2578063095ea7b3146103dd5780631694505e1461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e7b565b6040516103d491906146e3565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff91906147a3565b610f0d565b60405161041191906147fe565b60405180910390f35b34801561042657600080fd5b5061042f610f2b565b60405161043c9190614878565b60405180910390f35b34801561045157600080fd5b5061045a610f43565b60405161046791906148a2565b60405180910390f35b34801561047c57600080fd5b50610485610f4d565b60405161049291906148a2565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906148bd565b610f53565b6040516104cf91906147fe565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa919061493c565b61102c565b005b34801561050d57600080fd5b506105166111b1565b60405161052391906147fe565b60405180910390f35b34801561053857600080fd5b506105416111c4565b60405161054e9190614998565b60405180910390f35b34801561056357600080fd5b5061057e600480360381019061057991906147a3565b6111cd565b60405161058b91906147fe565b60405180910390f35b3480156105a057600080fd5b506105a9611280565b6040516105b691906148a2565b60405180910390f35b3480156105cb57600080fd5b506105d4611286565b6040516105e191906149c2565b60405180910390f35b3480156105f657600080fd5b506105ff6112ac565b60405161060c91906147fe565b60405180910390f35b34801561062157600080fd5b5061062a6112bf565b60405161063791906149c2565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906149dd565b6112c5565b60405161067491906147fe565b60405180910390f35b34801561068957600080fd5b506106926112e5565b60405161069f91906148a2565b60405180910390f35b3480156106b457600080fd5b506106cf60048036038101906106ca9190614a0a565b6112eb565b005b3480156106dd57600080fd5b506106e661139f565b6040516106f391906148a2565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906149dd565b6113a5565b005b34801561073157600080fd5b5061074c60048036038101906107479190614a37565b6114d6565b005b34801561075a57600080fd5b5061077560048036038101906107709190614a37565b61158a565b005b34801561078357600080fd5b5061078c611681565b60405161079991906148a2565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190614a64565b611687565b005b3480156107d757600080fd5b506107e0611794565b6040516107ed91906148a2565b60405180910390f35b34801561080257600080fd5b5061080b61179a565b005b34801561081957600080fd5b50610834600480360381019061082f91906149dd565b6118a2565b60405161084191906148a2565b60405180910390f35b34801561085657600080fd5b5061085f6118ea565b005b34801561086d57600080fd5b5061088860048036038101906108839190614a37565b611a42565b005b34801561089657600080fd5b5061089f611b39565b005b3480156108ad57600080fd5b506108c860048036038101906108c39190614a64565b611bed565b005b3480156108d657600080fd5b506108f160048036038101906108ec91906149dd565b611cec565b6040516108fe91906148a2565b60405180910390f35b34801561091357600080fd5b5061091c611d04565b60405161092991906148a2565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906149dd565b611d0a565b005b34801561096757600080fd5b50610982600480360381019061097d9190614aa4565b611de5565b60405161098f91906147fe565b60405180910390f35b3480156109a457600080fd5b506109ad612010565b6040516109ba91906148a2565b60405180910390f35b3480156109cf57600080fd5b506109d8612016565b6040516109e591906149c2565b60405180910390f35b3480156109fa57600080fd5b50610a03612040565b604051610a1091906146e3565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190614a0a565b6120d2565b005b348015610a4e57600080fd5b50610a696004803603810190610a6491906147a3565b612186565b604051610a7691906147fe565b60405180910390f35b348015610a8b57600080fd5b50610aa66004803603810190610aa191906147a3565b612253565b604051610ab391906147fe565b60405180910390f35b348015610ac857600080fd5b50610ad1612271565b604051610ade91906148a2565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906149dd565b612277565b604051610b1b91906148a2565b60405180910390f35b348015610b3057600080fd5b50610b4b6004803603810190610b4691906149dd565b61228f565b604051610b5891906147fe565b60405180910390f35b348015610b6d57600080fd5b50610b766122af565b604051610b8391906148a2565b60405180910390f35b348015610b9857600080fd5b50610bb36004803603810190610bae91906149dd565b6122b5565b604051610bc091906147fe565b60405180910390f35b348015610bd557600080fd5b50610bf06004803603810190610beb91906149dd565b6122d5565b604051610bfd91906147fe565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c28919061493c565b6122f5565b005b348015610c3b57600080fd5b50610c4461247a565b604051610c5191906148a2565b60405180910390f35b348015610c6657600080fd5b50610c6f612480565b604051610c7c9190614b05565b60405180910390f35b348015610c9157600080fd5b50610c9a6124a6565b005b348015610ca857600080fd5b50610cb1612627565b604051610cbe91906148a2565b60405180910390f35b348015610cd357600080fd5b50610cee6004803603810190610ce9919061493c565b61262d565b005b348015610cfc57600080fd5b50610d056126e6565b604051610d1291906148a2565b60405180910390f35b348015610d2757600080fd5b50610d426004803603810190610d3d9190614aa4565b6126ec565b604051610d4f91906148a2565b60405180910390f35b348015610d6457600080fd5b50610d7f6004803603810190610d7a919061493c565b612773565b005b348015610d8d57600080fd5b50610d966128f8565b604051610da391906148a2565b60405180910390f35b348015610db857600080fd5b50610dd36004803603810190610dce91906149dd565b6128fe565b005b348015610de157600080fd5b50610dea612ac5565b604051610df791906148a2565b60405180910390f35b348015610e0c57600080fd5b50610e276004803603810190610e229190614a64565b612acb565b005b348015610e3557600080fd5b50610e506004803603810190610e4b9190614b85565b612bca565b005b348015610e5e57600080fd5b50610e796004803603810190610e7491906149dd565b612d70565b005b606060038054610e8a90614c01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb690614c01565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b6000610f21610f1a612f91565b8484612f99565b6001905092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600e5481565b6000610f60848484613164565b61102184610f6c612f91565b61101c85604051806060016040528060288152602001615e2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fd2612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b612f99565b600190509392505050565b611034612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba90614c7f565b60405180910390fd5b801515601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90614d11565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760019054906101000a900460ff1681565b60006012905090565b60006112766111da612f91565b8461127185600160006111eb612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3390919063ffffffff16565b612f99565b6001905092915050565b600c5481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760049054906101000a900460ff1681565b61dead81565b60186020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6112f3612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614c7f565b60405180910390fd5b80601760026101000a81548160ff02191690831515021790555050565b60065481565b6113ad612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614c7f565b60405180910390fd5b601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf90614d7d565b60405180910390fd5b6114d3816000613dd4565b50565b6114de612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614c7f565b60405180910390fd5b670de0b6b3a7640000816115819190614dcc565b60118190555050565b611592612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161890614c7f565b60405180910390fd5b60008111611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614e72565b60405180910390fd5b670de0b6b3a7640000816116789190614dcc565b60128190555050565b60135481565b61168f612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614c7f565b60405180910390fd5b600c6117338284612f3390919063ffffffff16565b1115611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b90614f04565b60405180910390fd5b81600b8190555080600a8190555081600981905550806008819055505050565b600a5481565b6117a2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182890614c7f565b60405180910390fd5b6000479050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561189e573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118f2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890614c7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611a4a612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad090614c7f565b60405180910390fd5b60008111611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1390614f70565b60405180910390fd5b670de0b6b3a764000081611b309190614dcc565b60138190555050565b611b41612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790614c7f565b60405180910390fd5b6000601760046101000a81548160ff021916908315150217905550565b611bf5612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90614c7f565b60405180910390fd5b6016611c998284612f3390919063ffffffff16565b1115611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd190615002565b60405180910390fd5b81600d8190555080600c819055505050565b601c6020528060005260406000206000915090505481565b60125481565b611d12612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614c7f565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611def612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590614c7f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee49061506e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2891906149c2565b60206040518083038186803b158015611f4057600080fd5b505afa158015611f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7891906150a3565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611fb59291906150d0565b602060405180830381600087803b158015611fcf57600080fd5b505af1158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612007919061510e565b91505092915050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461204f90614c01565b80601f016020809104026020016040519081016040528092919081815260200182805461207b90614c01565b80156120c85780601f1061209d576101008083540402835291602001916120c8565b820191906000526020600020905b8154815290600101906020018083116120ab57829003601f168201915b5050505050905090565b6120da612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216090614c7f565b60405180910390fd5b80601760036101000a81548160ff02191690831515021790555050565b6000612249612193612f91565b8461224485604051806060016040528060258152602001615e5260259139600160006121bd612f91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b612f99565b6001905092915050565b6000612267612260612f91565b8484613164565b6001905092915050565b60105481565b601d6020528060005260406000206000915090505481565b601a6020528060005260406000206000915054906101000a900460ff1681565b60095481565b60196020528060005260406000206000915054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6122fd612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238390614c7f565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561241f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241690615187565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60085481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124ae612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490614c7f565b60405180910390fd5b6001601760016101000a81548160ff021916908315150217905550436016819055506001601760026101000a81548160ff0219169083151502179055506001601760046101000a81548160ff0219169083151502179055506125bf6127106125b1600a601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b6012819055506125ef6127106125e16032601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b60138190555061261f6127106126116005601054613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b601181905550565b600f5481565b612635612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bb90614c7f565b60405180910390fd5b6126ce82826122f5565b6126d8828261102c565b6126e28282612773565b5050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277b612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280190614c7f565b60405180910390fd5b801515601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561289d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289490615219565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60075481565b612906612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298c90614c7f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc906152ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b612ad3612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5990614c7f565b60405180910390fd5b600c612b778284612f3390919063ffffffff16565b1115612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf9061533d565b60405180910390fd5b81600781905550806006819055505050565b612bd2612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5890614c7f565b60405180910390fd5b60005b82829050811015612d6b576000838383818110612c8457612c8361535d565b5b9050602002016020810190612c9991906149dd565b9050601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d405750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612d4b5750612d58565b612d56816001613dd4565b505b8080612d639061538c565b915050612c64565b505050565b612d78612f91565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfe90614c7f565b60405180910390fd5b601b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90615421565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061548d565b60405180910390fd5b612f30816001613dd4565b50565b6000808284612f4291906154ad565b905083811015612f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7e9061554f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613000906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307090615673565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161315791906148a2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb906156df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b9061574b565b60405180910390fd5b601760019054906101000a900460ff16806132a85750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806132fc5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61333b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613332906157b7565b60405180910390fd5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133df5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61341e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341590615823565b60405180910390fd5b601760049054906101000a900460ff16156135d4576012548111158061348d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806134e15750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135179061588f565b60405180910390fd5b60135461353e82613530856118a2565b612f3390919063ffffffff16565b1115806135945750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6135d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ca90615921565b60405180910390fd5b5b60008114156135ee576135e983836000613ef4565b613d6b565b60006135f9306118a2565b905060006011548210159050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136605750805b80156136795750601760009054906101000a900460ff16155b156136c1576001601760006101000a81548160ff0219169083151502179055506136a1614189565b6000601760006101000a81548160ff0219169083151502179055506137ed565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561376c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156137855750600160165461378291906154ad565b43105b80156137db5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137ec576137eb846001613dd4565b5b5b6000601760009054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138a35750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138ad57600090505b8015613d5c576000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415613b1357601760039054906101000a900460ff1615613a35576000601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156139bd57504262015180601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ba91906154ad565b10155b15613a1d57600d54600b81905550600c54600a8190555042601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a30565b600954600b81905550600854600a819055505b613a48565b600954600b81905550600854600a819055505b6000613a61600a54600b54612f3390919063ffffffff16565b9050613a896064613a7b8389613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9150613ac6613ab582613aa7600b5486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600e54612f3390919063ffffffff16565b600e81905550613b07613af682613ae8600a5486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600f54612f3390919063ffffffff16565b600f8190555050613d30565b601760029054906101000a900460ff1615613bc45742601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613b7357600080fd5b601e42613b8091906154ad565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601760039054906101000a900460ff168015613c1f57506000601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b15613c695742601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000613c82600654600754612f3390919063ffffffff16565b9050613caa6064613c9c8389613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9150613ce7613cd682613cc860075486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600e54612f3390919063ffffffff16565b600e81905550613d28613d1782613d0960065486613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b600f54612f3390919063ffffffff16565b600f81905550505b6000811115613d5a57613d44873083613ef4565b613d5781866142db90919063ffffffff16565b94505b505b613d67868686613ef4565b5050505b505050565b6000838311158290613db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daf91906146e3565b60405180910390fd5b5060008385613dc79190615941565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080831415613e425760009050613ea4565b60008284613e509190614dcc565b9050828482613e5f91906159a4565b14613e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e9690615a47565b60405180910390fd5b809150505b92915050565b6000613eec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614325565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f5b90615ad9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fcb90615b6b565b60405180910390fd5b613fdf838383614388565b61404a81604051806060016040528060268152602001615e04602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d709092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140dd816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f3390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161417c91906148a2565b60405180910390a3505050565b6000600f54600e5461419b91906154ad565b905060006141a8306118a2565b905060006141e660026141d8856141ca600e5487613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b613eaa90919063ffffffff16565b905060006141fd82846142db90919063ffffffff16565b90506142088161438d565b6000479050600061423686614228600f5485613e2f90919063ffffffff16565b613eaa90919063ffffffff16565b9050600061424d82846142db90919063ffffffff16565b90506000600e819055506000600f81905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156142c7573d6000803e3d6000fd5b506142d28582614596565b50505050505050565b600061431d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d70565b905092915050565b6000808311829061436c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161436391906146e3565b60405180910390fd5b506000838561437b91906159a4565b9050809150509392505050565b505050565b6000600267ffffffffffffffff8111156143aa576143a9615b8b565b5b6040519080825280602002602001820160405280156143d85781602001602082028036833780820191505090505b50905030816000815181106143f0576143ef61535d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561448457600080fd5b505afa158015614498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144bc9190615bcf565b816001815181106144d0576144cf61535d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614560959493929190615cf5565b600060405180830381600087803b15801561457a57600080fd5b505af115801561458e573d6000803e3d6000fd5b505050505050565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016145f196959493929190615d4f565b6060604051808303818588803b15801561460a57600080fd5b505af115801561461e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146439190615db0565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614684578082015181840152602081019050614669565b83811115614693576000848401525b50505050565b6000601f19601f8301169050919050565b60006146b58261464a565b6146bf8185614655565b93506146cf818560208601614666565b6146d881614699565b840191505092915050565b600060208201905081810360008301526146fd81846146aa565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061473a8261470f565b9050919050565b61474a8161472f565b811461475557600080fd5b50565b60008135905061476781614741565b92915050565b6000819050919050565b6147808161476d565b811461478b57600080fd5b50565b60008135905061479d81614777565b92915050565b600080604083850312156147ba576147b9614705565b5b60006147c885828601614758565b92505060206147d98582860161478e565b9150509250929050565b60008115159050919050565b6147f8816147e3565b82525050565b600060208201905061481360008301846147ef565b92915050565b6000819050919050565b600061483e6148396148348461470f565b614819565b61470f565b9050919050565b600061485082614823565b9050919050565b600061486282614845565b9050919050565b61487281614857565b82525050565b600060208201905061488d6000830184614869565b92915050565b61489c8161476d565b82525050565b60006020820190506148b76000830184614893565b92915050565b6000806000606084860312156148d6576148d5614705565b5b60006148e486828701614758565b93505060206148f586828701614758565b92505060406149068682870161478e565b9150509250925092565b614919816147e3565b811461492457600080fd5b50565b60008135905061493681614910565b92915050565b6000806040838503121561495357614952614705565b5b600061496185828601614758565b925050602061497285828601614927565b9150509250929050565b600060ff82169050919050565b6149928161497c565b82525050565b60006020820190506149ad6000830184614989565b92915050565b6149bc8161472f565b82525050565b60006020820190506149d760008301846149b3565b92915050565b6000602082840312156149f3576149f2614705565b5b6000614a0184828501614758565b91505092915050565b600060208284031215614a2057614a1f614705565b5b6000614a2e84828501614927565b91505092915050565b600060208284031215614a4d57614a4c614705565b5b6000614a5b8482850161478e565b91505092915050565b60008060408385031215614a7b57614a7a614705565b5b6000614a898582860161478e565b9250506020614a9a8582860161478e565b9150509250929050565b60008060408385031215614abb57614aba614705565b5b6000614ac985828601614758565b9250506020614ada85828601614758565b9150509250929050565b6000614aef8261470f565b9050919050565b614aff81614ae4565b82525050565b6000602082019050614b1a6000830184614af6565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b4557614b44614b20565b5b8235905067ffffffffffffffff811115614b6257614b61614b25565b5b602083019150836020820283011115614b7e57614b7d614b2a565b5b9250929050565b60008060208385031215614b9c57614b9b614705565b5b600083013567ffffffffffffffff811115614bba57614bb961470a565b5b614bc685828601614b2f565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c1957607f821691505b60208210811415614c2d57614c2c614bd2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c69602083614655565b9150614c7482614c33565b602082019050919050565b60006020820190508181036000830152614c9881614c5c565b9050919050565b7f54784c696d69743a20416c72656164792073657420746f20746869732076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614cfb602283614655565b9150614d0682614c9f565b604082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f426f743a204e6f7420626c61636b6c6973746564000000000000000000000000600082015250565b6000614d67601483614655565b9150614d7282614d31565b602082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dd78261476d565b9150614de28361476d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e1b57614e1a614d9d565b5b828202905092915050565b7f6d61782074782063616e206e6f74206265203000000000000000000000000000600082015250565b6000614e5c601383614655565b9150614e6782614e26565b602082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f546f74616c2073656c6c206665652063616e206e6f74206265206d6f7265207460008201527f68616e2031320000000000000000000000000000000000000000000000000000602082015250565b6000614eee602683614655565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b7f6d61782077616c6c65742063616e206e6f742062652030000000000000000000600082015250565b6000614f5a601783614655565b9150614f6582614f24565b602082019050919050565b60006020820190508181036000830152614f8981614f4d565b9050919050565b7f546f74616c206561726c792073656c6c206665652063616e206e6f742062652060008201527f6d6f7265207468616e2032320000000000000000000000000000000000000000602082015250565b6000614fec602c83614655565b9150614ff782614f90565b604082019050919050565b6000602082019050818103600083015261501b81614fdf565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000615058601c83614655565b915061506382615022565b602082019050919050565b600060208201905081810360008301526150878161504b565b9050919050565b60008151905061509d81614777565b92915050565b6000602082840312156150b9576150b8614705565b5b60006150c78482850161508e565b91505092915050565b60006040820190506150e560008301856149b3565b6150f26020830184614893565b9392505050565b60008151905061510881614910565b92915050565b60006020828403121561512457615123614705565b5b6000615132848285016150f9565b91505092915050565b7f466565733a20416c72656164792073657420746f20746869732076616c756500600082015250565b6000615171601f83614655565b915061517c8261513b565b602082019050919050565b600060208201905081810360008301526151a081615164565b9050919050565b7f57616c6c65744c696d69743a20416c72656164792073657420746f207468697360008201527f2076616c75650000000000000000000000000000000000000000000000000000602082015250565b6000615203602683614655565b915061520e826151a7565b604082019050919050565b60006020820190508181036000830152615232816151f6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615295602683614655565b91506152a082615239565b604082019050919050565b600060208201905081810360008301526152c481615288565b9050919050565b7f546f74616c20627579206665652063616e206e6f74206265206d6f726520746860008201527f616e203132000000000000000000000000000000000000000000000000000000602082015250565b6000615327602583614655565b9150615332826152cb565b604082019050919050565b600060208201905081810360008301526153568161531a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153978261476d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153ca576153c9614d9d565b5b600182019050919050565b7f426f743a20416c726561647920626c61636b6c69737465640000000000000000600082015250565b600061540b601883614655565b9150615416826153d5565b602082019050919050565b6000602082019050818103600083015261543a816153fe565b9050919050565b7f426f743a2043616e6e6f7420626c61636b6c6973742070616972000000000000600082015250565b6000615477601a83614655565b915061548282615441565b602082019050919050565b600060208201905081810360008301526154a68161546a565b9050919050565b60006154b88261476d565b91506154c38361476d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154f8576154f7614d9d565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615539601b83614655565b915061554482615503565b602082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155cb602483614655565b91506155d68261556f565b604082019050919050565b600060208201905081810360008301526155fa816155be565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061565d602283614655565b915061566882615601565b604082019050919050565b6000602082019050818103600083015261568c81615650565b9050919050565b7f7472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006156c9601e83614655565b91506156d482615693565b602082019050919050565b600060208201905081810360008301526156f8816156bc565b9050919050565b7f7472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000615735601c83614655565b9150615740826156ff565b602082019050919050565b6000602082019050818103600083015261576481615728565b9050919050565b7f57616974696e6720746f20676f206c6976650000000000000000000000000000600082015250565b60006157a1601283614655565b91506157ac8261576b565b602082019050919050565b600060208201905081810360008301526157d081615794565b9050919050565b7f596f7572206163636f756e7420697320626c61636b6c69737465640000000000600082015250565b600061580d601b83614655565b9150615818826157d7565b602082019050919050565b6000602082019050818103600083015261583c81615800565b9050919050565b7f547820416d6f756e7420746f6f206c6172676500000000000000000000000000600082015250565b6000615879601383614655565b915061588482615843565b602082019050919050565b600060208201905081810360008301526158a88161586c565b9050919050565b7f5472616e736665722077696c6c206578636565642077616c6c6574206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b600061590b602183614655565b9150615916826158af565b604082019050919050565b6000602082019050818103600083015261593a816158fe565b9050919050565b600061594c8261476d565b91506159578361476d565b92508282101561596a57615969614d9d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159af8261476d565b91506159ba8361476d565b9250826159ca576159c9615975565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a31602183614655565b9150615a3c826159d5565b604082019050919050565b60006020820190508181036000830152615a6081615a24565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615ac3602583614655565b9150615ace82615a67565b604082019050919050565b60006020820190508181036000830152615af281615ab6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b55602383614655565b9150615b6082615af9565b604082019050919050565b60006020820190508181036000830152615b8481615b48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615bc981614741565b92915050565b600060208284031215615be557615be4614705565b5b6000615bf384828501615bba565b91505092915050565b6000819050919050565b6000615c21615c1c615c1784615bfc565b614819565b61476d565b9050919050565b615c3181615c06565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c6c8161472f565b82525050565b6000615c7e8383615c63565b60208301905092915050565b6000602082019050919050565b6000615ca282615c37565b615cac8185615c42565b9350615cb783615c53565b8060005b83811015615ce8578151615ccf8882615c72565b9750615cda83615c8a565b925050600181019050615cbb565b5085935050505092915050565b600060a082019050615d0a6000830188614893565b615d176020830187615c28565b8181036040830152615d298186615c97565b9050615d3860608301856149b3565b615d456080830184614893565b9695505050505050565b600060c082019050615d6460008301896149b3565b615d716020830188614893565b615d7e6040830187615c28565b615d8b6060830186615c28565b615d9860808301856149b3565b615da560a0830184614893565b979650505050505050565b600080600060608486031215615dc957615dc8614705565b5b6000615dd78682870161508e565b9350506020615de88682870161508e565b9250506040615df98682870161508e565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a1ecb34e324447b1866a717c0447ff7b1b3d53668ec734c60b015e6bccc58dbc64736f6c63430008090033

Deployed Bytecode Sourcemap

29114:12400:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9190:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11364:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29257:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10313:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29751:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12016:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31765:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30170:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10154:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12781:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29655:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30070:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30278:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29194:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30346:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29702:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33436:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29381:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34880:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34021:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33657:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29975:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32759:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29569:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35147:184;;;;;;;;;;;;;:::i;:::-;;10485:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23692:148;;;;;;;;;;;;;:::i;:::-;;33833:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35049:86;;;;;;;;;;;;;:::i;:::-;;33136:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30754:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29933:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34154:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41147:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29889:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23048:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9410:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33552:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13503:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10826:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29836:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30835:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30551:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29518:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30450:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30673:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31539:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29469:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30023:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35343:437;;;;;;;;;;;;;:::i;:::-;;29791:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32257:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30107:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11065:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32003:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29422:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23996:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29611:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32487:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34531:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34287:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9190:100;9244:13;9277:5;9270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9190:100;:::o;11364:169::-;11447:4;11464:39;11473:12;:10;:12::i;:::-;11487:7;11496:6;11464:8;:39::i;:::-;11521:4;11514:11;;11364:169;;;;:::o;29257:115::-;29329:42;29257:115;:::o;10313:108::-;10374:7;10401:12;;10394:19;;10313:108;:::o;29751:33::-;;;;:::o;12016:355::-;12156:4;12173:36;12183:6;12191:9;12202:6;12173:9;:36::i;:::-;12220:121;12229:6;12237:12;:10;:12::i;:::-;12251:89;12289:6;12251:89;;;;;;;;;;;;;;;;;:11;:19;12263:6;12251:19;;;;;;;;;;;;;;;:33;12271:12;:10;:12::i;:::-;12251:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12220:8;:121::i;:::-;12359:4;12352:11;;12016:355;;;;;:::o;31765:230::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:5:::1;31860:39;;:21;:30;31882:7;31860:30;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;;31852:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31982:5;31949:21;:30;31971:7;31949:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31765:230:::0;;:::o;30170:22::-;;;;;;;;;;;;;:::o;10154:93::-;10212:5;10237:2;10230:9;;10154:93;:::o;12781:218::-;12869:4;12886:83;12895:12;:10;:12::i;:::-;12909:7;12918:50;12957:10;12918:11;:25;12930:12;:10;:12::i;:::-;12918:25;;;;;;;;;;;;;;;:34;12944:7;12918:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12886:8;:83::i;:::-;12987:4;12980:11;;12781:218;;;;:::o;29655:40::-;;;;:::o;30070:28::-;;;;;;;;;;;;;:::o;30278:33::-;;;;;;;;;;;;;:::o;29194:54::-;29241:6;29194:54;:::o;30346:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;29702:40::-;;;;:::o;33436:109::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33529:8:::1;33511:15;;:26;;;;;;;;;;;;;;;;;;33436:109:::0;:::o;29381:34::-;;;;:::o;34880:161::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34956:4:::1;:13;34961:7;34956:13;;;;;;;;;;;;;;;;;;;;;;;;;34948:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:28;35018:7;35027:5;35005:12;:28::i;:::-;34880:161:::0;:::o;34021:125::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34131:6:::1;34115:12;:23;;;;:::i;:::-;34100:12;:38;;;;34021:125:::0;:::o;33657:168::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33749:1:::1;33738:8;:12;33730:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33810:6;33798:8;:19;;;;:::i;:::-;33785:10;:32;;;;33657:168:::0;:::o;29975:39::-;;;;:::o;32759:369::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32895:2:::1;32862:29;32879:11;32862:12;:16;;:29;;;;:::i;:::-;:35;;32854:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32970:12;32951:16;:31;;;;33011:11;32993:15;:29;;;;33061:12;33035:23;:38;;;;33109:11;33084:22;:36;;;;32759:369:::0;;:::o;29569:35::-;;;;:::o;35147:184::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35200:26:::1;35229:21;35200:50;;35277:15;;;;;;;;;;;35261:42;;:62;35304:18;35261:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;35189:142;35147:184::o:0;10485:127::-;10559:7;10586:9;:18;10596:7;10586:18;;;;;;;;;;;;;;;;10579:25;;10485:127;;;:::o;23692:148::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23799:1:::1;23762:40;;23783:6;;;;;;;;;;;23762:40;;;;;;;;;;;;23830:1;23813:6;;:19;;;;;;;;;;;;;;;;;;23692:148::o:0;33833:180::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33929:1:::1;33918:8;:12;33910:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;33998:6;33986:8;:19;;;;:::i;:::-;33969:14;:36;;;;33833:180:::0;:::o;35049:86::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35122:5:::1;35105:14;;:22;;;;;;;;;;;;;;;;;;35049:86::o:0;33136:292::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33277:2:::1;33244:29;33261:11;33244:12;:16;;:29;;;;:::i;:::-;:35;;33236:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;33363:12;33339:21;:36;;;;33409:11;33386:20;:34;;;;33136:292:::0;;:::o;30754:43::-;;;;;;;;;;;;;;;;;:::o;29933:35::-;;;;:::o;34154:125::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34261:9:::1;34235:15;;:36;;;;;;;;;;;;;;;;;;34154:125:::0;:::o;41147:323::-;41234:10;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41282:4:::1;41264:23;;:6;:23;;;;41256:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41331:24;41365:6;41358:24;;;41391:4;41358:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41331:66;;41423:6;41416:23;;;41440:3;41445:16;41416:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41408:54;;41245:225;41147:323:::0;;;;:::o;29889:37::-;;;;:::o;23048:79::-;23086:7;23113:6;;;;;;;;;;;23106:13;;23048:79;:::o;9410:104::-;9466:13;9499:7;9492:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9410:104;:::o;33552:97::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33633:8:::1;33621:9;;:20;;;;;;;;;;;;;;;;;;33552:97:::0;:::o;13503:269::-;13596:4;13613:129;13622:12;:10;:12::i;:::-;13636:7;13645:96;13684:15;13645:96;;;;;;;;;;;;;;;;;:11;:25;13657:12;:10;:12::i;:::-;13645:25;;;;;;;;;;;;;;;:34;13671:7;13645:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13613:8;:129::i;:::-;13760:4;13753:11;;13503:269;;;;:::o;10826:175::-;10912:4;10929:42;10939:12;:10;:12::i;:::-;10953:9;10964:6;10929:9;:42::i;:::-;10989:4;10982:11;;10826:175;;;;:::o;29836:44::-;;;;:::o;30835:41::-;;;;;;;;;;;;;;;;;:::o;30551:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29518:42::-;;;;:::o;30450:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;30673:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;31539:218::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31662:5:::1;31631:36;;:18;:27;31650:7;31631:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;31623:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;31744:5;31714:18;:27;31733:7;31714:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31539:218:::0;;:::o;29469:42::-;;;;:::o;30023:38::-;;;;;;;;;;;;;:::o;35343:437::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:4:::1;35398:10;;:17;;;;;;;;;;;;;;;;;;35440:12;35426:11;:26;;;;35481:4;35463:15;;:22;;;;;;;;;;;;;;;;;;35513:4;35496:14;;:21;;;;;;;;;;;;;;;;;;35574:26;35594:5;35574:15;35586:2;35574:7;;:11;;:15;;;;:::i;:::-;:19;;:26;;;;:::i;:::-;35561:10;:39;;;;35661:26;35681:5;35661:15;35673:2;35661:7;;:11;;:15;;;;:::i;:::-;:19;;:26;;;;:::i;:::-;35644:14;:43;;;;35747:25;35766:5;35747:14;35759:1;35747:7;;:11;;:14;;;;:::i;:::-;:18;;:25;;;;:::i;:::-;35732:12;:40;;;;35343:437::o:0;29791:32::-;;;;:::o;32257:222::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32346:31:::1;32362:7;32371:5;32346:15;:31::i;:::-;32388:34;32407:7;32416:5;32388:18;:34::i;:::-;32433:38;32456:7;32465:5;32433:22;:38::i;:::-;32257:222:::0;;:::o;30107:26::-;;;;:::o;11065:151::-;11154:7;11181:11;:18;11193:5;11181:18;;;;;;;;;;;;;;;:27;11200:7;11181:27;;;;;;;;;;;;;;;;11174:34;;11065:151;;;;:::o;32003:246::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32140:5:::1;32102:43;;:25;:34;32128:7;32102:34;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;32094:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;32236:5;32199:25;:34;32225:7;32199:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;32003:246:::0;;:::o;29422:34::-;;;;:::o;23996:244::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24105:1:::1;24085:22;;:8;:22;;;;24077:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24195:8;24166:38;;24187:6;;;;;;;;;;;24166:38;;;;;;;;;;;;24224:8;24215:6;;:17;;;;;;;;;;;;;;;;;;23996:244:::0;:::o;29611:35::-;;;;:::o;32487:264::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:2:::1;32586:29;32603:11;32586:12;:16;;:29;;;;:::i;:::-;:35;;32578:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32692:12;32674:15;:30;;;;32732:11;32715:14;:28;;;;32487:264:::0;;:::o;34531:341::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34618:9:::1;34613:252;34638:8;;:15;;34634:1;:19;34613:252;;;34676:15;34694:8;;34703:1;34694:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34676:29;;34724:4;:13;34729:7;34724:13;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;34752:13;;;;;;;;;;;34741:24;;:7;:24;;;34724:41;34720:90;;;34786:8;;;34720:90;34826:27;34839:7;34848:4;34826:12;:27::i;:::-;34661:204;34613:252;34655:4;;;;;:::i;:::-;;;;34613:252;;;;34531:341:::0;;:::o;34287:236::-;23271:12;:10;:12::i;:::-;23261:22;;:6;;;;;;;;;;;:22;;;23253:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34361:4:::1;:13;34366:7;34361:13;;;;;;;;;;;;;;;;;;;;;;;;;34360:14;34352:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34433:13;;;;;;;;;;;34422:24;;:7;:24;;;;34414:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34488:27;34501:7;34510:4;34488:12;:27::i;:::-;34287:236:::0;:::o;18080:182::-;18138:7;18158:9;18174:1;18170;:5;;;;:::i;:::-;18158:17;;18199:1;18194;:6;;18186:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18253:1;18246:8;;;18080:182;;;;:::o;1795:98::-;1848:7;1875:10;1868:17;;1795:98;:::o;16699:381::-;16852:1;16835:19;;:5;:19;;;;16827:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16933:1;16914:21;;:7;:21;;;;16906:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17018:6;16988:11;:18;17000:5;16988:18;;;;;;;;;;;;;;;:27;17007:7;16988:27;;;;;;;;;;;;;;;:36;;;;17056:7;17040:32;;17049:5;17040:32;;;17065:6;17040:32;;;;;;:::i;:::-;;;;;;;;16699:381;;;:::o;35788:3681::-;35902:1;35886:18;;:4;:18;;;;35878:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35972:1;35958:16;;:2;:16;;;;35950:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;36026:10;;;;;;;;;;;:38;;;;36040:18;:24;36059:4;36040:24;;;;;;;;;;;;;;;;;;;;;;;;;36026:38;:64;;;;36068:18;:22;36087:2;36068:22;;;;;;;;;;;;;;;;;;;;;;;;;36026:64;36018:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:4;:10;36138:4;36133:10;;;;;;;;;;;;;;;;;;;;;;;;;36132:11;:24;;;;;36148:4;:8;36153:2;36148:8;;;;;;;;;;;;;;;;;;;;;;;;;36147:9;36132:24;36124:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36205:14;;;;;;;;;;;36201:296;;;36254:10;;36244:6;:20;;:51;;;;36268:21;:27;36290:4;36268:27;;;;;;;;;;;;;;;;;;;;;;;;;36244:51;:80;;;;36299:21;:25;36321:2;36299:25;;;;;;;;;;;;;;;;;;;;;;;;;36244:80;36236:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;36400:14;;36371:25;36389:6;36371:13;36381:2;36371:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:43;;:76;;;;36418:25;:29;36444:2;36418:29;;;;;;;;;;;;;;;;;;;;;;;;;36371:76;36363:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;36201:296;36522:1;36512:6;:11;36509:92;;;36540:28;36556:4;36562:2;36566:1;36540:15;:28::i;:::-;36583:7;;36509:92;36607:28;36638:24;36656:4;36638:9;:24::i;:::-;36607:55;;36675:12;36714;;36690:20;:36;;36675:51;;36764:13;;;;;;;;;;;36756:21;;:4;:21;;;;:45;;;;;36794:7;36756:45;:71;;;;;36819:8;;;;;;;;;;;36818:9;36756:71;36739:426;;;36865:4;36854:8;;:15;;;;;;;;;;;;;;;;;;36884:10;:8;:10::i;:::-;36920:5;36909:8;;:16;;;;;;;;;;;;;;;;;;36739:426;;;36968:13;;;;;;;;;;;36960:21;;:4;:21;;;:57;;;;;37004:13;;;;;;;;;;;36998:19;;:2;:19;;;;36960:57;:104;;;;;37063:1;37049:11;;:15;;;;:::i;:::-;37034:12;:30;36960:104;:144;;;;;37082:18;:22;37101:2;37082:22;;;;;;;;;;;;;;;;;;;;;;;;;37081:23;36960:144;36943:222;;;37131:22;37144:2;37148:4;37131:12;:22::i;:::-;36943:222;36739:426;37177:12;37193:8;;;;;;;;;;;37192:9;37177:24;;37217:18;:24;37236:4;37217:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37245:18;:22;37264:2;37245:22;;;;;;;;;;;;;;;;;;;;;;;;;37217:50;37214:97;;;37294:5;37284:15;;37214:97;37326:7;37323:2093;;;37350:12;37411:13;;;;;;;;;;;37405:19;;:2;:19;;;37401:1855;;;37448:9;;;;;;;;;;;37445:689;;;37502:1;37485:7;:13;37493:4;37485:13;;;;;;;;;;;;;;;;:18;;:94;;;;;37563:15;37550:8;37533:7;:13;37541:4;37533:13;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;:45;;37485:94;37481:480;;;37627:21;;37608:16;:40;;;;37693:20;;37675:15;:38;;;;37756:15;37740:7;:13;37748:4;37740:13;;;;;;;;;;;;;;;:31;;;;37481:480;;;37847:23;;37828:16;:42;;;;37915:22;;37897:15;:40;;;;37481:480;37445:689;;;38028:23;;38009:16;:42;;;;38092:22;;38074:15;:40;;;;37445:689;38168:21;38192:37;38213:15;;38192:16;;:20;;:37;;;;:::i;:::-;38168:61;;38255:34;38285:3;38255:25;38266:13;38255:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38248:41;;38329:69;38352:45;38383:13;38352:26;38361:16;;38352:4;:8;;:26;;;;:::i;:::-;:30;;:45;;;;:::i;:::-;38329:18;;:22;;:69;;;;:::i;:::-;38308:18;:90;;;;38437:67;38459:44;38489:13;38459:25;38468:15;;38459:4;:8;;:25;;;;:::i;:::-;:29;;:44;;;;:::i;:::-;38437:17;;:21;;:67;;;;:::i;:::-;38417:17;:87;;;;37426:1094;37401:1855;;;38603:15;;;;;;;;;;;38600:169;;;38665:15;38650:8;:12;38659:2;38650:12;;;;;;;;;;;;;;;;:30;38642:39;;;;;;38738:10;38719:15;:30;;;;:::i;:::-;38704:8;:12;38713:2;38704:12;;;;;;;;;;;;;;;:45;;;;38600:169;38791:9;;;;;;;;;;;:29;;;;;38819:1;38804:7;:11;38812:2;38804:11;;;;;;;;;;;;;;;;:16;38791:29;38787:107;;;38859:15;38845:7;:11;38853:2;38845:11;;;;;;;;;;;;;;;:29;;;;38787:107;38912:20;38935:35;38955:14;;38935:15;;:19;;:35;;;;:::i;:::-;38912:58;;38996:33;39025:3;38996:24;39007:12;38996:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38989:40;;39069:67;39092:43;39122:12;39092:25;39101:15;;39092:4;:8;;:25;;;;:::i;:::-;:29;;:43;;;;:::i;:::-;39069:18;;:22;;:67;;;;:::i;:::-;39048:18;:88;;;;39175:65;39197:42;39226:12;39197:24;39206:14;;39197:4;:8;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;39175:17;;:21;;:65;;;;:::i;:::-;39155:17;:85;;;;38581:675;37401:1855;39282:1;39275:4;:8;39272:133;;;39303:42;39319:4;39333;39340;39303:15;:42::i;:::-;39373:16;39384:4;39373:6;:10;;:16;;;;:::i;:::-;39364:25;;39272:133;37335:2081;37323:2093;39428:33;39444:4;39450:2;39454:6;39428:15;:33::i;:::-;35867:3602;;;35788:3681;;;;:::o;18986:193::-;19072:7;19105:1;19100;:6;;19108:12;19092:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19132:9;19148:1;19144;:5;;;;:::i;:::-;19132:17;;19170:1;19163:8;;;18986:193;;;;;:::o;41039:100::-;41126:5;41110:4;:13;41115:7;41110:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41039:100;;:::o;19439:473::-;19497:7;19747:1;19742;:6;19738:47;;;19772:1;19765:8;;;;19738:47;19798:9;19814:1;19810;:5;;;;:::i;:::-;19798:17;;19843:1;19838;19834;:5;;;;:::i;:::-;:10;19826:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19903:1;19896:8;;;19439:473;;;;;:::o;20389:132::-;20447:7;20474:39;20478:1;20481;20474:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20467:46;;20389:132;;;;:::o;14263:575::-;14421:1;14403:20;;:6;:20;;;;14395:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14505:1;14484:23;;:9;:23;;;;14476:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14561:47;14582:6;14590:9;14601:6;14561:20;:47::i;:::-;14642:71;14664:6;14642:71;;;;;;;;;;;;;;;;;:9;:17;14652:6;14642:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14622:9;:17;14632:6;14622:17;;;;;;;;;;;;;;;:91;;;;14747:32;14772:6;14747:9;:20;14757:9;14747:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14724:9;:20;14734:9;14724:20;;;;;;;;;;;;;;;:55;;;;14812:9;14795:35;;14804:6;14795:35;;;14823:6;14795:35;;;;;;:::i;:::-;;;;;;;;14263:575;;;:::o;39477:840::-;39516:25;39565:17;;39544:18;;:38;;;;:::i;:::-;39516:66;;39593:14;39610:24;39628:4;39610:9;:24::i;:::-;39593:41;;39696:23;39722:60;39780:1;39722:53;39757:17;39722:30;39733:18;;39722:6;:10;;:30;;;;:::i;:::-;:34;;:53;;;;:::i;:::-;:57;;:60;;;;:::i;:::-;39696:86;;39793:26;39822:27;39833:15;39822:6;:10;;:27;;;;:::i;:::-;39793:56;;39862:37;39880:18;39862:17;:37::i;:::-;39912:18;39933:21;39912:42;;39965:22;39990:56;40028:17;39990:33;40005:17;;39990:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;39965:81;;40057:23;40083:30;40098:14;40083:10;:14;;:30;;;;:::i;:::-;40057:56;;40147:1;40126:18;:22;;;;40179:1;40159:17;:21;;;;40209:15;;;;;;;;;;;40193:42;;:58;40236:14;40193:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40262:47;40276:15;40293;40262:13;:47::i;:::-;39505:812;;;;;;;39477:840::o;18546:136::-;18604:7;18631:43;18635:1;18638;18631:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18624:50;;18546:136;;;;:::o;21018:279::-;21104:7;21136:1;21132;:5;21139:12;21124:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21163:9;21179:1;21175;:5;;;;:::i;:::-;21163:17;;21288:1;21281:8;;;21018:279;;;;;:::o;17684:125::-;;;;:::o;40628:403::-;40697:21;40735:1;40721:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40697:40;;40766:4;40748;40753:1;40748:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29329:42;40792:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40782:4;40787:1;40782:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29329:42;40827:66;;;40908:11;40934:1;40950:4;40977;40997:15;40827:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40684:347;40628:403;:::o;40325:295::-;29329:42;40409:31;;;40448:9;40481:4;40501:11;40527:1;40543;29241:6;40586:15;40409:203;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40325:295;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:118::-;4559:24;4577:5;4559:24;:::i;:::-;4554:3;4547:37;4472:118;;:::o;4596:222::-;4689:4;4727:2;4716:9;4712:18;4704:26;;4740:71;4808:1;4797:9;4793:17;4784:6;4740:71;:::i;:::-;4596:222;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:116::-;5519:21;5534:5;5519:21;:::i;:::-;5512:5;5509:32;5499:60;;5555:1;5552;5545:12;5499:60;5449:116;:::o;5571:133::-;5614:5;5652:6;5639:20;5630:29;;5668:30;5692:5;5668:30;:::i;:::-;5571:133;;;;:::o;5710:468::-;5775:6;5783;5832:2;5820:9;5811:7;5807:23;5803:32;5800:119;;;5838:79;;:::i;:::-;5800:119;5958:1;5983:53;6028:7;6019:6;6008:9;6004:22;5983:53;:::i;:::-;5973:63;;5929:117;6085:2;6111:50;6153:7;6144:6;6133:9;6129:22;6111:50;:::i;:::-;6101:60;;6056:115;5710:468;;;;;:::o;6184:86::-;6219:7;6259:4;6252:5;6248:16;6237:27;;6184:86;;;:::o;6276:112::-;6359:22;6375:5;6359:22;:::i;:::-;6354:3;6347:35;6276:112;;:::o;6394:214::-;6483:4;6521:2;6510:9;6506:18;6498:26;;6534:67;6598:1;6587:9;6583:17;6574:6;6534:67;:::i;:::-;6394:214;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:323::-;7357:6;7406:2;7394:9;7385:7;7381:23;7377:32;7374:119;;;7412:79;;:::i;:::-;7374:119;7532:1;7557:50;7599:7;7590:6;7579:9;7575:22;7557:50;:::i;:::-;7547:60;;7503:114;7301:323;;;;:::o;7630:329::-;7689:6;7738:2;7726:9;7717:7;7713:23;7709:32;7706:119;;;7744:79;;:::i;:::-;7706:119;7864:1;7889:53;7934:7;7925:6;7914:9;7910:22;7889:53;:::i;:::-;7879:63;;7835:117;7630:329;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:104::-;8970:7;8999:24;9017:5;8999:24;:::i;:::-;8988:35;;8925:104;;;:::o;9035:142::-;9138:32;9164:5;9138:32;:::i;:::-;9133:3;9126:45;9035:142;;:::o;9183:254::-;9292:4;9330:2;9319:9;9315:18;9307:26;;9343:87;9427:1;9416:9;9412:17;9403:6;9343:87;:::i;:::-;9183:254;;;;:::o;9443:117::-;9552:1;9549;9542:12;9566:117;9675:1;9672;9665:12;9689:117;9798:1;9795;9788:12;9829:568;9902:8;9912:6;9962:3;9955:4;9947:6;9943:17;9939:27;9929:122;;9970:79;;:::i;:::-;9929:122;10083:6;10070:20;10060:30;;10113:18;10105:6;10102:30;10099:117;;;10135:79;;:::i;:::-;10099:117;10249:4;10241:6;10237:17;10225:29;;10303:3;10295:4;10287:6;10283:17;10273:8;10269:32;10266:41;10263:128;;;10310:79;;:::i;:::-;10263:128;9829:568;;;;;:::o;10403:559::-;10489:6;10497;10546:2;10534:9;10525:7;10521:23;10517:32;10514:119;;;10552:79;;:::i;:::-;10514:119;10700:1;10689:9;10685:17;10672:31;10730:18;10722:6;10719:30;10716:117;;;10752:79;;:::i;:::-;10716:117;10865:80;10937:7;10928:6;10917:9;10913:22;10865:80;:::i;:::-;10847:98;;;;10643:312;10403:559;;;;;:::o;10968:180::-;11016:77;11013:1;11006:88;11113:4;11110:1;11103:15;11137:4;11134:1;11127:15;11154:320;11198:6;11235:1;11229:4;11225:12;11215:22;;11282:1;11276:4;11272:12;11303:18;11293:81;;11359:4;11351:6;11347:17;11337:27;;11293:81;11421:2;11413:6;11410:14;11390:18;11387:38;11384:84;;;11440:18;;:::i;:::-;11384:84;11205:269;11154:320;;;:::o;11480:182::-;11620:34;11616:1;11608:6;11604:14;11597:58;11480:182;:::o;11668:366::-;11810:3;11831:67;11895:2;11890:3;11831:67;:::i;:::-;11824:74;;11907:93;11996:3;11907:93;:::i;:::-;12025:2;12020:3;12016:12;12009:19;;11668:366;;;:::o;12040:419::-;12206:4;12244:2;12233:9;12229:18;12221:26;;12293:9;12287:4;12283:20;12279:1;12268:9;12264:17;12257:47;12321:131;12447:4;12321:131;:::i;:::-;12313:139;;12040:419;;;:::o;12465:221::-;12605:34;12601:1;12593:6;12589:14;12582:58;12674:4;12669:2;12661:6;12657:15;12650:29;12465:221;:::o;12692:366::-;12834:3;12855:67;12919:2;12914:3;12855:67;:::i;:::-;12848:74;;12931:93;13020:3;12931:93;:::i;:::-;13049:2;13044:3;13040:12;13033:19;;12692:366;;;:::o;13064:419::-;13230:4;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13064:419;;;:::o;13489:170::-;13629:22;13625:1;13617:6;13613:14;13606:46;13489:170;:::o;13665:366::-;13807:3;13828:67;13892:2;13887:3;13828:67;:::i;:::-;13821:74;;13904:93;13993:3;13904:93;:::i;:::-;14022:2;14017:3;14013:12;14006:19;;13665:366;;;:::o;14037:419::-;14203:4;14241:2;14230:9;14226:18;14218:26;;14290:9;14284:4;14280:20;14276:1;14265:9;14261:17;14254:47;14318:131;14444:4;14318:131;:::i;:::-;14310:139;;14037:419;;;:::o;14462:180::-;14510:77;14507:1;14500:88;14607:4;14604:1;14597:15;14631:4;14628:1;14621:15;14648:348;14688:7;14711:20;14729:1;14711:20;:::i;:::-;14706:25;;14745:20;14763:1;14745:20;:::i;:::-;14740:25;;14933:1;14865:66;14861:74;14858:1;14855:81;14850:1;14843:9;14836:17;14832:105;14829:131;;;14940:18;;:::i;:::-;14829:131;14988:1;14985;14981:9;14970:20;;14648:348;;;;:::o;15002:169::-;15142:21;15138:1;15130:6;15126:14;15119:45;15002:169;:::o;15177:366::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:419::-;15715:4;15753:2;15742:9;15738:18;15730:26;;15802:9;15796:4;15792:20;15788:1;15777:9;15773:17;15766:47;15830:131;15956:4;15830:131;:::i;:::-;15822:139;;15549:419;;;:::o;15974:225::-;16114:34;16110:1;16102:6;16098:14;16091:58;16183:8;16178:2;16170:6;16166:15;16159:33;15974:225;:::o;16205:366::-;16347:3;16368:67;16432:2;16427:3;16368:67;:::i;:::-;16361:74;;16444:93;16533:3;16444:93;:::i;:::-;16562:2;16557:3;16553:12;16546:19;;16205:366;;;:::o;16577:419::-;16743:4;16781:2;16770:9;16766:18;16758:26;;16830:9;16824:4;16820:20;16816:1;16805:9;16801:17;16794:47;16858:131;16984:4;16858:131;:::i;:::-;16850:139;;16577:419;;;:::o;17002:173::-;17142:25;17138:1;17130:6;17126:14;17119:49;17002:173;:::o;17181:366::-;17323:3;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17181:366;;;:::o;17553:419::-;17719:4;17757:2;17746:9;17742:18;17734:26;;17806:9;17800:4;17796:20;17792:1;17781:9;17777:17;17770:47;17834:131;17960:4;17834:131;:::i;:::-;17826:139;;17553:419;;;:::o;17978:231::-;18118:34;18114:1;18106:6;18102:14;18095:58;18187:14;18182:2;18174:6;18170:15;18163:39;17978:231;:::o;18215:366::-;18357:3;18378:67;18442:2;18437:3;18378:67;:::i;:::-;18371:74;;18454:93;18543:3;18454:93;:::i;:::-;18572:2;18567:3;18563:12;18556:19;;18215:366;;;:::o;18587:419::-;18753:4;18791:2;18780:9;18776:18;18768:26;;18840:9;18834:4;18830:20;18826:1;18815:9;18811:17;18804:47;18868:131;18994:4;18868:131;:::i;:::-;18860:139;;18587:419;;;:::o;19012:178::-;19152:30;19148:1;19140:6;19136:14;19129:54;19012:178;:::o;19196:366::-;19338:3;19359:67;19423:2;19418:3;19359:67;:::i;:::-;19352:74;;19435:93;19524:3;19435:93;:::i;:::-;19553:2;19548:3;19544:12;19537:19;;19196:366;;;:::o;19568:419::-;19734:4;19772:2;19761:9;19757:18;19749:26;;19821:9;19815:4;19811:20;19807:1;19796:9;19792:17;19785:47;19849:131;19975:4;19849:131;:::i;:::-;19841:139;;19568:419;;;:::o;19993:143::-;20050:5;20081:6;20075:13;20066:22;;20097:33;20124:5;20097:33;:::i;:::-;19993:143;;;;:::o;20142:351::-;20212:6;20261:2;20249:9;20240:7;20236:23;20232:32;20229:119;;;20267:79;;:::i;:::-;20229:119;20387:1;20412:64;20468:7;20459:6;20448:9;20444:22;20412:64;:::i;:::-;20402:74;;20358:128;20142:351;;;;:::o;20499:332::-;20620:4;20658:2;20647:9;20643:18;20635:26;;20671:71;20739:1;20728:9;20724:17;20715:6;20671:71;:::i;:::-;20752:72;20820:2;20809:9;20805:18;20796:6;20752:72;:::i;:::-;20499:332;;;;;:::o;20837:137::-;20891:5;20922:6;20916:13;20907:22;;20938:30;20962:5;20938:30;:::i;:::-;20837:137;;;;:::o;20980:345::-;21047:6;21096:2;21084:9;21075:7;21071:23;21067:32;21064:119;;;21102:79;;:::i;:::-;21064:119;21222:1;21247:61;21300:7;21291:6;21280:9;21276:22;21247:61;:::i;:::-;21237:71;;21193:125;20980:345;;;;:::o;21331:181::-;21471:33;21467:1;21459:6;21455:14;21448:57;21331:181;:::o;21518:366::-;21660:3;21681:67;21745:2;21740:3;21681:67;:::i;:::-;21674:74;;21757:93;21846:3;21757:93;:::i;:::-;21875:2;21870:3;21866:12;21859:19;;21518:366;;;:::o;21890:419::-;22056:4;22094:2;22083:9;22079:18;22071:26;;22143:9;22137:4;22133:20;22129:1;22118:9;22114:17;22107:47;22171:131;22297:4;22171:131;:::i;:::-;22163:139;;21890:419;;;:::o;22315:225::-;22455:34;22451:1;22443:6;22439:14;22432:58;22524:8;22519:2;22511:6;22507:15;22500:33;22315:225;:::o;22546:366::-;22688:3;22709:67;22773:2;22768:3;22709:67;:::i;:::-;22702:74;;22785:93;22874:3;22785:93;:::i;:::-;22903:2;22898:3;22894:12;22887:19;;22546:366;;;:::o;22918:419::-;23084:4;23122:2;23111:9;23107:18;23099:26;;23171:9;23165:4;23161:20;23157:1;23146:9;23142:17;23135:47;23199:131;23325:4;23199:131;:::i;:::-;23191:139;;22918:419;;;:::o;23343:225::-;23483:34;23479:1;23471:6;23467:14;23460:58;23552:8;23547:2;23539:6;23535:15;23528:33;23343:225;:::o;23574:366::-;23716:3;23737:67;23801:2;23796:3;23737:67;:::i;:::-;23730:74;;23813:93;23902:3;23813:93;:::i;:::-;23931:2;23926:3;23922:12;23915:19;;23574:366;;;:::o;23946:419::-;24112:4;24150:2;24139:9;24135:18;24127:26;;24199:9;24193:4;24189:20;24185:1;24174:9;24170:17;24163:47;24227:131;24353:4;24227:131;:::i;:::-;24219:139;;23946:419;;;:::o;24371:224::-;24511:34;24507:1;24499:6;24495:14;24488:58;24580:7;24575:2;24567:6;24563:15;24556:32;24371:224;:::o;24601:366::-;24743:3;24764:67;24828:2;24823:3;24764:67;:::i;:::-;24757:74;;24840:93;24929:3;24840:93;:::i;:::-;24958:2;24953:3;24949:12;24942:19;;24601:366;;;:::o;24973:419::-;25139:4;25177:2;25166:9;25162:18;25154:26;;25226:9;25220:4;25216:20;25212:1;25201:9;25197:17;25190:47;25254:131;25380:4;25254:131;:::i;:::-;25246:139;;24973:419;;;:::o;25398:180::-;25446:77;25443:1;25436:88;25543:4;25540:1;25533:15;25567:4;25564:1;25557:15;25584:233;25623:3;25646:24;25664:5;25646:24;:::i;:::-;25637:33;;25692:66;25685:5;25682:77;25679:103;;;25762:18;;:::i;:::-;25679:103;25809:1;25802:5;25798:13;25791:20;;25584:233;;;:::o;25823:174::-;25963:26;25959:1;25951:6;25947:14;25940:50;25823:174;:::o;26003:366::-;26145:3;26166:67;26230:2;26225:3;26166:67;:::i;:::-;26159:74;;26242:93;26331:3;26242:93;:::i;:::-;26360:2;26355:3;26351:12;26344:19;;26003:366;;;:::o;26375:419::-;26541:4;26579:2;26568:9;26564:18;26556:26;;26628:9;26622:4;26618:20;26614:1;26603:9;26599:17;26592:47;26656:131;26782:4;26656:131;:::i;:::-;26648:139;;26375:419;;;:::o;26800:176::-;26940:28;26936:1;26928:6;26924:14;26917:52;26800:176;:::o;26982:366::-;27124:3;27145:67;27209:2;27204:3;27145:67;:::i;:::-;27138:74;;27221:93;27310:3;27221:93;:::i;:::-;27339:2;27334:3;27330:12;27323:19;;26982:366;;;:::o;27354:419::-;27520:4;27558:2;27547:9;27543:18;27535:26;;27607:9;27601:4;27597:20;27593:1;27582:9;27578:17;27571:47;27635:131;27761:4;27635:131;:::i;:::-;27627:139;;27354:419;;;:::o;27779:305::-;27819:3;27838:20;27856:1;27838:20;:::i;:::-;27833:25;;27872:20;27890:1;27872:20;:::i;:::-;27867:25;;28026:1;27958:66;27954:74;27951:1;27948:81;27945:107;;;28032:18;;:::i;:::-;27945:107;28076:1;28073;28069:9;28062:16;;27779:305;;;;:::o;28090:177::-;28230:29;28226:1;28218:6;28214:14;28207:53;28090:177;:::o;28273:366::-;28415:3;28436:67;28500:2;28495:3;28436:67;:::i;:::-;28429:74;;28512:93;28601:3;28512:93;:::i;:::-;28630:2;28625:3;28621:12;28614:19;;28273:366;;;:::o;28645:419::-;28811:4;28849:2;28838:9;28834:18;28826:26;;28898:9;28892:4;28888:20;28884:1;28873:9;28869:17;28862:47;28926:131;29052:4;28926:131;:::i;:::-;28918:139;;28645:419;;;:::o;29070:223::-;29210:34;29206:1;29198:6;29194:14;29187:58;29279:6;29274:2;29266:6;29262:15;29255:31;29070:223;:::o;29299:366::-;29441:3;29462:67;29526:2;29521:3;29462:67;:::i;:::-;29455:74;;29538:93;29627:3;29538:93;:::i;:::-;29656:2;29651:3;29647:12;29640:19;;29299:366;;;:::o;29671:419::-;29837:4;29875:2;29864:9;29860:18;29852:26;;29924:9;29918:4;29914:20;29910:1;29899:9;29895:17;29888:47;29952:131;30078:4;29952:131;:::i;:::-;29944:139;;29671:419;;;:::o;30096:221::-;30236:34;30232:1;30224:6;30220:14;30213:58;30305:4;30300:2;30292:6;30288:15;30281:29;30096:221;:::o;30323:366::-;30465:3;30486:67;30550:2;30545:3;30486:67;:::i;:::-;30479:74;;30562:93;30651:3;30562:93;:::i;:::-;30680:2;30675:3;30671:12;30664:19;;30323:366;;;:::o;30695:419::-;30861:4;30899:2;30888:9;30884:18;30876:26;;30948:9;30942:4;30938:20;30934:1;30923:9;30919:17;30912:47;30976:131;31102:4;30976:131;:::i;:::-;30968:139;;30695:419;;;:::o;31120:180::-;31260:32;31256:1;31248:6;31244:14;31237:56;31120:180;:::o;31306:366::-;31448:3;31469:67;31533:2;31528:3;31469:67;:::i;:::-;31462:74;;31545:93;31634:3;31545:93;:::i;:::-;31663:2;31658:3;31654:12;31647:19;;31306:366;;;:::o;31678:419::-;31844:4;31882:2;31871:9;31867:18;31859:26;;31931:9;31925:4;31921:20;31917:1;31906:9;31902:17;31895:47;31959:131;32085:4;31959:131;:::i;:::-;31951:139;;31678:419;;;:::o;32103:178::-;32243:30;32239:1;32231:6;32227:14;32220:54;32103:178;:::o;32287:366::-;32429:3;32450:67;32514:2;32509:3;32450:67;:::i;:::-;32443:74;;32526:93;32615:3;32526:93;:::i;:::-;32644:2;32639:3;32635:12;32628:19;;32287:366;;;:::o;32659:419::-;32825:4;32863:2;32852:9;32848:18;32840:26;;32912:9;32906:4;32902:20;32898:1;32887:9;32883:17;32876:47;32940:131;33066:4;32940:131;:::i;:::-;32932:139;;32659:419;;;:::o;33084:168::-;33224:20;33220:1;33212:6;33208:14;33201:44;33084:168;:::o;33258:366::-;33400:3;33421:67;33485:2;33480:3;33421:67;:::i;:::-;33414:74;;33497:93;33586:3;33497:93;:::i;:::-;33615:2;33610:3;33606:12;33599:19;;33258:366;;;:::o;33630:419::-;33796:4;33834:2;33823:9;33819:18;33811:26;;33883:9;33877:4;33873:20;33869:1;33858:9;33854:17;33847:47;33911:131;34037:4;33911:131;:::i;:::-;33903:139;;33630:419;;;:::o;34055:177::-;34195:29;34191:1;34183:6;34179:14;34172:53;34055:177;:::o;34238:366::-;34380:3;34401:67;34465:2;34460:3;34401:67;:::i;:::-;34394:74;;34477:93;34566:3;34477:93;:::i;:::-;34595:2;34590:3;34586:12;34579:19;;34238:366;;;:::o;34610:419::-;34776:4;34814:2;34803:9;34799:18;34791:26;;34863:9;34857:4;34853:20;34849:1;34838:9;34834:17;34827:47;34891:131;35017:4;34891:131;:::i;:::-;34883:139;;34610:419;;;:::o;35035:169::-;35175:21;35171:1;35163:6;35159:14;35152:45;35035:169;:::o;35210:366::-;35352:3;35373:67;35437:2;35432:3;35373:67;:::i;:::-;35366:74;;35449:93;35538:3;35449:93;:::i;:::-;35567:2;35562:3;35558:12;35551:19;;35210:366;;;:::o;35582:419::-;35748:4;35786:2;35775:9;35771:18;35763:26;;35835:9;35829:4;35825:20;35821:1;35810:9;35806:17;35799:47;35863:131;35989:4;35863:131;:::i;:::-;35855:139;;35582:419;;;:::o;36007:220::-;36147:34;36143:1;36135:6;36131:14;36124:58;36216:3;36211:2;36203:6;36199:15;36192:28;36007:220;:::o;36233:366::-;36375:3;36396:67;36460:2;36455:3;36396:67;:::i;:::-;36389:74;;36472:93;36561:3;36472:93;:::i;:::-;36590:2;36585:3;36581:12;36574:19;;36233:366;;;:::o;36605:419::-;36771:4;36809:2;36798:9;36794:18;36786:26;;36858:9;36852:4;36848:20;36844:1;36833:9;36829:17;36822:47;36886:131;37012:4;36886:131;:::i;:::-;36878:139;;36605:419;;;:::o;37030:191::-;37070:4;37090:20;37108:1;37090:20;:::i;:::-;37085:25;;37124:20;37142:1;37124:20;:::i;:::-;37119:25;;37163:1;37160;37157:8;37154:34;;;37168:18;;:::i;:::-;37154:34;37213:1;37210;37206:9;37198:17;;37030:191;;;;:::o;37227:180::-;37275:77;37272:1;37265:88;37372:4;37369:1;37362:15;37396:4;37393:1;37386:15;37413:185;37453:1;37470:20;37488:1;37470:20;:::i;:::-;37465:25;;37504:20;37522:1;37504:20;:::i;:::-;37499:25;;37543:1;37533:35;;37548:18;;:::i;:::-;37533:35;37590:1;37587;37583:9;37578:14;;37413:185;;;;:::o;37604:220::-;37744:34;37740:1;37732:6;37728:14;37721:58;37813:3;37808:2;37800:6;37796:15;37789:28;37604:220;:::o;37830:366::-;37972:3;37993:67;38057:2;38052:3;37993:67;:::i;:::-;37986:74;;38069:93;38158:3;38069:93;:::i;:::-;38187:2;38182:3;38178:12;38171:19;;37830:366;;;:::o;38202:419::-;38368:4;38406:2;38395:9;38391:18;38383:26;;38455:9;38449:4;38445:20;38441:1;38430:9;38426:17;38419:47;38483:131;38609:4;38483:131;:::i;:::-;38475:139;;38202:419;;;:::o;38627:224::-;38767:34;38763:1;38755:6;38751:14;38744:58;38836:7;38831:2;38823:6;38819:15;38812:32;38627:224;:::o;38857:366::-;38999:3;39020:67;39084:2;39079:3;39020:67;:::i;:::-;39013:74;;39096:93;39185:3;39096:93;:::i;:::-;39214:2;39209:3;39205:12;39198:19;;38857:366;;;:::o;39229:419::-;39395:4;39433:2;39422:9;39418:18;39410:26;;39482:9;39476:4;39472:20;39468:1;39457:9;39453:17;39446:47;39510:131;39636:4;39510:131;:::i;:::-;39502:139;;39229:419;;;:::o;39654:222::-;39794:34;39790:1;39782:6;39778:14;39771:58;39863:5;39858:2;39850:6;39846:15;39839:30;39654:222;:::o;39882:366::-;40024:3;40045:67;40109:2;40104:3;40045:67;:::i;:::-;40038:74;;40121:93;40210:3;40121:93;:::i;:::-;40239:2;40234:3;40230:12;40223:19;;39882:366;;;:::o;40254:419::-;40420:4;40458:2;40447:9;40443:18;40435:26;;40507:9;40501:4;40497:20;40493:1;40482:9;40478:17;40471:47;40535:131;40661:4;40535:131;:::i;:::-;40527:139;;40254:419;;;:::o;40679:180::-;40727:77;40724:1;40717:88;40824:4;40821:1;40814:15;40848:4;40845:1;40838:15;40865:143;40922:5;40953:6;40947:13;40938:22;;40969:33;40996:5;40969:33;:::i;:::-;40865:143;;;;:::o;41014:351::-;41084:6;41133:2;41121:9;41112:7;41108:23;41104:32;41101:119;;;41139:79;;:::i;:::-;41101:119;41259:1;41284:64;41340:7;41331:6;41320:9;41316:22;41284:64;:::i;:::-;41274:74;;41230:128;41014:351;;;;:::o;41371:85::-;41416:7;41445:5;41434:16;;41371:85;;;:::o;41462:158::-;41520:9;41553:61;41571:42;41580:32;41606:5;41580:32;:::i;:::-;41571:42;:::i;:::-;41553:61;:::i;:::-;41540:74;;41462:158;;;:::o;41626:147::-;41721:45;41760:5;41721:45;:::i;:::-;41716:3;41709:58;41626:147;;:::o;41779:114::-;41846:6;41880:5;41874:12;41864:22;;41779:114;;;:::o;41899:184::-;41998:11;42032:6;42027:3;42020:19;42072:4;42067:3;42063:14;42048:29;;41899:184;;;;:::o;42089:132::-;42156:4;42179:3;42171:11;;42209:4;42204:3;42200:14;42192:22;;42089:132;;;:::o;42227:108::-;42304:24;42322:5;42304:24;:::i;:::-;42299:3;42292:37;42227:108;;:::o;42341:179::-;42410:10;42431:46;42473:3;42465:6;42431:46;:::i;:::-;42509:4;42504:3;42500:14;42486:28;;42341:179;;;;:::o;42526:113::-;42596:4;42628;42623:3;42619:14;42611:22;;42526:113;;;:::o;42675:732::-;42794:3;42823:54;42871:5;42823:54;:::i;:::-;42893:86;42972:6;42967:3;42893:86;:::i;:::-;42886:93;;43003:56;43053:5;43003:56;:::i;:::-;43082:7;43113:1;43098:284;43123:6;43120:1;43117:13;43098:284;;;43199:6;43193:13;43226:63;43285:3;43270:13;43226:63;:::i;:::-;43219:70;;43312:60;43365:6;43312:60;:::i;:::-;43302:70;;43158:224;43145:1;43142;43138:9;43133:14;;43098:284;;;43102:14;43398:3;43391:10;;42799:608;;;42675:732;;;;:::o;43413:831::-;43676:4;43714:3;43703:9;43699:19;43691:27;;43728:71;43796:1;43785:9;43781:17;43772:6;43728:71;:::i;:::-;43809:80;43885:2;43874:9;43870:18;43861:6;43809:80;:::i;:::-;43936:9;43930:4;43926:20;43921:2;43910:9;43906:18;43899:48;43964:108;44067:4;44058:6;43964:108;:::i;:::-;43956:116;;44082:72;44150:2;44139:9;44135:18;44126:6;44082:72;:::i;:::-;44164:73;44232:3;44221:9;44217:19;44208:6;44164:73;:::i;:::-;43413:831;;;;;;;;:::o;44250:807::-;44499:4;44537:3;44526:9;44522:19;44514:27;;44551:71;44619:1;44608:9;44604:17;44595:6;44551:71;:::i;:::-;44632:72;44700:2;44689:9;44685:18;44676:6;44632:72;:::i;:::-;44714:80;44790:2;44779:9;44775:18;44766:6;44714:80;:::i;:::-;44804;44880:2;44869:9;44865:18;44856:6;44804:80;:::i;:::-;44894:73;44962:3;44951:9;44947:19;44938:6;44894:73;:::i;:::-;44977;45045:3;45034:9;45030:19;45021:6;44977:73;:::i;:::-;44250:807;;;;;;;;;:::o;45063:663::-;45151:6;45159;45167;45216:2;45204:9;45195:7;45191:23;45187:32;45184:119;;;45222:79;;:::i;:::-;45184:119;45342:1;45367:64;45423:7;45414:6;45403:9;45399:22;45367:64;:::i;:::-;45357:74;;45313:128;45480:2;45506:64;45562:7;45553:6;45542:9;45538:22;45506:64;:::i;:::-;45496:74;;45451:129;45619:2;45645:64;45701:7;45692:6;45681:9;45677:22;45645:64;:::i;:::-;45635:74;;45590:129;45063:663;;;;;:::o

Swarm Source

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